티스토리 뷰
Kubernetes는 Pod를 Deploy하기 위한 다양한 Template을 제공한다. 대표적으로 Deployment가 있으며, Deployment는 Pod와 Replica에 대한 정의를 담고 있다.
Deployment는 pod의 정보를 담고 있는 동시에 Kubernetes가 Pod를 재반영하는 기준이 된다. 즉 Kubernetes는 Deployment가 변경되었는지 여부를 확인하여 Pod를 재 배포한다. 이는 Application이 변경되어 DockerImage에 추가되었음에도 불구하고, 애플리케이션이 배포되지 않을 수 있음을 의미하며, 이를 강제로 적용하기 위해 RollOut을 수행하기도 한다.
Helm도 마찬가지로 이와 같은 현상이 발생할 수 있다.
Helm Install의 경우 신규 Pod를 생성하는 과정이기 때문에 배포가 가능하지만, Helm Upgrade의 경우 Pod를 정의하는 template/deployment.yaml 파일이 변경되지 않을 경우 배포가 발생하지 않는다.
이는 Pod를 정의하는 yaml과는 다르게 ConfigMaps 또는 Secrets이 변경 또는 삽입되거나 외부적인 요소의 변경(Database, External Componenet 연동 등)에 의해 Pod를 Rolling Update해야 할 경우 다음과 같은 조치가 필요하다.
Helm 2
1) --recreate-pods
helm upgrade --recreate-pods my-helm --username admin --password Harbor12345 --version 0.1.0 my-helm/my-helm
--recreate-pods 옵션으로 강제 redeploy를 한다. 다만, 강제 redeploy로 인한 side-effect를 차단하기 위해 해당 옵션은 Helm 3에서 제거되었다.
2) timestamp annotation
- deployment.yaml
kind: Deployment
spec:
template:
metadata:
labels:
app: my-helm-app
annotations:
timestamp: "{{ .Values.timestamp }}"
- CLI
helm upgrade --set-string timestamp=a_random_value my-helm-app .
위와 같이 timestamp를 주입하여 매 upgrade 마다 변경된 timestamp를 적용하여 재 반영을 수행할 수 있다.
Helm 3
1) checksum 활용
kind: Deployment
spec:
template:
metadata:
annotations:
checksum/config: {{ include (print $.Template.BasePath "configmap.yaml") . | sha256sum }}
위와 같이 반영 시 configmap.yaml의 변경 시 변경되는 checksum 정보를 반영할 수 있도록 주입한다. checksum의 경우 정해진 특정 파일의 변경 시를 정의할 수 있으며, 그밖의 파일이 변경 되었을 시에는 적용하지 않도록 할 수 있다.
2) rollme 적용
kind: Deployment
spec:
template:
metadata:
annotations:
rollme: {{ randAlphaNum 5 | quote }}
모든 helm upgrade 시 강제로 반영할 수 있도록 조치하는 방법이다. helm 2의 --recreate-pod와 같은 기능과 유사하지만, 실제로 임의 rand 문자(Alpha, Num)로 대체되어 매번 deployment.yaml이 변경되었다고 인지시켜 Rolling Update를 수행하도록 한다.
# Tip
upgrade와 install을 동시에 사용하는 방법
helm upgrade --install my-helm my-helm/my-helm와 같은 형태로 사용하면, helm install과 upgrade를 함께 사용할 수 있다. 이는 release 버전에 my-helm이 있을 경우 upgrade를 없을 경우 install을 수행한다.
'⑨ IT Wordbook' 카테고리의 다른 글
Kubernetes (.bashrc - kubectl 자동완성, kube-ps1) (0) | 2022.03.21 |
---|---|
CRI-O (Container Runtime Interface + OCI[Open Container Initiative]) (4) | 2020.05.19 |
SAGA 패턴 & 보상트랜잭션 (0) | 2020.05.12 |
Event Sourcing & CQRS (0) | 2020.05.12 |
CQRS (Command and Query Responsibility Segregation) (0) | 2020.05.12 |
- Total
- Today
- Yesterday
- kubernetes
- k8s
- openstack tenant
- git
- JEUS6
- Architecture
- API Gateway
- SWA
- MSA
- wildfly
- JEUS7
- JBoss
- nodejs
- TA
- 쿠버네티스
- Docker
- 아키텍처
- Da
- jeus
- webtob
- apache
- aws
- OpenStack
- node.js
- 마이크로서비스
- 마이크로서비스 아키텍처
- openstack token issue
- SA
- aa
- 오픈스택
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |