brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Mar 15. 2023

쿠버4탄-4. K8S - GitOps

4/11

본 내용은 CloudNet 에서 진행하는 주말 스터디에 참여하여 해당 내용을 참고로 작성되었습니다.
https://gasidaseo.notion.site/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863  



목표

하버 이용한 컨테이너 이미지 저장소 구축

깃랩 이용한 소스 저장소 구축

아르고시디 활용한 깃옵스 시스템 구축



<1> 한번에 쿠버네티스 설치

<2> 명령서버인 kops 인스턴스 t3.small : 도커 엔진 설치 확인

<3> 하버(Harbor)를 이용하여 로컬 컨테이너 이미지 저장소 구축하기

<4> 깃랩(GitLab)를 이용하여 로컬 깃(Git) 소스 저장소 구축

<5> 아르고시디(ArgoCD)를 활용한 깃옵스(GitOps) 시스템 구축

<6> 정리




<1> 한번에 쿠버네티스 설치


1

목표


이미지를 하버에 올리고, 하버 기반으로 배포

GitLab에 소스 올리고, argo cd가 모니터링하다 변경되면 배포하자.





2

쿠버네티스 한번에 설치하기 위한 사전 준비는 ?

ec2 키 네임 

access-key / secret-key

도메인  masterseo1.link   (정식으로 구매한 도메인이여야 한다.)

s3 저장 이름  master-seo-bk5



3

Cloudformation으로 설치

oneclick


15분 걸림.


https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/kops-oneclick-f1.yaml

노드  c5a.2xlarge (AMD vCPU 8, Memory 16GiB) 배포



또는  



CLI로 설치


# YAML 파일 다운로드

curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/kops-oneclick-f1.yaml


# CloudFormation 스택 배포 : 노드 인스턴스 타입 변경 - MasterNodeInstanceType=t3.medium WorkerNodeInstanceType=c5d.large

aws cloudformation deploy --template-file kops-oneclick-f1.yaml --stack-name mykops --parameter-overrides KeyName=kp-gasida SgIngressSshCidr=$(curl -s ipinfo.io/ip)/32  MyIamUserAccessKeyID=AKIA5... MyIamUserSecretAccessKey='CVNa2...' ClusterBaseName='gasida.link' S3StateStore='gasida-k8s-s3' MasterNodeInstanceType=c5a.2xlarge WorkerNodeInstanceType=c5a.2xlarge --region ap-northeast-2



4

# CloudFormation 스택 배포 완료 후 kOps EC2 IP 출력

aws cloudformation describe-stacks --stack-name mykops --query 'Stacks[*].Outputs[0].OutputValue' --output text


# 13분 후 작업 SSH 접속

ssh -i ~/.ssh/kp-gasida.pem ec2-user@$(aws cloudformation describe-stacks --stack-name mykops --query 'Stacks[*].Outputs[0].OutputValue' --output text)



5

# EC2 instance profiles 에 IAM Policy 추가(attach) 

: 처음 입력 시 적용이 잘 안될 경우 다시 한번 더 입력 하자! - IAM Role에서 새로고침 먼저 확인!


aws iam attach-role-policy --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy --role-name masters.$KOPS_CLUSTER_NAME


aws iam attach-role-policy --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy --role-name nodes.$KOPS_CLUSTER_NAME


aws iam attach-role-policy --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AllowExternalDNSUpdates --role-name masters.$KOPS_CLUSTER_NAME


aws iam attach-role-policy --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AllowExternalDNSUpdates --role-name nodes.$KOPS_CLUSTER_NAME


6

# 메트릭 서버 확인 

: 메트릭은 15초 간격으로 cAdvisor를 통하여 가져옴

kubectl top node


7

# LimitRanges 기본 정책 삭제

kubectl delete limitranges limits





<2> 명령서버인 kops 인스턴스 t3.small : 도커 엔진 설치 확인



1

컨테이너 이미지를 빌드해서 하버에 올릴 예정이라 도커 엔진 설치하자.

(이미 설치되어 있다)


# default NS 

kubectl ns default



# 설치된 패키지 확인 : 도커 엔진 확인

yum list installed


# 도커 정보 확인 : client - server, Docker Root Dir, Registry

docker info


# 도커 정보 확인 : Docker Engine - Community

docker version


# 도커 서비스 상태 확인

systemctl status docker

--------------------------------

Apr 27 18:25:56 kops-ec2 dockerd[2778]: time="2023-04-27T18:25:56.980963842+09:00" level=info msg="API listen on /run/docker.sock"

Hint: Some lines were ellipsized, use -l to show in full.



# 모든 서비스의 상태 표시 - 링크

systemctl list-units --type=service



# 도커 루트 디렉터리 확인

tree -L 3 /var/lib/docker





<3> 하버(Harbor)를 이용하여 로컬 컨테이너 이미지 저장소 구축하기


1

하버에 https로 접속 예정 , 인증서 필요.

헬름 차트로 하버 설치


2

#  보유한 도메인으로 AWS 인증서 하나 만들자.


# 사용 리전의 인증서 ARN 확인

aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text

CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`

echo "alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN"



3

# 하버 설치

helm repo add harbor https://helm.goharbor.io

helm fetch harbor/harbor --untar --version 1.11.0

vim ~/harbor/values.yaml

----------------------

expose.tls.certSource=none                        # 19줄 , aws에서 받은 인증서를 사용할거라 불필요.


expose.ingress.hosts.core=harbor.<각자자신의도메인>    # 36줄

expose.ingress.hosts.notary=notary.<각자자신의도메인>  # 37줄

expose.ingress.hosts.core=harbor.masterseo1.link

expose.ingress.hosts.notary=notary.masterseo1.link


controller=alb                      # 44줄

className=alb                       # 47줄~


alb.ingress.kubernetes.io/scheme: internet-facing 

alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]' alb.ingress.kubernetes.io/certificate-arn: ${CERT_ARN}   # 각자 자신의 값으로 수정입력


externalURL=https://harbor.masterseo1.link# 131줄

externalURL=https://harbor.masterseo1.link             

----------------------


4

# 모니터링

kubectl create ns harbor

watch kubectl get pod,pvc,ingress -n harbor


인그레스 2개 생김.

AWS 콘솔에서 ALB 2개 생성을 확인하자.



5

# 설치

helm install harbor harbor/harbor -f ~/harbor/values.yaml --namespace harbor --version 1.11.0



6

# 확인

# registry : 컨테이너 이미지를 저장

# chartmuseum : 하버를 컨테이너 이미지뿐 아니라, 헬름 차트 리포지토리로도 사용

# notary : 서명이 완료된 컨테이너 이미지만 운영 환경에 사용하도록 설정. 서명이 완료된 이미지는 별도로 구분

# trivy : 컨테이너 이미지의 보안 취약점을 스캔, 스캔 기능은 별도 솔루션에서 제공하여 관리자는 보안 스캔용 도구를 선택 가능

helm list -n harbor

kubectl get-all -n harbor

kubectl get pod,pvc,ingress,deploy,sts -n harbor

kubectl get ingress -n harbor harbor-ingress -o json | jq

kubectl krew install df-pv && kubectl df-pv


# 웹 접속 주소 확인 및 접속

echo -e "harbor URL = https://harbor.$KOPS_CLUSTER_NAME"

harbor URL = https://harbor.masterseo1.link


echo -e "notary URL = https://notary.$KOPS_CLUSTER_NAME"

notary URL = https://notary.masterseo1.link



7

삭제

helm uninstall -n harbor harbor

kubectl delete pvc --all -n harbor

kubectl delete ns harbor



8

하버 웹 접속 및 로컬 이미지 업로드: https://harbor.<각자 자신의 도메인>


로그인

admin

NEW PROJECT → Name(pkos), Access Level(Public Check) ⇒ OK 클릭



9

kops-ec2 에서 로컬 이미지를 원격 하버 이미지 저장소로 업로드


# 컨테이너 이미지 가져오기

docker pull nginx

docker pull busybox


docker images

(masterseo1:default) [root@kops-ec2 ~]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE

nginx        latest    6efc10a0510f   2 weeks ago   142MB

busybox      latest    7cfbbec8963d   6 weeks ago   4.86MB



10

# 태그 설정

docker tag busybox harbor.$KOPS_CLUSTER_NAME/pkos/busybox:0.1


11

docker image ls

(masterseo1:default) [root@kops-ec2 ~]# docker image ls

REPOSITORY                            TAG       IMAGE ID       CREATED       SIZE

nginx                                 latest    6efc10a0510f   2 weeks ago   142MB

busybox                               latest    7cfbbec8963d   6 weeks ago   4.86MB

harbor.masterseo1.link/pkos/busybox   0.1       7cfbbec8963d   6 weeks ago   4.86MB




12

# 로그인 - 방안2

echo 'Harbor12' > harborpw.txt


cat harborpw.txt | docker login harbor.$KOPS_CLUSTER_NAME -u admin --password-stdin

WARNING! Your password will be stored unencrypted in /root/.docker/config.json.

Configure a credential helper to remove this warning. See

https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded


cat /root/.docker/config.json | jq



13

# 이미지 업로드

docker push harbor.$KOPS_CLUSTER_NAME/pkos/busybox:0.1



14

쿠버네티스 YAML 파일의 컨테이너 이미지 저장소 주소를 로컬 하버로 변경

 : harbor 저장소 이미지를 사용하는 디플로이먼트 생성하기


# 파드 배포

curl -s -O https://raw.githubusercontent.com/junghoon2/kube-books/main/ch13/busybox-deploy.yml

sed -i "s|harbor.myweb.io/erp|harbor.$KOPS_CLUSTER_NAME/pkos|g" busybox-deploy.yml

kubectl apply -f busybox-deploy.yml



15

# 확인 : 정상적으로 harbor 에서 이미지 다운로드되어 파드가 동작!

kubectl get pod

NAME                       READY   STATUS        RESTARTS   AGE

busybox-6c4c69f7f8-g7x8l   1/1     Running       0          2m34s


16

kubectl describe pod | grep Events: -A7

  Type    Reason     Age    From               Message

  ----    ------     ----   ----               -------

  Normal  Scheduled  9m56s  default-scheduler  Successfully assigned default/busybox-646ccbcc7c-g892f to i-0cf34fb82a31a3da8

  Normal  Pulling    9m56s  kubelet            Pulling image "harbor.masterseo1.link/pkos/busybox:0.1"

  Normal  Pulled     9m55s  kubelet            Successfully pulled image "harbor.masterseo1.link/pkos/busybox:0.1" in 675.698451ms

  Normal  Created    9m55s  kubelet            Created container busybox

  Normal  Started    9m55s  kubelet            Started container busybox



17

컨테이너 이미지 업로드 시 자동으로 이미지 보안 스캔 기능 사용

Trivy 이미지 스캐닝 도구를 통해서 스캔해보자


18

# 태그 설정

docker tag nginx harbor.$KOPS_CLUSTER_NAME/pkos/nginx:0.1

docker image ls


19

# 이미지 업로드

docker push harbor.$KOPS_CLUSTER_NAME/pkos/nginx:0.1



20

# harbor 웹에서 확인 >> 아래 처럼 자동으로 스캔 수행됨

Configuration > Vulnerability scanning > Automatically scan images on push  체크  > 저장



21

테그 달고 이미지 올려보자.

자동 스캔 된다.


(masterseo1:default) [root@kops-ec2 ~]# docker tag nginx harbor.$KOPS_CLUSTER_NAME/pkos/nginx:0.1


(masterseo1:default) [root@kops-ec2 ~]# docker image ls

REPOSITORY                            TAG       IMAGE ID       CREATED       SIZE

nginx                                 latest    6efc10a0510f   2 weeks ago   142MB

harbor.masterseo1.link/pkos/nginx     0.1       6efc10a0510f   2 weeks ago   142MB

busybox                               latest    7cfbbec8963d   6 weeks ago   4.86MB

harbor.masterseo1.link/pkos/busybox   0.1       7cfbbec8963d   6 weeks ago   4.86MB


(masterseo1:default) [root@kops-ec2 ~]# docker push harbor.$KOPS_CLUSTER_NAME/pkos/nginx:0.1

The push refers to repository [harbor.masterseo1.link/pkos/nginx]

9d907f11dc74: Layer already exists

79974a1a12aa: Layer already exists

f12d4345b7f3: Layer already exists

935b5bd454e1: Layer already exists

fb6d57d46ad5: Layer already exists

ed7b0ef3bf5b: Layer already exists

0.1: digest: sha256:f2fee5c7194cbbfb9d2711fa5de094c797a42a51aa42b0c8ee8ca31547c872b1 size: 1570





<4> 깃랩(GitLab)를 이용하여 로컬 깃(Git) 소스 저장소 구축


1

자신만의 텍스트 파일을 kops-ec2 로컬에서 Gitlab Repo에 올려보고, 다운로드 받아보세요


2

헬름 차트로 깃랩 설치 후 웹 로그인


# 모니터링

kubectl create ns gitlab

watch kubectl get pod,pvc,ingress -n gitlab


# 설치

# 사용 리전의 인증서 ARN 확인

aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text

CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`

echo $CERT_ARN


helm repo add gitlab https://charts.gitlab.io/

helm repo update

helm fetch gitlab/gitlab --untar --version 6.8.1


vim ~/gitlab/values.yaml

----------------------

global:

  hosts:

    domain: <각자자신의도메인>             # 52줄

    domain: masterseo1.link

    https: true


  ingress:                             # 66줄~

    configureCertmanager: false

    provider: aws

    class: alb


    annotations:

      alb.ingress.kubernetes.io/scheme: internet-facing

      alb.ingress.kubernetes.io/target-type: ip

      alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'

      alb.ingress.kubernetes.io/certificate-arn: ${CERT_ARN}   # 각자 자신의 값으로 수정입력

      alb.ingress.kubernetes.io/success-codes: 200-399

      alb.ingress.kubernetes.io/group.name: "gitlab"

// group.name을 쓰면 4개가 아닌  1개의 ALB로  모두 처리가 가능하다.


    tls:                               # 79줄

      enabled: false


certmanager:                           # 833줄 

  install: false


nginx-ingress:                         # 847줄 

  enabled: false


prometheus:                            # 904줄 

  install: false


gitlab-runner:                         # 1130줄 

  install: false

----------------------



3

helm install gitlab gitlab/gitlab -f ~/gitlab/values.yaml --namespace gitlab --version 6.8.1


# 확인 - SubCharts

# gitlab-gitaly : 웹서비스 혹은 ssh 방식으로 진행되는 깃 제목, 브랜치, 태그 등의 깃 요청 등에 대한 작업을 담당

# gitlab-gitlab-shell : https 가 아닌 ssh 방식으로 깃 명령어 실행 시 해당 요청을 처리

# gitlab-kas : gitlab agent server

# gitlab-postgresql : 유저, 권한, 이슈 등 깃랩의 메타 데이터 정보가 저장

# gitlab-redis-master : 깃랩 작업 정보는 레디스 캐시 서버를 이용하여 처리

# gitlab-sidekiq-all-in-1-v2 : 레디스와 연동하여 작업 큐 처리 용도로 사용

# gitlab-webservice-default : 깃랩 웹 서비스를 처리

helm list -n gitlab

kubectl get pod,pvc,ingress,deploy,sts -n gitlab

kubectl df-pv -n gitlab

kubectl get-all -n gitlab



# 4개의 Ingress 가 1개의 ALB를 공유해서 사용 

: AWS 콘솔에서 ALB의 Rule 확인해볼것!

# alb.ingress.kubernetes.io/group.name: "gitlab"





kubectl get ingress -n gitlab

NAME       CLASS   HOSTS      ADDRESS                                 PORTS   AGE

gitlab-kas                  alb     kas.gasida.link        k8s-gitlab-3fbf5c8cab-1066962252.ap-northeast-2.elb.amazonaws.com   80      93s

gitlab-minio                alb     minio.gasida.link      k8s-gitlab-3fbf5c8cab-1066962252.ap-northeast-2.elb.amazonaws.com   80      93s

gitlab-registry             alb     registry.gasida.link   k8s-gitlab-3fbf5c8cab-1066962252.ap-northeast-2.elb.amazonaws.com   80      93s

gitlab-webservice-default   alb     gitlab.gasida.link     k8s-gitlab-3fbf5c8cab-1066962252.ap-northeast-2.elb.amazonaws.com   80      93s



4

# 웹 root 계정 암호 확인

kubectl get secrets -n gitlab gitlab-gitlab-initial-root-password --template={{.data.password}} | base64 -d ;echo

hhBvAjXoANx8kVIVpcwdQFxikRDJfwVPBXn0dxmNBgc7zssSBskTj



5

# 웹 접속 주소 확인 및 접속

echo -e "gitlab URL = https://gitlab.$KOPS_CLUSTER_NAME"

--------------------------------------

gitlab URL = https://gitlab.masterseo1.link


# 웹 접속 https://gitlab.<각자 자신의 도메인> (root / 웹 root 계정 암호)



6

삭제시

helm uninstall -n gitlab gitlab

kubectl delete pvc --all -n gitlab

kubectl delete ns gitlab



7

깃랩 신규 프로젝트 작성

Project name (test-stg) , Project URL(<각자계정>, /test-stg) , Visibility Level (Intenal) , Initialize repository with a README (체크



8

Admin 메뉴

9

토큰 만들고

test

권한은 api 부터 모두 다 준다.



10

admin 메뉴

user > edit > 암호 설정 good1!



11

프로젝트 생성

test-stg

internal 

Create






12

생성한 깃랩 프로젝트에 쿠버네티스에서 사용하는 YAML 파일을 업로드 ⇒ 토큰 값 확인


#

mkdir ~/gitlab-test && cd ~/gitlab-test


13

# git 계정 초기화 : 토큰 및 로그인 실패 시 매번 실행해주자

git config --system --unset credential.helper

git config --global --unset credential.helper



14

# git 계정 정보 확인 및 global 계정 정보 입력

git config --list

git config --global user.name "<각자 자신의 Gialba 계정>"

git config --global user.email "<각자 자신의 Gialba 계정의 이메일>"

git config --global user.name "topasvga"

git config --global user.email "topasvga@naver.com"



15

# git clone

git clone https://gitlab.$KOPS_CLUSTER_NAME/<각자 자신의 Gitlab 계정>/test-stg.git

git clone https://gitlab.$KOPS_CLUSTER_NAME/topasvga/test-stg.git

Cloning into 'test-stg'...

Username for 'https://gitlab.gasida.link': topasvga

Password for 'https://gasida@gitlab.gasida.link': <토큰 입력>

topasvga

암호는 토큰



16

# 이동

ls -al test-stg && cd test-stg && pwd



17

# 파일 생성 및 깃 업로드(push) : 웹에서 확인

echo "gitlab test memo" >> test.txt

git add . && git commit -m "initial commit - add test.txt"

git push

Username for 'https://gitlab.gasida.link': topasvga

Password for 'https://gasida@gitlab.gasida.link': <토큰 입력>



18

test.txt가 올라간것 확인





<5> 아르고시디(ArgoCD)를 활용한 깃옵스(GitOps) 시스템 구축




지속적인 배포란(Continuous Delivery, CD) 개발자가 소스코드를 변경해서 깃 저장소에 푸시하면 해당 변경 사항이 고객이 사용하는 실제 운영환경의 시스템까지 자동으로 반영함


헬름 차트로 설치 후 웹 로그인


1

# 모니터링

kubectl create ns argocd

watch kubectl get pod,pvc,svc -n argocd



2

# 설치

cd

helm repo add argo https://argoproj.github.io/argo-helm

helm repo update

helm install argocd argo/argo-cd --set server.service.type=LoadBalancer --namespace argocd --version 5.19.14



# 확인

# argocd-application-controller : 실행 중인 k8s 애플리케이션의 설정과 깃 저장소의 소스 파일에 선언된 상태를 서로 비교하는 컨트롤러. 상태와 다르면 ‘OutOfSync’ 에러를 출력.

# argocd-dex-server : 외부 사용자의 LDAP 인증에 Dex 서버를 사용할 수 있음

# argocd-repo-server : 원격 깃 저장소의 소스 코드를 아르고시디 내부 캐시 서버에 저장합니다. 디렉토리 경로, 소스, 헬름 차트 등이 저장.

helm list -n argocd

kubectl get pod,pvc,svc,deploy,sts -n argocd

kubectl get-all -n argocd



3

# CLB에 ExternanDNS 로 도메인 연결

kubectl annotate service -n argocd argocd-server "external-dns.alpha.kubernetes.io/hostname=argocd.$KOPS_CLUSTER_NAME"



4

# admin 계정의 암호 확인

ARGOPW=$(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d)

echo $ARGOPW

mf8bOtNEq7iHMqq1


5

# 웹 접속 로그인 (admin) CLB의 DNS 주소로 접속 http, https(첫 로그인 후 다시 http로 접속 해서 진행할것)

echo -e "Argocd Web URL = http://argocd.$KOPS_CLUSTER_NAME"

Argocd Web URL = http://argocd.masterseo1.link



6

삭제시

helm uninstall -n argocd argocd

kubectl delete ns argocd




7

argocd CLI 도구 설치

아르고시디로 애플리케이션 배포에 사용할 깃 저장소와 쿠버네티스 클러스터 정보를 등록


# 최신버전 설치

curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64

install -m 555 argocd-linux-amd64 /usr/local/bin/argocd

chmod +x /usr/local/bin/argocd


# 버전 확인

argocd version --short


# Help

# argocd app : 쿠버네티스 애플리케이션 동기화 상태 확인

# argocd context : 복수의 쿠버네티스 클러스터 등록 및 선택

# argocd login : 아르고시디 서버에 로그인 

# argocd repo : 원격 깃 저장소를 등록하고 현황 파악

argocd


8

# CLB 도메인 변수 지정

CLB=<각자 자신의 argocd 서비스의 CLB 도메인 주소>

CLB=adc4dcad7d21743c4b6524f37f2e7ca3-1872175753.ap-northeast-2.elb.amazonaws.com



9

# argocd 서버 로그인

argocd login argocd.$KOPS_CLUSTER_NAME --username admin --password $ARGOPW



10

# 기 설치한 깃랩의 프로젝트 URL 을 argocd 깃 리포지토리(argocd repo)로 등록. 

깃랩은 프로젝트 단위로 소스 코드를 보관.


argocd repo add https://gitlab.$KOPS_CLUSTER_NAME/<깃랩 계정명>/test-stg.git --username <깃랩 계정명> --password <깃랩 계정 암호>

argocd repo add https://gitlab.$KOPS_CLUSTER_NAME/topasvga/test-stg.git --username topasvga --password goodman1!!

-----------------------

Repository 'https://gitlab.masterseo1.link/topasvga/test-stg.git' added



11

# 등록 확인 

: 기본적으로 아르고시디가 설치된 쿠버네티스 클러스터는 타깃 클러스터로 등록됨

argocd repo list


TYPE  NAME  REPO     INSECURE  OCI    LFS    CREDS  STATUS      MESSAGE  PROJECT

git         https://gitlab.masterseo1.link/topasvga/test-stg.git  false     false  false  true   Successful



12

# 기본적으로 아르고시디가 설치된 쿠버네티스 클러스터는 타깃 클러스터로 등록됨

argocd cluster list


(masterseo1:default) [root@kops-ec2 ~]# argocd cluster list

SERVER     NAME        VERSION  STATUS   MESSAGE                                       PROJECT

https://kubernetes.default.svc  in-cluster           Unknown  Cluster has no applications and is not being monitored.




13

ArgoCD를 이용하여 RabbitMQ 헬름 애플리케이션 배포하기 

: RabbitMQ Helm 깃랩 업로드



# test-stg 깃 디렉터리에서 아래 실행

cd ~/gitlab-test/test-stg


# 깃 원격 오리진 주소 확인

git config -l | grep remote.origin.url

remote.origin.url=https://gitlab.masterseo1.link/topasvga/test-stg.git



# RabbitMQ 헬름 차트 설치

helm repo add bitnami https://charts.bitnami.com/bitnami

helm repo update

helm fetch bitnami/rabbitmq --untar --version 11.10.3

cd rabbitmq/

cp values.yaml my-values.yaml



# 헬름 차트를 깃랩 저장소에 업로드


git add . && git commit -m "add rabbitmq helm"

git push

(masterseo1:default) [root@kops-ec2 rabbitmq]# git push

Username for 'https://gitlab.masterseo1.link': topasvga

Password for 'https://topasvga@gitlab.masterseo1.link':  <토큰>






14


# argocd CRD 확인

kubectl get crd | grep argo

asterseo1:default) [root@kops-ec2 rabbitmq]# kubectl get crd | grep argo

applications.argoproj.io              2023-04-28T10:55:11Z

applicationsets.argoproj.io           2023-04-28T10:55:11Z

appprojects.argoproj.io               2023-04-28T10:55:11Z



applications.argoproj.io    # 배포 앱 현재 실행 상태와 깃 저장소의 의도한 상태를 계속 비교

appprojects.argoproj.io      # 프로젝트 단위 구분

argocdextensions.argoproj.io      



15

cd ~/

curl -s -O https://raw.githubusercontent.com/wikibook/kubepractice/main/ch15/rabbitmq-helm-argo-application.yml

vim rabbitmq-helm-argo-application.yml

--------------------------------------

apiVersion: argoproj.io/v1alpha1

kind: Application

metadata:

  name: rabbitmq-helm

  namespace: argocd

  finalizers:

  - resources-finalizer.argocd.argoproj.io

spec:

  destination:

    namespace: rabbitmq

    server: https://kubernetes.default.svc

  project: default

  source:

    repoURL: https://gitlab.masterseo1.link/topasvga/test-stg.git

    path: rabbitmq

    targetRevision: HEAD

    helm:

      valueFiles:

      - my-values.yaml

  syncPolicy:

    syncOptions:

    - CreateNamespace=true

--------------------------------------



16

# 모니터링 : argocd 웹 화면 보고 있기! 

http로 접속 해서 진행할것

echo -e "Argocd Web URL = http://argocd.$KOPS_CLUSTER_NAME"

Argocd Web URL = http://argocd.masterseo1.link




17

# 배포

kubectl apply -f rabbitmq-helm-argo-application.yml





# YAML 파일을 적용(apply)하여 아르고시디 ‘Application’ CRD를 생성


kubectl get applications.argoproj.io -n argocd

NAME            SYNC STATUS   HEALTH STATUS

rabbitmq-helm   Unknown       Healthy





10

# 모니터링

watch kubectl get pod -n rabbitmq


# 배포 확인

kubectl get all,svc,cm -n rabbitmq




11

헬름 차트 삭제 ?


# argocd 삭제

kubectl delete application.argoproj.io -n argocd rabbitmq-helm  # 미 삭제되어 있을 경우 삭제

helm uninstall -n argocd argocd

kubectl delete ns argocd


# gitlab 삭제

helm uninstall -n gitlab gitlab

kubectl delete pvc --all -n gitlab

kubectl delete ns gitlab


# harbor 삭제

helm uninstall -n harbor harbor

kubectl delete pvc --all -n harbor

kubectl delete ns harbor




12

헬름 차트 삭제


kops delete cluster --yes && aws cloudformation delete-stack --stack-name mykops





<6> 정리


하버이용한 컨테이너 이미지 저장소 구축

깃랩 이용한 소스 저장소 구축

아르고시디 활용한 깃옵스 시스템 구축




다음과정

https://brunch.co.kr/@topasvga/3139



https://brunch.co.kr/@topasvga/3144


감사합니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari