Ssoon
[3주차] CHAPTER-15 ArgoCD 를 활용한 GitOps 본문
이정훈님이 집필하신 "24단계 실습으로 정복하는 쿠버네티스" 로 진행하는 CloudNet@ 팀의 PKOS 3주차 정리입니다.
✔ Continuous Delivery ? 소스코드를 변경하고 저장소에 push하면 변경 사항이 운영환경에도 자동 반영
✔ GitOps ? 실제 운영 중인 클러스터 상태를 아무런 기록을 남기지 않고 클러스터에서 임의로 수정하지 않고 공용으로 관리하는 저장소에서만 변경을 허용
✔ ArgoCD ? 쿠버네티스 manifest 소스 파일을 중앙의 통합 저장소에 업로드하고 동기화하여 정책 관리
✅ Helm 차트를 이용한 ArgoCD 설치
https://artifacthub.io/packages/helm/argo/argo-cd
✔ GitLab 저장소와 연동하기 위해 GitLab 저장소의 도메인과 IP를 ArgoCD 설치 전 Helm 차트 변수 파일에 포함
✔ 설치 완료되면 쿠버네티스 클러스터 와 저장소를 ArgoCD 설정 파일에 등록
🧿 ArgoCD Helm 리포를 추가하고 차트를 다운받아 압축을 풀어줍니다.
🧿 Helm 템플릿 변수 파일을 편집합니다.
# -- Mapping between IP and hostnames that will be injected as entries in the pod's hosts files
hostAliases:
- ip: 192.168.219.74
hostnames:
- gitlab.gitlab.io
## Server service configuration
service:
# -- Server service annotations
annotations: {}
# -- Server service labels
labels: {}
# -- Server service type
type: LoadBalancer
✔ hostAliases : - ip: 192.168.219.74
◾ GitLab 저장소의 LoadBalancer External IP 와 도메인 등록
✔ type: LoadBalancer
◾ ArgoCD 서비스 타입을 LoadBalancer로 외부에 노출
🧿 ArgoCD 네임스페이스를 생성하고 설치합니다.
✔ argocd-application-controller
◾ 실행중인 쿠버네티스 애플리케이션의 설정과 GitLab 저장소의 소스 파일에 선언된 상태를 비교
◾ 현재 운영중인 상태가 저장소의 소스에 선언된 상태와 다르면 'OutOfSync' 에러 발생
✔ argocd-dex-server
◾ 외부 사용자의 LDAP 인증에 Dex 서버 사용 가능
✔ argocd-repo-server
◾ 원격 저장소의 소스코드를 ArgoCD 의 내부 Cache 서버에 저장
🧿 외부 접속용 External IP 확인 후 웹 접속합니다.
🧿 ArgoCD 최초 접속용 패스워드를 Secret 형식으로 무작위 생성하고 확인합니다.
kubectl -n argocd get secrets argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
🧿 argocd 커맨드라인 도구를 설치합니다.
https://argo-cd.readthedocs.io/en/stable/cli_installation/
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64
✔ argocd app
◾ 쿠버네티스 애플리케이션 동기화 상태 확인
✔ argocd context
◾ 복수의 클러스터 등록, 선택
✔ argocd login
◾ ArgoCD 서버에 로그인
✔ argocd repo
◾ 원격 깃 저장소 등록, 현황 파악
🧿 원격 깃 저장소 등록을 위해 ArgoCD 서버에 로그인 합니다.
🧿 GitLab 의 프로젝트 URL을 ArgoCD 의 깃 리포지토리로 등록합니다.
🧿 전테 클러스터 현황을 확인합니다.
✔ 기본적으로 ArgoCD는 설치된 쿠버네티스 클러스터가 타깃 클러스터로 등록됩니다.
✅ ArgoCD 를 이용한 RabbitMQ Helm 배포
✔ Helm 차트를 이용하면 Helm 차트를 깃 저장소에 업로드하고 해당 디렉터리의 경로 정보를 ArgoCD의 application CRD에 등록해서 애플리케이션을 배포할 수 있습니다.
🧿 로컬 GitLab 저장소와 동기화한 디렉터리로 이동한 후 원격 오리진 서버정보를 확인합니다.
🧿 RabbitMQ Helm 차트를 다운받고 압축을 푼 후 설치를 진행합니다.
https://artifacthub.io/packages/helm/bitnami/rabbitmq
✔ ArgoCD 는 Application CRD 매니페스트를 이용해 쿠버네티스 애플리케이션을 배포합니다.
✔ application CRD의 YAML 파일 형식에 맞게 애플리케이션 등록 => YAML 파일 실행 => ArgoCD에 애플리케이션 배포
🧿 CRD 목록을 확인합니다.
🧿 ArgoCD의 appication YAML 파일을 작성합니다.
✔ rabbitmq-helm-argo-application.yml
https://raw.githubusercontent.com/wikibook/kubepractice/main/ch15/rabbitmq-helm-argo-application.yml
✔ metadata: namespace: argocd
◾ 단일 네임스페이스에서 ArgoCD 로 설치된 전체 application 목록을 관리
✔ destination: namespace: rabbitmq
◾ application 이 설치되는 namespace
✔ server: https://kubernets.default.svc
◾ application 이 배포될 쿠버네티스 클러스터 정보
◾ ArgoCD가 설치되어 있는 클러스터는 별도의 추가 없이 기본설정으로 지정 가능
◾ 외부 클러스터를 추가 => 쿠버네티스 컨피그파일 ( {HOME}/.kube/config )에 외부 클러스터 설정을 추가
✔ project: default
◾ ArgoCD 프로젝트로 Application CRD 를 관리, 프로젝트는 Application 목록을 포함
✔ repoURL: https://gitlab.gitlab.io/ssoon/test-stg.git
◾ 깃 저장소의 URL 입력
✔ path: rabbitmq-10.1.8
◾ ArgoCD 를 이용해서 배포할 애플리케이션 의 깃 리포지토리 경로.
◾ 해당 경로에 위치한 쿠버네티스 manifest 파일을 이용 appication 을 설치합니다.
✔ valueFiles: - my-values.yaml
◾ 기본Helm 템플릿(values.yaml)이 아닌 사용자 지정 템플릿을 사용할 경우 해당 파일명을 명시
✔ syncOptions: -CreateNamespace=true
◾ 애플리케이션을 배포할 네임스페이스가 없는 경우 배포시 함께 생성
🧿 YAML 파일을 적용하여 ArgoCD application CRD 를 생성합니다.
🧿 ArgoCD 웹페이지에서 rabbitmq-helm 애플리케이션을 확인할 수 있습니다.
🧿 "SYNC" 를 클릭하여 동기화 작업을 실행합니다.
✅ 클러스터 설정 내역 변경, 깃 저장소 자동 반영
✔ 아파치 웹서버를 설치하는 Deployment YAML
https://raw.githubusercontent.com/wikibook/kubepractice/main/ch15/httpd-deploy.yml
✔ 아파치 웹서버와 연결하는 NodePort 서비스 YAML
https://raw.githubusercontent.com/wikibook/kubepractice/main/ch15/httpd-nodeport-svc.yml
🧿 YAML 파일을 GitLab 저장소에 업로드합니다.
🧿 두 파일을 ArgoCD의 Application CRD를 이용해 쿠버네티스 클러스터와 동기화 합니다.
✔ path: 03.httpd
◾ 아파치 웹서버 YAML 파일이 저장된 GitLab 저장소의 디렉터리 위치
✔ directory: recurse: true
◾ 일반 deployment 및 서비스 YAML 파일이므로 ArgoCD 에 directory로 지정,
◾ recurse 옵션은 하위 디렉터리까지 배포한다는 의미
✔ automated: prune: true
◾ 깃 저장소에 업로드되면 자공으로 애플리케이션 설치 작업 시작
◾ 오브젝트를 삭제하면 클러스터에서도 함께 삭제
🧿 ArgoCD Application CRD 을 적용하여 쿠버네티스 오브젝트를 생성합니다.
🧿 실행중인 deployment 상태를 "k edit" 명령어로 httpd 이미지 버전을 htppd => httpd:alpine으로 변경합니다.
🧿 이전 버전 httpd 을 사용하던 Pod는 삭제되고 변경된 버전의 httpd:alpine 의 Pod가 생성됩니다.
🧿 깃 소스와 실행 중인 deployment 의 이미지 버전이 달라 OutOfSync 상태입니다.
🧿 메뉴에서 "APP DIFF" 을 선택하면 차이점을 확인할 수 있습니다.
🧿 httpd-svc 오브젝트를 삭제합니다.
📢 임의로 현재 클러스터 상태를 변경하면 ArgoCD의 argocd-application-controller 파드가 webhook 방식으로 차이를 감지하여 자동으로 변경사항을 알려줍니다.
🧿 "SYNC" 선택하여 동기화 합니다.
📢 SYNC 를 실행하면 ArgoCD가 자동으로 깃 저장소의 YAML 파일 기준으로 쿠버네티스 오브젝트를 동기화 합니다.
🧿 SYNC 후 GitLab 저장소 기준으로 삭제했던 httpd-svc 오브젝트가 다시 생성되고, image 버전도 기존의 httpd로 변경되었습니다.
📢 현재 클러스터 상태와 깃 저장소의 상태를 확인해 변경이 발생한 경우 해당 변경 내역를 확인해 필요한 경우 기존 깃 저장소의 상태로 편리하게 원복할 수 있습니다.
🧿 nodePort 를 30180 => 30200 으로 변경후 GitLab 저장소에 push 합니다.
🧿 REFRESH 를 선택하면 GitLab 저장소의 소스코드의 변경을 인식하여 OutOfSync 를 확인할 수 있으며 SYNC 를 클릭하면 동기화 되어 GitLab 저장소의 소스코드의 변경사항을 적용합니다.
🧿 httpd-svc 의 nodeport가 30200으로 변경된것을 확인할 수 있습니다.
'Production Kubernetes Online Study' 카테고리의 다른 글
[4주차] CHAPTER-17 프로메테우스(Prometheus) (2) | 2023.03.28 |
---|---|
[4주차] CHAPTER-16 쿠버네티스 모니터링 도구 (0) | 2023.03.27 |
[3주차] CHAPTER-14 깃랩을 이용한 로컬 Git 소스 저장소 (0) | 2023.03.22 |
[3주차] 원격 서버 Harbor 설치 (0) | 2023.03.22 |
[3주차] CHAPTER-13 하버를 이용한 이미지 저장소 구축 (0) | 2023.03.17 |