본문 바로가기
AEWS2기

[실습] Argo Rollouts

by yeongki0944 2024. 4. 21.

 

 

Argo Rollout 을 활용한 배포 전략 테스트 - https://devocean.sk.com/blog/techBoardDetail.do?ID=163189

개념

  • Argo Rollouts는 Kubernetes 환경에서 롤링 업데이트를 관리하는 도구
  • Argo Rollouts는 Progressive Delivery를 지원하는 도구
    • Canary 배포시
      • 일시적 홀딩 > Metric을 통해 new version에 대한 배포가 성공인지 아닌지 판단 > 추가 배포 진행

https://devocean.sk.com/blog/techBoardDetail.do?ID=163189

 

 

https://argoproj.github.io/argo-rollouts/concepts/

 

아키텍처

 

2. 설치

MyDomain=myeks.net
CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`
echo $CERT_ARN

 

cat <<EOT > argorollouts-values.yaml
dashboard:
enabled: true
ingress:
enabled: true
ingressClassName: alb
hosts:
- argorollouts.$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'
EOT

 

 

kubectl create ns argo-rollouts
helm install argo-rollouts argo/argo-rollouts --version 2.35.1 -f argorollouts-values.yaml --namespace argo-rollouts

 

# 확인
kubectl get all -n argo-rollouts
kubectl get crd | grep argo

 

 

# 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

 

 

Deploying a Rollout

# Run the following command to deploy the initial Rollout and Service:
kubectl apply -f <https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/basic/rollout.yaml>
kubectl apply -f <https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/basic/service.yaml>

 

kubectl argo rollouts get rollout rollouts-demo

 

https://argorollouts.<각자 자신의 도메인>/rollouts/default

 

 

kubectl argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow

# 아래 입력 혹은 UI에서 Promote Yes 클릭
kubectl argo rollouts promote rollouts-demo
#
kubectl argo rollouts get rollout rollouts-demo --watch

 

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

 

 

 

모든 자원 삭제

eksctl delete cluster --name $CLUSTER_NAME && aws cloudformation delete-stack --stack-name $CLUSTER_NAME