Kubernetes 이야기

Configmap/Secret Reloader 본문

Kubernetes/일반

Configmap/Secret Reloader

kmaster 2022. 8. 11. 12:01
반응형

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가 재기동하는 것을 확인해 볼 수 있다.

 

참고

https://github.com/stakater/Reloader

반응형
Comments