4/11
하버 이용한 컨테이너 이미지 저장소 구축
깃랩 이용한 소스 저장소 구축
아르고시디 활용한 깃옵스 시스템 구축
1
목표
이미지를 하버에 올리고, 하버 기반으로 배포
GitLab에 소스 올리고, argo cd가 모니터링하다 변경되면 배포하자.
2
쿠버네티스 한번에 설치하기 위한 사전 준비는 ?
ec2 키 네임
access-key / secret-key
도메인 masterseo1.link (정식으로 구매한 도메인이여야 한다.)
s3 저장 이름 master-seo-bk5
3
Cloudformation으로 설치
15분 걸림.
https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/kops-oneclick-f1.yaml
노드 c5a.2xlarge (AMD vCPU 8, Memory 16GiB) 배포
또는
CLI로 설치
# 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
4
# 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)
5
# 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
aws iam attach-role-policy --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AllowExternalDNSUpdates --role-name masters.$KOPS_CLUSTER_NAME
aws iam attach-role-policy --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AllowExternalDNSUpdates --role-name nodes.$KOPS_CLUSTER_NAME
6
# 메트릭 서버 확인
: 메트릭은 15초 간격으로 cAdvisor를 통하여 가져옴
kubectl top node
7
# LimitRanges 기본 정책 삭제
kubectl delete limitranges limits
1
컨테이너 이미지를 빌드해서 하버에 올릴 예정이라 도커 엔진 설치하자.
(이미 설치되어 있다)
# default NS
kubectl ns default
# 설치된 패키지 확인 : 도커 엔진 확인
yum list installed
# 도커 정보 확인 : client - server, Docker Root Dir, Registry
docker info
# 도커 정보 확인 : Docker Engine - Community
docker version
# 도커 서비스 상태 확인
systemctl status docker
--------------------------------
Apr 27 18:25:56 kops-ec2 dockerd[2778]: time="2023-04-27T18:25:56.980963842+09:00" level=info msg="API listen on /run/docker.sock"
Hint: Some lines were ellipsized, use -l to show in full.
# 모든 서비스의 상태 표시 - 링크
systemctl list-units --type=service
# 도커 루트 디렉터리 확인
tree -L 3 /var/lib/docker
1
하버에 https로 접속 예정 , 인증서 필요.
헬름 차트로 하버 설치
2
# 보유한 도메인으로 AWS 인증서 하나 만들자.
# 사용 리전의 인증서 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"
3
# 하버 설치
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줄 , aws에서 받은 인증서를 사용할거라 불필요.
expose.ingress.hosts.core=harbor.<각자자신의도메인> # 36줄
expose.ingress.hosts.notary=notary.<각자자신의도메인> # 37줄
expose.ingress.hosts.core=harbor.masterseo1.link
expose.ingress.hosts.notary=notary.masterseo1.link
controller=alb # 44줄
className=alb # 47줄~
alb.ingress.kubernetes.io/scheme: internet-facing
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.masterseo1.link# 131줄
externalURL=https://harbor.masterseo1.link
----------------------
4
# 모니터링
kubectl create ns harbor
watch kubectl get pod,pvc,ingress -n harbor
인그레스 2개 생김.
AWS 콘솔에서 ALB 2개 생성을 확인하자.
5
# 설치
helm install harbor harbor/harbor -f ~/harbor/values.yaml --namespace harbor --version 1.11.0
6
# 확인
# 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"
harbor URL = https://harbor.masterseo1.link
echo -e "notary URL = https://notary.$KOPS_CLUSTER_NAME"
notary URL = https://notary.masterseo1.link
7
삭제
helm uninstall -n harbor harbor
kubectl delete pvc --all -n harbor
kubectl delete ns harbor
8
하버 웹 접속 및 로컬 이미지 업로드: https://harbor.<각자 자신의 도메인>
로그인
admin
NEW PROJECT → Name(pkos), Access Level(Public Check) ⇒ OK 클릭
9
kops-ec2 에서 로컬 이미지를 원격 하버 이미지 저장소로 업로드
# 컨테이너 이미지 가져오기
docker pull nginx
docker pull busybox
docker images
(masterseo1:default) [root@kops-ec2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 6efc10a0510f 2 weeks ago 142MB
busybox latest 7cfbbec8963d 6 weeks ago 4.86MB
10
# 태그 설정
docker tag busybox harbor.$KOPS_CLUSTER_NAME/pkos/busybox:0.1
11
docker image ls
(masterseo1:default) [root@kops-ec2 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 6efc10a0510f 2 weeks ago 142MB
busybox latest 7cfbbec8963d 6 weeks ago 4.86MB
harbor.masterseo1.link/pkos/busybox 0.1 7cfbbec8963d 6 weeks ago 4.86MB
12
# 로그인 - 방안2
echo 'Harbor12' > harborpw.txt
cat harborpw.txt | docker login harbor.$KOPS_CLUSTER_NAME -u admin --password-stdin
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
cat /root/.docker/config.json | jq
13
# 이미지 업로드
docker push harbor.$KOPS_CLUSTER_NAME/pkos/busybox:0.1
14
쿠버네티스 YAML 파일의 컨테이너 이미지 저장소 주소를 로컬 하버로 변경
: harbor 저장소 이미지를 사용하는 디플로이먼트 생성하기
# 파드 배포
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
15
# 확인 : 정상적으로 harbor 에서 이미지 다운로드되어 파드가 동작!
kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox-6c4c69f7f8-g7x8l 1/1 Running 0 2m34s
16
kubectl describe pod | grep Events: -A7
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 9m56s default-scheduler Successfully assigned default/busybox-646ccbcc7c-g892f to i-0cf34fb82a31a3da8
Normal Pulling 9m56s kubelet Pulling image "harbor.masterseo1.link/pkos/busybox:0.1"
Normal Pulled 9m55s kubelet Successfully pulled image "harbor.masterseo1.link/pkos/busybox:0.1" in 675.698451ms
Normal Created 9m55s kubelet Created container busybox
Normal Started 9m55s kubelet Started container busybox
17
컨테이너 이미지 업로드 시 자동으로 이미지 보안 스캔 기능 사용
Trivy 이미지 스캐닝 도구를 통해서 스캔해보자
18
# 태그 설정
docker tag nginx harbor.$KOPS_CLUSTER_NAME/pkos/nginx:0.1
docker image ls
19
# 이미지 업로드
docker push harbor.$KOPS_CLUSTER_NAME/pkos/nginx:0.1
20
# harbor 웹에서 확인 >> 아래 처럼 자동으로 스캔 수행됨
Configuration > Vulnerability scanning > Automatically scan images on push 체크 > 저장
21
테그 달고 이미지 올려보자.
자동 스캔 된다.
(masterseo1:default) [root@kops-ec2 ~]# docker tag nginx harbor.$KOPS_CLUSTER_NAME/pkos/nginx:0.1
(masterseo1:default) [root@kops-ec2 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 6efc10a0510f 2 weeks ago 142MB
harbor.masterseo1.link/pkos/nginx 0.1 6efc10a0510f 2 weeks ago 142MB
busybox latest 7cfbbec8963d 6 weeks ago 4.86MB
harbor.masterseo1.link/pkos/busybox 0.1 7cfbbec8963d 6 weeks ago 4.86MB
(masterseo1:default) [root@kops-ec2 ~]# docker push harbor.$KOPS_CLUSTER_NAME/pkos/nginx:0.1
The push refers to repository [harbor.masterseo1.link/pkos/nginx]
9d907f11dc74: Layer already exists
79974a1a12aa: Layer already exists
f12d4345b7f3: Layer already exists
935b5bd454e1: Layer already exists
fb6d57d46ad5: Layer already exists
ed7b0ef3bf5b: Layer already exists
0.1: digest: sha256:f2fee5c7194cbbfb9d2711fa5de094c797a42a51aa42b0c8ee8ca31547c872b1 size: 1570
1
자신만의 텍스트 파일을 kops-ec2 로컬에서 Gitlab Repo에 올려보고, 다운로드 받아보세요
2
헬름 차트로 깃랩 설치 후 웹 로그인
# 모니터링
kubectl create ns gitlab
watch kubectl get pod,pvc,ingress -n gitlab
# 설치
# 사용 리전의 인증서 ARN 확인
aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text
CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`
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: <각자자신의도메인> # 52줄
domain: masterseo1.link
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"
// group.name을 쓰면 4개가 아닌 1개의 ALB로 모두 처리가 가능하다.
tls: # 79줄
enabled: false
certmanager: # 833줄
install: false
nginx-ingress: # 847줄
enabled: false
prometheus: # 904줄
install: false
gitlab-runner: # 1130줄
install: false
----------------------
3
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 df-pv -n gitlab
kubectl get-all -n gitlab
# 4개의 Ingress 가 1개의 ALB를 공유해서 사용
: AWS 콘솔에서 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
4
# 웹 root 계정 암호 확인
kubectl get secrets -n gitlab gitlab-gitlab-initial-root-password --template={{.data.password}} | base64 -d ;echo
hhBvAjXoANx8kVIVpcwdQFxikRDJfwVPBXn0dxmNBgc7zssSBskTj
5
# 웹 접속 주소 확인 및 접속
echo -e "gitlab URL = https://gitlab.$KOPS_CLUSTER_NAME"
--------------------------------------
gitlab URL = https://gitlab.masterseo1.link
# 웹 접속 https://gitlab.<각자 자신의 도메인> (root / 웹 root 계정 암호)
6
삭제시
helm uninstall -n gitlab gitlab
kubectl delete pvc --all -n gitlab
kubectl delete ns gitlab
7
깃랩 신규 프로젝트 작성
Project name (test-stg) , Project URL(<각자계정>, /test-stg) , Visibility Level (Intenal) , Initialize repository with a README (체크
8
Admin 메뉴
9
토큰 만들고
test
권한은 api 부터 모두 다 준다.
10
admin 메뉴
user > edit > 암호 설정 good1!
11
프로젝트 생성
test-stg
internal
Create
12
생성한 깃랩 프로젝트에 쿠버네티스에서 사용하는 YAML 파일을 업로드 ⇒ 토큰 값 확인
#
mkdir ~/gitlab-test && cd ~/gitlab-test
13
# git 계정 초기화 : 토큰 및 로그인 실패 시 매번 실행해주자
git config --system --unset credential.helper
git config --global --unset credential.helper
14
# git 계정 정보 확인 및 global 계정 정보 입력
git config --list
git config --global user.name "<각자 자신의 Gialba 계정>"
git config --global user.email "<각자 자신의 Gialba 계정의 이메일>"
git config --global user.name "topasvga"
git config --global user.email "topasvga@naver.com"
15
# git clone
git clone https://gitlab.$KOPS_CLUSTER_NAME/<각자 자신의 Gitlab 계정>/test-stg.git
git clone https://gitlab.$KOPS_CLUSTER_NAME/topasvga/test-stg.git
Cloning into 'test-stg'...
Username for 'https://gitlab.gasida.link': topasvga
Password for 'https://gasida@gitlab.gasida.link': <토큰 입력>
topasvga
암호는 토큰
16
# 이동
ls -al test-stg && cd test-stg && pwd
17
# 파일 생성 및 깃 업로드(push) : 웹에서 확인
echo "gitlab test memo" >> test.txt
git add . && git commit -m "initial commit - add test.txt"
git push
Username for 'https://gitlab.gasida.link': topasvga
Password for 'https://gasida@gitlab.gasida.link': <토큰 입력>
18
test.txt가 올라간것 확인
지속적인 배포란(Continuous Delivery, CD) 개발자가 소스코드를 변경해서 깃 저장소에 푸시하면 해당 변경 사항이 고객이 사용하는 실제 운영환경의 시스템까지 자동으로 반영함
헬름 차트로 설치 후 웹 로그인
1
# 모니터링
kubectl create ns argocd
watch kubectl get pod,pvc,svc -n argocd
2
# 설치
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
3
# CLB에 ExternanDNS 로 도메인 연결
kubectl annotate service -n argocd argocd-server "external-dns.alpha.kubernetes.io/hostname=argocd.$KOPS_CLUSTER_NAME"
4
# admin 계정의 암호 확인
ARGOPW=$(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d)
echo $ARGOPW
mf8bOtNEq7iHMqq1
5
# 웹 접속 로그인 (admin) CLB의 DNS 주소로 접속 http, https(첫 로그인 후 다시 http로 접속 해서 진행할것)
echo -e "Argocd Web URL = http://argocd.$KOPS_CLUSTER_NAME"
Argocd Web URL = http://argocd.masterseo1.link
6
삭제시
helm uninstall -n argocd argocd
kubectl delete ns argocd
7
argocd CLI 도구 설치
아르고시디로 애플리케이션 배포에 사용할 깃 저장소와 쿠버네티스 클러스터 정보를 등록
# 최신버전 설치
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
8
# CLB 도메인 변수 지정
CLB=<각자 자신의 argocd 서비스의 CLB 도메인 주소>
CLB=adc4dcad7d21743c4b6524f37f2e7ca3-1872175753.ap-northeast-2.elb.amazonaws.com
9
# argocd 서버 로그인
argocd login argocd.$KOPS_CLUSTER_NAME --username admin --password $ARGOPW
10
# 기 설치한 깃랩의 프로젝트 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/topasvga/test-stg.git --username topasvga --password goodman1!!
-----------------------
Repository 'https://gitlab.masterseo1.link/topasvga/test-stg.git' added
11
# 등록 확인
: 기본적으로 아르고시디가 설치된 쿠버네티스 클러스터는 타깃 클러스터로 등록됨
argocd repo list
TYPE NAME REPO INSECURE OCI LFS CREDS STATUS MESSAGE PROJECT
git https://gitlab.masterseo1.link/topasvga/test-stg.git false false false true Successful
12
# 기본적으로 아르고시디가 설치된 쿠버네티스 클러스터는 타깃 클러스터로 등록됨
argocd cluster list
(masterseo1:default) [root@kops-ec2 ~]# 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.
13
ArgoCD를 이용하여 RabbitMQ 헬름 애플리케이션 배포하기
: RabbitMQ Helm 깃랩 업로드
# test-stg 깃 디렉터리에서 아래 실행
cd ~/gitlab-test/test-stg
# 깃 원격 오리진 주소 확인
git config -l | grep remote.origin.url
remote.origin.url=https://gitlab.masterseo1.link/topasvga/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
(masterseo1:default) [root@kops-ec2 rabbitmq]# git push
Username for 'https://gitlab.masterseo1.link': topasvga
Password for 'https://topasvga@gitlab.masterseo1.link': <토큰>
14
# argocd CRD 확인
kubectl get crd | grep argo
asterseo1:default) [root@kops-ec2 rabbitmq]# kubectl get crd | grep argo
applications.argoproj.io 2023-04-28T10:55:11Z
applicationsets.argoproj.io 2023-04-28T10:55:11Z
appprojects.argoproj.io 2023-04-28T10:55:11Z
applications.argoproj.io # 배포 앱 현재 실행 상태와 깃 저장소의 의도한 상태를 계속 비교
appprojects.argoproj.io # 프로젝트 단위 구분
argocdextensions.argoproj.io
15
#
cd ~/
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.masterseo1.link/topasvga/test-stg.git
path: rabbitmq
targetRevision: HEAD
helm:
valueFiles:
- my-values.yaml
syncPolicy:
syncOptions:
- CreateNamespace=true
--------------------------------------
16
# 모니터링 : argocd 웹 화면 보고 있기!
http로 접속 해서 진행할것
echo -e "Argocd Web URL = http://argocd.$KOPS_CLUSTER_NAME"
Argocd Web URL = http://argocd.masterseo1.link
17
# 배포
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 Unknown Healthy
10
# 모니터링
watch kubectl get pod -n rabbitmq
# 배포 확인
kubectl get all,svc,cm -n rabbitmq
11
헬름 차트 삭제 ?
# argocd 삭제
kubectl delete application.argoproj.io -n argocd rabbitmq-helm # 미 삭제되어 있을 경우 삭제
helm uninstall -n argocd argocd
kubectl delete ns argocd
# gitlab 삭제
helm uninstall -n gitlab gitlab
kubectl delete pvc --all -n gitlab
kubectl delete ns gitlab
# harbor 삭제
helm uninstall -n harbor harbor
kubectl delete pvc --all -n harbor
kubectl delete ns harbor
12
헬름 차트 삭제
kops delete cluster --yes && aws cloudformation delete-stack --stack-name mykops
하버이용한 컨테이너 이미지 저장소 구축
깃랩 이용한 소스 저장소 구축
아르고시디 활용한 깃옵스 시스템 구축
다음과정
https://brunch.co.kr/@topasvga/3139
https://brunch.co.kr/@topasvga/3144
감사합니다.