이 페이지에서는 쿠버네티스 파드에 있는 컨테이너의 환경 변수를 정의하는 방법을 설명한다.
쿠버네티스 클러스터가 필요하고, kubectl 커맨드-라인 툴이 클러스터와 통신할 수 있도록 설정되어 있어야 한다. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 적어도 2개 포함된 클러스터에서 실행하는 것을 추천한다. 만약, 아직 클러스터를 가지고 있지 않다면, minikube를 사용해서 생성하거나 다음 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있다.
파드를 생성할 때, 파드 안에서 동작하는 컨테이너의 환경 변수를
설정할 수 있다. 환경 변수를 설정하려면 구성 파일에 env나 envFrom 필드를
포함해야 한다.
env와 envFrom 필드는 서로 다른 영향을 미친다.
envenvFromenvFrom을 사용할 때, 참조된 컨피그맵이나 시크릿의 모든 키-값 쌍이
컨테이너의 환경 변수로 설정된다.
또한 공통 접두사 문자열을 지정할 수 있다.이 페이지에서는 env를 사용하는 방법을 설명한다.
이 실습에서는 한 개의 컨테이너를 실행하는 파드를 생성한다. 파드의 구성
파일은 DEMO_GREETING이라는 이름과 "Hello from the environment"라는
값을 가지는 환경 변수를 정의한다. 다음은 파드의 구성
매니페스트이다.
apiVersion: v1
kind: Pod
metadata:
name: envar-demo
labels:
purpose: demonstrate-envars
spec:
containers:
- name: envar-demo-container
image: gcr.io/google-samples/node-hello:1.0
env:
- name: DEMO_GREETING
value: "Hello from the environment"
- name: DEMO_FAREWELL
value: "Such a sweet sorrow"
해당 매니페스트를 기반으로 파드를 생성한다.
kubectl apply -f https://k8s.io/examples/pods/inject/envars.yaml
실행 중인 파드의 목록을 조회한다.
kubectl get pods -l purpose=demonstrate-envars
출력은 다음과 유사하다.
NAME READY STATUS RESTARTS AGE
envar-demo 1/1 Running 0 9s
파드의 컨테이너 환경 변수를 조회한다.
kubectl exec envar-demo -- printenv
출력은 다음과 유사하다.
NODE_VERSION=4.4.2
EXAMPLE_SERVICE_PORT_8080_TCP_ADDR=10.3.245.237
HOSTNAME=envar-demo
...
DEMO_GREETING=Hello from the environment
DEMO_FAREWELL=Such a sweet sorrow
env나 envFrom 필드를 사용해 설정된 환경 변수는
컨테이너 이미지에 지정된 환경 변수를 오버라이드한다.파드의 구성에서 .spec.containers[*].env[*] 아래에 정의한 환경 변수는
구성의 다른 곳, 예를 들면
파드의 컨테이너에 설정하는 커맨드와 인자에서 사용할 수 있다.
아래의 구성 예시에서 GREETING, HONORIFIC, 그리고
NAME 환경 변수는 각각 Warm greetings to, The Most Honorable,
그리고 Kubernetes로 설정되어 있다. 환경 변수
MESSAGE는 이 모든 환경 변수를 합치고 이를
env-print-demo 컨테이너에 전달되는 CLI 인자로 사용한다.
환경 변수명은 '='를 제외한 출력 가능한 ASCII 문자로 구성할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: print-greeting
spec:
containers:
- name: env-print-demo
image: bash
env:
- name: GREETING
value: "Warm greetings to"
- name: HONORIFIC
value: "The Most Honorable"
- name: NAME
value: "Kubernetes"
- name: MESSAGE
value: "$(GREETING) $(HONORIFIC) $(NAME)"
command: ["echo"]
args: ["$(MESSAGE)"]
생성 시, echo Warm greetings to The Most Honorable Kubernetes 명령이 컨테이너에서 실행된다.