<1> EKS 기반 무중단 배포 프로젝트 1 Ec2 로그인 # 터미널1 watch -d kubectl get no,svc,pods,deploy,rs 2 # 터미널2 # 무료계정 = t3.small mkdir 1 cd 1 # cluster.yaml 파일 생성 cat < cluster.yaml apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-eks-cluster region: ap-northeast-2 managedNodeGroups: - name: standard-nodes instanceType: t3.small desiredCapacity: 3 volumeSize: 20 EOF # 클러스터 생성 (약 15분 소요) eksctl create cluster -f cluster.yaml 3 # 삭제 후 재설치시(약 15분 소요) # eksctl delete cluster --name my-eks-cluster --region ap-northeast-2 # 설치상황 cloudformation에서 확인 4 k ns default # 파드와 노드증가를 시각화 하여 확인하는 Kubeops view 설치 - 5분 git clone https://codeberg.org/hjacobs/kube-ops-view.git cd kube-ops-view/ kubectl apply -k deploy # 외부에서 kube-ops-view를 접속하기 위해서 Service Type을 LoadBalancer 로 변경한다. kubectl edit svc kube-ops-view type: LoadBalancer status: 5 # my-eks-cluster eksctl scale nodegroup --cluster=my-eks-cluster --name=standard-nodes --nodes=5 --nodes-min=1 --nodes-max=10 --region ap-northeast-2 eksctl scale nodegroup --cluster=my-eks-cluster --name=standard-nodes --nodes=10 --nodes-min=1 --nodes-max=10 --region ap-northeast-2 # 타이머 https://vclock.kr/timer/#countdown=00:10:00&enabled=0&seconds=0&sound=xylophone&loop=1 6 aws ecr create-repository --repository-name my-web-app --region ap-northeast-2 aws ecr describe-repositories 7 # aws 계정 id 확인법 aws sts get-caller-identity --query "Account" --output text eks:ap-northeast-2:147544871824:cluster/free-vpc-cluster:default) [root@kops-ec2 ~]# aws sts get-caller-identity --query "Account" --output text 147544871824 # 간단한 nginx 기반 정적 페이지 echo "

My EKS App - Version 1.0

" > index.html echo "FROM nginx:alpine" > Dockerfile echo "COPY index.html /usr/share/nginx/html/" >> Dockerfile docker build -t 147544871824.dkr.ecr.ap-northeast-2.amazonaws.com/my-web-app:v1 . # docker build -t .dkr.ecr.ap-northeast-2.amazonaws.com/my-web-app:v1 . 8 aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 147544871824.dkr.ecr.ap-northeast-2.amazonaws.com # aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin .dkr.ecr.ap-northeast-2.amazonaws.com docker push 147544871824.dkr.ecr.ap-northeast-2.amazonaws.com/my-web-app:v1 # docker push .dkr.ecr.ap-northeast-2.amazonaws.com/my-web-app:v1 콘솔에서 확인 ecr 확인 my-web-appㅏ 9 # 터미널 1 # Argo CD 설치 # 1. 네임스페이스 생성 kubectl create namespace argocd # 2. 해당 네임스페이스에 ArgoCD 설치 kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml # 참고 - kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml --server-side # Argo CD 서버 외부 노출 (LoadBalancer) kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}' k ns k ns argocd # 로드밸런서 접속 - 5분후 admin # web 로그인 암호 kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo # 트러블 슈팅 # 모든 네임스페이스에서 argocd 관련 서비스 검색 kubectl get svc -A | grep argocd-server default argocd-server ClusterIP 10.100.113.81 80/TCP,443/TCP 9h default argocd-server-metrics ClusterIP 10.100.144.10 8083/TCP 9h (ssss@my-eks-cluster:default) [root@kops-ec2 kube-ops-view]# (ssss@my-eks-cluster:default) [root@kops-ec2 kube-ops-view]# 10 # Argo Rollouts 설치 방금 실행하신 명령어로 Argo Rollouts Controller와 관련 CRD(Custom Resource Definitions)들이 argo-rollouts 네임스페이스에 성공적으로 설치 Argo Rollouts는 기본 Kubernetes의 Deployment가 제공하지 못하는 Canary(카나리)나 Blue/Green(블루/그린) 배포를 가능하게 해주는 강력한 도구입니다. kubectl create namespace argo-rollouts kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml 11 kubectl get pods -n argo-rollouts 12 Argo Rollouts CLI 플러그인 설치 (강력 추천) Argo Rollouts는 전용 CLI 플러그인을 사용하면 배포 상태를 시각적으로 확인하거나 수동으로 승인(Promote)하기가 훨씬 쉽습니다. Linux (amd64) 기준 설치법: # 바이너리 다운로드 curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64 # 실행 권한 부여 및 경로 이동 chmod +x ./kubectl-argo-rollouts-linux-amd64 sudo mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts # 설치 확인 kubectl argo rollouts version -------------------- 13 Argo Rollouts 대시보드 실행 Argo CD와는 별개로 Rollouts 전용 대시보드가 있습니다. 배포 과정을 실시간으로 모니터링하기 좋습니다. 대시보드에서 할 수 있는 것들 대시보드에 접속하면 다음과 같은 작업을 마우스 클릭만으로 처리할 수 있습니다. Visual Strategy: 현재 카나리 단계(20%, 50% 등)가 어디쯤인지 시각적으로 확인 Promote: 클릭 한 번으로 수동 승인(pause 해제) Rollback: 문제가 생겼을 때 이전 버전으로 즉시 되돌리기 Analysis: 실행 중인 분석(AnalysisRun) 결과 확인 터미널 1 kubectl argo rollouts dashboard 터미널 2 kubectl port-forward -n argo-rollouts service/argo-rollouts-dashboard 3100:80 --address 0.0.0.0 이렇게 실행한 후, 브라우저에서 http://:3100으로 접속하세요. (주의: EC2 보안 그룹에서 3100번 포트가 열려 있어야 합니다.) # 트러블 슈팅 # 3100번 포트를 사용하는 프로세스 ID(PID) 확인 fuser -k 3100/tcp ------------ 14 간단한 Canary 배포 예제 YAML 파일 cat </dev/null 14 cat <