카테고리 없음
[3주차] 깃옵스 시스템 (harbor / gitlab / argocd)
james_janghun
2023. 3. 26. 08:15
이번 시간에는 쿠버네티스를 통해 깃옵스를 하는 방법에 대해서 확인해보자.
Harbor 설치
Harbor는 컨테이너 레지스트리로 우리가 흔히아는 docker hub, 혹은 AWS ECR 등과 같은 서비스이다. 주로 nexus3 등과 비교가 된다.
보안관리, 역할기반 엑세스 제어(RBAC), 무료 이미지와 취약점 검사 등을 진행할 수 있다.
일단 설치를 위해서 Helm을 사용한다. 따라서 repo add를 진행하고 values.yaml에 아래 내용을 기입한다.
# 하버 설치
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.controller=alb # 44줄
expose.ingress.className=alb # 47줄~
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줄
# 설치
kubectl create ns harbor
helm install harbor harbor/harbor -f ~/harbor/values.yaml --namespace harbor --version 1.11.0
# 확인
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"
echo -e "notary URL = https://notary.$KOPS_CLUSTER_NAME"
root@kops-ec2 ~]# kubectl get all -n harbor
NAME READY STATUS RESTARTS AGE
pod/harbor-chartmuseum-656c864cf9-gvfrc 1/1 Running 0 11m
pod/harbor-core-55c4767f5d-94th2 1/1 Running 0 11m
pod/harbor-database-0 1/1 Running 0 11m
pod/harbor-jobservice-866b7998db-vrbq4 1/1 Running 0 11m
pod/harbor-notary-server-56d5b58c8d-7mh9v 1/1 Running 0 11m
pod/harbor-notary-signer-749b5df7b6-9dw9b 1/1 Running 0 11m
pod/harbor-portal-d74b69db4-7wg45 1/1 Running 0 11m
pod/harbor-redis-0 1/1 Running 0 11m
pod/harbor-registry-5477888665-ln8kn 2/2 Running 0 11m
pod/harbor-trivy-0 1/1 Running 0 10m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/harbor-chartmuseum ClusterIP 100.67.39.71 <none> 80/TCP 11m
service/harbor-core NodePort 100.70.138.31 <none> 80:32718/TCP 11m
service/harbor-database ClusterIP 100.71.31.110 <none> 5432/TCP 11m
service/harbor-jobservice ClusterIP 100.67.26.57 <none> 80/TCP 11m
service/harbor-notary-server NodePort 100.65.87.17 <none> 4443:31606/TCP 11m
service/harbor-notary-signer ClusterIP 100.70.208.106 <none> 7899/TCP 11m
service/harbor-portal LoadBalancer 100.66.197.6 a7f1fbbff3d8940ff8a4fef70be1a2d9-2944305.ap-northeast-2.elb.amazonaws.com 80:32240/TCP 11m
service/harbor-redis ClusterIP 100.65.27.213 <none> 6379/TCP 11m
service/harbor-registry ClusterIP 100.65.152.144 <none> 5000/TCP,8080/TCP 11m
service/harbor-trivy ClusterIP 100.65.153.129 <none> 8080/TCP 11m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/harbor-chartmuseum 1/1 1 1 11m
deployment.apps/harbor-core 1/1 1 1 11m
deployment.apps/harbor-jobservice 1/1 1 1 11m
deployment.apps/harbor-notary-server 1/1 1 1 11m
deployment.apps/harbor-notary-signer 1/1 1 1 11m
deployment.apps/harbor-portal 1/1 1 1 11m
deployment.apps/harbor-registry 1/1 1 1 11m
NAME DESIRED CURRENT READY AGE
replicaset.apps/harbor-chartmuseum-656c864cf9 1 1 1 11m
replicaset.apps/harbor-core-55c4767f5d 1 1 1 11m
replicaset.apps/harbor-jobservice-866b7998db 1 1 1 11m
replicaset.apps/harbor-notary-server-56d5b58c8d 1 1 1 11m
replicaset.apps/harbor-notary-signer-749b5df7b6 1 1 1 11m
replicaset.apps/harbor-portal-d74b69db4 1 1 1 11m
replicaset.apps/harbor-registry-5477888665 1 1 1 11m
NAME READY AGE
statefulset.apps/harbor-database 1/1 11m
statefulset.apps/harbor-redis 1/1 11m
statefulset.apps/harbor-trivy 1/1 11m
Gitlab 배포 및 실행
Github와 양대산맥인 Gitlab은 오픈소스 원격 저장소로 깃 리포지토리로 자주 활용되는 도구이다. 이렇게 컨테이너 형태로 설치가 가능해 프라이빗하게 사용할 수 있다.
kubectl create ns gitlab
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줄
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"
tls: # 79줄
enabled: false
helm install gitlab gitlab/gitlab -f ~/gitlab/values.yaml --set certmanager.install=false --set nginx-ingress.enabled=false --set prometheus.install=false --set gitlab-runner.install=false --namespace gitlab --version 6.8.4
#접속 확인
kubectl get secrets -n gitlab gitlab-gitlab-initial-root-password --template={{.data.password}} | base64 -d ;echo
ArgoCD 배포 및 실행
ArgoCD는 대표적인 CD 툴로 쿠버네티스와 연동하여 애플리케이션을 배포하고 관리하도록 한다. 특히 깃옵스의 대표적인 툴로 깃허브와도 연동이 가능하여, 깃허브를 원천소스로 사용한다.
# 모니터링
kubectl create ns argocd
watch kubectl get pod,pvc,svc -n argocd
# 설치
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
# 확인
helm list -n argocd
kubectl get pod,pvc,svc,deploy,sts -n argocd
kubectl get-all -n 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
# 웹 접속 로그인 (admin) CLB의 DNS 주소로 접속
echo -e "Argocd Web URL = https://argocd.$KOPS_CLUSTER_NAME"
ArgoCD는 UI 뿐 아니라 CLI에서도 활용이 가능한데 ArgoCD CLI를 통해서 커멘드라인에서도 사용이 가능합니다.
단순히 UI뿐아니라 CLI에서도 gitlab 주소를 추가해 repo에 등록할 수 있습니다.
# 최신버전 설치
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
# argocd 서버 로그인
argocd login argocd.$KOPS_CLUSTER_NAME --username admin --password $ARGOPW
# 기 설치한 깃랩의 프로젝트 URL 을 argocd 깃 리포지토리(argocd repo)로 등록. 깃랩은 프로젝트 단위로 소스 코드를 보관.
argocd repo add https://gitlab.$KOPS_CLUSTER_NAME/<깃랩 계정명>/test-stg.git --username <깃랩 계정명> --password <깃랩 계정 암호>