ArgoCD 설치
//가용성 없는 버전
$ kubectl create namespace argocd
$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.12.0/manifests/install.yaml
//가용성 있는 버전
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.12.0/manifests/ha/install.yaml
argocd를 local kind 클러스터에서 사용할 것이기 때문에 nginx ingress를 이용해서 접근하겠습니다.
//nginx-ingress 띄우기
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
//argocd-ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-ingress
namespace: argocd
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
rules:
- host: localhost
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 443
tls:
- hosts:
- localhost
secretName: argocd-tls
// ingress 띄우기
$ kubectl apply -f argocd-ingress.yaml
ssl 인증서 설정
# 자체 서명된 인증서 생성
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=localhost/O=local"
# Secret 생성
kubectl create secret tls argocd-tls --key tls.key --cert tls.crt -n argocd
https://localhost 로 접속해보면 로그인 화면이 뜹니다.
초기 아이디는 admin이고 비밀번호는 아래 명령어로 얻을 수 있습니다.
$ kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 --decode
argocd와 gitlab 연동하기
trigger가 발생하면 클러스터에 argocd가 업데이트를 반영해서 pod를 배포하게 됩니다. 그래서 gitlab에 있는 manifest를 가져올 수 있도록 gitlab을 연동합니다.
Gitlab에서 자격증명(토큰) 생성
- settings에 Deploy tokens 생성하기
생성한 토큰 argoCD에 등록해서 git repo 연결하기
username, password에 토큰 정보 작성
successful이 뜨면 성공입니다.
argocd로 application 배포하기
일단 application을 생성해서 수동으로 배포해보겠습니다.
추후에는 jenkins 파이프라인을 이용해서 argocd에 접근해서 자동으로 배포되도록 구현할 예정입니다.
gitlab에 deployment yaml 파일이 작성된 경로를 Path에 적어줍니다.
namespace는 deployment가 배포될 namespace를 적어주면 됩니다.
제가 배포한 pod, service를 확인할 수 있습니다.
sync를 해주면 gitlab에 있는 manifest를 이용해서 업데이트를 해주는데 이걸 이용해서 jenkins 파이프라인에서 argocd sync를 추가해주겠습니다.
Jenkins로 자동으로 배포되도록 파이프라인 수정
Jenkins 파일에 argocd stage를 추가해줍니다.
stage('Login to Argo CD') {
steps {
script {
// Argo CD에 로그인하고 sync
withCredentials([usernamePassword(credentialsId: 'argocd', usernameVariable: 'ARGOCD_USERNAME', passwordVariable: 'ARGOCD_PASSWORD')]) {
sh "argocd login ${ARGOCD_SERVER} --username ${ARGOCD_USERNAME} --password ${ARGOCD_PASSWORD} --insecure"
sh "argocd app sync olivesafety"
}
}
}
}
argocd credential 먼저 등록하기
argocd url을 외부로 노출시키기 위해서 ngrok을 사용했습니다.
$ ngrok http https://localhost:443 --host-header="localhost:443"
jenkins configuration에서 argocd 환경변수를 등록해줍니다.
jekins 컨테이너가 argocd 명령어를 사용할 수 있게 argocd cli를 설치합니다.
$ docker exec -it -u root {젠킨스 컨테이너 id} /bin/bash
$ curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v2.12.0/argocd-linux-amd64
$ chmod +x /usr/local/bin/argocd
수정된 Jenkins 파일을 commit하고 gitlab에 올리면 jenkins 파이프라인을 통해서 argocd로 변경된 이미지가 배포되는 것을 확인할 수 있습니다.
Next
eks 환경에서 구축한 경험으로 로컬에서 구축을 해보았습니다. 다음에는 젠킨스 분산빌드와 argocd를 이용해서 Blue/green 배포되는 과정을 확인해 볼 예정입니다.
'Ops' 카테고리의 다른 글
메트릭 모니터링 환경 구축하기 (0) | 2024.12.04 |
---|---|
Jenkins로 ci/cd 파이프라인 구축하기(2) (0) | 2024.12.04 |
Jenkins로 ci/cd 파이프라인 구축하기(1) (0) | 2024.12.04 |
k8s 환경에 내 서비스 띄워보기 (0) | 2024.12.04 |
kind 이용해서 k8s 다뤄보기 (0) | 2024.12.04 |