일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Argo
- Kopf
- eBPF
- CI/CD
- xdp
- MLflow
- nginx ingress
- seldon core
- operator
- mlops
- Kubernetes 인증
- CANARY
- tekton
- keda
- 카오스 엔지니어링
- Kubernetes
- serving
- 오퍼레이터
- argocd
- Pulumi
- gitops
- Model Serving
- Continuous Deployment
- Litmus
- kubernetes operator
- blue/green
- opentelemetry
- knative
- opensearch
- Kubeflow
- Today
- Total
Kubernetes 이야기
Configmap/Secret Reloader 본문
Kubernetes에서 Deployment나 Statefulset, Daemonset 을 배포할 때 환경설정이나 비밀번호등을 연계하게 위해 Configmap, Secret 을 mount 하여 사용하는 경우가 아주 많다.
이 때 Configmap이나 Secret를 kubectl edit 로 수정하여도 관련된 Deployment나 Sts 등의 Workloads는 반영되지 못한다. 사용자가 수동으로 rollout 을 해야 반영되기 때문에 Reloader는 이런 경우 자동으로 Update될 수 있도록 해 주는 유틸리티 이다.
설치
# helm repo add stakater https://stakater.github.io/stakater-charts
# helm repo update
# helm install reloader stakater/reloader
reloader는 기본적으로 모든 네임스페이스를 감시하여 작동한다. 단일 네임스페이스에 대해 감시하려면 helm install reloader stakater/reloader --set reloader.watchGlobally=false --namespace test 로 설정해야 한다.
사용법
1. reloader.stakater.com/auto: "true"
reloader.stakater.com/auto: "true"
reloader.stakater.com/auto: "true" 설정은 configmap 또는 secret이 (볼륨 마운트 또는 env로) 사용되는 경우에만 포드를 다시 로드한다.
사용예)
kind: Deployment
metadata:
annotations:
reloader.stakater.com/auto: "true"
spec:
template:
metadata:
2. reloader.stakater.com/auto: "true", reloader.stakater.com/match: "true"
reloader.stakater.com/search: "true"
reloader.stakater.com/match: "true"
reloader.stakater.com/search: "true"는 특수 주석으로 지정된 Configmap 또는 Secret으로 제한할 수 있다.
사용예)
kind: Deployment
metadata:
annotations:
reloader.stakater.com/search: "true"
spec:
template:
kind: ConfigMap
metadata:
annotations:
reloader.stakater.com/match: "true"
data:
key: value
3. configmap.reloader.stakater.com/reload: <configmap name>, secret.reloader.stakater.com/reload: <secret name>
configmap.reloader.stakater.com/reload: <configmap name>
secret.reloader.stakater.com/reload: <secret name>
secret.reloader.stakater.com/reload또는 configmap.reloader.stakater.com/reload주석은 configmap 또는 secret 사용에 관계없이 지정된 configmap 또는 secret 변경 시 포드를 다시 로드한다.
여러개의 configmap이나 secret을 지정하고자 하는경우는 ","로 구분하여 나열한다.
사용예)
kind: Deployment
metadata:
annotations:
configmap.reloader.stakater.com/reload: "foo-configmap"
spec:
template:
metadata:
kind: Deployment
metadata:
annotations:
secret.reloader.stakater.com/reload: "foo-secret"
spec:
template:
metadata:
테스트
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
reloader.stakater.com/search: "true"
name: nginx-example
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
envFrom:
- configMapRef:
name: nginx-configmap
ports:
- containerPort: 80
---
apiVersion: v1
kind: ConfigMap
metadata:
annotations:
reloader.stakater.com/match: "true"
name: nginx-configmap
data:
domain: "example.com"
위의 resource를 test-reload namespace에 배포해보자.
# k get all -n test-reload
NAME READY STATUS RESTARTS AGE
pod/nginx-example-6df9f4b54f-6n5hg 1/1 Running 0 54s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-example 1/1 1 1 54s
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-example-6df9f4b54f 1 1 1 54s
이제 configmap을 수정한 후 다시 상태를 보자.
# k get all -n test-reload
NAME READY STATUS RESTARTS AGE
pod/nginx-example-5cdb758948-9rj8s 1/1 Running 0 4s
pod/nginx-example-6df9f4b54f-6n5hg 1/1 Terminating 0 99s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-example 1/1 1 1 99s
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-example-5cdb758948 1 1 1 4s
replicaset.apps/nginx-example-6df9f4b54f 0 0 0 99s
자동으로 pod가 재기동하는 것을 확인해 볼 수 있다.
참고
'Kubernetes > 일반' 카테고리의 다른 글
Pod에서 tcpdump 패킷 캡처 (0) | 2022.08.28 |
---|---|
Pod 생성 시 FailedMount : no space left on device 오류 (0) | 2022.08.23 |
Nginx Ingress annotations (0) | 2022.08.10 |
Litmus Chaos Engineering - 설치 (0) | 2022.08.09 |
Nats - 오픈 소스 메시징 시스템 (0) | 2022.07.27 |