#스터디 시작
EKS(Amazon Elastic Kubernetes Service) CI/CD를 공부하려면 먼저 Kubernetes를 활용하여 지속적 통합/지속적 배포 파이프라인을 구축하는 방법을 이해해야 합니다. 특히 Jenkins를 지속적인 통합 도구로 사용하여 git의 코드를 통합하고 Argocd를 AWS EKS에 대한 애플리케이션의 지속적인 배포로 많이 사용하고 있습니다. 따라서 CI-CD 기술을 사용하여 AWS EKS에 애플리케이션을 배포하는 작업을 자동화하는 방법을 배워보도록 하겠습니다.
#사전준비
- 실습 환경 배포 : Amazon EKS (myeks) 윈클릭 배포 & 기본 설정
# YAML 파일 다운로드
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/eks-oneclick6.yaml
# CloudFormation 스택 배포
예시) aws cloudformation deploy --template-file eks-oneclick6.yaml --stack-name myeks --parameter-overrides KeyName=kp-gasida SgIngressSshCidr=$(curl -s ipinfo.io/ip)/32 MyIamUserAccessKeyID=AKIA5... MyIamUserSecretAccessKey='CVNa2...' ClusterBaseName=myeks --region ap-northeast-2
# CloudFormation 스택 배포 완료 후 작업용 EC2 IP 출력
aws cloudformation describe-stacks --stack-name myeks --query 'Stacks[*].Outputs[0].OutputValue' --output text
- 기본 설정
# default 네임스페이스 적용
kubectl ns default
# 노드 정보 확인 : t3.medium
kubectl get node --label-columns=node.kubernetes.io/instance-type,eks.amazonaws.com/capacityType,topology.kubernetes.io/zone
# ExternalDNS
MyDomain=<자신의 도메인>
echo "export MyDomain=<자신의 도메인>" >> /etc/profile
MyDomain=gasida.link
echo "export MyDomain=gasida.link" >> /etc/profile
MyDnzHostedZoneId=$(aws route53 list-hosted-zones-by-name --dns-name "${MyDomain}." --query "HostedZones[0].Id" --output text)
echo $MyDomain, $MyDnzHostedZoneId
curl -s -O https://raw.githubusercontent.com/gasida/PKOS/main/aews/externaldns.yaml
MyDomain=$MyDomain MyDnzHostedZoneId=$MyDnzHostedZoneId envsubst < externaldns.yaml | kubectl apply -f -
# kube-ops-view
helm repo add geek-cookbook https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set env.TZ="Asia/Seoul" --namespace kube-system
kubectl patch svc -n kube-system kube-ops-view -p '{"spec":{"type":"LoadBalancer"}}'
kubectl annotate service kube-ops-view -n kube-system "external-dns.alpha.kubernetes.io/hostname=kubeopsview.$MyDomain"
echo -e "Kube Ops View URL = http://kubeopsview.$MyDomain:8080/#scale=1.5"
# AWS LB Controller
helm repo add eks https://aws.github.io/eks-charts
helm repo update
helm install aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --set clusterName=$CLUSTER_NAME \
--set serviceAccount.create=false --set serviceAccount.name=aws-load-balancer-controller
# gp3 스토리지 클래스 생성
kubectl apply -f https://raw.githubusercontent.com/gasida/PKOS/main/aews/gp3-sc.yaml
# 노드 보안그룹 ID 확인
NGSGID=$(aws ec2 describe-security-groups --filters Name=group-name,Values=*ng1* --query "SecurityGroups[*].[GroupId]" --output text)
aws ec2 authorize-security-group-ingress --group-id $NGSGID --protocol '-1' --cidr 192.168.1.100/32
- 프로메테우스 & 그라파나(admin / prom-operator) 설치 : 대시보드 추천 15757 17900 15172
# 사용 리전의 인증서 ARN 확인
CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`
echo $CERT_ARN
# repo 추가
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
# 파라미터 파일 생성 : PV/PVC(AWS EBS) 삭제에 불편하니, 4주차 실습과 다르게 PV/PVC 미사용
cat <<EOT > monitor-values.yaml
prometheus:
prometheusSpec:
podMonitorSelectorNilUsesHelmValues: false
serviceMonitorSelectorNilUsesHelmValues: false
retention: 5d
retentionSize: "10GiB"
ingress:
enabled: true
ingressClassName: alb
hosts:
- prometheus.$MyDomain
paths:
- /*
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/load-balancer-name: myeks-ingress-alb
alb.ingress.kubernetes.io/group.name: study
alb.ingress.kubernetes.io/ssl-redirect: '443'
grafana:
defaultDashboardsTimezone: Asia/Seoul
adminPassword: prom-operator
defaultDashboardsEnabled: false
ingress:
enabled: true
ingressClassName: alb
hosts:
- grafana.$MyDomain
paths:
- /*
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/load-balancer-name: myeks-ingress-alb
alb.ingress.kubernetes.io/group.name: study
alb.ingress.kubernetes.io/ssl-redirect: '443'
alertmanager:
enabled: false
EOT
cat monitor-values.yaml | yh
# 배포
kubectl create ns monitoring
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack --version 57.2.0 \
--set prometheus.prometheusSpec.scrapeInterval='15s' --set prometheus.prometheusSpec.evaluationInterval='15s' \
-f monitor-values.yaml --namespace monitoring
# Metrics-server 배포
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# 프로메테우스 ingress 도메인으로 웹 접속
echo -e "Prometheus Web URL = https://prometheus.$MyDomain"
# 그라파나 웹 접속 : 기본 계정 - admin / prom-operator
echo -e "Grafana Web URL = https://grafana.$MyDomain"
# EKS CI/CD 개념 및 특징

소프트웨어 엔지니어링 세계에서 CI는 지속적인 통합을 나타내고 CD는 지속적인 전달 또는 배포를 나타냅니다. 오늘날 빠르게 변화하는 소프트웨어 개발 환경에서는 소프트웨어 배포 프로세스를 간소화하는 것이 중요합니다. 이를 위해서는 애플리케이션 구축 및 테스트부터 배포까지 모든 단계에서 자동화가 필요합니다. CI/CD는 반복적인 작업을 자동화하고 배포 및 테스트 시간을 절약하여 핵심 개발에 집중할 수 있게 해주는 유용한 도구입니다.

CI/CD:
CI/CD는 지속적인 통합과 지속적인 전달/배포를 의미합니다. 애플리케이션 구축, 테스트 및 배포를 자동화하고 간소화하는 것을 목표로 하는 소프트웨어 개발의 일련의 사례 및 프로세스입니다.
CI/CD의 장점:
- 시장 출시 시간 단축
- 향상된 코드 품질
- 위험 감소
- 효율적인 협업
- 확장성과 유연성
# EKS CI/CD 실습
- Docker
- **도커 허브** 가입 : 자신의 계정명 확인
- 자신만의 웹 서버 도커 이미지 생성 후 도커 컨테이너 실행
# ubuntu 이미지 다운로드
docker pull ubuntu:20.04
docker images
# 실습을 위한 디렉터리 생성 및 이동
mkdir -p /root/myweb && cd /root/myweb
# Dockerfile 파일 생성
vi Dockerfile
FROM ubuntu:20.04
ENV TZ=Asia/Seoul VERSION=1.0.0 NICK=<자신의 닉네임>
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
sed -i 's/archive.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list && \
sed -i 's/security.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list && \
apt-get update && apt-get install -y apache2 figlet && \
echo "$NICK Web Server $VERSION<br>" > /var/www/html/index.html && \
echo "<pre>" >> /var/www/html/index.html && \
figlet AEWS Study >> /var/www/html/index.html && \
echo "</pre>" >> /var/www/html/index.html
EXPOSE 80
CMD ["usr/sbin/apache2ctl", "-DFOREGROUND"]
vi Dockerfile
FROM ubuntu:20.04
ENV TZ=Asia/Seoul VERSION=1.0.0 NICK=gasida
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
sed -i 's/archive.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list && \
sed -i 's/security.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list && \
apt-get update && apt-get install -y apache2 figlet && \
echo "$NICK Web Server $VERSION<br>" > /var/www/html/index.html && \
echo "<pre>" >> /var/www/html/index.html && \
figlet AEWS Study >> /var/www/html/index.html && \
echo "</pre>" >> /var/www/html/index.html
EXPOSE 80
CMD ["usr/sbin/apache2ctl", "-DFOREGROUND"]
# 이미지 빌드
cat Dockerfile
docker build -t myweb:v1.0.0 .
docker images
docker image history myweb:v1.0.0
docker image inspect myweb:v1.0.0 | jq
# 컨테이너 실행
docker run -d -p 80:80 --rm --name myweb myweb:v1.0.0
docker ps
curl localhost
# 웹 접속 확인
curl -s ipinfo.io/ip | awk '{ print "myweb = http://"$1"" }'





- 도커 허브 업로드
#
DHUB=<도커 허브 계정>
DHUB=gasida
docker tag myweb:v1.0.0 $DHUB/myweb:v1.0.0
docker images
# 도커 허브 로그인
docker login
Username: <자신의 ID>
Password: <암호>
## 로그인 정보는 /[계정명]/.docker/config.json 에 저장됨. docker logout 시 삭제됨
## cat /root/.docker/config.json | jq
# push 로 이미지를 저장소에 업로드
docker push $DHUB/myweb:v1.0.0


- 해당 저장소 이미지 활용
# 컨테이너 종료
docker rm -f myweb
docker ps
# 로컬 이미지 삭제
docker rmi $DHUB/myweb:v1.0.0
docker images
#
docker run -d -p 80:80 --rm --name myweb $DHUB/myweb:v1.0.0
docker iamges
# 확인
docker ps
curl localhost
curl -s ipinfo.io/ip | awk '{ print "myweb = http://"$1"" }'
# 삭제
docker rm -f myweb

- Jenkins

Jenkins는 Java로 작성된 오픈 소스 자동화 도구로, 주로 CI/CD(지속적인 통합 및 지속적 전달) 영역에서 소프트웨어 개발의 다양한 작업을 자동화하는 데 도움이 됩니다. 소프트웨어 프로젝트를 구축, 테스트 및 배포하기 위한 플랫폼을 제공하여 개발자가 반복적인 작업을 자동화하고 소프트웨어 제공 프로세스를 간소화할 수 있도록 합니다.
Jenkins 사용 사례:
지속적인 통합(CI): Jenkins는 여러 개발자의 코드 변경 사항을 공유 저장소에 자동으로 통합하는 데 탁월합니다. 변경 사항이 리포지토리에 푸시될 때마다 자동으로 빌드 및 테스트를 트리거하여 코드 품질에 대한 빠른 피드백을 제공하고 통합 문제를 방지할 수 있습니다.
지속적인 전달(CD): Jenkins는 배포 프로세스를 자동화하여 소프트웨어의 지속적인 전달을 가능하게 합니다. 사전 정의된 구성을 기반으로 개발, 스테이징, 프로덕션 등 다양한 환경에 애플리케이션을 배포할 수 있습니다. 이는 일관되고 안정적인 배포를 보장하는 데 도움이 됩니다.
자동화된 테스트: Jenkins는 다양한 테스트 프레임워크와 통합하여 빌드 프로세스의 일부로 자동화된 테스트를 실행할 수 있습니다. 개발 주기 초기에 버그와 문제를 식별하여 소프트웨어 품질을 보장하는 데 도움이 됩니다.
배포 오케스트레이션: Jenkins를 사용하면 다양한 서버 및 환경에 대한 애플리케이션 배포를 자동화할 수 있습니다. 여러 서버 또는 클라우드 플랫폼 전반에 걸쳐 소프트웨어를 배포하고 관리하는 프로세스를 간소화합니다.
예약된 작업 및 일괄 처리: Jenkins는 예약된 간격으로 백업 실행, 보고서 생성 또는 일괄 작업 실행과 같은 일상적인 작업을 수행하도록 구성할 수 있습니다. 이를 통해 반복적인 작업을 자동화하고 개발자가 보다 중요한 활동에 시간을 확보할 수 있습니다.
# 실습 편리를 위해서 root 계정 전환
sudo su -
# Add required dependencies for the jenkins package
# https://docs.aws.amazon.com/corretto/latest/corretto-17-ug/amazon-linux-install.html
sudo yum install fontconfig java-17-amazon-corretto -y
java -version
alternatives --display java
JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto.x86_64
echo $JAVA_HOME
# 젠킨스 설치
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
sudo yum upgrade
sudo yum install jenkins -y
sudo systemctl daemon-reload
sudo systemctl enable jenkins && sudo systemctl start jenkins # 다소 시간 걸림
sudo systemctl status jenkins
# 초기 암호 확인
sudo systemctl status jenkins
cat /var/lib/jenkins/secrets/initialAdminPassword
# 접속 주소 확인
curl -s ipinfo.io/ip | awk '{ print "Jenkins = http://"$1":8080" }'




- 초기 암호 입력

- 플러그인 설치 : 제안 플러그인 설치

==> 플러그인 설치가 안될 경우 아래와 같은 방법 사용
1. 우선 Plugin 설치 안하고 진행
2. Jenkins 접속 후, Jenkins 관리 -> plugin -> Advanced settings에 들어가서 업데이트 사이트 변경
기존경로: https://updates.jenkins.io/update-center.json
변경경로: http://updates.jenkins.io/update-center.json 변경 후 , 로그아웃 후 다시 PLUGIN 설치 진행
- 설정 완료 후 젠킨스 접속
- 첫번째 Item(Project) 생성
- 새로운 Item 클릭 → Name : First-Project , Freestyle project ⇒ 하단 OK 클릭

간단한 문장 출력 될 수 있게 입력 : echo "Juls" → 하단 Apply 후 저장

- 상위 메뉴 - 구성 : 아래 명령어 한줄 추가 java -version → Apply 저장
- 한줄 더 추가 : whoami
- 한줄 더 추가 : touch hello.txt

- 최상위 - 프로젝트 화살표 선택 → 지금 빌드
- 이후 콘솔 출력 확인
- Item(Job) 프로젝트 디텍토리 확인 : 혹은 젠킨스 작업 공간 확인
#
find / -name First-Project
/var/lib/jenkins/jobs/First-Project
/var/lib/jenkins/workspace/First-Project
# 프로젝트(job, item) 별 작업 공간 확인
tree /var/lib/jenkins/workspace/First-Project

- 파라미터, 빌드 유발(SCM - Git) 사용 : Trigger-Project
- Item : Trigger-Project, freestyle
- 빌드 매개변수 : String
- 변수명(VERSION), Default Vault(v1.0.0)
- 변수명(NICK), Default Vault(<자신의 계정명>)
- 소스 코드 관리 : Git
- Repo URL : https://github.com/**<자신의 계정명>**/aews-cicd
- Branch : */main
- Additional Behaviours → Sparse Checkout paths (Path) : 1
- 빌드 유발 : Poll SCM (* * * * *)
- Build Steps : Execute shell
- 빌드 매개변수 : String
- Item : Trigger-Project, freestyle

- 자신의 Github Repo 1 에서 Dockerfile에 VERSION 정보를 수정 후 Commit → 1분 정도 후에 젠킨스에서 확인


- [신규 추가] Secret text - Link
관리 → Credentials → + Add Credentials → Secret text : Usename(root), Password(qwe123), ID(vmsshpw)

item : secretssh (pipiline)
item : secretssh (pipiline)
pipeline {
agent any
environment {
SSHPW_CREDS = credentials('vmsshpw')
}
stages {
stage('remote ssh') {
steps {
sh('echo ${SSHPW_CREDS}')
sh('echo ${SSHPW_CREDS_PSW}')
sh('sshpass -p $SSHPW_CREDS_PSW ssh root@10.10.1.1 hostname')
}
}
}
}

- [신규 추가] Secret files - Link
- kube config 파일을 자신의 PC에 복사 → Jenkins Web에 Secret files 등록
scp root@<작업용EC2_공인IP>:/root/.kube/config .
# 아래 확인을 위해 모니터링
watch -d kubectl get pod
item : secretk8s (pipiline)

- Argo

ArgoCD는 Kubernetes 기반 CD(지속적 배포) 도구입니다. 푸시 기반 배포만 지원하는 외부 CD 도구와 달리 Argo CD는 Git 리포지토리에서 업데이트된 코드를 가져와 Kubernetes 리소스에 직접 배포할 수 있습니다. 이를 통해 개발자는 하나의 시스템에서 인프라 구성과 애플리케이션 업데이트를 모두 관리할 수 있습니다.
- ArgoCD의 기능
1. GIT 저장소의 코드로 정의된 전체 Kubernetes 구성.
2. 웹 사용자 인터페이스 및 명령줄 인터페이스(CLI).
3. 변경 사항을 이전 상태로 롤백할 수 있는 쉬운 롤백 메커니즘이 있습니다.
4. 모든 코드가 GIT에 존재하므로 클러스터가 종료되면 정확한 클러스터를 생성하는 데 도움이 되는 클러스터 재해 복구 기능이 있습니다.
5. GIT를 사용한 Kubernetes 액세스 제어가 포함되어 있습니다.
6. GitLab, GitHub, Microsoft, OAuth2, OIDC, LinkedIn, LDAP 및 SAML 2.0과 같은 공급자를 통한 SSO(Single Sign-On)
7. GitLab, GitHub 및 BitBucket에서 작업을 트리거하는 웹후크를 지원합니다.
8. 배포 문제를 시각화하고 구성 드리프트를 감지 및 해결하는 기능.
- 설치 - Helm Helm_AWS_ALB Docs
# 간단 설치
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# helm 설치
cat <<EOT > argocd-values.yaml
global:
domain: argocd.$MyDomain
configs:
params:
server.insecure: true
controller:
metrics:
enabled: true
serviceMonitor:
enabled: true
server:
ingress:
enabled: true
controller: aws
ingressClassName: alb
hostname: "argocd.$MyDomain"
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/backend-protocol: HTTP
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":80}, {"HTTPS":443}]'
alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
alb.ingress.kubernetes.io/ssl-redirect: '443'
aws:
serviceType: ClusterIP
backendProtocolVersion: GRPC
metrics:
enabled: true
serviceMonitor:
enabled: true
repoServer:
metrics:
enabled: true
serviceMonitor:
enabled: true
applicationSet:
metrics:
enabled: true
serviceMonitor:
enabled: true
notifications:
metrics:
enabled: true
serviceMonitor:
enabled: true
EOT
kubectl create ns argocd
helm repo add argo https://argoproj.github.io/argo-helm
helm install argocd argo/argo-cd --version 6.7.11 -f argocd-values.yaml --namespace argocd
# 확인
kubectl get ingress,pod,svc -n argocd
kubectl get crd | grep argo
applications.argoproj.io 2024-04-14T08:12:16Z
applicationsets.argoproj.io 2024-04-14T08:12:17Z
appprojects.argoproj.io 2024-04-14T08:12:16Z
# 최초 접속 암호 확인
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d ;echo
MC3y8rzzECTIAHSB




- 최초 접속 https://argocd.<자신의도메인> admin / <최초 접속 암호>
- (옵션) 로그인 후 User info → UPDATE PASSWORD 변경 가능
- rollouts cli …
#
curl -LO https://github.com/argoproj/argo-rollouts/releases/download/v1.6.4/kubectl-argo-rollouts-linux-amd64
chmod +x ./kubectl-argo-rollouts-linux-amd64
mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts
# 설치 확인
kubectl argo rollouts version
- App 배포 with Directory
- App 생성 : New App 클릭

- Application Name : first-myweb
- Project Name : default
- SYNC POLICY : Manual
- AUTO-CREATE NAMESPACE : 클러스터에 네임스페이스가 없을 시 argocd에 입력한 이름으로 자동 생성
- APPLY OUT OF SYNC ONLY : 현재 동기화 상태가 아닌 리소스만 배포

- PRUNE PROPAGATION POLICY
- foreground : 부모(소유자, ex. deployment) 자원을 먼저 삭제함
- background : 자식(종속자, ex. pod) 자원을 먼저 삭제함
- orphan : 고아(소유자는 삭제됐지만, 종속자가 삭제되지 않은 경우) 자원을 삭제함
- [체크] AUTO-CREATE-NAMESPACE
- SOURCE
- Repository URL : https://github.com/gasida/aews-cicd.git
- Revision : main
- Path : 3/deploy
- DESTINATION
- Cluster URL : https://kubernetes.default.svc
- Namespace : first
- [선택] Directory ← 소스를 보고 자동으로 유형 선택됨
- 화면 상단 [CREATE] 클릭
-
- PRUNE : GIt에서 자원 삭제 후 배포시 K8S에서는 삭제되지 않으나, 해당 옵션을 선택하면 삭제시킴
- FORCE : --force 옵션으로 리소스 삭제
- APPLY ONLY : ArgoCD의 Pre/Post Hook은 사용 안함 (리소스만 배포)
- DRY RUN : 테스트 배포 (배포에 에러가 있는지 한번 확인해 볼때 사용)배포하기 - [SYNC] 클릭 > [SYNCHRONIZE] 클릭

- 리소스 클릭 후 확인 : 각각 LIVE MANIFEST(쿠버네티스 정보) vs DESIRED MANIFEST(Git깃 정보)
- 위 화면에서 Deployment 리소스 직접 수정 해보기 : EDIT 클릭 후 lables 아래 추가 → SAVE
# 모니터링
kubectl get deploy,svc -n first --show-labels
watch -d kubectl get deploy -n first --show-labels
- k8s에서 직접 수정 → argocd 싱크(반영) 확인
# 아래 추가
kubectl edit deploy -n first myweb
...
labels:
add: label-test
add2: k8s-test
...
- 현재 상태는, Git을 기준으로 보자면 LIVE MANIFEST(K8S)형상이 뒤떨어진것으로 볼 수 있다 → OutOfSync 상태니 Sync 하자
- Git Repo화면에서 replicas 4로 변경 후 → Commit 후 ArgoCD에서 REFRESH 클릭 후 Sync 후 확인
- 실습 리소스 삭제 : Argocd 에서 DELETE
- CLI vs UI 확인 https://argorollouts.<각자 자신의 도메인>/rollouts/default


- Updating a Rollout
#
watch -d kubectl get pod -n argocd -l app=rollouts-demo -owide --show-labels
# Run the following command to update the rollouts-demo Rollout with the "yellow" version of the container:
kubectl argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow


- Aborting a Rollout
#
kubectl argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:red
#
kubectl argo rollouts abort rollouts-demo
#
kubectl argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow

- 실습 완료 후 리소스 삭제
- EKS 클러스터 삭제
eksctl delete cluster --name $CLUSTER_NAME && aws cloudformation delete-stack --stack-name $CLUSTER_NAME
#스터디 후기
이번 EKS CI/CD 스터디에서는 Amazon의 EKS(Elastic Kubernetes Service) 내에서 CI/CD(지속적 통합/지속적 배포) 방식의 구현을 자세히 살펴봤습니다. CI/CD에서 코드 변경 사항을 공유 저장소에 통합한 다음 해당 변경 사항을 프로덕션 환경(CD)에 자동으로 배포하는 방법론등을 배웠습니다. 이 과정에서 jenkins , argocd 등을 이용한 툴을 학습하였고, 애플리케이션의 배포, 확장 및 관리를 더욱 용이하게 할 수 있었습니다.
'EKS Study' 카테고리의 다른 글
| 8주차 - EKS IaC (0) | 2024.04.21 |
|---|---|
| 6주차 - EKS Security (0) | 2024.04.13 |
| 5주차 - EKS Autoscaling (0) | 2024.04.07 |
| 4주차 - EKS Observability (1) | 2024.03.24 |
| 3주차 - EKS Storage & Nodegroup (1) | 2024.03.17 |