반응형
Argo Rollouts
- ArgoCD와 함께 사용하면 GitOps 기반에서 Blue/Green 또는 Canary 배포를 가능하며, 배포 실패시 자동 롤백 기능
ArgoCD
- GitOps 방식을 기반으로 한 Kubernetes 배포 관리 도구
- Git 저장소를 소스로 사용하여 애플리케이션 배포를 자동화
Argo Rollouts + ArgoCD 활용
- ArgoCD와 Argo Rollouts를 함께 사용하면 GitOps 기반으로 Blue/Green 또는 Canary 배포
데모는 아래 참고하여 진행해도 됩니다.
https://github.com/argoproj/rollouts-demo/tree/master/examples/blue-green
1. Argo Rollouts
Namespace 생성
kubectl create namespace argo-rollouts
Rollouts 다운로드 및 배포
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
배포 확인
kubectl get pod -n argo-rollouts
kubectl 플러그인 설치
curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/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
Argo Rollouts 배포
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: rollout-bluegreen
namespace: argo-rollouts
spec:
replicas: 2
revisionHistoryLimit: 2
selector:
matchLabels:
app: rollout-bluegreen
template:
metadata:
labels:
app: rollout-bluegreen
spec:
containers:
- name: front
image: "이미지":TAG
imagePullPolicy: Always
ports:
- containerPort: 80
- containerPort: 443
strategy:
blueGreen:
activeService: rollout-bluegreen-active
previewService: rollout-bluegreen-preview
autoPromotionEnabled: true
---
kind: Service
apiVersion: v1
metadata:
name: rollout-bluegreen-active
namespace: argo-rollouts
spec:
type: LoadBalancer
selector:
app: rollout-bluegreen
ports:
- protocol: TCP
name: http
port: 80
targetPort: 80
nodePort: 30081
- protocol: TCP
name: https
port: 443
targetPort: 443
nodePort: 30082
---
kind: Service
apiVersion: v1
metadata:
name: rollout-bluegreen-preview
namespace: argo-rollouts
spec:
type: LoadBalancer
selector:
app: rollout-bluegreen
ports:
- protocol: TCP
name: http
port: 80
targetPort: 80
nodePort: 30091
- protocol: TCP
name: https
port: 443
targetPort: 443
nodePort: 30092
배포 상태 완료
kubectl argo rollouts get rollout rollout-bluegreen
2. ArgoCD
1) ArgoCD 설치
- 접속하기 : http://ArogCD-IP:Port
- 초기 패스워드 찾기
2) ArgoCD Rollouts yaml 연동
3) ArgoCD 연동
- Progressing -> Healthy
- kubectl 을 통한 상태 확인
4) 배포 상태 완료
5) Images 변경
- 배포 완료
- Rollouts 상태 확인
kubectl argo rollouts get rollout rollout-bluegreen
- 아직 monta010/front-web:1.0 이미지로 서비스 동작 중 그 이유는. Rollouts -> "autoPromotionEnabled: false" 으로 되어 있어서 자동으로 승격되지 않는 상태
- promote(승격) 버튼이 활성화 된 것으로 보여 해당 정책이 제대로 동작
- promote(승격)에 대해서는 UI 기반 or 명령어로 처리 가능
"kubectl argo rollouts promote rollout-bluegreen -n argo-rollouts" 활용
- 커멘트로 promote(승격하기)
kubectl argo rollouts promote rollout-bluegreen -n argo-rollouts
- Revisions 1은 삭제 되고 Revisions 2로 승격
6) 롤백 환경 테스트
- 해당 버전에 대해서 문제가 생겨 롤백이 필요하다는 가정하여 롤백 테스트
kubectl argo rollouts undo rollout-bluegreen -n argo-rollouts --to-revision=1
- revision3으로 history 추가되면서 "monta010/front-web:1.0) 으로 변경됨 -> 수동으로 승격처리 하게 되면
- 승격 완료
- 롤백 완료
7) Argo Rollouts 삭제
kubectl delete rollout rollout-bluegreen -n argo-rollouts
반응형
'kubernetes' 카테고리의 다른 글
NFS Storageclass 구성 (0) | 2025.01.07 |
---|---|
Kubernetes Nginx Ingress Controller & Ingress 설치 및 구성 (0) | 2024.12.03 |
Kubernetes Containerd 데이터 경로 변경 (0) | 2024.08.09 |
Kubernetes Containerd GPU 사용 방법 (0) | 2024.08.09 |
Kubernetes CronJob (0) | 2024.07.05 |
댓글