์ด๋ฒ์ฃผ๋ CI/CD ๋ฅผ ๋ชฉํ๋ก ํ๋ฉฐ gitlab, argoCD, harbor ๋ฅผ ์ฌ์ฉํ์ฌ
k8s ํ๊ฒฝ์์ ์ดํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํ๋ ํ
์คํธ๊น์ง ํด๋ณด๊ธฐ๋ก ํ์.
(์ฐธ๊ณ : https://picluster.ricsanfre.com/docs/argocd/)
์ฐธ๊ณ ๊ทธ๋ฆผ์ด๋ฉฐ, image registry ๋ก๋ harbor๋ฅผ ์ง์ ๊ตฌ์ถํด์ ์ฌ์ฉํด๋ณด๋๋ก ํ์.
๋น๊ต : t3a.xlarge 4/16 $0.1872 , t3a.2xlarge 8/32 $0.3744 , *c5a.2xlarge 8/16 $0.344 , c5.2xlarge $0.384
# 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
# 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)
# 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
# ๋ฉํธ๋ฆญ ์๋ฒ ํ์ธ : ๋ฉํธ๋ฆญ์ 15์ด ๊ฐ๊ฒฉ์ผ๋ก cAdvisor๋ฅผ ํตํ์ฌ ๊ฐ์ ธ์ด
kubectl top node
harbor๋ฅผ ์ด์ฉํ์ฌ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ์ ์ฅ์ ๊ตฌ์ถ
# ์ฌ์ฉ ๋ฆฌ์ ์ ์ธ์ฆ์ 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.sparkandassociates.net # 36์ค
expose.ingress.hosts.notary=notary.sparkandassociates.net # 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} # ๊ฐ์ ์์ ์ ๊ฐ์ผ๋ก ์์ ์
๋ ฅ
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.sparkandassociates.net # 131์ค
----------------------
# ๋ชจ๋ํฐ๋ง
kubectl create ns harbor
watch kubectl get pod,pvc,ingress -n harbor
# ์ค์น
helm install harbor harbor/harbor -f ~/harbor/values.yaml --namespace harbor --version 1.11.0
# ํ์ธ
# 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"
echo -e "notary URL = https://notary.$KOPS_CLUSTER_NAME"
์ ์ ํ์ธ
pkos project ์์ฑ.
# ์ปจํ
์ด๋ ์ด๋ฏธ์ง ๊ฐ์ ธ์ค๊ธฐ
docker pull nginx && docker pull busybox && docker images
# ํ๊ทธ ์ค์
docker tag busybox harbor.$KOPS_CLUSTER_NAME/pkos/busybox:0.1
docker image ls
# ๋ก๊ทธ์ธ - ๋ฐฉ์2
echo 'Harbor12345' > harborpw.txt
cat harborpw.txt | docker login harbor.$KOPS_CLUSTER_NAME -u admin --password-stdin
cat /root/.docker/config.json | jq
# ์ด๋ฏธ์ง ์
๋ก๋
docker push harbor.$KOPS_CLUSTER_NAME/pkos/busybox:0.1
๋ก์ปฌ ์ ์ฅ์ ์ด๋ฏธ์ง ์ ์ฉ.
# ํ๋ ๋ฐฐํฌ
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
trivy ์ด์ฉํด์ ์ด๋ฏธ์ง ์ค์บ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค.
harbor-trivy ํ๋์ ์ง์ ์ ์ํด์ trivy client ๋ฅผ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
์ด๋ฏธ์ง ๋ณด์์ ๊ฒ์ ์๋์ผ๋ก ํ ์ ์์.
helm ์ฐจํธ๋ก gitlab์ ์ค์นํด๋ณด์.
# ๋ชจ๋ํฐ๋ง
kubectl create ns gitlab
watch kubectl get pod,pvc,ingress -n gitlab
# ์ค์น
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: sparkandassociates.net # 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
# ํ์ธ - 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๋ฅผ ๊ณต์ ํด์ ์ฌ์ฉ : 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
# ์น root ๊ณ์ ์ํธ ํ์ธ
(sparkandassociates:harbor) [root@kops-ec2 ~]# kubectl get secrets -n gitlab gitlab-gitlab-initial-root-password --template={{.data.password}} | base64 -d ;echo
TSbqXj0ymmUzxBDTOG3WlX6HtmBQZcvmOGz10bIIGudyvmrCNYMkk4Yexh09TAek
(sparkandassociates:harbor) [root@kops-ec2 ~]#
# ์น ์ ์ ์ฃผ์ ํ์ธ ๋ฐ ์ ์
echo -e "gitlab URL = https://gitlab.$KOPS_CLUSTER_NAME"
# ์น ์ ์ https://gitlab.<๊ฐ์ ์์ ์ ๋๋ฉ์ธ> (root / ์น root ๊ณ์ ์ํธ)
์ ์ ํ ๋ณ๋์ ์ฌ์ฉ์ ์์ฑ : Admins โ Users : ๊ฐ์ ์์ ๋ง์ ํธํ ๊ณ์ โ ํด๋น ๊ณ์ ์ผ๋ก git ๋ช ๋ น์ด ์คํ
glpat-cGRP-N....Zit
Users : ์ ์ ์ ํ ํ ์ํธ ์ ๋ ฅ(Test1234), admin ๊ถํ ์ฒดํฌ โ root ๊ณ์ ๋ก๊ทธ์์ โ spark ๊ณ์ ๋ก๊ทธ์ธ โ ์ํธ ๋ณ๊ฒฝ(P@ssw0rd)
๊น๋ฉ ์ ๊ท ํ๋ก์ ํธ ์์ฑ : Project name (test-stg) , Project URL(<๊ฐ์๊ณ์ >, /test-stg) , Visibility Level (Intenal) , Initialize repository with a README (์ฒดํฌ)
์์ฑํ git project์ k8s yaml ์ ์ ๋ก๋ ํด๋ณด์.
#
mkdir ~/gitlab-test && cd ~/gitlab-test
# git ๊ณ์ ์ด๊ธฐํ : ํ ํฐ ๋ฐ ๋ก๊ทธ์ธ ์คํจ ์ ๋งค๋ฒ ์คํํด์ฃผ์
git config --system --unset credential.helper
git config --global --unset credential.helper
# git ๊ณ์ ์ ๋ณด ํ์ธ ๋ฐ global ๊ณ์ ์ ๋ณด ์
๋ ฅ
git config --list
git config --global user.name spark
git config --global user.email spark@sparkandassociates.net
# git clone
git clone https://gitlab.$KOPS_CLUSTER_NAME/spark/test-stg.git
git clone https://gitlab.$KOPS_CLUSTER_NAME/spark/test-stg.git
Cloning into 'test-stg'...
# ํ์ผ ์์ฑ ๋ฐ ๊น ์
๋ก๋(push) : ์น์์ ํ์ธ
echo "gitlab test memo" >> test.txt
git add . && git commit -m "initial commit - add test.txt"
git push
์ ์ ํ์ธ๋จ.
์, ์ด์ ๋๋ง์ ArgoCD๋ฅผ ์ด์ฉํด์ gitops๋ผ๋๊ฑธ ํด๋ณด๋๋ก ํ์.
๋จผ์ argoCD๋ ์ฟ ๋ฒ๋คํฐ์ค CRD ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค๊ณ ํ๋ค.
์ฆ k8s ํ๊ฒฝ์์๋ง ์ฌ์ฉ๊ฐ๋ฅํ๋ค๋ ๊ฒ.
# ๋ชจ๋ํฐ๋ง
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
# ํ์ธ
# 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
kubectl get crd | grep argoproj
applications.argoproj.io 2023-03-19T11:39:26Z
applicationsets.argoproj.io 2023-03-19T11:39:26Z
appprojects.argoproj.io 2023-03-19T11:39:26Z
# 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"
# ์ต์ ๋ฒ์ ์ค์น
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
# argocd ์๋ฒ ๋ก๊ทธ์ธ
argocd login argocd.$KOPS_CLUSTER_NAME --username admin --password $ARGOPW
# ๊ธฐ ์ค์นํ ๊น๋ฉ์ ํ๋ก์ ํธ URL ์ argocd ๊น ๋ฆฌํฌ์งํ ๋ฆฌ(argocd repo)๋ก ๋ฑ๋ก. ๊น๋ฉ์ ํ๋ก์ ํธ ๋จ์๋ก ์์ค ์ฝ๋๋ฅผ ๋ณด๊ด.
argocd repo add https://gitlab.$KOPS_CLUSTER_NAME/spark/test-stg.git --username spark --password <๊น๋ฉ ๊ณ์ ์ํธ>
# ๋ฑ๋ก ํ์ธ : ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฅด๊ณ ์๋๊ฐ ์ค์น๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ ํ๊น ํด๋ฌ์คํฐ๋ก ๋ฑ๋ก๋จ
(sparkandassociates:harbor) [root@kops-ec2 ~]# argocd repo list
TYPE NAME REPO INSECURE OCI LFS CREDS STATUS MESSAGE PROJECT
git https://gitlab.sparkandassociates.net/spark/test-stg.git false false false true Successful
# argocd ๊ฐ ์ฐ๋๋ ํด๋ฌ์คํฐ๋ฆฌ์คํธ๋ฅผ ๋ณผ ์ ์์ผ๋ฉฐ, ํ์ฌ๋ argocd ๊ฐ ์ค์น๋ ํด๋ฌ์คํฐ๋ง ๋ณด์ธ๋ค.
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.
์ ์ด์ argoCD cli๋ก rabbitmq helm ์ ๋ฐฐํฌํด๋ณด์.
# test-stg ๊น ๋๋ ํฐ๋ฆฌ์์ ์๋ ์คํ
cd ~/gitlab-test/test-stg
# ๊น ์๊ฒฉ ์ค๋ฆฌ์ง ์ฃผ์ ํ์ธ
git config -l | grep remote.origin.url
(sparkandassociates:harbor) [root@kops-ec2 test-stg]# git config -l | grep remote.origin.url
remote.origin.url=https://gitlab.sparkandassociates.net/spark/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
# argocd CRD ํ์ธ
kubectl get crd | grep argo
applications.argoproj.io 2022-01-25T15:46:16Z # ๋ฐฐํฌ ์ฑ ํ์ฌ ์คํ ์ํ์ ๊น ์ ์ฅ์์ ์๋ํ ์ํ๋ฅผ ๊ณ์ ๋น๊ต
appprojects.argoproj.io 2022-01-25T15:46:16Z # ํ๋ก์ ํธ ๋จ์ ๊ตฌ๋ถ
argocdextensions.argoproj.io 2022-01-25T15:46:16Z
# ์์
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.sparkandassociates.net/spark/test-stg.git
path: rabbitmq
targetRevision: HEAD
helm:
valueFiles:
- my-values.yaml
syncPolicy:
syncOptions:
- CreateNamespace=true
--------------------------------------
# ๋ชจ๋ํฐ๋ง : argocd ์น ํ๋ฉด ๋ณด๊ณ ์๊ธฐ!
echo -e "Argocd Web URL = https://argocd.$KOPS_CLUSTER_NAME"
# ๋ฐฐํฌ
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 OutOfSync Missing
"SYNC"๋ฅผ ํด๋ฆญํด์ ์ค์น.
ํ๋ ์ฆ๊ฐ
# sts ํ๋ 1๊ฐ์์ 2๊ฐ๋ก ์ฆ๊ฐ ์ค์ ํ argocd ์น ํ๋ฉด ๋ชจ๋ํฐ๋ง
kubectl scale statefulset -n rabbitmq rabbitmq-helm --replicas 2
argoCD ์น์์์ rabbitmq-helm statefulset์ ์ง์ ์์ ํด๋ ๋๋ค.
edit -> "save" ํ๋ฉด ๋ฐ๋ก replica 2๋ก ์ ์ฉ๋๋ฉฐ pod์ด ํ๋๋ ์์ฑ๋๋ค.