쿠버네티스 스터디 (PKOS 2기) - 3주차

김준영·2023년 3월 25일
0

CloudNet PKOS2기

목록 보기
3/5
post-thumbnail

글에 중간 중간에 첨부된 다이어그램은 스터디에서 사용하는 다이어그램을 캡처하였습니다.

GitOps와 ArgoCD(문어)

ArgoCD는 Kubernetes 네이티브 애플리케이션 배포 및 운영 자동화 도구이다. GitOps 워크플로우를 사용하여 애플리케이션을 배포하고 관리할 수 있다. 즉, GitOps 워크플로우에서는 애플리케이션 배포 및 관리를 Git 리포지토리에 커밋하여 자동화 한다. ArgoCD는 GitOps를 구현하는 데 필요한 여러 기능을 제공

ArgoCD의 주요 특징

GitOps 워크플로우: ArgoCD는 GitOps 워크플로우를 지원. 이는 애플리케이션 배포 및 운영을 Git 리포지토리에 커밋하여 자동화하는 방식.

Declarative Configuration: ArgoCD는 선언적인 구성을 사용하여 애플리케이션을 배포. 이는 YAML 파일을 사용하여 애플리케이션 구성 및 배포 정보를 정의하고, 이를 Git 리포지토리에 저장하는 것.

Continuous Delivery: ArgoCD는 지속적인 배포를 지원. 이는 GitOps 워크플로우를 사용하여 변경 사항이 발생할 때마다 자동으로 새로운 버전을 배포

Application Monitoring: ArgoCD는 애플리케이션 모니터링을 지원. 이는 Prometheus와 Grafana를 사용하여 애플리케이션 상태를 모니터링할 수 있음.

# 모니터링
kubectl create ns argocd
watch kubectl get pod,pvc,svc -n argocd

# 설치

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

Web UI에 접속하려면 service에서 argocd-server를 포트포워딩 하거나 로드밸런서 변경해야 한다.

# 포트 포워딩
kubectl port-forward svc/argocd-server -n argocd 8080:443
# 로드 밸런서
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

명령어들을 통해 argocd가 잘 설치된 것을 확인

# CLB에 ExternanDNS 로 도메인 연결
kubectl annotate service -n argocd argocd-server "external-dns.alpha.kubernetes.io/hostname=argocd.$KOPS_CLUSTER_NAME"

# admin 계정의 암호 확인
ARGOPW=$(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d)
echo $ARGOPW
mf8bOtNEq7iHMqq1

# 웹 접속 로그인 (admin) CLB의 DNS 주소로 접속
echo -e "Argocd Web URL = https://argocd.$KOPS_CLUSTER_NAME"

Harbor

Harbor는 개발자 및 운영팀이 컨테이너 이미지를 보관하고 공유할 수 있는 오픈소스 컨테이너 레지스트리. Harbor는 보안, 스케일링 및 정책 관리와 같은 기능을 제공하여 컨테이너 이미지의 배포와 관리를 단순화 한다.

Harbor의 주요 특징

보안: Harbor는 컨테이너 이미지에 대한 RBAC(롤 기반 접근 제어), 이미지 서명 및 스캔, 취약점 분석 및 보안 취약점 대응 기능을 제공하여 보안을 강화.

스케일링: Harbor는 여러 대의 레지스트리 인스턴스를 클러스터링하여 대규모 컨테이너 이미지를 저장하고 공유.

정책 관리: Harbor는 이미지 수명 주기, 이미지 복제, 스캔 정책 및 롤링 업데이트와 같은 다양한 정책을 설정.

ACM은 인증서는 ELB(Elastic LoadBalancer) 또는 Cloudfront에서 HTTPS 통신을 할때 사용하는 무료 SSL인증서

# 사용 리전의 인증서 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"

# 하버 설치
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줄
expose.ingress.hosts.core=harbor.<각자자신의도메인>    # 36줄
expose.ingress.hosts.notary=notary.<각자자신의도메인>  # 37줄
expose.ingress.hosts.core=harbor.gasida.link
expose.ingress.hosts.notary=notary.gasida.link
expose.ingress.controller=alb                      # 44줄
expose.ingress.className=alb                       # 46줄~
expose.ingress.annotations=alb.ingress.kubernetes.io/scheme: internet-facing
expose.ingress.annotations=alb.ingress.kubernetes.io/target-type: ip
expose.ingress.annotations=alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
expose.ingress.annotations=alb.ingress.kubernetes.io/certificate-arn: ${CERT_ARN}
externalURL=https://harbor.<각자자신의도메인>          # 131줄
externalURL=https://harbor.gasida.link             
----------------------

Jenkins

Argo CD는 Kubernetes 네이티브한 CD(Continuous Deployment) 툴이다. Argo CD는 GitOps를 기반으로 한 CD 툴로, Git 리포지토리에 있는 애플리케이션 선언(Manifest) 파일을 기반으로 새로운 배포를 수행하고, Kubernetes 오브젝트를 자동으로 업데이트하여 적용하는 것을 지원한다. Argo CD는 애플리케이션 배포 및 관리에 특화된 기능들을 제공

Jenkins와 Argo CD는 모두 CI/CD를 위한 도구이지만, Jenkins는 다양한 빌드, 테스트, 배포 환경을 지원하면서 사용이 비교적 자유로우며, Argo CD는 Kubernetes 환경에서의 CD에 특화되어 있음. Argo CD는 GitOps 방식을 사용하고 있으며, 변경 이력을 추적하고 롤백과 같은 기능도 제공. 또한, Argo CD는 클러스터 외부에서도 원격으로 애플리케이션 배포 및 관리를 지원하며, 대규모 인프라에서도 사용이 가능.

따라서, Jenkins와 Argo CD는 사용 목적에 따라 선택해야 하는 도구이다. Jenkins는 다양한 프로젝트에 사용할 수 있으며, Argo CD는 Kubernetes 환경에서 애플리케이션 관리 및 배포를 위한 특화된 도구이다.

helm repo add jenkins https://charts.jenkins.io
helm repo update
helm install jenkins jenkins/jenkins

0개의 댓글