티스토리 뷰
Argo 출시를 통한 Kubernetes Blue-Green 배포
1. Argo rollout 설치
Argo 롤아웃 설치는 여기 에 문서화되어 있습니다 .
빠른 설치는 아래와 같이 수행 하시면 됩니다.
kubectl create namespace argo-rollouts
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
2.rollout App 배포방법
Argo 롤아웃은 배포 리소스의 대체품인 롤아웃을 사용 합니다 .
rollout .YAML은 apiVersion 과 Kind 가 다르다는 점을 제외하고는 배포와 거의 동일합니다 .
사양 에서 전략 섹션을 추가 하여 blueGreen 또는 카나리아 롤아웃 을 원하는지 여부를 지정할 수 있습니다 .
다음은 간단한 API에 대한 롤아웃의 예입니다.
2-1. # rollout.yaml
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: superapi
spec:
replicas: 2
selector:
matchLabels:
app: superapi
template:
metadata:
labels:
app: superapi
spec:
containers:
- name: superapi
image: ghcr.io/gbaeke/super:1.0.2
resources:
requests:
memory: "128Mi"
cpu: "50m"
limits:
memory: "128Mi"
cpu: "50m"
env:
- name: WELCOME
valueFrom:
configMapKeyRef:
name: superapi-config
key: WELCOME
ports:
- containerPort: 8080
strategy:
blueGreen:
activeService: superapi-svc-active
previewService: superapi-svc-preview
autoPromotionEnabled: false
3. Service 배포
blueGreen 전략에는 1) activeService와 2)previewService라는 두 가지 서비스 가 필요 합니다 .
두 설정 모두 Kubernetes 서비스 리소스를 참조합니다. 다음은 activeService입니다
(previewService는 유사하고 동일한 선택기를 사용합니다).
1) service-active.yaml
kind: Service
apiVersion: v1
metadata:
name: superapi-svc-active
spec:
selector:
app: superapi
type: ClusterIP
ports:
- name: http
port: 80
targetPort: 8080
2) #service-preview.yaml
kind: Service
apiVersion: v1
metadata:
name: superapi-svc-preview
spec:
selector:
app: superapi
type: ClusterIP
ports:
- name: http
port: 80
targetPort: 8080
이 예에서 우리가 해야 할 유일한 일은 롤아웃을 배포하고 kubectl apply 를 사용하는 두 서비스입니다 .
이 게시물에서는 Kustomize를 사용하여 모든 것을 배포합니다.
4. Kustomize로 롤아웃 배포
Kustomize를 사용하여 롤아웃 및 해당 서비스를 배포하려면 아래 kustomization.yaml을 사용할 수 있습니다.
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: blue-green
nameSuffix: -geba
namePrefix: dev-
commonLabels:
app: superapi
version: v1
env: dev
configurations:
- https://argoproj.github.io/argo-rollouts/features/kustomize/rollout-transform.yaml
resources:
# - namespace.yaml
- rollout.yaml
- service-active.yaml
- service-preview.yaml
configMapGenerator:
- name: superapi-config
literals:
- WELCOME=Hello from v1!
- PORT=8080
Kustomize를 사용하면 리소스를 특정 네임스페이스에 배포할 수 있습니다.
위의 것은 청록색 네임스페이스입니다. 또한 생성한 Kubernetes 리소스의 이름에 접두사와 접미사를 추가하고 레이블( commonLabels )도 추가합니다. 이것이 롤아웃에서 제대로 작동하려면 구성 섹션을 추가해야 합니다.
이것이 없으면 Kustomize는 롤아웃 리소스(종류=롤아웃)로 무엇을 해야할지 모릅니다.
환영 메시지를 설정하는 ConfigMap을 생성하는 configMapGenerator 도 사용한다는 점에 유의하십시오 .
롤아웃 사양을 보면 포드 템플릿이 이를 사용하여 WELCOME 환경 변수를 설정하는 것을 볼 수 있습니다.
우리가 배포하는 API는 예를 들어 curl을 사용하여 루트에 도달할 때 해당 메시지로 응답합니다.
kubectl apply -k .Kustomize를 사용하여 배포하려면 리소스 목록의 kustomization.yaml 및 매니페스트가 있는 폴더에서
실행할 수 있습니다 .
# https://192.168.100.10:30787
아래 화면은 최종 배포된 화면입니다.
5. Argo Plugin 설치
# 다운로드
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
6. UI로 초기 출시 확인
애플리케이션을 처음 배포할 때 앱 버전은 하나만 있습니다.
롤아웃은 ReplicaSet을 사용하여 배포와 유사하게 두 개의 포드를 배포합니다.
activeService와 previewService는 모두 이 두 포드를 가리킵니다.
Argo Rollouts에는 로 시작할 수 있는 UI가 있습니다.
$ kubectl argo rollouts dashboard -n blue-green
아래와 같이 3100 port 연동되는 모습을 확인하시면 됩니다.
아래는 오른쪽 상단을 보시면 namesapce 를 꼭 입력하셔야 해당 ui를 확인할수 있습니다.
V2 전환 모습
이제 애플리케이션의 새 버전인 v2로 업그레이드합니다. 이를 시뮬레이션하기 위해 kustomization.yaml 의 ConfigMapGenerator 에서 WELCOME 메시지를 수정하면 됩니다.
다시 실행하면 kubectl apply -k .Kustomize는 다른 이름(해시 포함)으로 새 ConfigMap을 만들고 롤아웃의 포드 템플릿에서 해당 이름을 업데이트합니다. 롤아웃의 포드 템플릿을 업데이트하면 롤아웃은 청록색 전략으로 업그레이드해야 함을 알게 됩니다. 이것은 배포가 작동하는 방식과 동일합니다. 이제 UI에서 다음을 볼 수 있습니다.
v2 변경 사항 도입 후 출시이제 두 가지 버전이 있으며 둘 다 ReplicaSet에서 지원합니다. 각 ReplicaSet은 두 개의 포드를 제어합니다. 포드 세트 중 하나는 활성 서비스용이고 다른 세트는 미리보기용입니다. 출시를 클릭하면 해당 세부정보를 볼 수 있습니다.
Version 1 에서
위에서 1번 버전이 안정적이고 활성화된 서비스임을 분명히 알 수 있습니다.
이것이 우리의 초기 v1 배포입니다. 개정판 2는 미리보기 서비스인 v2 배포입니다.
해당 서비스로 이식하고 환영 메시지를 볼 수 있습니다.
미리보기 서비스로 포트 포워딩 Octant에서 이것은 Resource Viewer에서 볼 수 있는 것입니다.v2 변경 사항 도입 후 출시 위에서 우리는 이제 롤아웃이 두 개의 ReplicaSet를 사용하여 활성 및 미리 보기 포드를 실행하는 것을 분명히 볼 수 있습니다.
Paused
현재 출시가 일시 중지된 상태입니다. Argo Rollouts UI는 이것을 보여주지만 다음을 실행하여 CLI로 볼 수도 있습니다 kubectl argo rollouts get rollout dev-superapi-geba.
CLI를 사용하여 출시 상태 가져오기위의 상태는 BlueGreenPause 메시지와 함께 paused 입니다.
녹색 서비스가 안정적이고 활성화된 서비스(v1)이고 파란색 서비스가 미리보기 서비스(v2)임을 분명히 알 수 있습니다.
이제 미리 보기 서비스를 활성화하여 안정적이고 활성화할 수 있습니다.
서비스를 승격하려면 웹 UI에서 승격 을 클릭한 다음 확인하시겠습니까?
CLI를 사용하여 명령을 다시 실행하면 다음이 표시됩니다.
# kubectl argo rollouts promote dev-superapi-geba. get
또는 아래 UI 에서 승격버튼을 누르면 됩니다.
버전 2 프로모션 후 출시
업그레이드, 중단, 승격 및 롤백 작업을
결론
블루-그린 배포가 필요한 경우 Argo Rollouts와 같은 점진적 전달 컨트롤러를 사용하는 것이 좋습니다.
전체 프로세스를 보다 직관적으로 만들고 업그레이드, 중단, 승격 및 롤백 작업을 세밀하게 제어할 수 있습니다.
위에서 수동 일시 중지, 확인 및 승격이 있는 청록색을 살펴보았습니다. 자동 프로모션이 포함된 메트릭 기반 분석과
같은 다른 옵션이 있습니다.
- Total
- Today
- Yesterday
- ORACLE 트러블 슈팅(성능 고도화 원리와 해법!)
- 오라클 홈디렉토리 copy 후 startup 에러
- 5.4.0.1072
- 스토리지 클레스
- (InstantClient) 설치하기(HP-UX)
- 키알리
- 코로나19
- 테라폼
- 앤시블
- startup 에러
- 우분투
- 튜닝
- [오라클 튜닝] instance 튜닝2
- 오라클 트러블 슈팅(성능 고도화 원리와 해법!)
- MSA
- CVE 취약점 점검
- K8s
- directory copy 후 startup 에러
- 오라클 인스턴트클라이언트(InstantClient) 설치하기(HP-UX)
- ubuntu
- 오라클
- 버쳐박스
- 커널
- pod 상태
- Oracle
- [오라클 튜닝] sql 튜닝
- 쿠버네티스
- 트리이스
- 설치하기(HP-UX)
- 여러서버 컨트롤
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |