์ด๋ฒ 4์ฃผ์ฐจ๋ Gitlab๊ณผ argoCD๋ฅผ ํ์ฉํ Gitops ํ๊ฒฝ์ ์ค์ตํ๋ ๊ฒ์ด ๋ชฉํ์ด๋ค.
์ปจํ ์ด๋ ์ด๋ฏธ์ง ์ ์ฅ์๋ก๋ Docker Hub๋ง ์ฌ์ฉํด๋ดค์ง๋ง, ์ด๋ฒ ์คํฐ๋๋ฅผ ์จํ๋ก๋ฏธ์ค ์ปจํ ์ด๋ ์ ์ฅ์์ธ 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
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
----------------------
# ๋ชจ๋ํฐ๋ง
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 pod,pvc,ingress,deploy,sts -n harbor
kubectl get ingress -n harbor harbor-ingress -o json | jq
kubectl get-all -n harbor
kubectl krew install df-pv && kubectl df-pv
#์ด๋ฏธ์ง ์
๋ก๋ ์ฃผ์: https://harbor.<๊ฐ์ ์์ ์ ๋๋ฉ์ธ>
#๋ก๊ทธ์ธ: admin/Harbor12345
# insecure ์ค์
cat <<EOT> /etc/docker/daemon.json
{
"insecure-registries" : ["harbor.$KOPS_CLUSTER_NAME"]
}
EOT
cat /etc/docker/daemon.json
systemctl daemon-reload && systemctl restart docker
# ๋ก๊ทธ์ธ - ๋ฐฉ์1
docker login harbor.$KOPS_CLUSTER_NAME -u admin -p Harbor12345
cat /root/.docker/config.json | jq
# ๋ก๊ทธ์ธ - ๋ฐฉ์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
Harbor ์ ์ฅ์๋ฅผ ์ฟ ๋ฒ๋คํฐ์ค yamlํ์ผ์ ์ง์ ํ์ฌ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, Docker Hub์์๋ ์ ๊ณตํ ์ด๋ฏธ์ง ๋ณด์ ์ค์บ์ ํตํด ์ด๋ฏธ์ง์ ์ทจ์ฝ์ ์ ํ์ ํ ์ ์๋ค.
kubectl create ns gitlab
# ์ค์น
helm repo add gitlab https://charts.gitlab.io/
helm repo update
helm fetch gitlab/gitlab --untar
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
certmanager: # 833์ค
installCRDs: false
install: false
rbac:
create: false
nginx-ingress: # 847์ค
enabled: false
prometheus: # 904์ค
install: false
gitlab-runner: # 1130์ค
install: false
----------------------
helm install gitlab gitlab/gitlab -f ~/gitlab/values.yaml --namespace gitlab --version 6.8.1
# ํ์ธ - 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 get-all -n gitlab
# 4๊ฐ์ Ingress ๊ฐ 1๊ฐ์ ALB๋ฅผ ๊ณต์ ํด์ ์ฌ์ฉ
# 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 ๊ณ์ ์ํธ ํ์ธ
kubectl get secrets -n gitlab gitlab-gitlab-initial-root-password --template={{.data.password}} | base64 -d ;echo
hhBvAjXoANx8kVIVpcwdgvc6A0kFDIIQFxikRDJfwVPBXn0dxmNBgc7zssSBskTj
# ์น ์ ์ https://gitlab.<๊ฐ์ ์์ ์ ๋๋ฉ์ธ> (root / ์น root ๊ณ์ ์ํธ)
# git ๊ณ์ ์ด๊ธฐํ : ํ ํฐ ๋ฐ ๋ก๊ทธ์ธ ์คํจ ์ ๋งค๋ฒ ์คํํด์ฃผ์
git config --system --unset credential.helper
git config --global --unset credential.helper
# git ๊ณ์ ์ ๋ณด ํ์ธ ๋ฐ global ๊ณ์ ์ ๋ณด ์
๋ ฅ
git config --list
git config --global user.name "<๊ฐ์ ์์ ์ Gitlab ๊ณ์ >"
git config --global user.email "<๊ฐ์ ์์ ์ Gitlab ๊ณ์ ์ ์ด๋ฉ์ผ>"
#gitlab ์ ์ฅ์๋ก ์ฌ์ฉํ ๋ก์ปฌ ๋๋ ํ ๋ฆฌ ์์ฑ
mkdir ~/gitlab-test && cd ~/gitlab-test
# git clone
git clone https://gitlab.$KOPS_CLUSTER_NAME/<๊ฐ์ ์์ ์ Gitlab ๊ณ์ >/test-stg.git
Cloning into 'test-stg'...
Username : <์์ฑํ ๊ณ์ ์ด๋ฆ>
Password : <ํ ํฐ ์
๋ ฅ>
# ํ์ผ ์์ฑ ๋ฐ ๊น ์
๋ก๋(push)
echo "gitlab test memo" >> test.txt
git add . && git commit -m "initial commit - add test.txt"
git push
Username : <์์ฑํ ๊ณ์ ์ด๋ฆ>
Password : <ํ ํฐ ์
๋ ฅ>
์ฐธ๊ณ 1, ์ฐธ๊ณ 2
GitOps๋ DevOps์ ์ค์ฒ ๋ฐฉ๋ฒ ์ค ํ๋๋ก ์ ํ๋ฆฌ์ผ์ด์
๋ฐฐํฌ์ ์ด์์ ๊ด๋ จ๋ ๋ชจ๋ ์์๋ค์ Git์์ ๊ด๋ฆฌ ํ๋๊ฒ์ ์๋ฏธ.
ArgoCD๋ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ํ CD(Continuous Delivery)๋๊ตฌ
์ฆ, GitOps ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌ๋๋ Manifest(yaml)ํ์ผ์ ๋ณ๊ฒฝ์ฌํญ์ ๊ฐ์ํ๋ฉฐ, ํ์ฌ ๋ฐฐํฌ๋ ํ๊ฒฝ์ ์ํ / Git Manifestํ์ผ์ ์ ์๋ ์ํ๋ฅผ ๋์ผํ๊ฒ ์ ์ง ํ๋ ์ญํ ์ํ
kubectl create ns 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
# CLB์ ExternanDNS ๋ก ๋๋ฉ์ธ ์ฐ๊ฒฐ
kubectl annotate service -n argocd argocd "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 ์ฃผ์๋ก ์ ์ http, https
echo -e "Argocd Web URL = http://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
# CLB ๋๋ฉ์ธ ๋ณ์ ์ง์
CLB=<๊ฐ์ ์์ ์ argocd ์๋น์ค์ CLB ๋๋ฉ์ธ ์ฃผ์>
CLB=adc4dcad7d21743c4b6524f37f2e7ca3-1872175753.ap-northeast-2.elb.amazonaws.com
# argocd ์๋ฒ ๋ก๊ทธ์ธ
argocd login $CLB --username admin --password $ARGOPW
# ๊ธฐ ์ค์นํ ๊น๋ฉ์ ํ๋ก์ ํธ URL ์ argocd ๊น ๋ฆฌํฌ์งํ ๋ฆฌ(argocd repo)๋ก ๋ฑ๋ก. ๊น๋ฉ์ ํ๋ก์ ํธ ๋จ์๋ก ์์ค ์ฝ๋๋ฅผ ๋ณด๊ด.
argocd repo add https://gitlab.$KOPS_CLUSTER_NAME/<๊น๋ฉ ๊ณ์ ๋ช
>/test-stg.git --username <๊น๋ฉ ๊ณ์ ๋ช
> --password <๊น๋ฉ ๊ณ์ ์ํธ>
argocd repo add https://gitlab.$KOPS_CLUSTER_NAME/gasida/test-stg.git --username gasida --password P@ssw0rd
# ๋ฑ๋ก ํ์ธ : ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฅด๊ณ ์๋๊ฐ ์ค์น๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ ํ๊น ํด๋ฌ์คํฐ๋ก ๋ฑ๋ก๋จ
argocd repo list
TYPE NAME REPO INSECURE OCI LFS CREDS STATUS MESSAGE PROJECT
git https://gitlab.gasida.link/gasida/test-stg.git false false false true Successful
# ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฅด๊ณ ์๋๊ฐ ์ค์น๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ ํ๊น ํด๋ฌ์คํฐ๋ก ๋ฑ๋ก๋จ
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.
[๊ณผ์ 1]: Harbor ์ ์์ ๋ง์ ์๋ฌด ์ด๋ฏธ์ง๋ ํ๊ทธํด์ ์ ๋ก๋ํ๊ณ ๋ค์ด๋ก๋ ํด๋ณด๊ณ , ๊ด๋ จ ์ค์ท ์ฌ๋ ค์ฃผ์ธ์.
์ด์ ๊ณผ์ ์์ ์ฌ์ฉํ๋ ๋ง๋ฆฌ์ค ์ด๋ฏธ์ง๋ฅผ Harbor์ ์
๋ก๋!
1. mario ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ ํ tag ์ค์ (harnor.burst89.com/pkos/mario:1.0)
2. harbor push
3. harbor web ํ์ธ
[๊ณผ์ 2]: ์์ ๋ง์ ํ ์คํธ ํ์ผ์ kops-ec2 ๋ก์ปฌ์์ Gitlab ์ ์ฌ๋ ค๋ณด๊ณ , ๊ด๋ จ ์ค์ท ์ฌ๋ ค์ฃผ์ธ์.
[๊ณผ์ 3]: ArgoCD ์ฑํฐ์ธ, ์ฑ
273ํ์ด์ง์ โGitops ์ค์ต: ํด๋ฌ์คํฐ ์ค์ ๋ด์ญ ๋ณ๊ฒฝ๊ณผ ๊น ์ ์ฅ์ ์๋ ๋ฐ์โ์ ์ง์ ์ค์ค๋ก ์ค์ตํด๋ณด๊ณ , ๊ด๋ จ ์ค์ท ์ฌ๋ ค์ฃผ์ธ์.
#Harbor์ ์ฌ๋ฆฐ ๋ง๋ฆฌ์ค ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ฐ์ Pod๋ฅผ ๋ฐฐํฌํ๋ yamlํ์ผ ์์ฑ(mario_argocd.yaml)
๊ธฐ์กด replicas 1 -> 2๋ก ๋ณ๊ฒฝ
#Application CRD yamlํ์ผ
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: mario
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
destination:
namespace: mario
server: https://kubernetes.default.svc
project: default
source:
repoURL: https://gitlab.burst89.com/burst/test-stg.git
path: mario
targetRevision: HEAD
directory:
recurse: true
syncPolicy:
syncOptions:
- CreateNamespace=true
automated:
prune: true
๋ง๋ฆฌ์ค Pod ์์ฑ ์์
1. Gitlab์ ๋ง๋ฆฌ์ค yamlํ์ผ ์ ์ฅ
2. ํด๋น yamlํ์ผ์ ์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ฅผ harbor์ ์๋ ๋ง๋ฆฌ์ค ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์ ์ ์๊ฒ ์ง์
3. Application CRD yamlํ์ผ์ ํตํด argocd ์ฐ๋ ๋ฐ pod ๋ฐฐํฌ(ํด๋น ํ์ผ์ apply ํ๋ ๊ฒฝ์ฐ pod ์์ฑ ๋ฐ argocd ์ฐ๋๊น์ง ์งํ)
argocd์ app diff๋ฉ๋ด์์ ๋ณ๊ฒฝ๋ ๋ถ๋ถ ํ์ธ
a. Gitlab ์์ค์ฝ๋ ๋ฐ์ ์์ด ์์๋ก ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ฒ ๋๋ฉด ๋ฐ๋ก argocd์์ ํ์ธ ๊ฐ๋ฅ!!
Sync!!
a. argocd์์ Sync๋ฒํผ์ ๋๋ฌ Sync๋ฅผ ๋ง์ถ๋ฉด ์๋ gitlab์ ์ ์ฅ๋ yamlํ์ผ์ ํตํด ๋ค์ ์๋ณต
์ฆ, replicas์ ์๋ฅผ 1์์ ๋ค์ 2๋ก ๋ณ๊ฒฝ๋๋ฉด์ pod๊ฐ ์๋ก ์๊น
yamlํ์ผ์ ์์ ํ, gitlab์ ์
๋ฐ์ดํธ ํ์ฌ ํด๋ฌ์คํฐ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ
Mario deployment์ replica ๊ฐ์๋ฅผ 5๋ก ๋ณ๊ฒฝ
gitlab push
argoCD ํ์ธ(gitlab์์ yamlํ์ผ์ด ๋ณ๊ฒฝ๋์์ ๊ฒฝ์ฐ ๋ณ๋์ argoCD์์๋ ๋ฐ์์ด ์์)
sync๋ฅผ ์งํํ๋ฉด ๋ณ๋์ ํด๋ฌ์คํฐ์์ edit ์์
์์ด pod์ ์๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ํ์ธ
argoCD ํ์ธ(Pod ์ฆ๊ฐ)
gitlab์์ ์ง์ yamlํ์ผ ์์ ํ argocd์์ sync๋ฅผ ํ๋ฉด ํด๋น ๋ด์ฉ์ด ํด๋ฌ์คํฐ์ ๋ฐ๋ก ๋ฐ์(replicas 10)
์ค์ GitOpsํ๊ฒฝ์ ์ค์ตํด ๋ณด๋ฉด์ ์ฒ์ DevOps๊ฐ ์ด๋ค ๋๋์ธ์ง๋ฅผ ์ ์ ์์๋ค. ํ์
์์๋ ํผ๋ธ๋ฆญ ํด๋ผ์ฐ๋์ ์ธํ๋ผ๋ฅผ ๊ตฌ์ฑํ๊ณ , ํด๋น ์ธํ๋ผ์ ์๋น์ค๋ฅผ ์ฌ๋ ค์ ์ด์์ ํ๊ณ ์๋ค. ์ค๋ ์ค์ตํ argoCD์ฒ๋ผ ์จํ๋ก๋ฏธ์ค ๋๋ ํด๋ผ์ฐ๋์์ ์ด์์ค์ธ ์๋น์ค๋ GitOps์ฒ๋ผ ์ด์ ๊ด๋ฆฌ ๋๋ ์๋ฃจ์
์ด ์ด๋ค๊ฒ์ด ์๋์ง ์ฐพ์๋ณด๊ณ ์ค๋ฌด์ ์ ์ฉ์ ํด๋ณด๊ณ ์ถ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์์ฃผ ๊ฒช๋ ๋๊ฐ config ํ์ผ์ ์์ ํ๊ณ , ์ด๋ค ๋ถ๋ถ์ด ์์ ๋์ด ์ด๋ฅผ ๋น ๋ฅด๊ฒ ํ์
ํ๊ณ ์กฐ์ทจ๋ฅผ ์ทจํ๋ค๋ฉด ํจ์ฌ ๋น ๋ฅด๊ณ ์์ ์ ์ธ ์๋น์ค ์ด์์ ํ ์ ์์๊ฑฐ ๊ฐ๋ค.
ํน์ ์ด๋ฏธ ์ด๋ ๊ฒ ์๋น์ค๋ฅผ ์ด์์ค์ด๋ผ๋ฉด... ๋๊ธ์ ์๋ ค์ฃผ์๋ฉด ๋๋ฌด ๊ฐ์ฌํ ๊ฑฐ ๊ฐ๋ค!
๊ผญ ์ด๋ฅผ ์์ฉํด์ ์ฌ์ฉํด ๋ด์ผ ๊ฒ ๋ค!