๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Container/Kubernetes

[Kubernetes] ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ์™€ ์„ค์ •

๋ฐ˜์‘ํ˜•

๐Ÿ”Š ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ์‹œ์ž‘ํ•˜์„ธ์š”! ๋„์ปค/์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ์ ์„ ์ฝ๊ณ  ๊ฐœ์ธ์ ์ธ ๋ชฉ์  ํ•˜์— ์ž‘์„ฑ๋˜๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค. ํฌ์ŠคํŒ…์— ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ์ž๋ฃŒ๋Š” ์ œ๊ฐ€ ์ง์ ‘ ์žฌ๊ตฌ์„ฑํ•˜์˜€์Œ์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.
 

Kubernetes


์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์˜ค๋ธŒ์ ํŠธ๋“ค์ธ ํŒŒ๋“œ, ๋ ˆํ”Œ๋ฆฌ์นด์…‹, ๋””ํ”Œ๋กœ์ด๋จผํŠธ, ์„œ๋น„์Šค์™€ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋“ค์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ๋“ค์— ๋Œ€ํ•ด ๋ฐฐ์›Œ๋ณด๋„๋ก ํ•˜์ž. ๊ทธ ์ค‘์—์„œ๋„ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค, ์ปจํ”ผ๊ทธ๋งต, ์‹œํฌ๋ฆฟ์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

1. ๋ฆฌ์†Œ์Šค๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์žฅ๋ฒฝ, ๋„ค์ž„์ŠคํŽ˜์ด์Šค(Namespace)

์ด์ „์— ๋ฐฐ์› ๋˜ ๋„์ปค๋‚˜ ๋„์ปค ์Šค์›œ์„ ๋ฐฐ์› ์„ ๋•Œ๋Š” ๋ฐฐํฌํ•œ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์—†์—ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 100๊ฐœ์˜ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐํฌํ•œ ํ›„, docker ps -a ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐํฌํ•œ 100๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋“ค์ด ๋ชจ๋‘ ์ถœ๋ ฅ์ด ๋˜์—ˆ๋‹ค. ๋ฌผ๋ก  key : value ํ˜•ํƒœ๋กœ ์ปจํ…Œ์ด๋„ˆ์— ๋ ˆ์ด๋ธ”์„ ๋ถ™์—ฌ ์ผ์ข…์˜ ํ•„ํ„ฐ๋ง์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ธด ํ•˜์ง€๋งŒ, ์ข€ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—†์—ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์šฉ๋„๋‚˜ ๋ชฉ์ ์— ๋”ฐ๋ผ ํŒŒ๋“œ, ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ๋“ฑ๊ณผ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ด€๋ จ๋œ ๋ฆฌ์†Œ์Šค๋“ค์„ ๊ตฌ๋ถ„ ์ง€์–ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ„๋„์˜ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋ฐ”๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์˜ค๋ธŒ์ ํŠธ์ด๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ ์กฐ์ง์ด ํ•˜๋‚˜์˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ณต์œ ํ•ด ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์กฐ์ง๋ณ„๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•ด์„œ ๊ฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๊ฐ ์กฐ์ง์ด ์‚ฌ์šฉํ•˜๋Š” ํŒŒ๋“œ, ๋””ํ”Œ๋กœ์ด๋จผํŠธ, ์„œ๋น„์Šค ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋“ค์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ๋งˆ์น˜ ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ€์ƒ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๋Š๋‚Œ์ด๋‹ค.(๋ฌผ๋ก  ์‹ค์ œ๋กœ ๊ฐ€์ƒ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์˜คํ•ดํ•˜์ง€ ๋ง์ž)

 

๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ข€ ๋” ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‹ค์Šต๊ณผ ๊ฐ™์ด ์ง„ํ–‰ํ•ด๋ณด์ž. ์ผ๋‹จ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์•„๋ฌด๋Ÿฐ ์„ค์ •์„ ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด 4๊ฐœ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋‹ค.

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋“ค

 

์œ„์—์„œ ๋ณด์—ฌ์ง€๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋“ค ๊ฐ๊ฐ์— ํŒŒ๋“œ, ๋ ˆํ”Œ๋ฆฌ์นด์…‹, ๋””ํ”Œ๋กœ์ด๋จผํŠธ, ์„œ๋น„์Šค์™€ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋”ฐ๋กœ ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์ƒ์„ฑํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์˜ค๋ธŒ์ ํŠธ๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ default ๋ผ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ํ• ๋‹น๋œ๋‹ค. ๋งŒ์•ฝ ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—๋งŒ ์กด์žฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋“ค์„ ๋ณด๋ ค๋ฉด --namespace ์˜ต์…˜์„ ๋„ฃ์–ด ์ฃผ๋ฉด ๋œ๋‹ค.

 

$ kubectl get pods --namespace kube-system
$ kubectl get pods -n kube-system

 

์ฐธ๊ณ ๋กœ ์œ„์—์„œ ์„ค์ •ํ•œ kube-system ์ด๋ผ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์— ํ•„์ˆ˜์ ์ธ ์ปดํฌ๋„ŒํŠธ๋“ค๊ณผ ์„ค์ •๊ฐ’๋“ค์ด ์กด์žฌํ•˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค์ด๋‹ค. 

 

๊ทธ๋ ‡๋‹ค๋ฉด ์—ฌ๊ธฐ์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ๋ผ๋ฒจ ๊ฐ„์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ '๋ผ๋ฒจ'์ด๋ผ ํ•จ์€ ์šฐ๋ฆฌ๊ฐ€ ์ด์ „์— ํŒŒ๋“œ์™€ ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ๊ฐ„์— ์—ฐ๊ฒฐํ•ด์ฃผ๋„๋ก ํ•œ ๋ผ๋ฒจ ์…€๋ ‰ํ„ฐ(Label Selector)์ด๋‹ค. ๊ฒฐ๋ก ์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ๋ผ๋ฒจ๋ณด๋‹ค ๋”์šฑ ๋„“์€ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ResourceQuota ๋ผ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ด์šฉํ•ด ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์ƒ์„ฑ๋˜๋Š” ํŒŒ๋“œ์˜ ์ž์› ์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œํ•˜๊ฑฐ๋‚˜, ์• ๋“œ๋ฏธ์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด์„œ ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ƒ์„ฑ๋˜๋Š” ํŒŒ๋“œ์—๋Š” ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค๋˜์ง€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์ธ๊ทธ๋ ˆ์Šค ๋“ฑ์˜ ํŠน์ • ๋ชฉ์ ์„ ์œ„ํ•ด์„œ๋„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

1-1. ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ƒ์„ฑํ•˜๊ธฐ

๊ทธ๋Ÿฌ๋ฉด ์ด์ œ YAML ํŒŒ์ผ ๋˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•ด๋ณด์ž. ์‚ฌ์šฉํ•œ YAML ํŒŒ์ผ ๋‚ด์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

apiVersion: v1
kind: Namespace
metadata:
  name: zedd-default

 

YAML ํŒŒ์ผ์„ ํ†ตํ•ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋„ kubectl apply ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋งŒ์•ฝ์— ๋ช…๋ น์–ด๋กœ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

 

$ kubectl create namespace zedd-default

 

์ด์ œ ๊ทธ๋Ÿฌ๋ฉด ์œ„์—์„œ ์ƒ์„ฑํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—๋‹ค๊ฐ€ ๋””ํ”Œ๋กœ์ด๋จผํŠธ, ์„œ๋น„์Šค ๊ฐ™์€ ์˜ค๋ธŒ์ ํŠธ๋“ค์„ ์ƒ์„ฑํ•ด๋ณด์ž. ์•„์ง์€ ์ƒ์„ฑํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ํ• ๋‹น๋œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†๋Š” ์ƒํƒœ๋‹ค.

 

 

์ด์ œ ๋””ํ”Œ๋กœ์ด๋จผํŠธ, ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” YAML ํŒŒ์ผ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์€ ๊ธฐ์กด์— ์‹ค์Šตํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋˜ ๊ฒƒ๊ณผ ๋™์ผํ•˜๋˜, ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hostname-deployment-ns
  namespace: zedd-default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webserver
  template:
    metadata:
      name: my-webserver
      labels:
        app: webserver
    spec:
      containers:
      - name: my-webserver
        image: alicek106/rr-test:echo-hostname
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: hostname-svc-clusterip-ns
  namespace: zedd-default
spec:
  ports:
    - name: web-port
      port: 8080
      targetPort: 80
  selector:
    app: webserver
  type: ClusterIP

 

์œ„ YAML ํŒŒ์ผ๋กœ ํŒŒ๋“œ๊ฐ€ ์ž˜ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ธฐ ์œ„ํ•ด์„œ ๋ชจ๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ํŒŒ๋“œ๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๋„๋ก ํ•˜์ž. --all-namespaces ์˜ต์…˜์„ ์ฃผ์–ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

$ kubectl get pods --all-namespaces

1-2 .๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์˜ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๊ธฐ

์ด๋ฒˆ์—” ์œ„์—์„œ ์ƒ์„ฑํ•œ zedd-deafult ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์˜ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•ด๋ณด๋„๋ก ํ•˜์ž. ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ์„œ๋น„์Šค ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋ฉด์„œ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ ํŠน์ • ํŒŒ๋“œ๋‚ด์—์„œ ๋‹ค๋ฅธ ํŒŒ๋“œ๋กœ ํ†ต์‹ ํ•  ๋•Œ, ์„œ๋น„์Šค์˜ ์ด๋ฆ„์„ ์ผ์ข…์˜ ๋„๋ฉ”์ธ์œผ๋กœ ํ•˜์—ฌ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด, "๊ฐ™์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์˜ ์„œ๋น„์Šค"์ผ ๊ฒฝ์šฐ์—๋งŒ ์„œ๋น„์Šค ์ด๋ฆ„์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, zedd-default ๋ผ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋‚ด๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ • ํŒŒ๋“œ๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๊ทธ๋Ÿฐ๋ฐ ์ด ํŒŒ๋“œ๋Š” default ๋ผ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์— ์ƒ์„ฑ๋œ ํŒŒ๋“œ์ด๋‹ค. ์ด๋Ÿด ๊ฒฝ์šฐ, default ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์— ์žˆ๋Š” ํŒŒ๋“œ๋Š” zedd-default ๋ผ๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์˜ ์„œ๋น„์Šค์— ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

 

ํ•˜์ง€๋งŒ ์„œ๋น„์Šค ์ด๋ฆ„์„ ํŠน์ • ๊ทœ์น™์— ๋งž๊ฒŒ ๋ช…์‹œํ•œ๋‹ค๋ฉด ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ๋”๋ผ๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ ๊ทœ์น™์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

{SERVICE NAME}.{NAMESPACE NAME}.svc
# ์•„๋ž˜๊ฐ€ ์„œ๋น„์Šค์˜ Fully Qualified Domain Name(FQDN)์ž„. ์•„๋ž˜์ฒ˜๋Ÿผ ์ •์˜ํ•ด๋„ ํ†ต์‹  ๊ฐ€๋Šฅ
{SERVICE NAME}.{NAMESPACE NAME}.svc.cluster.local

 

๋„ค์ž„์ŠคํŽ˜์ด์Šค๋„ kubectl delete ๋ช…๋ น์–ด๋กœ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹จ, ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ญ์ œํ•˜๋ฉด ํ•ด๋‹น ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๋ฆฌ์†Œ์Šค ๋˜ํ•œ ํ•จ๊ป˜ ์‚ญ์ œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ญ์ œํ•  ๋• ๋ฐ˜๋“œ์‹œ ์‹ ์ค‘ํ•ด์ง€๋Š” ์Šต๊ด€์„ ๊ฐ–๋„๋ก ํ•˜์ž.

1-3. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€๋Š” ์ข…์†์ ์ธ ๋˜๋Š” ๋…๋ฆฝ์ ์ธ ์˜ค๋ธŒ์ ํŠธ

์œ„์—์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ฐฐ์šฐ๋ฉด์„œ ์šฐ๋ฆฌ๋Š” ํŒŒ๋“œ, ๋ ˆํ”Œ๋ฆฌ์นด์…‹, ๋””ํ”Œ๋กœ์ด๋จผํŠธ, ์„œ๋น„์Šค๋ผ๋Š” ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋”ฐ๋ผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ตฌ๋ถ„๋˜๋Š” ์ฆ‰, ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ข…์†๋œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐฐ์› ๋‹ค. ์ด๋ฅผ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์†ํ•œ๋‹ค ํ•˜์—ฌ object is namespaced ๋ผ๊ณ ๋„ ํ•œ๋‹ค. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์†ํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ๋“ค์ด ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ๋ณด๊ธฐ ์œ„ํ•ด์„œ๋Š” --namespaced ์˜ต์…˜์„ true๋กœ ์ฃผ์–ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

$ kubectl api-resources --namespaced=true

 

๊ทธ๋Ÿฌ๋ฉด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ๋…๋ฆฝ์ ์ด์ง€ ์•Š์€ ์˜ค๋ธŒ์ ํŠธ๋“ค๋„ ์žˆ์„๊นŒ? ๋‹น์—ฐํ•˜๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ๋…ธ๋“œ๋ผ๋Š” ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๊ทธ๋ ‡๋‹ค. ๋…ธ๋“œ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ €์ˆ˜์ค€์˜ ์˜ค๋ธŒ์ ํŠธ์ด๋ฉฐ, ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์˜ํ•ด ๊ตฌ๋ถ„๋˜์ง€ ์•Š๋Š”๋‹ค. ๋‹ค๋ฅธ ๋…๋ฆฝ์ ์ธ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ๋ณด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์œ„ ๋ช…๋ น์–ด์—์„œ false๋กœ ๋ฐ”๊พธ์–ด์ฃผ๋ฉด ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

2. ์„ค์ •๊ฐ’์„ ํŒŒ๋“œ์— ์ „๋‹ฌํ•˜์ž, Configmap ๊ณผ Secret

์ด๋ฒˆ์—๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ํ†ตํ•ด ๋ฐฐํฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์„ค์ •๊ฐ’์„ ๋™์ ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์ปจํ”ผ๊ทธ๋งต(Configmap)๊ณผ ์‹œํฌ๋ฆฟ(Secret)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ์‚ฌ์‹ค ์ด์ „์— ๋„์ปค ์Šค์›œ์„ ๋ฐฐ์šฐ๋ฉด์„œ ๊ทธ ๋•Œ๋„ ๋™์ผํ•˜๊ฒŒ ์ปจํ”ผ๊ทธ๋งต๊ณผ ์‹œํฌ๋ฆฟ์— ๋Œ€ํ•ด ๋ฐฐ์šด์ ์ด ์žˆ๋‹ค. ๊ทธ ๋•Œ ๋ฐฐ์› ๋˜ ์—ญํ• ๋“ค๊ณผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ๋„ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค. 

 

๋ฌผ๋ก  ์ปจํ”ผ๊ทธ๋งต๊ณผ ์‹œํฌ๋ฆฟ๊ฐ™์€ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์„ค์ •๊ฐ’๋“ค์„ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๋นŒ๋“œํ•  (๋„์ปค) ์ด๋ฏธ์ง€ ๋‚ด๋ถ€์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋˜๋Š” ํŒŒ์ผ์˜ ํ˜•ํƒœ๋กœ ์„ค์ • ๊ฐ’๋“ค์„ ๋ฏธ๋ฆฌ ์ง€์ •ํ•ด๋†“์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋„์ปค ์ด๋ฏธ์ง€๋Š” ํ•œ ๋ฒˆ ๋นŒ๋“œ๋ฅผ ํ•˜๋ฉด ๋ถˆ๋ณ€์˜ ์ƒํƒœ๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ ์ค‘๊ฐ„์— ์„ค์ • ๊ฐ’๋“ค์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธฐ๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผ ํ•˜๋Š” ๊ท€์ฐฎ์Œ์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํŒŒ๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” YAML ํŒŒ์ผ ๋‚ด๋ถ€์— env ํ‚ค์›Œ๋“œ๋กœ ๊ฐ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ด๋ฆ„๊ณผ ๊ทธ์˜ ๊ฐ’์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ถœ์ฒ˜: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ณต์‹ ๋ฌธ์„œ

 

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•˜๋“œ์ฝ”๋”ฉํ•˜๋Š” ๋ฐฉ์‹์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค. ๋งŒ์•ฝ ํŠน์ • ์„ค์ • ๊ฐ’๋งŒ ๋‹ค๋ฅด๊ณ  ๋‚˜๋จธ์ง€ YAML ํŒŒ์ผ ๋‚ด์šฉ์ด ๋ชจ๋‘ ๊ฐ™์€ ์ƒํ™ฉ, ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์šด์˜ ํ™˜๊ฒฝ์—์„œ ๊ฐ๊ฐ ๋ฐฐํฌํ•˜๋Š” ํŒŒ๋“œ๋ฅผ ์œ„ํ•œ YAML ํŒŒ์ผ์„ ์ •์˜ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์–ด๋–ค ํ™˜๊ฒฝ์ธ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŠน์ • env ๊ฐ’๋งŒ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋‘ ๋™์ผํ•  ๊ฒƒ์ด๊ณ , ๊ฒฐ๊ตญ ๊ฑฐ์˜ ๋น„์Šทํ•œ ๋‚ด์šฉ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” YAML ํŒŒ์ผ 2๊ฐœ๋ฅผ ๋”ฐ๋กœ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.

 

๋งŒ์•ฝ ์ปจํ”ผ๊ทธ๋งต๊ณผ ์‹œํฌ๋ฆฟ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์œ„์™€ ๊ฐ™์€ ์ƒํ™ฉ์„ ํšจ์œจ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ข€ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ, ์ปจํ”ผ๊ทธ๋งต์—๋Š” ์„ค์ •๊ฐ’์„, ์‹œํฌ๋ฆฟ์—๋Š” ๋ณด์•ˆ์ƒ ๋…ธ์ถœ๋˜์–ด์„œ๋Š” ์•ˆ๋˜๋Š” ๊ฐ’๋“ค์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ปจํ”ผ๊ทธ๋งต๊ณผ ์‹œํฌ๋ฆฟ์„ ํ™œ์šฉํ•œ๋‹ค๋ฉด ์„ค์ •๊ฐ’๋“ค์„ ํŒŒ๋“œ์™€ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณ„๋„์˜ ์˜ค๋ธŒ์ ํŠธ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ํ•˜๋‚˜์”ฉ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž. ๋จผ์ € ์ปจํ”ผ๊ทธ๋งต์ด๋‹ค.

2-1. ์ปจํ”ผ๊ทธ๋งต(Configmap)

์ปจํ”ผ๊ทธ๋งต์€ ๋ณด์•ˆ์ƒ ๋…ธ์ถœ๋˜์–ด๋„ ์ƒ๊ด€์ด ์—†๋Š” ์ผ๋ฐ˜์ ์ธ ์„ค์ •๊ฐ’์„ ๋‹ด์•„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ข…์†์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ณ„๋กœ ์ปจํ”ผ๊ทธ๋งต์ด ์กด์žฌํ•œ๋‹ค. ์ด์ œ ์ปจํ”ผ๊ทธ๋งต์„ ์ƒ์„ฑํ•ด๋ณด๋„๋ก ํ•˜์ž. YAML ํŒŒ์ผ์— ์ง์ ‘ ์ •์˜ํ•ด์„œ ์ปจํ”ผ๊ทธ๋งต์„ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ kubectl ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋„ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์•„๋ž˜ ๋ช…๋ น์–ด ํ˜•์‹์„ ํ†ตํ•ด์„œ ์ปจํ”ผ๊ทธ๋งต์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•ด๋ณด์ž.

 

$ kubectl create configmap [CONFIGMAP NAME] --from-literal [KEY]=[VALUE]
$ kubectl create configmap log-level-configmap --from-literal LOG_LEVEL=DEBUG

 

--from-literal ์˜ต์…˜์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ key=value ํ˜•ํƒœ๋กœ ์ปจํ”ผ๊ทธ๋งต์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ๋ง์ด๋‹ค.

 

$ kubectl create configmap zedd-configmap \
--from-literal LOG_LEVEL=DEBUG \
--from-literal NAME=ZEDD

 

๊ทธ๋ฆฌ๊ณ  ์ƒ์„ฑํ•œ ์ปจํ”ผ๊ทธ๋งต์˜ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜ 2๊ฐ€์ง€ ๋ช…๋ น์–ด ์ค‘ ํ•˜๋‚˜ ์„ ํƒํ•ด์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

$ kubectl describe configmap [CONFIGMAP NAME]
$ kubectl get configmap [CONFIGMAP NAME] -o yaml

 

๋งŒ์•ฝ ์ปจํ”ผ๊ทธ๋งต ์ด๋ฆ„์„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ์ปจํ”ผ๊ทธ๋งต์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ์ถœ๋ ฅ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒ์„ฑํ•œ ์ปจํ”ผ๊ทธ๋งต์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด kubectl get configmap ๋˜๋Š” kubectl get cm ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋กœ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ด์ œ ์ปจํ”ผ๊ทธ๋งต์„ ์ƒ์„ฑํ•ด๋ณด์•˜์œผ๋‹ˆ, ๋‹ค์Œ์œผ๋กœ๋Š” ํŒŒ๋“œ์—์„œ ํ•ด๋‹น ์ปจํ”ผ๊ทธ๋งต์„ ๊ฐ€์ ธ์™€ ๋ณผ ์ฐจ๋ก€์ด๋‹ค. ํŒŒ๋“œ์—์„œ ์ปจํ”ผ๊ทธ๋งต์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํŒŒ๋“œ, ๋ ˆํ”Œ๋ฆฌ์นด์…‹, ๋””ํ”Œ๋กœ์ด๋จผํŠธ ๊ฐ™์€ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” YAML ํŒŒ์ผ์˜ ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ ๋‚ด์— ์•„๋ž˜์ฒ˜๋Ÿผ ์ •์˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.(์•„๋ž˜์—์„œ๋Š” ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ ๋ถ€๋ถ„๋งŒ ๋ฐœ์ทŒํ•˜์˜€๋‹ค)

 

spec:
  containers:
  - name: zedd-webserver
    env:
      valueFrom:
        configMapKeyRef:
          name: log-level-configmap
          key: LOG_LEVEL

 

๊ทธ๋Ÿฐ๋ฐ ์œ„์™€ ๊ฐ™์ด YAML ํŒŒ์ผ์— ์ปจํ”ผ๊ทธ๋งต์„ ์ •์˜ํ•˜๊ณ  ํŒŒ๋“œ๋ฅผ ๋ฐฐํฌํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ ํŒŒ๋“œ๊ฐ€ ์ปจํ”ผ๊ทธ๋งต์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๊นŒ? ํฌ๊ฒŒ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ, ์ด 2๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ์ ์ ˆํ•œ ๊ฒƒ์„ ์„ ํƒํ•˜๋Š” ๊ธฐ์ค€์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์†Œ์Šค์ฝ”๋“œ ๋‚ด๋ถ€์—์„œ ์–ด๋–ป๊ฒŒ ์„ค์ •๊ฐ’์„ ์ฝ์–ด๋“ค์ด๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.

2-1-1. ์ปจํ…Œ์ด๋„ˆ์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ปจํ”ผ๊ทธ๋งต ์‚ฌ์šฉํ•˜๊ธฐ

๊ฐ€์žฅ ๋จผ์ € ์•Œ์•„๋ณผ ๋ฐฉ๋ฒ•์€ ์ปจํ”ผ๊ทธ๋งต์˜ ๊ฐ’์„ ์ปจํ…Œ์ด๋„ˆ์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ฝ์–ด๋“ค์ด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ปจํ”ผ๊ทธ๋งต์— ์ €์žฅ๋œ key=value ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปจํ”ผ๊ทธ๋งต์„ ์šฐ๋ฆฌ๋Š” MY_CONFIG=ZEDD ๋กœ ์„ค์ •ํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ํ„ฐ๋ฏธ๋„์—์„œ echo $MY_CONFIG ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ZEDD ๋ผ๋Š” ๊ฐ’์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์—์„œ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ๋ถ€ํ„ฐ ์„ค์ •๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•œ๋‹ค๋ฉด ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์ปจํ”ผ๊ทธ๋งต์˜ ์„ค์ •๊ฐ’์„ ์ปจํ…Œ์ด๋„ˆ์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๊ฐ€์ ธ์™€ ๋ณด๋Š” ์‹ค์Šต์„ ์ง„ํ–‰ํ•ด๋ณด์ž. ์ ์šฉํ•ด๋ณผ YAML ํŒŒ์ผ ๋‚ด์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

apiVerson: v1
kind: Pod
metadata:
  name: container-env-zedd
spec:
  containers:
    - name: zedd-container
      image: busybox
      args: ['tail', '-f', '/dev/null']
      envFrom:
      - configMapRef:
          name: log-level-configmap
      - configMapRef:
          name: start-k8s

 

์œ„ ํŒŒ์ผ ๋‚ด์šฉ ์ค‘ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ envFrom ๊ณผ configMapRef ํ‚ค์›Œ๋“œ์ด๋‹ค. ์œ„์—์„œ ์ž‘์„ฑ๋œ ๋‚ด์šฉ์€ log-level-configmap ๊ณผ start-k8s ๋ผ๋Š” ์ปจํ”ผ๊ทธ๋งต์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ’์„ ๊ฐ€์ ธ์™€ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ, envFrom ํ•ญ๋ชฉ์€ ํ•˜์œ„์— ์ ์–ด์ค€ ํ•˜๋‚˜์˜ ์ปจํ”ผ๊ทธ๋งต์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ key:value๋ฅผ ๊ฐ–๊ณ ์žˆ๋‹ค๋ฉด ๊ทธ ๋ชจ๋‘๋ฅผ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๊ฐ€์ ธ์˜ค๋„๋กํ•œ๋‹ค. ๋งŒ์•ฝ ์œ„ YAML ํŒŒ์ผ์— ์ •์˜๋œ ์ปจํ”ผ๊ทธ๋งต์ด ์ƒ์„ฑ๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ƒํƒœ๋ผ๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•ด์ฃผ์ž.

 

$ kubectl create configmap log-level-configmap \
--from-literal LOG_LEVEL=DEBUG && \
kubectl create configmap start-k8s \
--from-literal k8s=kubernetes \
--from-literal container=docker

 

์ด์ œ YAML ํŒŒ์ผ์„ kubectl apply ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ฐฐํฌํ•ด๋ณด๋„๋ก ํ•˜์ž. ๊ทธ๋ฆฌ๊ณ  ๋‚œ ๋‹ค์Œ ๋ฐฐํฌํ•œ ํŒŒ๋“œ ๋‚ด์— ์‹ค์ œ๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์ž˜ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด๋ณด์ž.

 

$ kubectl exec container-env-zedd printenv | grep -E "(LOG|container|k8s)"

 

 

ํ„ฐ๋ฏธ๋„ ํ™”๋ฉด์„ ๋ณด๋ฉด ์œ„์—์„œ YAML ํŒŒ์ผ์— ์ •์˜ํ•œ ์ปจํ”ผ๊ทธ๋งต์˜ key:value ๊ฐ’๋“ค์ด ํŒŒ๋“œ ๋‚ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ž˜ ์„ค์ •๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

์ด๋ฒˆ์—๋Š” ์ปจํ”ผ๊ทธ๋งต์˜ ๋ชจ๋“  ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ํŒŒ๋“œ ๋‚ด์— ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ปจํ”ผ๊ทธ๋งต์˜ ํŠน์ • key:value๋งŒ ํŒŒ๋“œ ๋‚ด์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•ด๋ณด๋„๋ก ํ•˜์ž. ์ด๋ฒˆ์—๋Š” valueFrom ๊ณผ configMapKeyRef ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์•„๋ž˜ YAML ํŒŒ์ผ์„ ์‚ดํŽด๋ณด์ž.

 

apiVersion: v1
kind: Pod
metadata:
  name: container-env-zedd-v2
spec:
  containers:
    - name: zedd-container
      image: busybox
      args: ['tail', '-f', '/dev/null']
      env:
      - name: ENV_KEYNAME_1
        valueFrom:
          configMapKeyRef:
            name: log-level-configmap
            key: LOG_LEVEL
      - name: ENV_KEYNAME_2
        valueFrom:
          configMapKeyRef:
            name: start-k8s
            key: k8s

 

env ํ•ญ๋ชฉ์˜ ๋‚ด์šฉ์„ ์‚ดํŽด๋ณด์ž. ์šฐ์„  ์ปจํ”ผ๊ทธ๋งต์—์„œ ์„ ํƒ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ key:value๋ฅผ ํŒŒ๋“œ ๋‚ด์—์„œ ์–ด๋–ค ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ• ์ง€ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ENV_KEYNAME_1 ๊ณผ ENV_KEYNAME_2์— ํ•ด๋‹นํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  valueFrom ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์–ด๋–ค ์ปจํ”ผ๊ทธ๋งต์˜ ์–ด๋–ค key๋กœ๋ถ€ํ„ฐ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ธ์ง€ configMapKeyRef ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์œ„ YAML ํŒŒ์ผ ๋‚ด์šฉ์˜ ํŒŒ๋“œ๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐํฌํ•˜๊ณ , ํŒŒ๋“œ ๋‚ด๋ถ€๋กœ ๋“ค์–ด๊ฐ€ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋ณด์ž.

 

$ kubectl exec container-env-zedd-v2 printenv | grep -E "(KEYNAME)"

 

 

ํ„ฐ๋ฏธ๋„ ํ™”๋ฉด์„ ๋ณด๋ฉด ํ•ด๋‹น ํŒŒ๋“œ ๋‚ด๋ถ€์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜์— YAML ํŒŒ์ผ๋กœ ๋ช…์‹œํ•ด์ค€ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฐ’์ด ์ž˜ ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

2-1-2. ์ปจํ”ผ๊ทธ๋งต์˜ ๊ฐ’์„ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ํŒŒ๋“œ ๋‚ด๋ถ€์— ๋งˆ์šดํŠธํ•˜๊ธฐ

๋‹ค์Œ์€ ์ปจํ”ผ๊ทธ๋งต์˜ ๊ฐ’์„ ํŒŒ๋“œ ๋‚ด์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ๋งˆ์šดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ์ด๋ฒˆ์— ์‚ฌ์šฉํ•  ํ‚ค์›Œ๋“œ๋Š” volumeMounts ์™€ volumes ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ์˜ ๋ณผ๋ฅจ์ด๋ผ๋Š” ๊ฒƒ์„ ํ™œ์šฉํ•œ๋‹ค. ์ด ๋ณผ๋ฅจ์€ ๋„์ปค ํฌ์ŠคํŒ… ์‹œ๋ฆฌ์ฆˆ์—์„œ ๋ฐฐ์› ๋˜ ๋ณผ๋ฅจ๊ณผ ๊ธฐ๋Šฅ์ด ๊ฑฐ์˜ ์œ ์‚ฌํ•˜๋‹ค. ์ฆ‰, ์ปจํ”ผ๊ทธ๋งต์„ ๋งˆ์šดํŠธํ•˜๊ธฐ ์œ„ํ•ด ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. ์•„๋ž˜ YAML ํŒŒ์ผ ๋‚ด์šฉ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž.

 

apiVersion: v1
kind: Pod
metadata:
  name: configmap-volume-all-pod
spec:
  containers:
    - name: zedd-container
      image: busybox
      args: ["tail", "-f", "/dev/null"]
      volumeMounts:
      - name: configmap-volume
        mountPath: /etc/config
  volumes:
    - name: configmap-volume
      configMap:
        name: start-k8s

 

์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ํ•ญ๋ชฉ๋“ค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

 

  • spec.volumes : ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•  ๋ณผ๋ฅจ์˜ ์ด๋ฆ„์„ ๋ช…์‹œํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ณผ๋ฅจ์ด ์‚ฌ์šฉํ•  ์ปจํ”ผ๊ทธ๋งต์ด ๋ฌด์—‡์ธ์ง€ ์ •์˜ํ•œ๋‹ค.
  • spec.containers.volumeMounts : ์ด์šฉํ•  ๋ณผ๋ฅจ์„ ๋ช…์‹œํ•˜๊ณ , ํŒŒ๋“œ ๋‚ด์—์„œ ๋งˆ์šดํŠธํ•  ๊ฒฝ๋กœ๋ฅผ ๋ช…์‹œํ•ด์ค€๋‹ค.

์ด์ œ ์œ„ YAML ํŒŒ์ผ ๋‚ด์šฉ์œผ๋กœ ํŒŒ๋“œ๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ํŒŒ๋“œ ๋‚ด๋ถ€์˜ /etc/config ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•ด๋ณด์ž.

 

$ kubectl exec -it configmap-volume-all-pod ls /etc/config

 

 

container, k8s ๋ผ๋Š” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ํ˜•ํƒœ์˜ ํŒŒ์ผ์ด 2๊ฐœ ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋•Œ ํŒŒ์ผ ์ด๋ฆ„์€ ์ปจํ”ผ๊ทธ๋งต์˜ key์— ํ•ด๋‹นํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฐ ํŒŒ์ผ ๋‚ด์šฉ์— ๊ทธ๋Ÿผ ๋ฌด์—‡์ด ๋“ค์–ด์žˆ์„๊นŒ? cat ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•ด ์—ด์–ด๋ณด์ž. ํŒŒ์ผ ๋‚ด์šฉ์€ ๋ฐ”๋กœ ์ปจํ”ผ๊ทธ๋งต์˜ ํŠน์ • key์— ํ•ด๋‹นํ•˜๋Š” value ๊ฐ’์ด ๋“ค์–ด์žˆ๋‹ค. 

 

$ kubectl exec configmap-volume-all-pod cat /etc/config/container && \
kubectl exec configmap-volume-all-pod cat /etc/config/k8s

 

์ด๋ฒˆ์—๋Š” ์ปจํ”ผ๊ทธ๋งต์—์„œ ์›ํ•˜๋Š” key:value ์Œ ๋ฐ์ดํ„ฐ๋งŒ ํŒŒ๋“œ ๋‚ด์˜ ํŒŒ์ผ๋กœ ๋งˆ์šดํŠธํ•ด๋ณด๋„๋ก ํ•˜์ž. ๋ฐฉ๊ธˆ ๋ฐฐํฌํ•œ YAML ํŒŒ์ผ ๋‚ด์šฉ์—์„œ spec.volumes ๋ถ€๋ถ„์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์ถ”๊ฐ€๋งŒ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์•„๋ž˜ ๋‚ด์šฉ์„ ์‚ดํŽด๋ณด์ž.

 

apiVersion: v1
kind: Pod
metadata:
  name: configmap-volume-all-pod-v2
spec:
  containers:
    - name: zedd-container
      image: busybox
      args: ["tail", "-f", "/dev/null"]
      volumeMounts:
      - name: configmap-volume
        mountPath: /etc/config
  volumes:
    - name: configmap-volume
      configMap:
        name: start-k8s
        items:
        - key: k8s
          path: k8s_selected

 

์ถ”๊ฐ€๋œ ๋ถ€๋ถ„์€ spec.volumes.configMap.items ๋ถ€๋ถ„์ด๋‹ค. ํ•ด๋‹น ๋ถ€๋ถ„์— ๋ช…์‹œํ•œ ์ปจํ”ผ๊ทธ๋งต(์œ„ ์˜ˆ์‹œ์—์„œ๋Š” start-k8s๋ผ๋Š” ์ปจํ”ผ๊ทธ๋งต)์—์„œ ์–ด๋–ค key์˜ ๊ฐ’๋งŒ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ธ์ง€, ๊ทธ๋ฆฌ๊ณ  path ๋ถ€๋ถ„์—๋Š” ๊ทธ ๊ฐ€์ ธ์˜จ ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ๋ฌด์—‡์œผ๋กœ ํ• ์ง€ ๋ช…์‹œํ•ด์ค€๋‹ค. ์œ„ YAML ํŒŒ์ผ์„ ๋ฐฐํฌํ•˜๊ณ , ํŒŒ๋“œ ๋‚ด๋ถ€๋กœ ๋“ค์–ด๊ฐ€ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋ณด์ž. ๊ทธ๋Ÿฌ๋ฉด k8s ์ด๋ฆ„์ด ์•„๋‹Œ k8s_selected ๋ผ๋Š” ์ด๋ฆ„์˜ ํŒŒ์ผ์ด ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค.

 

$ kubectl exec configmap-volume-all-pod-v2 ls /etc/config
$ kubectl exec configmap-volume-all-pod-v2 cat /etc/config/k8s_selected

 

์ฐธ๊ณ ๋กœ ์ด๋ ‡๊ฒŒ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋ฆฌ์†Œ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ๋“œ ๋‚ด๋ถ€ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์œ„์น˜์‹œํ‚ค๋Š” ๊ฒƒ์„ ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋Š” ํˆฌ์‚ฌ(Projection)๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

2-1-3. ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ์ปจํ”ผ๊ทธ๋งต ์ƒ์„ฑํ•˜๊ธฐ

์ง€๊ธˆ๊นŒ์ง€๋Š” ์ปจํ”ผ๊ทธ๋งต์„ ๋‹จ์ˆœํ•œ ๋ฌธ์ž์—ด๋กœ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด --from-literal ์˜ต์…˜์„ ํ™œ์šฉํ•ด์„œ ์ƒ์„ฑํ–ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ์ปจํ”ผ๊ทธ๋งต์˜ ์„ค์ • ๊ฐ’๋“ค์ด ๋“ค์–ด์žˆ๋Š” ํŠน์ • ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ์ปจํ”ผ๊ทธ๋งต์„ ์ƒ์„ฑํ•ด๋ณด์ž. ์ด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜์€ --from-file ์˜ต์…˜์ด๋‹ค. ๋งŒ์•ฝ ์ปจํ”ผ๊ทธ๋งต์œผ๋กœ ์„ค์ •ํ•  ํŒŒ์ผ ๋‚ด์šฉ์ด index.html ์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์ปจํ”ผ๊ทธ๋งต์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฐธ๊ณ ๋กœ --from-file๋„ ์—ฐ์†์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ผ์„ ์ปจํ”ผ๊ทธ๋งต์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

$ kubectl create configmap index-configmap --from-file index.html

 

๊ทธ๋Ÿฐ๋ฐ, ์œ„ ๋ช…๋ น์–ด๋กœ ์ปจํ”ผ๊ทธ๋งต์„ ์ƒ์„ฑํ•˜๊ณ  ๋ณผ๋ฅจ์„ ํ™œ์šฉํ•ด ํŒŒ๋“œ ๋‚ด์— ๋งˆ์šดํŠธ์‹œ์ผฐ์„ ๋•Œ, ํŒŒ๋“œ ๋‚ด๋ถ€๋กœ ๋“ค์–ด๊ฐ€ ๋งˆ์šดํŠธ์‹œํ‚จ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€๋ณด๋ฉด ํŒŒ์ผ์˜ ์ด๋ฆ„์ด ์ปจํ”ผ๊ทธ๋งต์˜ key๋กœ, ํŒŒ์ผ์˜ ๋‚ด์šฉ์ด ์ปจํ”ผ๊ทธ๋งต์˜ value๋กœ ์„ค์ •๋œ๋‹ค. ๋งŒ์•ฝ ์ปจํ”ผ๊ทธ๋งต์˜ key๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ๋“ฑํ˜ธ(=)๋ฅผ ํ™œ์šฉํ•ด์„œ ์ด๋ฆ„์„ ๋ช…์‹œํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

$ kubectl create configmap index-configmap --from-file index_key=index.html

 

๊ทธ๋ฆฌ๊ณ  .env ๋ผ๋Š” ํ™•์žฅ์ž์˜ ํŒŒ์ผ์„ ์ด์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ key=value ๊ฐ’ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ๋œ ์„ค์ • ํŒŒ์ผ์„ ํ•œ๊บผ๋ฒˆ์— ์ปจํ”ผ๊ทธ๋งต์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ index.env ๋ผ๋Š” ํŒŒ์ผ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

 

key1=value1
key2=value2
key3=value3

 

์ด .env ํŒŒ์ผ์„ ์ปจํ”ผ๊ทธ๋งต์œผ๋กœ ์ƒ์„ฑํ•˜๋ ค๋ฉด --from-env-file ์ด๋ผ๋Š” ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

$ kubectl create configmap from-envfile --from-env-file index.env

 

๋‹ค์Œ์€ YAML ํŒŒ์ผ๋กœ ์ปจํ”ผ๊ทธ๋งต์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ฆ‰, ์ปจํ”ผ๊ทธ๋งต์„ ์ƒ์„ฑํ•  ๋•Œ ๋ฌธ์ž์—ด์ด๋ฉด --from-literal, ๋งŒ์•ฝ ํŒŒ์ผ์ด๋ผ๋ฉด --from-file ๊ณผ ๊ฐ™์€ ์˜ต์…˜์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ƒ์„ฑํ•  ์ปจํ”ผ๊ทธ๋งต ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ •์˜๋œ YAML ํŒŒ์ผ์„ ๋ฐฐํฌ(์ฆ‰, kubectl apply ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉ)ํ•ด์„œ๋„ ์ปจํ”ผ๊ทธ๋งต์„ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฐ”๋กœ --dry-run ๊ณผ -o yaml ์˜ต์…˜์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์„œ ๋ง์ด๋‹ค. ์ด 2๊ฐ€์ง€ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ”ผ๊ทธ๋งต์„ ์‹ค์งˆ์ ์œผ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š์€ ์ฑ„๋กœ ์ƒ์„ฑ๋  ์ปจํ”ผ๊ทธ๋งต์„ YAML ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” --dry-run ์˜ต์…˜ ๋•Œ๋ฌธ์ธ๋ฐ, 'dry run' ์ด๋ผ๋Š” ์šฉ์–ด ์ž์ฒด์˜ ์˜๋ฏธ๋ฅผ ๋ณด๋ฉด ๊ทธ ์ด์œ ๋ฅผ ์ง์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. dry run ์ด๋ž€, ํŠน์ • ์ž‘์—…์˜ ์‹คํ–‰ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ๊ฒ€ํ† ํ•˜๋Š” ๋ช…๋ น์–ด ๋˜๋Š” API๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์‹ค์ œ๋กœ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ช…๋ น์–ด(ex. kubectl apply, create, ...)์— --dry-run ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์‹คํ–‰ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‹คํ–‰ ๊ฐ€๋Šฅํ•จ์„ ํŒ๋‹จํ•˜๋”๋ผ๋„ ์‹ค์ œ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. ๋งŒ์•ฝ์— ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” YAML ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ณ ์ž ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์—๋Ÿฌ๊ฐ€ ๋‚  ๊ฒƒ์ž„์„ ์•”์‹œ(?)ํ•ด์ค€๋‹ค.

 

๊ทธ๋Ÿผ ์ด์ œ --dry-run ๊ณผ -o yaml ์˜ต์…˜์„ ๊ฐ™์ด ์‚ฌ์šฉํ•ด์„œ ์ƒ์„ฑํ•  ์ปจํ”ผ๊ทธ๋งต์„ YAML ํŒŒ์ผ ๋‚ด์šฉ์œผ๋กœ ์ถœ๋ ฅ์‹œ์ผœ๋ณด์ž.

 

$ kubectl create configmap zedd-configmap-yaml \
--from-literal NAME=ZEDD --dry-run -o yaml

 

 

ํ„ฐ๋ฏธ๋„ ํ™”๋ฉด์„ ๋ณด๋ฉด ์ƒ์„ฑํ•  ์ปจํ”ผ๊ทธ๋งต์— ๋Œ€ํ•œ YAML ํŒŒ์ผ ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค. ์ด๋ฅผ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ํ•˜์—ฌ YAML ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ณ , kubectl apply ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ปจํ”ผ๊ทธ๋งต์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์„ ์“ฐ๋Š” ์ด์œ ๋Š” ๋ญ˜๋ผ? ์ •ํ™•ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์•„๋งˆ ์ƒ์„ฑํ•  ์ปจํ”ผ๊ทธ๋งต์„ YAML ํŒŒ์ผ ํ˜•ํƒœ๋กœ ๋‚จ๊ธฐ๊ณ  ์•„์นด์ด๋น™ ๋ฐ ์žฌ์‚ฌ์šฉ ๋ชฉ์ ์œผ๋กœ ์ด์šฉํ•˜๋Š” ์šฉ๋„๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค.

 

$ kubectl create configmap zedd-configmap-yaml \
--from-literal NAME=ZEDD --dry-run -o yaml > zedd-configmap-yaml.yaml && \
kubectl apply -f zedd-configmap-yaml.yaml

 

ํ•˜์ง€๋งŒ ์ปจํ”ผ๊ทธ๋งต์˜ key, value ๋ฐ์ดํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์ง€๋ฉด YAML ํŒŒ์ผ์˜ ๊ธธ์ด๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ธธ์–ด์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค 1.14 ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” kustomize ๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋”์šฑ ํŽธํ•˜๊ฒŒ ์ปจํ”ผ๊ทธ๋งต์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ด์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ž˜ ์‹œํฌ๋ฆฟ์„ ๋ฐฐ์šฐ๋ฉด์„œ ์•Œ์•„๋ณผ ์˜ˆ์ •์ด๋‹ค.

2-2. ์‹œํฌ๋ฆฟ(Secret)

์ปจํ”ผ๊ทธ๋งต๊ณผ ์œ ์‚ฌํ•˜๊ธด ํ•˜์ง€๋งŒ SSH ํ‚ค, DB ๊ณ„์ •์˜ ํŒจ์Šค์›Œ๋“œ ๋“ฑ๊ณผ ๊ฐ™์ด ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์‹œํฌ๋ฆฟ์— ๋Œ€ํ•ด ๋ฐฐ์›Œ๋ณด์ž. ์ด ์‹œํฌ๋ฆฟ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ด์ „์— ๋ฐฐ์› ๋˜ ๋„์ปค ์Šค์›œ์—์„œ ์†Œ๊ฐœํ•˜๋Š” ์‹œํฌ๋ฆฟ๊ณผ ์šฉ๋„๊ฐ€ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹œํฌ๋ฆฟ์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ข…์†๋˜๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜ค๋ธŒ์ ํŠธ์ด๋ฉฐ, ์•ž์„œ ๋ฐฐ์šด ์ปจํ”ผ๊ทธ๋งต๊ณผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์‹œํฌ๋ฆฟ์ด ๋ณด๋‹ค ๋” ์„ธ๋ถ„ํ™”๋œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค. 

2-2-1. ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋ฐ€์Šค๋Ÿฝ๊ฒŒ ์ €์žฅํ•˜์ž, Opaque ์‹œํฌ๋ฆฟ

์šฐ์„  ๊ฐ„๋‹จํ•˜๊ฒŒ ์‹œํฌ๋ฆฟ์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•ด๋ณด์ž. ์‹œํฌ๋ฆฟ์„ ์ƒ์„ฑํ•  ๋•Œ๋„, --from-literal, --from-file, --from-env-file ์˜ต์…˜์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๋ช…์‹œํ•œ ๋ฌธ์ž์—ด์„ ์‹œํฌ๋ฆฟ์œผ๋กœ ์ƒ์„ฑํ•ด๋ณด์ž.

 

$ kubectl create secret generic \
zedd-password --from-literal password=zedd1234

 

์‹œํฌ๋ฆฟ๋งŒ์˜ ์ฐจ์ด์ ์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์œ„ ๋ช…๋ น์–ด์—์„œ generic ์ด๋ผ๋Š” ํŠน์ˆ˜ ์˜ต์…˜์„ ๋ถ™์ธ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ์˜ ์‚ฌ์šฉ ๋ชฉ์ ์— ๋”ฐ๋ผ ์‹œํฌ๋ฆฟ์˜ ์ข…๋ฅ˜๊ฐ€ ๋ช‡ ๊ฐ€์ง€ ์ข…๋ฅ˜๋กœ ๋‚˜๋‰˜๊ธฐ ๋–„๋ฌธ์ธ๋ฐ, ์•„๋ž˜์—์„œ ๋ณด๋ฉด generic ์˜ต์…˜์„ ์ง€์ •ํ•ด ์‹œํฌ๋ฆฟ์„ ๋งŒ๋“ค๋ฉด Opaque ๋ผ๋Š” TYPE์˜ ์‹œํฌ๋ฆฟ์ด ์ƒ์„ฑ์ด ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

์ž, ์ด์ œ ๊ทธ๋Ÿฌ๋ฉด ์ƒ์„ฑํ•œ ์‹œํฌ๋ฆฟ์˜ ์ •๋ณด๋ฅผ ์‚ดํŽด๋ณด์ž. 

 

 

๋„์ปค ์Šค์›œ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์œ„์—์„œ ์‹œํฌ๋ฆฟ์„ ์ƒ์„ฑํ•  ๋•Œ value์— ๋ช…์‹œํ•œ zedd1234 ๋ผ๋Š” ๊ฐ’์ด ์‹œํฌ๋ฆฟ ์ •๋ณด์—๋Š” emVkZDEyMzQ= ์ด๋ผ๋Š” ๋ฌธ์ž์—ด๋กœ ๋ฐ”๋€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹œํฌ๋ฆฟ ๊ฐ’์— ์ €์žฅํ•  ๋•Œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ base64๋กœ ๊ฐ’์„ ์ธ์ฝ”๋”ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.(๋‹จ, ์‹œํฌ๋ฆฟ์ด ์„ค์ •๋˜์—ˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ํŒŒ๋“œ ๋‚ด๋ถ€๋กœ ์ง์ ‘ ๋“ค์–ด๊ฐ€ ํ•ด๋‹น ์‹œํฌ๋ฆฟ์˜ ๊ฐ’์„ ์ง์ ‘ ๋ณด๋ฉด ๊ทธ ๋•Œ๋Š” ๋””์ฝ”๋”ฉ๋œ ๊ฐ’์œผ๋กœ ๋˜์–ด์žˆ๋‹ค)

 

์‹œํฌ๋ฆฟ๋„ YAML ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•œ๋ฐ, YAML ํŒŒ์ผ์— ๋ช…์‹œ๋˜๋Š” ๋ฐ์ดํ„ฐ๋„ ๋ฐ˜๋“œ์‹œ ์ธ์ฝ”๋”ฉ๋œ ๊ฐ’์œผ๋กœ ๋ช…์‹œ๋˜์–ด์•ผ ํ•œ๋‹ค. ์‹ค์ œ๋กœ, --dry-run ๊ณผ -o yaml ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์„œ ์‹œํฌ๋ฆฟ์„ ์ƒ์„ฑํ•  ๋•Œ์˜ YAML ํŒŒ์ผ์„ ๋ณด๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์ธ์ฝ”๋”ฉ๋œ ๊ฐ’์œผ๋กœ ์„ค์ •๋จ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ทธ๋ฆฌ๊ณ  ์ปจํ”ผ๊ทธ๋งต์„ ๋ฐฐ์› ์„ ๋•Œ์ฒ˜๋Ÿผ ์‹œํฌ๋ฆฟ์— ๋ช…์‹œ๋œ ๋ชจ๋“  ๊ฐ’์„ ํ•œ๋ฒˆ์— ํŒŒ๋“œ ๋‚ด ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜, ์‹œํฌ๋ฆฟ์˜ ํŠน์ • ๊ฐ’๋งŒ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•, ๋ณผ๋ฅจ์„ ํ™œ์šฉํ•ด์„œ ๋ชจ๋“  ์‹œํฌ๋ฆฟ ๋˜๋Š” ํŠน์ • ์‹œํฌ๋ฆฟ์„ ํŒŒ๋“œ ๋‚ด์˜ ํŠน์ • ๊ฒฝ๋กœ์— ๋งˆ์šดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค ๋ชจ๋‘ YAML ํŒŒ์ผ ๋‚ด์—์„œ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ์ง€ YAML ํŒŒ์ผ ํ•ญ๋ชฉ์—์„œ ์ปจํ”ผ๊ทธ๋งต์—์„œ์˜ configMapRef ํ‚ค์›Œ๋“œ๋ฅผ secretRef๋กœ, configMapKeyRef ํ‚ค์›Œ๋“œ๋ฅผ secretKeyRef ํ‚ค์›Œ๋“œ๋กœ๋งŒ ๋ฐ”๊พธ์–ด ์ฃผ๋ฉด ๋œ๋‹ค.

2-2-2. ๋น„๊ณต๊ฐœ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ ‘๊ทผํ•˜๋„๋ก ํ•ด์ฃผ์ž, docker-registry ์‹œํฌ๋ฆฟ

๋‹ค์Œ์€ Opaque ์œ ํ˜•์˜ ์‹œํฌ๋ฆฟ๊ณผ๋Š” ๋‹ค๋ฅธ ์ข…๋ฅ˜์ธ docker-registry ์œ ํ˜•์˜ ์‹œํฌ๋ฆฟ์— ๋Œ€ํ•ด ๋ฐฐ์›Œ๋ณด์ž. ์ด ์‹œํฌ๋ฆฟ์€ ๋น„๊ณต๊ฐœ ์ด๋ฏธ์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ธ์ฆ์„ ์œ„ํ•œ ์œ ํ˜•์ด๋‹ค. ์ผ๋ก€๋กœ, ์šฐ๋ฆฌ๋Š” ์•ž์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋””ํ”Œ๋กœ์ด๋จผํŠธ, ํŒŒ๋“œ ๋“ฑ์„ ๋ฐฐํฌํ•  ๋•Œ ํ™œ์šฉํ•˜๋Š” YAML ํŒŒ์ผ ๋‚ด์—์„œ ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ ๋‚ด์˜ ์ปจํ…Œ์ด๋„ˆ ์ŠคํŽ™์„ ์ •์˜ํ•ด์ค„ ๋•Œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€๋ฅผ ๋ช…์‹œํ•ด์ฃผ์—ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ช…์‹œํ•œ ์ด๋ฏธ์ง€๋ฅผ ์ตœ์ดˆ๋กœ๋Š” ๋กœ์ปฌ ์„œ๋ฒ„์—์„œ ์ฐพ๊ณ , ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋„์ปค ํ—ˆ๋ธŒ์—์„œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š”๋‹ค.(๋„์ปค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์ด๋ž‘ ๋™์ผ)

 

ํ•˜์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€ ์‹ค์Šตํ•˜๋ฉด์„œ ํ™œ์šฉํ•œ ์ด๋ฏธ์ง€๋“ค์€ ๋ชจ๋‘ ๋„์ปค ํ—ˆ๋ธŒ์— ๊ณต๊ฐœ๋œ ์ด๋ฏธ์ง€์˜€๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์ง€๋งŒ, ๋งŒ์•ฝ ํ™œ์šฉํ•˜๋ ค๋Š” ์ด๋ฏธ์ง€๊ฐ€ ์‚ฌ๋‚ด์˜ ์‚ฌ์„ค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์ด๊ฑฐ๋‚˜ ๋„์ปค ํ—ˆ๋ธŒ์˜ ๊ฐœ์ธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ผ๋ฉด ์ถ”๊ฐ€์ ์ธ ์ธ์ฆ์ ˆ์ฐจ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๋„์ปค์—์„œ๋Š” docker login ๋ช…๋ น์–ด๋กœ ์›ํ•˜๋Š” ์‚ฌ์„ค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋„๋ฉ”์ธ์„ ์ž…๋ ฅํ•˜์—ฌ Username, Password๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์ธ์ฆ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ช…๋ น์–ด ๋Œ€์‹  ์‚ฌ์„ค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ์ธ์ฆ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ„๋„์˜ ์‹œํฌ๋ฆฟ์„ ์ƒ์„ฑํ•ด์„œ ์ธ์ฆ ์ ˆ์ฐจ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

์ด ์ธ์ฆ ์ ˆ์ฐจ๋ฅผ ์œ„ํ•ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ์‹œํฌ๋ฆฟ์„ ์ƒ์„ฑํ•˜๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค. ์šฐ์„  ์‚ฌ์šฉ์ž์˜ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ์˜ .docker ๋””๋ ‰ํ† ๋ฆฌ์— ์กด์žฌํ•˜๋Š” config.json ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด json ํŒŒ์ผ์—๋Š” ์ธ์ฆ์„ ์œ„ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ํŒŒ์ผ์„ --from-file ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€ ์‹œํฌ๋ฆฟ์œผ๋กœ ์ƒ์„ฑํ•˜๋ฉด ๋œ๋‹ค. ์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

$ kubectl create secret generic registry-auth \
--from-file=.dockerconfigjson=/root/.docker/config.json \
--type=kubernetes.io/dockerconfigjson

 

๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ์‹œํฌ๋ฆฟ์„ ์ƒ์„ฑํ•˜๋Š” ๋ช…๋ น์–ด์— ์ง์ ‘ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด(Username, Password)๋ฅผ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. --docker-username, --docker-password ์˜ต์…˜์„ ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ฐธ๊ณ ๋กœ --docker-server ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์„œ ์ธ์ฆํ•  ์‚ฌ์„ค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์„œ๋ฒ„์˜ ๋„๋ฉ”์ธ์„ ์ž…๋ ฅํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. --docker-server ์˜ต์…˜์„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋„์ปค ํ—ˆ๋ธŒ(docker.io) ๋„๋ฉ”์ธ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

 

$ kubectl create secret docker-registry registry-auth-by-cmd \
--docker-username=zedd-user \
--docker-password=zedd1234 \
--docker-server=zedd-registry.com

 

์ด๋ ‡๊ฒŒ ์ƒ์„ฑํ•œ ์‹œํฌ๋ฆฟ์„ ๋””ํ”Œ๋กœ์ด๋จผํŠธ, ํŒŒ๋“œ๋ฅผ ๋ฐฐํฌํ•  ๋•Œ ํ™œ์šฉํ•˜๋Š” YAML ํŒŒ์ผ ๋‚ด์— ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ”๋กœ imagePullSecret ํ•ญ๋ชฉ์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. ์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

apiVerson: v1
kind: Pod
metadata:
  name: private-registry-pod
spec:
  containers:
  - name: zedd-private-container
    image: zedd-image:v1
  imagePullSecrets:
  - name: registry-auth-by-cmd

3. ์ปจํ”ผ๊ทธ๋งต๊ณผ ์‹œํฌ๋ฆฟ์„ ์ข€ ๋” ์‰ฝ๊ฒŒ ๋ฐฐํฌํ•˜์ž, kustomize

๋‹ค์Œ์œผ๋กœ ๋ฐฐ์›Œ๋ณผ ๊ฒƒ์€ ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์›Œ ์˜จ ์ปจํ”ผ๊ทธ๋งต๊ณผ ์‹œํฌ๋ฆฟ์„ ์‰ฝ๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ด์ฃผ๋Š” kustomize์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ์œ„์—์„œ ์ปจํ”ผ๊ทธ๋งต์ด๋‚˜ ์‹œํฌ๋ฆฟ์˜ ๊ฐ’์„ ๋ณ„๋„๋กœ ๊ด€๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด --dry-run ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์„œ YAML ํŒŒ์ผ๋กœ ๋”ฐ๋กœ ์ €์žฅํ•ด๋†“์•„์•ผ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋งŒ์•ฝ์— ์ €์žฅํ•ด์•ผ ํ•  ์ปจํ”ผ๊ทธ๋งต๊ณผ ์‹œํฌ๋ฆฟ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค๋ฉด ๊ทธ ๋ชจ๋“  ์„ค์ •๊ฐ’๋“ค์„ YAML ํŒŒ์ผ์— ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์šฐ์„  ์‹œํฌ๋ฆฟ๊ณผ ๊ฐ™์€ ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ๊ฐ’์„ (๋ฌผ๋ก  ์•”ํ˜ธํ™”๋œ ์ƒํƒœ๋กœ ์„ค์ •๋˜๊ธด ํ•˜์ง€๋งŒ..) ํŒŒ์ผ ๋‚ด์— ์ง์ ‘ ๋ช…์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์ ์œผ๋กœ ์ทจ์•ฝํ•œ๋‹ค๋Š” ์ ๊ณผ ์‹œํฌ๋ฆฟ๊ณผ ์ปจํ”ผ๊ทธ๋งต ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๊ทธ ๋ฐ์ดํ„ฐ๋“ค์„ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ํž˜๋“ค์–ด์ง„๋‹ค.

 

์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ปจํ”ผ๊ทธ๋งต์ด๋‚˜ ์‹œํฌ๋ฆฟ์— ์„ค์ •๋œ ๊ฐ’๋“ค์„ YAML ํŒŒ์ผ์— ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  YAML ํŒŒ์ผ๊ณผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณ„๋„๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” kustomize ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. kustomize๋Š” ์‹œํฌ๋ฆฟ๊ณผ ์ปจํ”ผ๊ทธ๋งต ์ด์™ธ์—๋„ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” YAML ํŒŒ์ผ์˜ ์†์„ฑ ๊ฐ’์„ ๋ณ„๋„๋กœ ์ •์˜ํ•ด ์žฌ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋” ๋‚˜์•„๊ฐ€ ์—ฌ๋Ÿฌ YAML ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ๋ฌถ๋Š” ๋“ฑ ๋‹ค์–‘ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

kustomize๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด ์ž์„ธํžˆ ๋‚˜์™€์žˆ๊ธด ํ•˜์ง€๋งŒ ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๋‹ค. kustomize๋„ ์ผ์ข…์˜ YAML ํŒŒ์ผ์„ ๋ณ„๋„๋กœ ์ž‘์„ฑํ•œ ํ›„, kubectl apply ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐฐํฌํ•˜๋ฉด ๋œ๋‹ค. ๋‹จ, ๊ธฐ์กด์—๋Š” -f ์˜ต์…˜์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, kustomize์˜ ๊ฒฝ์šฐ -k ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค. kustomize๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‹œํฌ๋ฆฟ์„ ์ •์˜ํ•ด๋ณด์ž. YAML ํŒŒ์ผ ๋‚ด์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™์œผ๋ฉฐ, ๋ฐ˜๋“œ์‹œ ํŒŒ์ผ ์ด๋ฆ„์„ kustomization.yaml ๋˜๋Š” kustomization.yml ๋˜๋Š” Kustomization ์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

 

secretGenerator:
- name: kustomize-zedd-secret
  type: Opaque
  files:
  - key=zedd-secret

 

์ด YAML ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ด์„œ ์‹œํฌ๋ฆฟ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ž. ์•„๋ž˜ ๋ช…๋ น์–ด์˜ ๋งˆ์ง€๋ง‰ ์ธ์ž์—๋Š” ํ•ด๋‹น YAML ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ๋ช…์‹œํ•ด์ค€๋‹ค.

 

$ kubectl apply -k ./

 

์œ„ ๋ช…๋ น์–ด๊ฐ€ ์ž˜ ๋™์ž‘ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ฐ˜์ ์œผ๋กœ --dry-run ์˜ต์…˜์„ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ kustomize๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋ณด๋ฉด ๋œ๋‹ค. ์—ญ์‹œ ์•„๋ž˜ ๋ช…๋ น์–ด์˜ ๋งˆ์ง€๋ง‰ ์ธ์ž์—๋Š” ํ•ด๋‹น YAML ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ๋ช…์‹œํ•ด์ค€๋‹ค.

 

$ kubectl kustomize ./

 

๋งŒ์•ฝ ์‹œํฌ๋ฆฟ์ด ์•„๋‹Œ ์ปจํ”ผ๊ทธ๋งต์„ kustomize๋กœ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์œ„ YAML ํŒŒ์ผ์—์„œ secretGenerator ํ‚ค์›Œ๋“œ๋ฅผ configMapGenerator๋กœ ๋ฐ”๊พธ์–ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹œํฌ๋ฆฟ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์ปจํ”ผ๊ทธ๋งต์—๋Š” ์œ ํ˜•(type)์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— type ํ‚ค์›Œ๋“œ๊ฐ€ ์ž‘์„ฑ๋˜์–ด ์žˆ๋Š” ๋ผ์ธ์„ ์‚ญ์ œํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ, kustomize๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‹œํฌ๋ฆฟ ๋˜๋Š” ์ปจํ”ผ๊ทธ๋งต์„ ์ƒ์„ฑํ•˜๋ฉด ์‹œํฌ๋ฆฟ, ์ปจํ”ผ๊ทธ๋งต์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ•ด์‰ฌ๊ฐ’์ด ์‹œํฌ๋ฆฟ, ์ปจํ”ผ๊ทธ๋งต์˜ ์ด๋ฆ„ ๋์— ๋ถ™๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐฉ๊ธˆ ์œ„์—์„œ kustomize๋ฅผ ํ™œ์šฉํ•ด์„œ ์ƒ์„ฑํ•œ ์‹œํฌ๋ฆฟ์„ ๋ณด๋ฉด ์‹œํฌ๋ฆฟ ์ƒ์„ฑ ์‹œ ์ด๋ฆ„์„ kustomize-zedd-secret๋งŒ ๋ช…์‹œํ–ˆ์ง€๋งŒ ์ด๋ฆ„ ๋์— ํ•ด์‰ฌ๊ฐ’์ด ๋ถ™์€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

๋ฌผ๋ก , ์ผ๋ฐ˜์ ์ธ kubectl ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋„ ์ƒ์„ฑํ•  ์‹œํฌ๋ฆฟ, ์ปจํ”ผ๊ทธ๋งต์˜ ์ด๋ฆ„ ๋์— ํ•ด์‰ฌ๊ฐ’์„ ๋ถ™์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๋ช…๋ น์–ด ๋งˆ์ง€๋ง‰์— --append-hash ์˜ต์…˜์„ ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.

4. ์ปจํ”ผ๊ทธ๋งต๊ณผ ์‹œํฌ๋ฆฟ์„ ๊ฐฑ์‹ ํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ •๊ฐ’๋„ ๊ฐฑ์‹ ์‹œํ‚ค๊ธฐ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์„ค์ •๋œ ์ปจํ”ผ๊ทธ๋งต๊ณผ ์‹œํฌ๋ฆฟ ๊ฐ’ ์ค‘ ์ผ๋ถ€๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ปจํ”ผ๊ทธ๋งต๊ณผ ์‹œํฌ๋ฆฟ์— ์„ค์ •๋œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๋•Œ ํฌ๊ฒŒ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” kubectl edit ๋ช…๋ น์–ด๋กœ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•, ๋‘ ๋ฒˆ์งธ๋Š” ์ปจํ”ผ๊ทธ๋งต ๋˜๋Š” ์‹œํฌ๋ฆฟ์ด ๋ช…์‹œ๋œ YAML ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•œ ๋’ค ๋ฆฌ์†Œ์Šค๋ฅผ ์žฌ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•, ๋งˆ์ง€๋ง‰์œผ๋กœ๋Š” kubectl patch ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ์ปจํ”ผ๊ทธ๋งต๊ณผ ์‹œํฌ๋ฆฟ์˜ ๊ฐ’์„ ์œ„ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ€๊ฒฝํ–ˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒŒ๋“œ ๋‚ด์—์„œ๋„ ํ•ด๋‹น ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€๋Š” ์ปจํ”ผ๊ทธ๋งต ๋˜๋Š” ์‹œํฌ๋ฆฟ์„ ํŒŒ๋“œ์— ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.

 

์•ž์„œ์„œ, ์šฐ๋ฆฌ๋Š” ์ปจํ”ผ๊ทธ๋งต ๋˜๋Š” ์‹œํฌ๋ฆฟ์„ ํŒŒ๋“œ์— ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ 2๊ฐ€์ง€๋ฅผ ๋ฐฐ์› ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ํŒŒ๋“œ ๋‚ด๋ถ€์— ์„ค์ •๊ฐ’์„ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์˜€๊ณ , ๋‘ ๋ฒˆ์งธ๋Š” ๋ณผ๋ฅจ์ด๋ผ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ™œ์šฉํ•ด์„œ ํŒŒ๋“œ ๋‚ด๋ถ€์˜ ํŠน์ • ๊ฒฝ๋กœ์— ๋งˆ์šดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์˜€๋‹ค. 

 

๋‘ ๋ฐฉ๋ฒ• ์ค‘ ์ฒซ ๋ฒˆ์žฌ ๋ฐฉ๋ฒ•์€ ์ปจํ”ผ๊ทธ๋งต์ด๋‚˜ ์‹œํฌ๋ฆฟ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ ํŒŒ๋“œ ๋‚ด์— ์ œ๊ณต๋œ ๊ฐ’๋“ค๋„ ๊ฐ™์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ฐ˜๋ฉด์— ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•œ๋‹ค๋ฉด ๋ณ€๊ฒฝ ํ›„์˜ ์ปจํ”ผ๊ทธ๋งต๊ณผ ์‹œํฌ๋ฆฟ์˜ ๊ฐ’์ด ํŒŒ๋“œ ๋‚ด์—์„œ๋„ ๊ฐ™์ด ๋ณ€๊ฒฝ๋œ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•(๋งˆ์šดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•)์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ํŒŒ๋“œ์—์„œ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ •์ด ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์€ ๋˜ ์•„๋‹ˆ๋‹ค. ์ด ๋ง์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜ˆ์‹œ๋กœ ํ•œ ๋ฒˆ ๋“ค์–ด๋ณด์ž.

 

์šฐ๋ฆฌ์—๊ฒŒ๋Š” ๋ชจ๋ธ A, B ๋ผ๋Š” 2๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ๋ชจ๋ธ์ด ์†Œ์Šค์ฝ”๋“œ ๋‚ด์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒฝ๋กœ์— ์กด์žฌํ•˜๊ณ , ์ด ๋ชจ๋ธ์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์šฐ๋ฆฌ๋Š” ์ปจํ”ผ๊ทธ๋งต์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ํŒŒ๋“œ ๋‚ด์— ์ œ๊ณตํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ตœ์ดˆ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ, ๋ชจ๋ธ A๊ฐ€ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ปจํ”ผ๊ทธ๋งต์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋กœ ๋ฐฐํฌํ•˜์˜€๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฐ‘์ž๊ธฐ ์ค‘๊ฐ„์— ๋ชจ๋ธ A์˜ ์„ฑ๋Šฅ์— ๋ฌธ์ œ์ ์ด ์ƒ๊ฒจ ๋ชจ๋ธ B๋กœ ๊ต์ฒดํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์ด ๋•Œ, ์šฐ๋ฆฌ๋Š” ์ปจํ”ผ๊ทธ๋งต์˜ ๊ฐ’ ์ฆ‰, ๋ชจ๋ธ A๊ฐ€ ์žˆ๋Š” ๊ฒฝ๋กœ์—์„œ ๋ชจ๋ธ B๊ฐ€ ์žˆ๋Š” ๊ฒฝ๋กœ๋กœ ๊ฐ’์„ ๋ณ€๊ฒฝ ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—๋„ ๋ฐ˜์˜์‹œํ‚ค๋ ค๊ณ  ํ•œ๋‹ค. 

 

์ปจํ”ผ๊ทธ๋งต์„ ์ˆ˜์ •ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ , ๊ทธ ์ดํ›„๋ถ€ํ„ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์•ž์œผ๋กœ ์–ด๋–ค ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ ๊นŒ? ๋ชจ๋ธ A? B? ์ •๋‹ต์€ A์ด๋‹ค. ์™œ ์ปจํ”ผ๊ทธ๋งต์„ ๊ฐฑ์‹ ์‹œํ‚ค๊ณ , ํŒŒ๋“œ ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ •๊ฐ’๋„ ๊ฐฑ์‹ ์‹œ์ผฐ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์—ฌ์ „ํžˆ ๋ชจ๋ธ A๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๊นŒ? ์ด์œ ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ด๋ฏธ ๋ชจ๋ธ A๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ์„ ๋•Œ ์‹คํ–‰๋œ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ์ด๋ฏธ ๋ชจ๋ธ A ๊ฒฝ๋กœ๋กœ ์„ค์ •๋œ ์ปจํ”ผ๊ทธ๋งต์„ ๋ณธ ์ƒํƒœ์—์„œ ์‹คํ–‰๋œ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋ธ B ๊ฒฝ๋กœ๋กœ ์ˆ˜์ •๋œ ์ปจํ”ผ๊ทธ๋งต์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ƒˆ๋กญ๊ฒŒ ๋ฐ”๋ผ๋ณด๋„๋ก ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๋˜ ๋ณ„๊ฐœ๋กœ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ชจ๋ธ B๋ฅผ ๋ฐ”๋ผ๋ณด๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ? ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ฒŒ๋Š” ํŒŒ๋“œ๋ฅผ ์ƒˆ๋กœ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋งค๋ฒˆ ์ด๋ ‡๊ฒŒ ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์„ ์ˆ˜๊ธฐ๋กœ ํ•ด์ฃผ๊ฒŒ ๋˜๋ฉด ๊ท€์ฐฎ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ์ž๋™ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์„ ๋‹ค์‹œ ์ฝ์–ด ๋“ค์ด๋„๋ก ์ปจํ…Œ์ด๋„ˆ์˜ ํ”„๋กœ์„ธ์Šค์— ๋ณ„๋„์˜ ์‹œ๊ทธ๋„(SIGHUP)์„ ๋ณด๋‚ด๋Š” ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•จ๊ป˜ ํŒŒ๋“œ ๋‚ด์— ํฌํ•จ์‹œ์ผœ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API๋ฅผ ํ™œ์šฉํ•ด์„œ ์ปจํ”ผ๊ทธ๋งต, ์‹œํฌ๋ฆฟ์˜ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์•Œ๋ฆผ(Watch)์„ ๋ฐ›์€ ๋’ค, ์ž๋™์œผ๋กœ reload ํ•˜์—ฌ ๊ฐฑ์‹ ํ•˜๋Š” ๋กœ์ง๋„ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ์ด์™ธ์— ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•  ๊ฒƒ์ด๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž์˜ ๊ธฐ์ˆ  ์ˆ™๋ จ๋„๋‚˜ ์ƒํ™ฉ, ์ž…๋ง›์— ๋งž๊ฒŒ ์„ ํƒ์„ ํ•˜๋ฉด ๋œ๋‹ค.


์ง€๊ธˆ๊นŒ์ง€ ํฌ์ŠคํŒ…์œผ๋กœ ํ•˜์—ฌ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๊ธฐ์ดˆ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ชฉ์ฐจ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ–ˆ๋‹ค. ์ฑ…์—์„œ๋Š” ์ด์ œ ๊ทธ ์ดํ›„์˜ ๋‚ด์šฉ์œผ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•œ๋‹ค. ํ•„์ž๋„ ์ง€๊ธˆ ๋‹น์žฅ์˜ ๊ณต๋ถ€ ์ง„๋„๋Š” ์—ฌ๊ธฐ๊นŒ์ง€๋กœ ํ•˜์—ฌ ๋งˆ๋ฌด๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํ˜„์—…์—์„œ ๋ฌผ๋ก  ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ํ™œ์šฉํ•˜๊ธด ํ•˜์ง€๋งŒ, ํ•„์ž์˜ ๋ฉ”์ธ ์ง๋ฌด๊ฐ€ DevOps ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์•„๋‹ ๋ฟ๋”๋Ÿฌ, ์ถ”ํ›„์— ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์ด ๋‚ด๊ฒŒ ํ•„์š”๋กœ ํ•  ๋•Œ ๊ทธ ๋•Œ ๋‹น์‹œ ์ฑ…์„ ๋‹ค์‹œ ํŽด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•