Skip to content

Commit 2a1a448

Browse files
authored
Merge pull request #29600 from bang9211/bang9211/environment-variable-expose-pod-information/v0.2
[ko] Translate tasks/inject-data-application/environment-variable-expose-p…
2 parents 0e5cbec + bc88148 commit 2a1a448

File tree

3 files changed

+240
-0
lines changed

3 files changed

+240
-0
lines changed
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
---
2+
title: 환경 변수로 컨테이너에 파드 정보 노출하기
3+
content_type: task
4+
weight: 30
5+
---
6+
7+
<!-- overview -->
8+
9+
본 페이지는 파드에서 실행 중인 컨테이너에게 파드가 환경 변수를 사용해서 자신의 정보를 노출하는 방법에
10+
대해 설명한다. 환경 변수는 파드 필드와 컨테이너 필드를 노출할 수 있다.
11+
12+
13+
14+
15+
## {{% heading "prerequisites" %}}
16+
17+
18+
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
19+
20+
21+
22+
23+
<!-- steps -->
24+
25+
## 다운워드(Downward) API
26+
27+
파드 및 컨테이너 필드를 실행 중인 컨테이너에 노출하는 두 가지 방법이 있다.
28+
29+
* 환경 변수
30+
* [볼륨 파일](/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/#the-downward-api)
31+
32+
파드 및 컨테이너 필드를 노출하는 이 두 가지 방법을 *다운워드 API*라고 한다.
33+
34+
35+
## 파드 필드를 환경 변수의 값으로 사용하자
36+
37+
이 연습에서는 하나의 컨테이너를 가진 파드를 생성한다. 다음은 파드에 대한 구성 파일이다.
38+
39+
{{< codenew file="pods/inject/dapi-envars-pod.yaml" >}}
40+
41+
구성 파일에서 5개의 환경 변수를 확인할 수 있다. `env` 필드는
42+
[EnvVars](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#envvar-v1-core)의 배열이다. 배열의 첫 번째 요소는 `MY_NODE_NAME` 환경 변수가 파드의 `spec.nodeName` 필드에서 값을 가져오도록 지정한다. 마찬가지로 다른 환경 변수도 파드 필드에서 이름을 가져온다.
43+
44+
{{< note >}}
45+
이 예제의 필드는 파드에 있는 컨테이너의 필드가 아니라 파드 필드이다.
46+
{{< /note >}}
47+
48+
파드를 생성한다.
49+
50+
```shell
51+
kubectl apply -f https://k8s.io/examples/pods/inject/dapi-envars-pod.yaml
52+
```
53+
54+
파드의 컨테이너가 실행중인지 확인한다.
55+
56+
```shell
57+
kubectl get pods
58+
```
59+
60+
컨테이너의 로그를 본다.
61+
62+
```shell
63+
kubectl logs dapi-envars-fieldref
64+
```
65+
66+
출력은 선택된 환경 변수의 값을 보여준다.
67+
68+
```
69+
minikube
70+
dapi-envars-fieldref
71+
default
72+
172.17.0.4
73+
default
74+
```
75+
76+
이러한 값이 로그에 출력된 이유를 보려면 구성 파일의 `command``args` 필드를 확인하자.
77+
컨테이너가 시작되면 5개의 환경 변수 값을 stdout에 쓰며 10초마다 이를 반복한다.
78+
79+
다음으로 파드에서 실행 중인 컨테이너의 셸을 가져오자.
80+
81+
```shell
82+
kubectl exec -it dapi-envars-fieldref -- sh
83+
```
84+
85+
셸에서 환경 변수를 보자.
86+
87+
```shell
88+
/# printenv
89+
```
90+
91+
출력은 특정 환경 변수에 파드 필드 값이 할당되었음을 보여준다.
92+
93+
```
94+
MY_POD_SERVICE_ACCOUNT=default
95+
...
96+
MY_POD_NAMESPACE=default
97+
MY_POD_IP=172.17.0.4
98+
...
99+
MY_NODE_NAME=minikube
100+
...
101+
MY_POD_NAME=dapi-envars-fieldref
102+
```
103+
104+
## 컨테이너 필드를 환경 변수의 값으로 사용하기
105+
106+
이전 연습에서는 파드 필드를 환경 변수의 값으로 사용했다. 이 다음 연습에서는 컨테이너 필드를
107+
환경 변수의 값으로 사용한다. 다음은 하나의 컨테이너가 있는 파드의 구성 파일이다.
108+
109+
{{< codenew file="pods/inject/dapi-envars-container.yaml" >}}
110+
111+
구성 파일에서 4개의 환경 변수를 확인할 수 있다. `env` 필드는
112+
[EnvVars](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#envvar-v1-core)의 배열이다. 배열의 첫 번째 요소는 `MY_CPU_REQUEST` 환경 변수가 `test-container`라는 컨테이너의
113+
`requests.cpu` 필드에서 값을 가져오도록 지정한다. 마찬가지로 다른 환경 변수도 컨테이너 필드에서
114+
값을 가져온다.
115+
116+
파드를 생성한다.
117+
118+
```shell
119+
kubectl apply -f https://k8s.io/examples/pods/inject/dapi-envars-container.yaml
120+
```
121+
122+
파드의 컨테이너가 실행중인지 확인한다.
123+
124+
```shell
125+
kubectl get pods
126+
```
127+
128+
컨테이너의 로그를 본다.
129+
130+
```shell
131+
kubectl logs dapi-envars-resourcefieldref
132+
```
133+
134+
출력은 선택된 환경 변수의 값을 보여준다.
135+
136+
```
137+
1
138+
1
139+
33554432
140+
67108864
141+
```
142+
143+
144+
145+
## {{% heading "whatsnext" %}}
146+
147+
148+
* [컨테이너를 위한 환경 변수 정의하기](/docs/tasks/inject-data-application/define-environment-variable-container/)
149+
* [PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core)
150+
* [컨테이너](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core)
151+
* [EnvVar](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#envvar-v1-core)
152+
* [EnvVarSource](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#envvarsource-v1-core)
153+
* [ObjectFieldSelector](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#objectfieldselector-v1-core)
154+
* [ResourceFieldSelector](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#resourcefieldselector-v1-core)
155+
156+
157+
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: dapi-envars-resourcefieldref
5+
spec:
6+
containers:
7+
- name: test-container
8+
image: k8s.gcr.io/busybox:1.24
9+
command: [ "sh", "-c"]
10+
args:
11+
- while true; do
12+
echo -en '\n';
13+
printenv MY_CPU_REQUEST MY_CPU_LIMIT;
14+
printenv MY_MEM_REQUEST MY_MEM_LIMIT;
15+
sleep 10;
16+
done;
17+
resources:
18+
requests:
19+
memory: "32Mi"
20+
cpu: "125m"
21+
limits:
22+
memory: "64Mi"
23+
cpu: "250m"
24+
env:
25+
- name: MY_CPU_REQUEST
26+
valueFrom:
27+
resourceFieldRef:
28+
containerName: test-container
29+
resource: requests.cpu
30+
- name: MY_CPU_LIMIT
31+
valueFrom:
32+
resourceFieldRef:
33+
containerName: test-container
34+
resource: limits.cpu
35+
- name: MY_MEM_REQUEST
36+
valueFrom:
37+
resourceFieldRef:
38+
containerName: test-container
39+
resource: requests.memory
40+
- name: MY_MEM_LIMIT
41+
valueFrom:
42+
resourceFieldRef:
43+
containerName: test-container
44+
resource: limits.memory
45+
restartPolicy: Never
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: dapi-envars-fieldref
5+
spec:
6+
containers:
7+
- name: test-container
8+
image: k8s.gcr.io/busybox
9+
command: [ "sh", "-c"]
10+
args:
11+
- while true; do
12+
echo -en '\n';
13+
printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE;
14+
printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT;
15+
sleep 10;
16+
done;
17+
env:
18+
- name: MY_NODE_NAME
19+
valueFrom:
20+
fieldRef:
21+
fieldPath: spec.nodeName
22+
- name: MY_POD_NAME
23+
valueFrom:
24+
fieldRef:
25+
fieldPath: metadata.name
26+
- name: MY_POD_NAMESPACE
27+
valueFrom:
28+
fieldRef:
29+
fieldPath: metadata.namespace
30+
- name: MY_POD_IP
31+
valueFrom:
32+
fieldRef:
33+
fieldPath: status.podIP
34+
- name: MY_POD_SERVICE_ACCOUNT
35+
valueFrom:
36+
fieldRef:
37+
fieldPath: spec.serviceAccountName
38+
restartPolicy: Never

0 commit comments

Comments
 (0)