💡 컨테이너(정확히는 쿠버네티스) 환경에서 deployment/pod 구성 파일에 “env” 혹은 “envFrom” 필드를 이용해 설정된 환경 변수들은 컨테이너 이미지 안에서 명시된 모든 환경 변수들을 오버라이딩한다.
컨테이너 전환 프로젝트 진행 중 APM 설정값이 잘못 돼있어 Deployment 값을 수정해서 잘 동작함을 확인했었다.
※ 참고: 디플로이먼트 YAML 파일에서 환경변수를 수정할 경우 Pod가 자동으로 롤링 업데이트되며, 변경한 환경변수는 롤링 업데이트가 완료된 후 반영된다.
디플로이먼트를 수정할 때에는 아래 예시와 같이 디플로이먼트 하위의 컨테이너 템플릿 (spec.template.spec.env)에 정의해주면 된다.
아래 예시에서 “환경변수 예시”와 “환경변수 값”이라고 기재한 부분이 환경변수를 설정하는 부분이다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
env:
- name: "환경변수 예시"
value: "환경변수 값"
ports:
- containerPort: 80
헌데, 팀원 중 한 분이 이전 전환 시스템에서는 Deployment 뿐만 아니라 컨테이너 서버 이미지 안에 들어가는 jennifer.conf라는 APM 설정 파일을 Deployment의 설정값과 맞춰주었다고 했는데, 실제 설정값을 확인해보니 jennifer.conf의 내용과는 상관없이 APM에 데이터가 잘 수집되고 있던 것.
알고 보니 위와 같은 의문은 쿠버네티스의 공식 문서를 확인하고 해결되었다.
포스팅 서두에도 인용해두었지만, 디플로이먼트/파드에서 “env” 혹은 “envForm”라는 항목의 환경함수를 환경 변수들은 컨테이너 이미지 안에서 명시된 모든 환경 변수들을 오버 라이딩한다. 즉, 컨테이너 내부(jennifer.conf)에서 동작하는 파일 Deployment YAML에 의해 덮어씌워져 jennifer.conf를 수정하지 않았음에도 불구하고 APM이 정상 작동하게 된 것이다.