Secret 을 파드에서 사용중인 상태라면, Secret 이 수정되었을 때 자동으로 파드에 수정된 값이 반영될까? 이는 파드에서 Secret 을 사용하는 방식에 따라 다르다.
| 방식 | 시크릿 수정시 반영 방법 |
| 환경 변수 | 파드 재시작 |
| 볼륨 마운트 | 최대 1분(기본값) 이내 자동 반영 |
환경 변수 방식과 볼륨 마운트 방식에서 Secret 수정을 반영하는 방법을 각각 알아본다.
1. 환경 변수 방식
기본적으로 Pod 는 불변 객체로 취급되기 때문에 운영중에 환경 변수를 동적으로 변경할 수 없다. 환경 변수는 파드를 기동할 때에만 설정된다. 따라서, Secret 을 변경 후 파드에 반영하기 위해서는 파드를 삭제 후 재시작 하여야만 한다. Deployment 로 관리하는 경우에는 아래 커맨드로 재시작하면 된다.
$ kubectl rollout restart deployment <디플로이먼트명>
2. 볼륨 마운트 방식
볼륨 마운트 방식에서는 Secret 변경 후 최대 1분 이내에 변경사항이 파드에 자동 반영된다. 아래 매니페스트로 username 과 password 가 각각 "admin", "adminpassword" 로 설정된 시크릿을 생성 후, 이를 파드에서 볼륨 마운트한 후, 시크릿 내용을 "root", "rootpassword" 로 변경 후 1분 후에 파드의 볼륨을 확인해보자
# 시크릿 매니페스트
apiVersion: v1
kind: Secret
metadata:
name: sample-db-auth
type: Opaque
data:
username: YWRtaW4= # admin
password: YWRtaW5wYXNzd29yZA== # adminpassword
# 파드 매니페스트
apiVersion: v1
kind: Pod
metadata:
name: sample-secret-multi-volume
spec:
containers:
- name: secret-container
image: nginx:1.27
volumeMounts:
- name: config-volume
mountPath: /config
volumes:
- name: config-volume
secret:
secretName: sample-db-auth
# 파드 내 볼륨 확인
$ kubectl exec -it sample-secret-multi-volume -- paste /config/password /config/username
adminpassword admin
# 시크릿 매니페스트 변경
apiVersion: v1
kind: Secret
metadata:
name: sample-db-auth
type: Opaque
data:
username: cm9vdA== # root
password: cm9vdHBhc3N3b3Jk # rootpassword
# 변경된 시크릿 적용
$ kubectl apply -f sample-db-auth.yaml
# 파드에 반영되었는지 확인
$ kubectl exec -it sample-secret-multi-volume -- paste /config/username /config/password
root rootpassword
3. 볼륨 갱신 메커니즘 설명
시크릿을 볼륨으로 파드에 마운트하였을 때는 자동 갱신 되는데, 이는 노드의 kubelet 이 Secret 리소스 수정을 감시하고 있기 때문이다. 감시하는 매커니즘은 아래 세가지 중 하나로 설정할 수 있다.
| 방식 | 설명 |
| watch | 이벤트 기반(실시간 감시) |
| ttl | 캐시 만료 기반(기본값) |
| polling | 주기적 변경여부 조회 |
이는 노드 kubelet 전역설정이며, 즉 해당 노드에서 동작하는 모든 파드에 일괄 적용되는 정책이다. 파드나 네임스페이스 단위에서 조정할 수는 없다.
노드의 /var/lib/kubelet/config.yaml 파일에서 configMapAndSecretChangeDetectionStrategy 항목으로 설정하면 된다.
# watch 방식으로 변경
apiVersion: kubelet.config.k8s.io/v1beta1
...
configMapAndSecretChangeDetectionStrategy: watch
...
# ttl 방식의 캐시 유효시간 30초로 변경
apiVersion: kubelet.config.k8s.io/v1beta1
...
configMapAndSecretChangeDetectionStrategy: ttl
syncFrequency: 30s
...
설정파일 저장 후에는 kubelet 재시작이 필요하다.
4. 일반적으로 사용하는 방법
kubelet 의 ttl 시간을 변경하는 것은 보통 k8s 클러스터 관리자의 권한이다. 따라서 개발자의 경우에는 Secret 변경 후 rollout restart 를 하는 방식으로 운영하는게 일반적이다. 이렇게 적용하면 즉시 반영되며 예측 가능하게 된다.
kubectl apply -f <시크릿매니페스트파일명>
kubectl rollout restart deployment <디플로이먼트명>
'Kubernetes' 카테고리의 다른 글
| [Kubernetes] ConfigMap 사용법 2가지(환경 변수로 설정, 볼륨으로 마운트) (0) | 2026.01.11 |
|---|---|
| [Kubernets] ConfigMap 을 생성하는 3가지 방법 (0) | 2026.01.11 |
| [Kubernets] Secret 사용법 2가지(환경 변수로 설정, 볼륨으로 마운트) (0) | 2026.01.10 |
| [Kubernetes] TLS, Docker 레지스트리, Basic, SSH 시크릿 생성 (0) | 2026.01.10 |
| [Kubernetes] 범용 Secret 을 생성하는 4가지 방법(Opaque) (0) | 2026.01.07 |
