Kubernetes에서 ConfigMap을 사용할 때 발생하는 무작위 Pod 재시작을 어떻게 방지할 수 있나요?

저는 Kubernetes 환경에서 여러 마이크로서비스를 운영 중입니다. 각 서비스는 ConfigMap을 참조하고 있으며, ConfigMap에는 JSON 형식의 환경 설정이 들어 있습니다. 문제는, ConfigMap을 업데이트할 때 Pod가 무작위로 재시작되거나, 심지어 아무 변경도 하지 않았는데도 Pod가 다시 시작되는 경우가 있습니다.

예시는 다음과 같습니다:

yaml

Copy

volumes:
  - name: config
    configMap:
      name: my-config

volumeMounts:
  - name: config
    mountPath: /etc/config
    readOnly: true

이렇게 마운트된 ConfigMap이 바뀌지 않았는데도, 특정 시점에 Pod가 다시 시작되는 것을 자주 목격합니다. 로그에는 특별한 에러도 없습니다.

혹시 ConfigMap이 mount 방식으로 되어 있을 때, kubelet이나 controller manager가 내부적으로 강제 롤링을 유도하는 경우가 있나요? 또는 이를 방지하기 위해서는 어떤 설정을 추가해야 하나요?

ConfigMap을 마운트할 때 발생하는 무작위 Pod 재시작 문제는 다음 두 가지 원인이 있을 수 있습니다:

  1. ConfigMap 업데이트 시 자동 롤링 없음
    Kubernetes는 기본적으로 ConfigMap을 업데이트해도 기존 Pod를 재시작하지 않습니다. 하지만 몇몇 컨테이너 런타임(특히 older containerd 버전)은 파일시스템 변경에 민감하여 mount된 파일을 변경하면 Pod를 재시작할 수 있습니다.
  2. subPath 사용 문제
    ConfigMap 항목을 subPath로 mount하면, Kubernetes는 symlink를 만들고 이를 새로 쓰는 방식으로 동작하는데, 이 경우 symlink 변경이 컨테이너에 의해 감지되어 Pod가 다시 시작될 수 있습니다.