2021. 5. 8. 20:10ใ๐ฏ OpenSource/K8S
|
7.1 ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ค์
์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ๊ฐ๋ค์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋ ์ ์๋ค.
- ๋ช ๋ น์ค ์ธ์๋ก ์ค์ ๊ฐ ์ง์
- ์ค์ ๊ฐ์ ํ์ผ์ ์ ์ฅํ์ฌ ์ ์ฉ
- ๋จ์ ) ํด๋น ์ค์ ํ์ผ์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ์์ ํฌํจํ๊ฑฐ๋, ํ์ผ์ด ํฌํจ๋ ๋ณผ๋ฅจ์ mountํ์ฌ ์ฌ์ฉํด์ผ ํด์ ๊น๋ค๋กญ๋ค.
- ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉ (ex. MYSQL_ROOT_PASSWORD)
- Configmap ์ด๋ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค๋ฅผ ์๋ฏธํ๋ค.
์ปจํผ๊ทธ๋งต์ ์ฌ์ฉํด ๋ค์ ๋ฐฉ๋ฒ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ ์ ์๋ค.
- ์ปจํ ์ด๋์ ๋ช ๋ น์ค ์ธ์ ์ ๋ฌ
- ๊ฐ ์ปจํ ์ด๋๋ฅผ ์ํ ์ฌ์ฉ์ ์ ์ ํ๊ฒฝ๋ณ์ ์ง์
- ํน์ํ ์ ํ์ ๋ณผ๋ฅจ์ ํตํด ์ค์ ํ์ผ์ ์ปจํ ์ด๋์ ๋ง์ดํธ
์ด๋ฌํ ํ๊ฒฝ๋ณ์ ์ค์์ ๋ณด์์ ๋ฏผ๊ฐํ ๋ด์ฉ์ Secret์ด๋ผ๋ ์ค๋ธ์ ํธ๋ฅผ ์ด์ฉํ์ฌ ์ ๋ฌํ๊ฒ ๋๋ค.
7.2 ์ปจํ ์ด๋์ ๋ช ๋ น์ค ์ธ์ ์ ๋ฌ
7.2.1 ๋์ปค์์ ๋ช ๋ น์ด์ ์ธ์ ์ ์
์ปจํ ์ด๋์์ ์คํํ๋ ์ ์ฒด ๋ช ๋ น์ ๋ช ๋ น์ด/์ธ์ ์ด๋ ๊ฒ ๋ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- ENTRYPOINT : ์ปจํ ์ด๋๊ฐ ์์๋ ๋ ํธ์ถ๋ ๋ช ๋ น์ด ์ ์
- CMD : ENTRYPOINT ์ ์ ๋ฌ๋๋ ์ธ์ ์ ์
์์ ๋ ๋ช ๋ น์ด ํ์ ์ ์ฟ ๋ฒ๋คํฐ์ค์์ ๋ค์๊ณผ ๊ฐ์ด ์ฐ์ธ๋ค.
์ค๋ช | ๋์ปค | ์ฟ ๋ฒ๋คํฐ์ค |
์ปจํ ์ด๋ ๋ด๋ถ์์ ์คํ๋๋ ์คํ ํ์ผ | ENTRYPOINT | command |
์คํํ์ผ์ ์ ๋ฌ๋๋ ์ธ์ | CMD | args |
7.2.2 Pod์์ ๋ช ๋ น๊ณผ ์ธ์ ์ฌ์ ์
์ปจํ ์ด๋๋ฅผ ์ ์ํ ๋, command์ args ๋ชจ๋ ์ ์ํ ์ ์๋ค.
์์ฑ ํ์๋ args์ value ๊ฐ์ ์ฃผ๋ก ์ฌ์ ์ํ๋ค.
์ด๋ command์ args ํ๋๋ pod ์์ฑ ํ์ ์ ๋ฐ์ดํธ ํ ์ ์๋ค.
spec:
containers:
- commnad: ["/bin/command"]
args: ["arg1", "arg2", "arg3"]
args value๋ฅผ ์ง์ ํ์ฌ ์คํฌ๋ฆฝํธ์ ์ธ์๊ฐ์ ์ ๋ฌํ ์ ์๋ค.
apiVersion: v1
kind: Pod
metadata:
name: fortune5s
spec:
containers:
- image: luksa/fortune:args
args: ["5"]
name: html-generator
...
์์ yaml ํ์ผ์์ args๋ก 5๋ฅผ fortuneloop.sh ์คํฌ๋ฆฝํธ๋ก ๋๊ฒผ๋ค. ๋ฐ๋ผ์ ํด๋น pod๋ 5์ด๋ง๋ค ์๋ก์ด ์ด์ธ ๋ฉ์์ง๋ฅผ ๋ฐํํ๊ฒ ๋๋ค.
root@master001:~/Chapter07# curl http://172.30.65.180
The first thing we do, lets kill all the lawyers.
-- Wm. Shakespeare, "Henry VI", Part IV
root@master001:~/Chapter07# curl http://172.30.65.180
The first thing we do, lets kill all the lawyers.
-- Wm. Shakespeare, "Henry VI", Part IV
root@master001:~/Chapter07# curl http://172.30.65.180
FORTUNE PROVIDES QUESTIONS FOR THE GREAT ANSWERS: #19
A: To be or not to be.
Q: What is the square root of 4b^2?
7.3 ์ปจํ ์ด๋์ ํ๊ฒฝ๋ณ์ ์ค์
์ฟ ๋ฒ๋คํฐ์ค๋ pod์ ๊ฐ ์ปจํ ์ด๋๋ง๋ค ๊ฐ๋ณ์ ์ผ๋ก ํ๊ฒฝ ๋ณ์๋ฅผ ์ง์ ํ ์ ์๋ค.
ํ๊ฒฝ ๋ณ์ ๋ฆฌ์คํธ(ํ์ผ)๋ก ๊ฐ ์ปจํ ์ด๋์ ์ ์ฉ์ํค๊ฒ ๋๋ค.
์ด๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ด๋ฒ์๋ ํ๊ฒฝ ๋ณ์๋ก interval์ ์ค์ ํด ๋ณธ๋ค.
ํ๊ฒฝ๋ณ์๋ก ๊ฐ์ ๊ฐ์ ธ์ฌ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ fortuneloop.sh ํ์ผ์์ ๊ธฐ์กด์๋ ์ธ์๊ฐ์ผ๋ก interval์ ์ด๊ธฐํํ๋ ๋ถ๋ถ์ ์ฃผ์์ฒ๋ฆฌํ๋ค.
#!/bin/bash
trap "exit" SIGINT
# INTERVAL=$1 : INTERVAL๋ฅผ ์ธ์๊ฐ์ผ๋ก ๊ฐ์ ธ์ค๋๋ก ์ค์
echo Configured to generate new fortune every $INTERVAL seconds
mkdir -p /var/htdocs
while :
do
echo $(date) Writing fortune to /var/htdocs/index.html
/usr/games/fortune > /var/htdocs/index.html
sleep $INTERVAL
done
7.3.1 ์ปจํ ์ด๋ ์ ์์ ํ๊ฒฝ๋ณ์ ์ง์
์๋ก์ด fortuneloop.sh ํ์ผ์ ํฌํจํ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ์ฌ docker ํ๋ธ๋ก ํธ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ pod ์์ฑํ๋ yaml ํ์ผ์ ํ๊ฒฝ๋ณ์ ๋ชฉ๋ก์ ๋จ์ผ ๋ณ์๋ฅผ ์ถ๊ฐํ์ฌ ์์ฑํ๋ค.
์ด์ธ๊ฐ 1์ด์ ํ๋ฒ์ฉ ๋ฐ๋๋๋ก INTERVAL ํ๊ฒฝ๋ณ์๋ฅผ ์ค์ ํ๋ค.
metadata:
name: fortune-env
spec:
containers:
- image: luksa/fortune:env
env:
- name: INTERVAL
value: "1"
1์ด๋ง๋ค ์ด์ธ ๋ฉ์์ง๊ฐ ๋ฐ๋์ด์ ์ถ๋ ฅ๋๋ค.
root@master001:~/Chapter07# curl http://172.30.254.30
Bridge ahead. Pay troll.
root@master001:~/Chapter07# curl http://172.30.254.30
Q: What is the sound of one cat napping?
A: Mu.
root@master001:~/Chapter07# curl http://172.30.254.30
You own a dog, but you can only feed a cat.
root@master001:~/Chapter07# curl http://172.30.254.30
You tread upon my patience.
-- William Shakespeare, "Henry IV"
7.3.2 ๋ณ์์์ ๋ค๋ฅธ ํ๊ฒฝ ๋ณ์ ์ฐธ์กฐ
yaml ํ์ผ ์์ $(VAR)์ ์ฌ์ฉํด ์ด๋ฏธ ์ ์๋ ํ๊ฒฝ๋ณ์๋ ๊ธฐํ ๊ธฐ์กด ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
env:
- name: FIRST_VAR
value: "Wongyeong"
- name: SECOND_VAR
value: "$(FIRST_VAR)LEE"
7.3.3 ํ๋์ฝ๋ฉ๋ ํ๊ฒฝ๋ณ์์ ๋จ์
pod์ yaml ํ์ผ์ ํ๊ฒฝ๋ณ์๋ฅผ ํ๋์ฝ๋ฉํ๋ ๊ฒ์ ๋์ผํ pod์๋ ๊ฐ์ ์ค์ ์ ์ผ์ผํ ํด์ผํจ์ ์๋ฏธํ๋ค.
๋ฐ๋ผ์ ์ฌ๋ฌ ํ๊ฒฝ์์ ๋์ผํ ์ ์๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด ์ปจํผ๊ทธ๋งต ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํด ํ๊ฒฝ๋ณ์ ๋ด์ฉ์ pod ์ ์์์ ๋ถ๋ฆฌํ๋ค.
7.4 ConfigMap์ผ๋ก ์ค์ ๋ถ๋ฆฌ
ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฑฐ๋ ์์ฃผ ๋ณ๊ฒฝ๋๋ ์ต์ ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ์์ค์ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ๋ค.
ConfigMap์ผ๋ก ์ด๋ฌํ ์ค์ ๊ฐ์ ๊ด๋ฆฌํ ์ ์๋ค.
7.4.1 ConfigMap?
- ConfigMap์ ์ค์ ๊ฐ์ ๋ด์ฉ์ key-value ์์ผ๋ก ๊ตฌ์ฑํ ๋งต์ด๋ค.
- ConfigMap์ ๋ด์ฉ์ ์ปจํ ์ด๋์ ํ๊ฒฝ๋ณ์ ๋๋ ๋ณผ๋ฅจ ํ์ผ๋ก ์ ๋ฌ๋๋ค.
- Pod๋ ConfigMap์ ์ด๋ฆ์ผ๋ก ์ฐธ์กฐํ๋ค.
- ์๋ก ๋ค๋ฅธ ๋ค์์คํ์ด์ค์ ๋์ผํ ์ด๋ฆ์ ConfigMap์ ์์ฑํด๋ ๊ฐ ์ปจํผ๊ทธ๋งต์ ๊ฐ๋ณ์ ์ผ๋ก ๊ด๋ฆฌ๋๋ค.
7.4.2 ConfigMap ์์ฑ
kubectl create configmap
root@master001:~/Chapter07# kubectl create configmap fortune-config --from-literal=sleep-interval=10
configmap/fortune-config created
- from-literal : ๋ฌธ์์ด ํญ๋ชฉ์ ์ถ๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ํด๋น ์ต์ ์ ์ฌ๋ฌ๋ฒ ์ ๋ฌํ์ฌ ์ฌ๋ฌ ๋ฌธ์์ด ํญ๋ชฉ ์ถ๊ฐ ๊ฐ๋ฅ
์ ๋ช ๋ น์ด๋ก sleep-interval=20์ด๋ผ๋ ๋จ์ผ ํญ๋ชฉ์ ๊ฐ์ง configmap์ด ์์ฑ๋๋ค.
ํด๋น configmap์ ์ค์ ๋ ํญ๋ชฉ๊ณผ map์ ์ด๋ฆ์ ํ์ธ ๊ฐ๋ฅํ๋ค.
root@master001:~/Chapter07# kubectl get configmap fortune-config -o yaml
apiVersion: v1
data:
sleep-interval: "10"
kind: ConfigMap
metadata:
creationTimestamp: "2021-05-08T10:48:10Z"
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {}
f:sleep-interval: {}
manager: kubectl-create
operation: Update
time: "2021-05-08T10:48:10Z"
name: fortune-config
namespace: default
resourceVersion: "15407755"
uid: e19889c4-83bc-49ac-a01c-7b013074bec0
ํ์ผ ๋ด์ฉ์ผ๋ก ConfigMap ์์ฑ
์ปจํผ๊ทธ๋งต์ ์ ์ฒด ์ค์ ํ์ผ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํต์ผ๋ก ์ ์ฅํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
$ kubectl create configmap my-config --from-file=config-file.conf
# ์๋์ผ๋ก key ์ง์ ๊ฐ๋ฅ: customkey๋ก ์ง์ ํ๋ ์
$ kubectl create configmap my-config --from-file=customkey=config-file.conf
๋๋ ํฐ๋ฆฌ์ ์๋ ํ์ผ๋ก ์์ฑ
๋๋ ํฐ๋ฆฌ ์์ ๋ชจ๋ ํ์ผ์ ๊ฐ์ ธ์์ ์์ฑํ๋ค.
๊ฐ ํ์ผ์ ๊ฐ๋ณ ํญ๋ชฉ์ผ๋ก ์ ์ฅํ๋ฉฐ, ์ด๋ ํ์ผ์ด๋ฆ์ด key๋ก ์ฌ์ฉํ๊ธฐ์ ์ ํจํ ํ์ผ๋ง ์ถ๊ฐํ๋ค.
$ kubectl create configmap my-config --from-file=/path/to/dir
๋ค์ํ ์ต์ ๊ฒฐํฉ
์์ ๋ฐฉ๋ฒ๋ค์ ์กฐํฉํด์ ์ฌ์ฉํ ์ ์๋ค.
$ kubectl create configmap my-config \
--from-file=foo.json \ # ๋จ์ผ ํ์ผ
--from-file=bar=foobar.conf \ # ์ฌ์ฉ์ ์ ์ key ๋ฐ์ ์ ์ฅ๋ ํ์ผ
--from-file=config-opts/ \ # ๋๋ ํฐ๋ฆฌ
--from-literal=some=thing # ๋ฌธ์์ด ๊ฐ
7.4.3 ConfigMap ํญ๋ชฉ์ ํ๊ฒฝ๋ณ์๋ก ์ปจํ ์ด๋์ ์ ๋ฌ
์ด์ ConfigMap์ Pod์์ ์ปจํ ์ด๋์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณธ๋ค.
์ด์๋ ์ฌ๋ฌ ์ต์ ์ด ์๋ค.
- env.valueFrom
- envFrom
valueFrom ์ ์ฌ์ฉํ์ฌ ํ๊ฒฝ๋ณ์๋ฅผ ConfigMap์์ ๊ฐ์ ธ์ค๋๋ก ์ ์ธํ ์ ์๋ค.
apiVersion: v1
kind: Pod
metadata:
name: fortune-env-from-configmap
labels:
app: kubia
spec:
containers:
- image: luksa/fortune:env
name: html-generator
env:
- name: INTERVAL
valueFrom:
configMapKeyRef:
name: fortune-config # ์ด๋ฆ์ ํตํ ConfigMap ์ฐธ์กฐ
key: sleep-interval # fortune-config ์ sleep-interval ํค์ ์ ์ฅ๋ ๊ฐ์ผ๋ก ํ๊ฒฝ๋ณ์ ์ค์
...
์ด ์ํฉ์์ ๋ง์ฝ ์กด์ฌํ์ง ์๋ ConfigMap์ ์ฐธ์กฐํ ๊ฒฝ์ฐ ํด๋น ์ปจํ ์ด๋๋ ์์๋์ง ์๋๋ค.
๊ทธ ํ์ ํด๋น ConfigMap์ด ์์ฑ๋๋ฉด ์คํจ๋ ์ปจํ ์ด๋๋ ์๋์ผ๋ก ์ฌ๋ผ์ค๊ฒ ๋๋ค.
( optional: true ๋ฅผ ์ค์ ํ๋ฉด ์ปจํผ๊ทธ๋งต์ ๋ชป์ฐพ์๋ ์ปจํ ์ด๋๋ฅผ ์์์ํจ๋ค)
7.4.4 ConfigMap์ ๋ชจ๋ ํญ๋ชฉ์ ํ ๋ฒ์ ํ๊ฒฝ ๋ณ์๋ก ์ ๋ฌ
envFrom ์์ฑ์ ์ฌ์ฉํด ConfigMap์ ๋ชจ๋ ํญ๋ชฉ์ ํ๊ฒฝ๋ณ์๋ก ๋ ธ์ถํ ์ ์๋ค.
spec:
containers:
- image: some-image
envFrom: # env๋์ envFrom
- prefix: CONFIG_ # ๋ชจ๋ ํ๊ฒฝ๋ณ์๋ CONFIG_ ์ ๋์ฌ๋ฅผ ๊ฐ์ง
configMapKeyRef: # my-config-map์ด๋ ์ด๋ฆ์ ์ปจํผ๊ทธ๋งต ์ฐธ์กฐ
name: my-config-map
ConfigMap์ FOO, BAR ๋ผ๋ ํค๊ฐ ์๋ค๋ฉด, ์ปจํ ์ด๋์๋ CONFIG_FOO, CONFIG_BAR ๋ผ๋ ํ๊ฒฝ ๋ณ์๊ฐ ์ ์ฉ๋๋ค.
FOO-BAR ๊ฐ์ ๊ฒฝ์ฐ๋ ๋์(-)๋ฅผ ํฌํจํ์ฌ ์ฌ๋ฐ๋ฅธ ํ๊ฒฝ๋ณ์ ์ด๋ฆ์ด ๋ ์ ์๋ค.
7.4.5 ConfigMap ํญ๋ชฉ์ ๋ช ๋ น์ค ์ธ์๋ก ์ ๋ฌ
์ปจํผ๊ทธ๋งต ํญ๋ชฉ์ ์ปจํ ์ด๋์ ํ๊ฒฝ ๋ณ์๋ก ์ด๊ธฐํํ์ฌ ์ฌ์ฉ
apiVersion: v1
kind: Pod
metadata:
name: fortune2s-args-configmap
labels:
app: kubia
spec:
containers:
- image: luksa/fortune:args # ํ๊ฒฝ๋ณ์๊ฐ ์๋ args ๋ก ๋ถํฐ INTERVAL ๋ฅผ ๊ฐ์ ธ์ค๋ ์ด๋ฏธ์ง ์ฌ์ฉ
name: html-generator
env:
- name: INTERVAL # ConfigMap ์ฌ์ฉํ์ฌ ํ๊ฒฝ๋ณ์ INTERVAL ์ ์
valueFrom:
configMapKeyRef:
name: fortune-config
key: sleep-interval
args: ["$(INTERVAL)"] # ํ๊ฒฝ๋ณ์ INTERVAL ๋ก ์ง์ ํ ๊ฐ์ argument ๋ก ์ฌ์ฉ
7.4.6 ConfigMap ๋ณผ๋ฅจ์ ์ฌ์ฉํ ์ ๋ฌ
ConfigMap ๋ณผ๋ฅจ์ ์ฌ์ฉํด ํ์ผ๋ก ์ปจํผ๊ทธ๋ฉ์ ๊ฐ ํญ๋ชฉ์ ๋ ธ์ถ์ํฌ ์ ์๋ค.
์ด๋ ๋๋ถ๋ถ ๋ํ ์ค์ ํ์ผ์ ์ปจํ ์ด๋์ ์ ๋ฌํ๋ ์ฉ๋๋ก ์ฐ์ธ๋ค.
ConfigMap ์์ฑ
Nginx ์ปจํ ์ด๋์ ํ๊ฒฝ๋ณ์๋ฅผ ์ค์ ํ์ผ๋ก ์ธํ .
Nginx ์ปจํ ์ด๋๋ ํด๋ผ์ด์ธํธ๋ก ์๋ต์ ์์ถํด์ ๋ณด๋ด๋ ์ญํ ์ ํ๋ค.
$ vi configmap-files/my-nginx-config.conf
server {
listen 80;
server_name www.kubia-example.com;
# ํ๋ฌธ ๋ฐ xml ํ์ผ์ ๋ํด gzip ์์ถ ํ์ฑํ
gzip on;
gzip_types text/plain application/xml;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
configmap-files ๋๋ ํฐ๋ฆฌ ํ์์ ์๋ ๋ชจ๋ ํ์ผ์ ์ฌ์ฉํ ์ปจํผ๊ทธ๋งต์ ์์ฑํ๋ค.
root@master001:~/Chapter07# kubectl create configmap fortune-config --from-file=configmap-files
configmap/fortune-config created
ํด๋น ConfigMap์ yaml ํ์ผ์ ๋ค์๊ณผ ๊ฐ๋ค.
root@master001:~/Chapter07# kubectl get configmap fortune-config -o yaml
apiVersion: v1
data:
my-nginx-config.conf: |
server {
listen 80;
server_name www.kubia-example.com;
gzip on;
gzip_types text/plain application/xml;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
sleep-interval: |
25
kind: ConfigMap
metadata:
creationTimestamp: "2021-05-08T15:24:57Z"
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {}
f:my-nginx-config.conf: {}
f:sleep-interval: {}
manager: kubectl-create
operation: Update
time: "2021-05-08T15:24:57Z"
name: fortune-config
namespace: default
resourceVersion: "15449748"
uid: bd477478-5516-4758-b54f-72f9e3d0699c
data ํ์๋ก my-nginx-config.conf์ sleep-interval ์ค์ ๊ฐ์ ํ์ธํ ์ ์๋ค.
์ด์ ์ด ์ปจํผ๊ทธ๋งต์ ๋ ์ปจํ ์ด๋์์ ๋์์ ์ฌ์ฉํ๋๋ก ํ๋ค.
๋ณผ๋ฅจ ์์ ์๋ ConfigMap ํญ๋ชฉ ์ฌ์ฉ
ConfigMap์ ๋ด์ฉ์ ๊ฐ์ง ๋ณผ๋ฅจ์ ์์ฑํ๋ค.
ConfigMap ํญ๋ชฉ์ ํ์ผ๋ก ๋ง์ดํธํ pod๋ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ๋ค.
apiVersion: v1
kind: Pod
metadata:
name: fortune-configmap-volume
spec:
containers:
- image: luksa/fortune:env
env:
- name: INTERVAL
valueFrom:
configMapKeyRef:
name: fortune-config
key: sleep-interval
name: html-generator
volumeMounts:
- name: html
mountPath: /var/htdocs
- image: nginx:alpine
name: web-server
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
readOnly: true
- name: config
mountPath: /etc/nginx/conf.d # <- ์ปจํผ๊ทธ๋งต ๋ณผ๋ฅจ์ ๋ง์ดํธํ๋ ์์น
readOnly: true
- name: config
mountPath: /tmp/whole-fortune-config-volume
readOnly: true
ports:
- containerPort: 80
name: http
protocol: TCP
volumes:
- name: html
emptyDir: {}
- name: config # <- ํด๋น ๋ณผ๋ฅจ์ fortune-config ์ปจํผ๊ทธ๋งต์ ์ฐธ์กฐ
configMap:
name: fortune-config
nginx๋ /etc/nginx/nginx.conf ํ์ผ์ ์ค์ ๊ฐ์ ์ฝ๋๋ค.
nginx.conf ํ์ผ์ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด /etc/nginx/conf.d/ ๋๋ ํฐ๋ฆฌ ์์ ์๋ ๋ชจ๋ .conf ํ์ผ์ ์ฝ๋๋ก ๋์ด์๋ค.
include /etc/nginx/conf.d/*.conf
๋ฐ๋ผ์ ์์ yamlํ์ผ์์ config ๋ณผ๋ฅจ์ด fortune-config ์ ์ปจํผ๊ทธ๋งต์ ์ฐธ์กฐํจ์ ๋ฐ๋ผ nginx ์ปจํ ์ด๋๋ fortune-config ๋ฅผ ํ๊ฒฝ๋ณ์๋ก ์ ๋ฌ๋ฐ๋๋ค.
์ด๋ ๋ค์๊ณผ ๊ฐ์ด ํ์ธ ๊ฐ๋ฅํ๋ค.
<nginx์ ConfigMap ๋ณผ๋ฅจ๊ณผ ๋ง์ดํธ๋ ๋๋ ํฐ๋ฆฌ ํ์ธ>
root@master001:~/Chapter07# kubectl exec fortune-configmap-volume -c web-server -- ls /etc/nginx/conf.d
my-nginx-config.conf
sleep-interval
๋จ, ์ด๋ sleep-interval์ html-generator ์ปจํ ์ด๋์์ ์ฐ์ด๋ ๊ฒ์ผ๋ก, web-server์๋ ๋ ธ์ถ๋ ํ์๊ฐ ์๋ค.
๋ฐ๋ผ์ ๋ถ๋ฅจ์ ํน์ ConfigMap ํญ๋ชฉ๋ง ๋ ธ์ถํ๋ ๋ฒ์ ์์๋ณธ๋ค.
volumes:
- name: html
emptyDir: {}
- name: config
configMap:
name: fortune-config
items: # <- ๋ณผ๋ฅจ์ ํฌํจํ ํญ๋ชฉ์ ์กฐํํ์ฌ ์ ํ
- key: my-nginx-config.conf # <- ํด๋น value๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ ํ
path: gzip.conf # <- gzip.conf ๋ผ๋ ์ด๋ฆ์ ํ์ผ๋ก /etc/nginx/conf.d์ ์์ฑ
<nginx์ ConfigMap ๋ณผ๋ฅจ๊ณผ ๋ง์ดํธ๋ ๋๋ ํฐ๋ฆฌ ํ์ธ>
root@master001:~/Chapter07# kubectl exec fortune-configmap-volume-with-items -c web-server -- ls /etc/nginx/conf.d
gzip.conf
๐จ (๏ผ°ะ°) mount๋ฅผ ํ๋ฉด ๋ง์ดํธํ ํ์ผ ์์คํ ์ ์๋ ํ์ผ๋ง ํฌํจํ๊ณ , ๊ธฐ์กด์ ๋ก์ปฌ(์ปจํ ์ด๋)์ ํด๋น ๊ฒฝ๋ก์ ์๋ ํ์ผ์ ์ ๊ทผํ ์ ์๋ค. ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด์๋ ๊ฐ๋ณ ConfigMap ํญ๋ชฉ์ ํ์ผ๋ก ๋ง์ดํธ ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. |
๊ฐ๋ณ ConfigMap ํญ๋ชฉ์ file๋ก ๋ง์ดํธํ๊ธฐ
์ ์ฒด ๋ณผ๋ฅจ์ ๋ง์ดํธ ํ๋๋์ volumeMount์ subPath ์์ฑ์ผ๋ก ํ์ผ์ด๋ ๋๋ ํฐ๋ฆฌ ํ๋๋ง์ ๋ณผ๋ฅจ์ ๋ง์ดํธ ํ ์ ์๋ค.
spec:
containers:
- image: some/image
volumeMounts:
- name: myvolume
mountPath: /etc/someconfig.conf # ์ปจํ
์ด๋์ ๋๋ ํฐ๋ฆฌ๊ฐ ์๋ ํ์ผ์ ๋ง์ดํธ
subPath: myconfig.conf # ConfigMap ๋ณผ๋ฅจ์ myconfig.conf ํญ๋ชฉ๋ง ๋ง์ดํธ
ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ํ์ผ ์ ๋ฐ์ดํธ์ ๊ฒฐํจ์ ๊ฐ์ง๊ณ ์๋ค.
ConfigMap ๋ถ๋ฅจ ์์ ์๋ ํ์ผ ๊ถํ ์ค์
๊ธฐ๋ณธ์ ์ผ๋ก ConfigMap ๋ณผ๋ฅจ์ ๋ชจ๋ ํ์ผ ๊ถํ์ 0644๋ก ์ค์ ๋๋ฉฐ, ์ด๋ defaultMode ์์ฑ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
volumes:
- name: html
emptyDir: {}
- name: config
configMap:
name: fortune-config
defaultMode: 0660
ConfigMap์ ๋ณด์์ ์ค์ํ์ง ์์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋๋ฐ ์ฃผ๋ก ์ฌ์ฉํ์ง๋ง,
ํ์์ ๋ฐ๋ผ ํ์ผ์ ๊ถํ์ ์ง์ ํ ์๋ ์๋ค.
7.4.7 ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์์ ์์ด ์ค์ ์ ๋ฐ์ดํธ
ํ๊ฒฝ๋ณ์ ๋๋ ๋ช ๋ น์ค ์ธ์๋ฅผ ์ค์ ์์ค๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋จ์ ์ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ ๋์ ์ ๋ฐ์ดํธ ํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์ด๋ ConfigMap์ ๋ณผ๋ฅจ์ผ๋ก ๋ ธ์ถํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์์ ์์ด ์ ๋ฐ์ดํธ ํ ์ ์๋ค.
ConfigMap์ ์ ๋ฐ์ดํธํ๋ฉด, ์ด๋ฅผ ์ฐธ์กฐํ๋ ๋ชจ๋ ๋ณผ๋ฅจ์ ํ์ผ์ด ์ ๋ฐ์ดํธ๋๋ค.
์ปจํผ๊ทธ๋งต ํธ์ง
ConfigMap ํธ์ง ํ pod ์์์ ์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ConfigMap ๋ณผ๋ฅจ์ ๋ ธ์ถ๋ ํ์ผ์ ๋ค์ ๋ก๋ํ๋๋ก ํ๋ค.
1) ConfigMap ํธ์ง
gzip on -> gzip off๋ก ์์
root@master001:~/Chapter07# vi fortune-pod-configmap-volume-defaultMode.yaml
configmap/fortune-config edited
vi ๋ก ํ์ผ์ ์ ์ฅํ๊ณ ๋์ค๋ ์๊ฐ ConfigMap์ด ์ ๋ฐ์ดํธ ๋๋ฉด์ ๋ณผ๋ฅจ์ ์ค์ ํ์ผ๋ ์ ๋ฐ์ดํธ ๋๋ค.
root@master001:~/Chapter07# kubectl exec fortune-configmap-volume -c web-server cat /etc/nginx/conf.d/my-nginx-config.conf
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
server {
listen 80;
server_name www.kubia-example.com;
gzip off;
gzip_types text/plain application/xml;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
์์ ๊ฐ์ด ํ์ผ์ด ์ ๋ฐ์ดํธ ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ค๋ง nginx๋ ํ์ผ์ ๋ณ๊ฒฝ์ ๊ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ค์ง์ ์ผ๋ก ๋ฐ์๋์ง๋ ์์๋ค.
๋ฐ๋ผ์ Nginx์๊ฒ ์ค์ ํ์ผ์ ๋ค์ ๋ก๋ํ๋๋ก ํ๋ค.
root@master001:~/Chapter07# kubectl exec fortune-configmap-volume -c web-server -- nginx -s reload
2021/05/09 02:27:04 [notice] 34#34: signal process started
์ด๋ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ณธ ํ์ผ์ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค.
root@master001:~/Chapter07# kubectl exec -it fortune-configmap-volume -c web-server -- ls -lA /etc/nginx/conf.d
total 4
drwxr-xr-x 2 root root 4096 May 9 02:23 ..2021_05_09_02_23_08.552611578
lrwxrwxrwx 1 root root 31 May 9 02:23 ..data -> ..2021_05_09_02_23_08.552611578
lrwxrwxrwx 1 root root 27 May 8 15:50 my-nginx-config.conf -> ..data/my-nginx-config.conf
lrwxrwxrwx 1 root root 21 May 8 15:50 sleep-interval -> ..data/sleep-interval
'๐ฏ OpenSource > K8S' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
12. Accessing to Pod metadata from application (2) | 2021.05.09 |
---|---|
11. Secret (0) | 2021.05.09 |
09. Job์ผ๋ก ์๋ฃ ๊ฐ๋ฅํ ๋จ์ผ task ๊ตฌํํ๊ธฐ (0) | 2021.04.05 |
08. DaemonSet (0) | 2021.04.05 |
07. ReplicaSet (0) | 2021.04.05 |