Contents

[k8s] ๊ฐœ๋…

etcd

etcd ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด, 2379 ํฌํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰๋œ๋‹ค. etcdctl์€ etcd command line client ์ด๊ณ , key-value ์Œ์„ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์ €์žฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. etcs์—๋Š” ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ, nodes/pods/configs/secrets/accounts/roles/bindings.. ์„ ์ €์žฅํ•œ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์— ๋ณ€ํ™”๋ฅผ ์ฃผ๊ฒŒ๋˜๋ฉด, ๋ชจ๋“  ์ •๋ณด๋“ค์€ etcd ์„œ๋ฒ„์— ์—…๋ฐ์ดํŠธ ๋œ๋‹ค.

etcd ์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ•˜๋Š”๋ฐ์—๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ, ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ ๊ทธ๋ฆฌ๊ณ  kubeadm ์„ ์ด์šฉํ•ด์„œ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ด ์žˆ๋‹ค.

1
2
wget -q --https-only \
"https://github.com/coreos/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz"

advertise-client-url ์€ etcd ์„œ๋ฒ„๊ฐ€ listen ํ•˜๊ณ  ์žˆ๋Š” ์ฃผ์†Œ์ด๋‹ค.

kubeadm ์„ ์ด์šฉํ•ด์„œ ๋ฐฐํฌํ•˜๋ฉด, etcd ์„œ๋ฒ„๋Š” ํฌ๋“œ๋กœ์„œ ๋ฐฐํฌ๋œ๋‹ค.

1
kubectl get pods -n kube-system

์œ„ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ, etcd ์„œ๋น„์Šค๊ฐ€ ๋ฐฐํฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋”ฐ.

etcd ๊ฐ€ ๊ด€๋ฆฌํ•˜๊ณ  ์ž‡๋Š” key ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด์„  ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

1
kubectl exec etcd-master -n kube-system etcdctl get / --prefix -keys-only

๊ณ ๊ฐ€์šฉ์„ฑ์„ ์œ„ํ•ด, ์—ฌ๋Ÿฌ๊ฐœ์˜ ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•  ๊ฒฝ์šฐ, etcd ๊ฐ€ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ์กด์žฌํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ๋ชจ๋“  ์„œ๋ฒ„๊ฐ€ ์„œ๋กœ์˜ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด ์•Œ๊ฒŒ ํ•ด์•ผํ•œ๋‹ค.

kube-api server

kubectl ๋ช…๋ น์„ ์ž…๋ ฅํ•˜๋ฉด, kube api server ๊ฐ€ ์š”์ฒญ์— ๋Œ€ํ•ด ์ธ์ฆ์„ ํ•˜๊ณ  ์œ ํšจ์„ฑ์„ ํŒ๋‹จํ•œ ํ›„ etcd ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ์›ํ•˜๋Š” ์‘๋‹ต์„ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

kube api server๋Š” etcd์™€ ์ง์ ‘ ์†Œํ†ตํ•˜๋Š” ์œ ์ผํ•œ ์„œ๋ฒ„์ด๋‹ค.

  1. ์œ ์ €๋ฅผ ์ธ์ฆ
  2. ์š”์ฒญ์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธ
  3. ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ
  4. update etcd
  5. scheduler
  6. kubelet

Kube Control Manager

Node Controller,Replication Controller ๋“ฑ์˜ ์ˆ˜๋งŽ์€ ํŒจํ‚ค์ง€๋“ค์ด ๋ชจ์—ฌ์žˆ๋Š” ์ง‘ํ•ฉ Kube Control Manager ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋‹ค์šด๋ฐ›๊ณ , kube-controller-manager.service๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค. wget https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kube-controller-manager

kube-controller-manager๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด ๋งŽ์€ ์˜ต์…˜๊ฐ’๋“ค์ด ์žˆ๋Š”๋ฐ ๊ทธ ์ค‘ node-monitor-period/ node-monitor-grace-period/ pod-eviction-timeout ๋“ฑ๋“ฑ์ด ์žˆ๋”ฐ. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์ปจํŠธ๋กค๋Ÿฌ ๋“ค์ด ํ™œ์„ฑํ™”๋˜์ง€๋งŒ, ๋ช‡๋ช‡๊ฐœ์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ์ง€ ๋ง์ง€ ์„ ํƒํ•˜๋Š” ์˜ต์…˜๊ฐ’๋„ ์žˆ๋‹ค.

์œ„ ๋ฐฉ๋ฒ• ๋ง๊ณ ๋„, kubeadm ์œผ๋กœ๋„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

kube scheduler

์–ด๋–ค pod๊ฐ€ ์–ด๋–ค node ์— ๋“ค์–ด๊ฐ€์•ผ ํ•  ์ง€ ๊ฒฐ์ •๋งŒ ํ•จ wget https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kube-scheduler

cat /etc/kubernetes/manifests/kube-scheduler.yaml kubeadm ์œผ๋กœ ๋ฐฐํฌํ–ˆ์„ ๋•Œ ์Šค์ผ€์ฅด๋Ÿฌ ์˜ต์…˜์„ ๋ณด๋Š” ๋ช…๋ น์–ด

kublet

pod๋ฅผ ๋…ธ๋“œ์— ์œ„์น˜ ๋…ธ๋“œ์™€ ํŒŒ๋“œ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง

kubeadm ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ kublet์„ ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•˜์ง€ ์•Š๋Š”๋‹ค ๋”ฐ๋ผ์„œ worker node์— kublet์„ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค.

kube proxy

pod network ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์— ์œ„์น˜ํ•œ ๋‚ด๋ถ€ ๊ฐ€์ƒ ๋ง์ด๋‹ค. ์œ„ ๋ง์„ ์ด์šฉํ•ด์„œ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์˜ pod๋“ค์ด ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

kube proxy๋Š” ๊ฐ๊ฐ์˜ ๋…ธ๋“œ์— ์„ค์น˜๋˜์–ด ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋‹ค ๋…ธ๋“œ ๋‚ด์— ํฌ๋“œ๊ฐ€ ์ƒ์„ฑ๋  ๋Œ€ ๋งˆ๋‹ค kube proxy๋Š” iptable์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ํŠน์ • ํŠธ๋ž˜ํ”ฝ์ด ํŠน์ • ๋…ธ๋“œ ๋‚ด ํฌ๋“œ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

pods

pod์•ˆ์— ํ•œ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋งŒ ๋“ค์–ด๊ฐ€๋Š”๊ฒŒ ์•„๋‹˜. ๊ทผ๋ฐ ์Šค์ผ€์ผ์„ ํ‚ค์šธ ๊ฒฝ์šฐ, ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ€์ง€๋Š” pod๋ฅผ ๋Š˜๋ฆผ.

pod ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ• kubectl run nginx –image nginx ์œ„ ๋ช…๋ น์–ด๋Š” ๋…ธ๋“œ ๋‚ด์— pod๋ฅผ ์ƒ์„ฑํ•˜๊ณ  pod ๋‚ด์—๋Š” ๋„์ปค ํ—ˆ๋ธŒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋ฐ›์€ nginx ์ด๋ฏธ์ง€๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

pod๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด yaml ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๋Š”๋ฐ ์ƒ์œ„ ๋ ˆ๋ฒจ์—๋Š” apiVersion, kind, metadata, spec์„ ์ •์˜ํ•œใ„ท. apiVersion : ๋ณดํ†ต pod๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์“ฐ๋Š” api Version ์€ v1 ์„ ์“ด๋‹ค. kind: pod / service / replicaSet / deployment ๋“ฑ์ด ๋“ค์–ด๊ฐ„๋‹ค. metadata : name / labels ์˜ ํ•˜์œ„ ํ•„๋“œ๋ฅผ ๊ฐ€์ง€๊ณ , labels๋Š” app์ด๋ผ๋Š” ํ•˜์œ„ํ•„๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค. name์€ pod์˜ ์ด๋ฆ„์„ ์˜๋ฏธํ•œ๋‹ค. label์€ pod๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ํ•„๋“œ๊ฐ’์ด๋‹ค. spec ์—๋Š” pod๋‚ด์— ์œ„์น˜ํ•˜๋Š” container๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ์“ด๋‹ค. spec์˜ ํ•˜์œ„ ํ•„๋“œ์ธ container๋Š” listํ˜•ํƒœ์ด๋‹ค . ์ด์œ ๋Š” pod๋‚ด์— ์—ฌ๋Ÿฌ๊ฐœ์˜ container๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์‹ค์ƒ์ค‘์ธ pod ๋‚ด ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๊ต์ฒดํ•˜๋Š” ๋ฐฉ๋ฒ• kubectl edit ~~ .Yml ํŒŒ์ผ ์ˆ˜์ •

replication controller

replication์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” high availability. replication controller ๋Š” ํฌ๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค. ๋ถ€ํ•˜๊ฐ€ ์ฆ๊ฐ€ํ•ด์„œ pod๊ฐ€ ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ๊ฑธ์ณ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด, replication controller๋Š” ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

Replication controller ๋ฅผ yaml ํŒŒ์ผ์— ์ •์˜ํ•  ๋•Œ spec ํ•„๋“œ ํ•˜์œ„์— templateํ•„๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ template ํ•„๋“œ์—๋Š” pod์— ์ •์˜ํ–ˆ๋˜, label / spec์ด ๋“ค์–ด๊ฐ„๋‹ค. ์ถ”๊ฐ€๋กœ replica set์„ ๋ช‡๊ฐœ ์šด์šฉํ•  ๊ฑด์ง€์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ํ•˜๋Š” ํ•„๋“œ๋Š” spec.replicas = #replica๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

ํ˜„์žฌ ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฌด์Šจ replication controller๊ฐ€ ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด, kubectl get replicationcontroller ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

Replica set

replica set์„ yaml์— ์ •์˜ํ•  ๋•Œ apiVersion = apps/v1 ์œผ๋กœ ์ •์˜ํ•œ๋‹ค. spec์€ replication controller spec ์— ์ •์˜ํ•œ ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ๊ตฌ์„ฑํ•œ๋‹ค. replica set์˜ spec ํ•„๋“œ์—๋Š” replication controller์™€ ๋‹ค๋ฅธ์ ์ด ์žˆ๋Š”๋ฐ selector ํ•„๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.( replication controller ์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.)

Replica set ์€ replication controller ์˜ ๋‹ค์Œ๋ฒ„์ „์œผ๋กœ, ๋” ์„ธ๋ฐ€ํ•˜๊ฒŒ ํŒŒ๋“œ ์ง‘ํ•ฉ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์š”์ฆˆ์Œ์—๋Š” replication controller๋ณด๋‹ค๋Š” replication Set์ด๋‚˜ ๊ทธ๋ณด๋‹ค ๋” ์ถ”์ƒํ™”๋œ deployment๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

replicas์˜ ์ˆซ์ž๋ฅผ ๊ต์ฒดํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‹ค์Œ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

1.replicaset-def.yaml ํŒŒ์ผ ์ˆ˜์ • -> kubectl replace -f replicaset-def.yaml

  1. kubectl scale –replicas=6 -f replicaset-def.yaml

pod container ์ด๋ฏธ์ง€๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  kubectl ๋ช…๋ น์–ด๋กœ ์ ์šฉํ•ด๋„ ์ด๋ฏธ ์‹คํ–‰์ค‘์ธ ์ด๋ฏธ์ง€๋Š” ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค. kubectl edit -f ~~.yml ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•œ ํ›„, kubectl delete pods […pods name] ์„ ํ†ตํ•ด์„œ ๋ชจ๋“  pod๋ฅผ ์ œ๊ฑฐํ•ด์ค€๋‹ค.

deployments

deployment๋Š” Replicaset์„ ์ถ”์ƒํ™” ํ•œ ๊ฒƒ์œผ๋กœ, ๋ฐฐํฌ ๊ณผ์ •์—์„œ ๋ฐฐํฌ๋ฅผ ์ค‘์ง€ํ•˜๊ฑฐ๋‚˜, ๋กค๋ฐฑํ•˜๊ฑฐ๋‚˜ ๋“ฑ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. definition.yml์€ replicaset๊ณผ ๋น„์Šทํ•˜๊ณ , kind: Deployment๋กœ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

Services

๋ฐฑ์—”๋“œ/ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋“œ๊ฐ„์˜ ์—ฐ๊ฒฐ ๋˜๋Š” ์‚ฌ์šฉ์ž์™€์˜ ์—ฐ๊ฒฐ ๋˜๋Š” ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€์˜ ์—ฐ๊ฒฐ์„ ์ œ๊ณตํ•œ๋‹ค.

์›น์•ฑ์„ ๋ฐฐํฌํ–ˆ์„ ๋•Œ ์™ธ๋ถ€์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•˜๋Š”์ง€? ssh ๋กœ ๋…ธ๋“œ์— ์ ‘์†ํ•ด์„œ, curl ๋ช…๋ น์–ด๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋„์–ด์ง„ pod์˜ ๋‚ด๋ถ€ ip ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ๋˜๋Š”๋ฐ ์ด๊ฑด ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ด ์•„๋‹˜. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” service๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ํŠน์ • ํฌํŠธ๋ฅผ ๋ฆฌ์Šจํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ์š”์ฒญ์ด ์˜ค๊ฒŒ๋˜๋ฉด ํ•ด๋‹น ์š”์ฒญ์„ ํŠน์ • pod๋กœ ์š”์ฒญํ•ด์„œ ์›ํ•˜๋Š” ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ

์„œ๋น„์Šค์˜ ์œ ํ˜•

  • nodePort: ์„œ๋น„์Šค๊ฐ€ ๋‚ด๋ถ€ ํฌํŠธ๋ฅผ ๋…ธ๋“œ์˜ ํฌํŠธ์— ์—‘์„ธ์Šคํ•  ์ˆ˜ ์ž‡๊ฒŒ ํ•ด์คŒ

๋…ธ๋“œ ์ž์ฒด์— ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ํฌํŠธ๊ฐ€ ์žˆ์Œ ์ด๋ฆ„ nodePort๋ผ๊ณ  ํ•จ. nodeport ๋Š” 30000~32767์˜ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ์Œ. ์„œ๋น„์Šค๋Š” ์ด nodePort๋ฅผ ๋ฆฌ์Šจํ•˜๊ณ  ์žˆ๊ณ  ์„œ๋น„์Šค ํฌํŠธ(port)์™€ pod์˜ ๋‚ด๋ถ€ํฌํŠธ(targetPort)๋ฅผ ์—ฐ๊ฒฐํ•จ

์„œ๋น„์Šค yaml์˜ spec์—๋Š” type, ports ๊ฐ€ ์žˆ์Œ ์œ„ ๊ทธ๋ฆผ๊ณผ ๋˜‘๊ฐ™์ด ๊ตฌ์„ฑํ•œ๋‹ค๋ฉด, Type: NodePort / ports.targetPort : 80, ports.port:80, ports.nodePort:30008 ์ด ๋จ ports๋Š” array ํƒ€์ž…์ž„

์„œ๋น„์Šค์™€ pod๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ’๋„ ์„ค์ •ํ•ด์ค˜์•ผ ๋Œ. pod์—๋Š” label์ด ๋ถ€์—ฌ๋˜์—ˆ์„ํ…Œ๋‹ˆ, selector๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๋‹น pod ์ •๋ณด๋ฅผ ์„œ๋น„์Šค ์„ค์ •ํŒŒ์ผ์— ๋„ฃ์–ด์ฃผ๋ฉด ๋จ

๋ถ€ํ•˜ ๋ถ„์‚ฐ ๋ชฉ์ ์œผ๋กœ node ๋‚ด์— ์—ฌ๋Ÿฌ๊ฐœ์˜ pod๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ๋‹ค๋ฉด, ๊ฐ๊ฐ์˜ pod๋Š” ๋˜‘๊ฐ™์€ label์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผํ•˜๊ณ  ๊ทธ label์„ service๊ฐ’์— ๋„ฃ์–ด์ฃผ๋ฉด๋จ

๋งŒ์•ฝ ์—ฌ๋Ÿฌ๊ฐœ์˜ node์— ๋ถ„์‚ฐํ•˜๊ฒŒ ๋˜๋ฉด, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ๊ฑธ์ณ ํ•ด๋‹น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ด€๋ฆฌํ•œ๋‹ค.

  • clusterIp: ๋‚ด๋ถ€ ํฌ๋“œ๊ฐ„์— commnuication ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ

๋ชจ๋“  pod๋Š” ip๊ฐ€ ํ• ๋‹น๋˜์–ด ์žˆ๋‹ค. ์ด IP๋“ค์€ ์ •์ ์ด ์•„๋‹˜. pod๊ฐ€ ์ œ๊ฑฐ๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋˜๋ฉด ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์— ์˜์กดํ•  ์ˆ˜ ์—†๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด, pod๋ฅผ ๊ทธ๋ฃน์œผ๋กœ ์ง“๊ณ  ๋‹จ์ผ ์ ‘๊ทผ๊ฐ€๋Šฅํ•œ ๋‹จ์ผ interface๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด ๋‹จ์ผ ์ง„์ž…์ ์„ clusterIP๋ผ๊ณ  ํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ณ„์ธต์„ ๊ตฌ์„ฑ๋œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ผ๋ฉด, ํ”„๋ก ํŠธ์—”๋“œ์—์„  ๋ฐฑ์—”๋“œ๋กœ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„ , ๋ฐฑ์—”๋“œ์˜ clusterIP๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค.

clusterIP๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„ , spec.type: ClusterIP๋ฅผ ์ƒ์„ฑํ•˜๊ณ , selector๋กœ pod.label์— ์ง€์ •๋œ ๊ฐ’๋“ค์„ ๊ฐ€์ ธ์˜จ๋‹ค. ์ถ”๊ฐ€๋กœ, spec์—๋Š” pod์˜ ๋…ธ์ถœ ํฌํŠธ์ธ targetPort / ์„œ๋น„์Šค์˜ ํฌํŠธ์ธ port ๊ฐ’์„ ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

  • load balancer

namespaces

๊ฐ๊ฐ์˜ namespace์—๋Š” policy๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ•ด์•ผ๋จ service-name.namespace.service.domain

๋‹ค๋ฅธ namespace์— ์œ„์น˜ํ•œ pod๋ฅผ ์—ด๊ฑฐํ•˜๋ ค๋ฉด, kubectl get pods –namespace= ?

ํŠน์ • pod๋ฅผ ์ •์˜ํ•  ๋•Œ namespace๋ฅผ ์ •์˜ํ•˜๋ ค๋ฉด , metadata.namespace์— ์ •์˜ํ•˜๋ฉด ๋œ๋‹ค.

namespace ์ž์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด kubectl create namespace []

ํŠน์ • namespace๋ฅผ ํ˜„์žฌ context๋กœ ์˜ฎ๊ฒจ์˜ค๊ธฐ ์œ„ํ•ด์„ (–namespace option ์—†์ด ์“ฐ๋ ค๋ฉด) kubectl config set-context $(kubectl config current-context) –namespace=??

๋ชจ๋“  namespace ์— ์œ„์น˜ํ•œ pod๋ฅผ ๋ณด๋ ค๋ฉด kubectl get pods –all-namespace

namespace์—์„œ ๋ฆฌ์†Œ์Šค ํ• ๋‹น๋Ÿ‰์„ ์ œ์–ดํ•˜๋ ค๋ฉด, quota ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋ฉด ๋œ๋‹ค.

Scheduler

์Šค์ผ€์ฅด๋Ÿฌ๋Š”, pod๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, nodeName์ด๋ž€ ๊ฑธ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์ง€์ •ํ•ด์คŒ. ์Šค์ผ€์ฅด๋Ÿฌ๊ฐ€ ์—†๋‹ค๋ฉด, pod๋Š” pending ์ƒํƒœ์ž„. ๊ทธ๋ž˜์„œ pod๋ฅผ ์ƒ์„ฑํ•  ๋•Œ nodeNameํ•„๋“œ๋ฅผ ์ง€์ •ํ•ด์ค˜์•ผ๋Œ nodeName์€ ์ƒ์„ฑ ์‹œ์—๋งŒ ํ• ๋‹นํ•  ์ˆ˜ ์—†์Œ. ์ด๋ฏธ ์ƒ์„ฑ๋œ pod์˜ nodeName์€ ๋ณ€๊ฒฝ๋ชปํ•จ nodeName์„ ์ง€์ •ํ•ด์ฃผ๊ณ  ๋‚˜๋ฉด, binding api ์— ์ƒ์„ฑํ•  binding ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ json ํฌ๋งท์œผ๋กœ ์ „์†กํ•ด์•ผ๋Œ

labels and selector

label ์— env=dev๋ผ๊ณ  ์ง€์ •ํ•œ pod๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ• kubectl get pods –selector env=pod

label์— env=prod ์ธ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค์˜ ๊ฐฏ์ˆ˜๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ• kubectl get all –selector env=prod –no-headers | wc -l

selector ๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ label์„ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ kubectl get all –selector env=prod,bu=finance,…

taint and tolerant

pod๊ฐ€ node์— ๋ฐฐ์น˜๋  ๋•Œ ์–ด๋–ค ์ œ์•ฝ์„ ๊ฐ€์ง€๊ณ  ๋ฐฐ์น˜๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ taint๋Š” ํŠน์ • label์„ ๊ฐ€์ง„ pod๋งŒ ๋ฐฐ์น˜๋˜๊ฒŒ ํ•˜๋Š” ๊ฑฐ๊ณ , tolerant ๋Š” taint๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ์— pod๊ฐ€ ๋ฐฐ์น˜๋˜๋ ค๊ณ  ํ•  ๋•Œ ๋‚ด์„ฑ์„ ์ค˜์„œ ํŠน์ • taint๋ฅผ ๊ฐ€์ง„ node๋ผ๋„ pod๊ฐ€ ๋ฐฐ์น˜๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ

node์— taint๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ฝ”๋“œ

kubectl taint nodes [node-name] key=value:[NoSchedule, PreferNoSchedule, NoExecute]

๋งŒ์•ฝ kubectl taint node node1 color=blue:NoSchedule ๋ช…๋ น์„ ์ด์šฉํ•ด, node1์— color=blue๋ผ๋Š” taint๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค๋ฉด, ํ•ด๋‹น ๋…ธ๋“œ์— ๋‚ด์„ฑ์„ ๊ฐ€์ง€๋Š” pod๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

1
2
3
4
5
6
7
...
spec
  tolerations:
  - key: "color"
    operator:"Equals"
    value: "blue"
    effect: "noSchedule"

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€, double quote๋กœ ๊ฐ’์„ ์ž…๋ ฅํ•ด์•ผ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๊ตฌ์„ฑ๋˜๋ฉด, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” master node์— ๊ทธ ์–ด๋–ค pod๋„ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก taint๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.

node์—์„œ taint ์ œ๊ฑฐํ•˜๊ธฐ kubectl taint node controlplane node-role.kubernetes.io/control-plane:NoSchedule-

Node selector & node affinity

kubectl label nodes [node-name] [key=value] ๋กœ node์— label์„ ๋ถ€์—ฌํ•˜๊ฒŒ ๋˜๋ฉด, pod๊ฐ€ ์Šค์ผ€์ฅด๋Ÿฌ์— ์˜ํ•ด node์— ๋ฐฐ์น˜๋  ๋•Œ ํŠน์ • label์„ ๊ฐ€์ง„ node์—๋งŒ ํ• ๋‹น๋˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. spec.nodeSelector -> ๋…ธ๋“œ์— ์ง€์ •ํ•œ key-value ์Œ

node selector๋Š” ๊ทผ๋ฐ ํ•œ๊ณ„๊ฐ€ ์žˆ์Œ. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • label์ด ์•„๋‹Œ node์—๋งŒ ํ• ๋‹นํ•œ๋‹ค๊ฑฐ๋‚˜ ํ•  ๋•Œ๋Š” node selector๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†์Œ

๊ทธ๋ž˜์„œ ์ƒ๊ฒจ๋‚œ๊ฒŒ node affinity

node affinity๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ expression์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ,

๋งŒ์•ฝ, ํŠน์ • label์— ๋Œ€ํ•œ ์„ ํ˜ธ๋„๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ๋กœ pod๋ฅผ ํ• ๋‹นํ•˜๋ผ๊ณ  ์ •์˜ํ•œ ํ›„, ๋‚˜์ค‘์— ํ•ด๋‹น node์˜ label์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์–ด๋ฏ๊ฒŒ ๋ ๊นŒ? ๋˜๋Š” ํŠน์ • label์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด??

๊ทธ๋Ÿฌํ•œ ์ƒํ™ฉ์— ๋†“์˜€์„ ๋•Œ pod๊ฐ€ ์–ด๋–ค ํ–‰๋™์„ ํ• ์ง€ ๊ฒฐ์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด node affinity types์ด๋‹ค

node affinity type

pod์˜ lifecycle์—๋Š” 2๊ฐ€์ง€ ์ƒํƒœ๊ฐ€ ์žˆ๋‹ค. during-scheduling / during-execution

  • requiredDuringSchedulingIgnoredDuringExecution

during scheduing ์ด required์ด๊ธฐ ๋•Œ๋ฌธ์—, ํŠน์ • label์„ ๊ฐ€์ง„ node๋ฅผ ์ฐพ์ง€ ๋ชปํ• ๊ฒฝ์šฐ, pod๋Š” ์Šค์ผ€์ฅด๋˜์ง€ ์•Š๋Š”๋‹ค. during execution์ด ignored์ด๊ธฐ ๋•Œ๋ฌธ์—, node์— ํ• ๋‹น๋œ ํŠน์ • label์„ ์ง€์šธ๊ฒฝ์šฐ, ํ•ด๋‹น label์— ๋Œ€ํ•œ ์„ ํ˜ธ๋„๋ฅผ ๊ฐ€์ง„ pod๊ฐ€ ์‹คํ–‰์ค‘์ธ ์ƒํƒœ์ผ ๊ฒฝ์šฐ ํ•ด๋‹น pod๊ฐ€ ๊ณ„์† ์‹คํ–‰๋˜๋„๋ก ๋†”๋‘”๋‹ค.

  • preferredDuringSchedulingIgnoredDuringExecution

during scheduing ์ด preferred์ด๊ธฐ ๋•Œ๋ฌธ์—, ํŠน์ • label์„ ๊ฐ€์ง„ node๋ฅผ ์ฐพ์ง€ ๋ชปํ•ด๋„ pod๋Š” ์Šค์ผ€์ฅด๋ง๋œ๋‹ค.

  • requiredDuringSchedulingRequiredDuringExecution

ํŠน์ • label์— ๋Œ€ํ•œ affinity ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” pod๊ฐ€ node์— ๋ฐฐ์น˜๋˜๊ณ  ์‹คํ–‰์ค‘์ธ ์ƒํƒœ์ผ ๋•Œ, ํŠน์ • label์„ node์—์„œ ์ œ๊ฑฐํ–ˆ์„ ๊ฒฝ์šฐ, ์‹คํ–‰์ค‘์ธ pod๋ผ๋„ ํ•ด๋‹น pod๋ฅผ node์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.

Resource requirement and limits

spec.resources ํ•„๋“œ๋ฅผ ์ด์šฉํ•ด์„œ, pod๊ฐ€ ์‹คํ–‰๋˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์–ผ๋งˆ๋‚˜ ํ•„์š”ํ•œ์ง€ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, spec.resources.limitํ•„๋“œ์— pod๊ฐ€ ์‹คํ–‰๋  ๋•Œ ๋ฆฌ์†Œ์Šค๋ฅผ ์–ผ๋งŒํผ ์ œํ•œํ•˜๋Š” ์ง€๋ฅผ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

1
2
3
4
5
6
7
8
spec:
  resources:
    requests:
      cpu: 2
      mem: "4Gi"
    limits:
      cpu: 2
      mem: "4Gi"

cpu๋Š” Limit ์— ๋ช…์‹œ๋œ ๊ฒƒ ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜๋ฉด oom ์—๋Ÿฌ(out of memory)๋กœ pod๋Š” ์ข…๋ฃŒ๋œ๋‹ค.

resource์˜ ๋ช…์„ธ๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, node ๋‚ด์— ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์„œ๋กœ๋ฅผ ์งˆ์‹์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ • namespace ๋‚ด์—์„œ ์ƒ์„ฑ๋˜๋Š” pod์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด์‚ฐ resource quota๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๊ฑธ ์‚ฌ์šฉํ•˜๋ฉด, namespace๊ฐ„์˜ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋‚ด์—์„œ ๋ถ„๋ฐฐํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-quota
  namespace: example-namespace
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi
    pods: "10"
    services: "5"
    persistentvolumeclaims: "4"
    request.storage: 10Gi

Pod ์ˆ˜์ •ํ•˜๊ธฐ

Pod์˜ ๋ช‡ ๊ฐ€์ง€ ํŠน์ • ํ•„๋“œ๋งŒ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด:

spec.containers[].image spec.initContainers[].image spec.activeDeadlineSeconds spec.tolerations ๊ทธ ์™ธ์˜ ๋‹ค๋ฅธ ์„ค์ •๋“ค์€ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋ณ€๊ฒฝ์„ ์›ํ•  ๊ฒฝ์šฐ Pod๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ˆ˜์ •๋œ ์„ค์ •์„ ๋ฐ˜์˜ํ•˜์—ฌ ์ƒˆ๋กœ์šด Pod๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ด. ์ด๋ฅผ ์œ„ํ•ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด:

์ง์ ‘ ์ˆ˜์ • ์‹œ๋„: kubectl edit pod ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด vi ์—๋””ํ„ฐ์—์„œ Pod์˜ ์„ค์ •์„ ์—ด์–ด ์ˆ˜์ •์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ํ•„๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋ ค ํ•˜๋ฉด ์ €์žฅ์ด ๊ฑฐ๋ถ€๋  ๊ฑฐ์•ผ. ์ˆ˜์ •๋œ ํŒŒ์ผ์€ ์ž„์‹œ ์œ„์น˜์— ์ €์žฅ๋˜๋ฉฐ, ๊ธฐ์กด Pod๋ฅผ ์‚ญ์ œํ•œ ํ›„ ์ด ์ž„์‹œ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ด ์ƒˆ Pod๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด. ํŒŒ์ผ ์ถ”์ถœ ๋ฐ ์ˆ˜์ •: kubectl get pod -o yaml > my-new-pod.yaml ๋ช…๋ น์„ ํ†ตํ•ด Pod์˜ ์„ค์ •์„ YAML ํŒŒ์ผ๋กœ ์ถ”์ถœํ•˜๊ณ , vi ์—๋””ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ํ•„์š”ํ•œ ์ˆ˜์ •์„ ํ•œ ํ›„ ์ €์žฅํ•ด. ๊ทธ ๋‹ค์Œ ๊ธฐ์กด์˜ Pod๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ˆ˜์ •๋œ ํŒŒ์ผ๋กœ ์ƒˆ๋กœ์šด Pod๋ฅผ ์ƒ์„ฑํ•ด.

Deployment ์ˆ˜์ •ํ•˜๊ธฐ

Deployment์˜ ๊ฒฝ์šฐ, Pod ํ…œํ”Œ๋ฆฟ์ด Deployment ์ŠคํŽ™์˜ ํ•˜์œ„ ์š”์†Œ๋กœ ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, Deployment ๋‚ด์˜ Pod ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•œ ํ•„๋“œ๋Š” ์ž์œ ๋กญ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์–ด. ์ˆ˜์ •์ด ์ด๋ฃจ์–ด์ง€๋ฉด Deployment๋Š” ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜์—ฌ ๊ธฐ์กด Pod๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กœ์šด Pod๋ฅผ ์ƒ์„ฑํ•ด. Deployment๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋ฉด kubectl edit deployment ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ผ.

Daemon set

daemon set์€ ๋…ธ๋“œ๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋  ๋•Œ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฐฐํฌํ•ด์•ผ๋  pod๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด๋†“๋Š”๊ฒƒ ์˜ˆ๋ฅผ ๋“ค์–ด, monitoring / log collector / kube proxy ๊ฐ™์€ ๊ฒƒ๋“ค ..

daemon set์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋Š” replicaSet ์ด๋ž‘ ๊ฑฐ์˜ ๋˜‘๊ฐ™์€๋ฐ kind๋งŒ ๋‹ค๋ฆ„

๋ชจ๋“  namespace์— ์ •์˜๋œ daemon set์˜ ๊ฐœ์ˆ˜๊ตฌํ•˜๊ธฐ kubectl get daemonset -A

static pod

๋งŒ์•ฝ masternode๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„๊ฒฝ์šฐ, kublet์€ ๋…ธ๋“œ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. kubeapi server๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ, kublet์€ /etc/kubernetes/manifests ํŒŒ์ผ์— ์œ„์น˜ํ•œ pod definition ํŒŒ์ผ์„ ์ฝ์–ด์„œ pod๋ฅผ ๋…ธ๋“œ๋‚ด์— ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. kublet์€ ํ•ด๋‹น๊ฒฝ๋กœ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฝ์–ด์„œ pod๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ pod๋ฅผ static pod๋ผ๊ณ  ํ•œ๋‹ค. ํ•ด๋‹น ๊ฒฝ๋กœ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€, kublet bin ํŒŒ์ผ์„ ์ด์šฉํ•ด์„œ kublet ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ• ๋•Œ –pod-manifest-path ํ•„๋“œ์— ์ ์ ˆํ•œ ๊ฐ’์„ ์ฃผ์–ด์„œ ๊ฒฝ๋กœ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜๋Š” –config=kubeconfig.yaml ์˜ต์…˜์„ ์ฃผ๊ณ  , kubeconfig yaml ํŒŒ์ผ์—๋Š” static pod ๊ฐ€ ์œ„์น˜ํ•  path๋ฅผ ์ ์„ ์ˆ˜ ์žˆ๋‹ค. (staticPodPath : /etc/kubernetes/manifest)

master node๊ฐ€ ์กด์žฌํ•˜๊ณ  kubeapi server ๊ฐ€ ์žˆ์„๊ฒฝ์šฐ, http ํ†ต์‹ ์„ ์‚ฌ์šฉํ•ด์„œ kublet์ด static pod๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ์ƒ์„ฑ๋œ pod๋Š” ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค. kubeapi server๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ„์ ‘์ ์œผ๋กœ pod์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฃผ๋กœ ์ค‘์š”ํ•œ pod๋ฅผ ์ƒ์„ฑํ•  ๋•Œ static pod๋ฅผ ํ™œ์šฉํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, master node์— ์†ํ•ด์žˆ๋Š” kubeapi server / controller manager / scheduler๋“ฑ์ด static pod์ด๋‹ค.

  • static pod vs daemon set

How many static pods exist in this cluster in all namespaces?

์ผ๋ฐ˜์ ์œผ๋กœ kubectl get pods -A ๋กœ ๋ชจ๋“  pod๋ฅผ ์กฐํšŒํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ํ•ด๋‹น pod๊ฐ€ static pod์ธ์ง€๋Š” ์ •ํ™•ํžˆ ์•Œ ์ˆ˜ ์—†๋‹ค. ์ •ํ™•ํžˆ ์•Œ๊ธฐ ์œ„ํ•ด์„ , pod๋ฅผ describe ํ•˜๊ณ  ํ•ด๋‹น pod์˜ owner๊ฐ€ Node์ธ์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

์ถ”๊ฐ€๋กœ, static pod์˜ ๊ฒฝ์šฐ, suffix๋กœ ํ•ด๋‹น node์˜ ์ด๋ฆ„์ด ๋ถ™๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๋…ธ๋“œ์˜ ๋’ค์— node์ด๋ฆ„์ด ๋ถ™์–ด์žˆ๋‹ค๋ฉด ํ•ด๋‹น pod๊ฐ€ static pod์ธ์ง€ ์˜์‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

multiple scheduler

ํŠน์ • pod๊ฐ€ customize ๋œ ์Šค์ผ€์ฅด๋Ÿฌ์— ์˜ํ•ด ๋…ธ๋“œ๋กœ ๋ฐฐ์น˜๋ฐ›๊ธธ ์›ํ•œ๋‹ค๋ฉด, custom scheduler๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

https://kubernetes.io/ko/docs/tasks/extend-kubernetes/configure-multiple-schedulers/

ํŠน์ • pod๊ฐ€ custom scheduler์— ํ• ๋‹น๋˜์—ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด kubectl get events -o wide๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ • scheduler์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด kubectl log [scheduler-name] ์„ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

scheduler profile

์Šค์ผ€์ฅด๋Ÿฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค๋กœ ์šด์˜๋œ๋‹ค.

pod-definitionํŒŒ์ผ์„์ด์šฉํ•ด Pod๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ์ด๋•Œ priorityClassName์„ ํ†ตํ•ด pod๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ priority๋ฅผ ๋ถ€์—ฌํ•  ์ˆ˜๋„์žˆ๋‹ค.

  1. scheduling queue ์— ์ƒ์„ฑ๋  pod๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.
  • scheduling plugin : priority sort
  1. filter step : queue์—์„œ pod๋ฅผ popํ•œ ํ›„, ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋Š” ๋…ธ๋“œ๋“ค์„ filtering ํ•œ๋‹ค.
  • scheduling plugin : Node resource fit / NodeUnscheduled(–dry-run) / NodeName
  1. scoring step : ๋‚จ์€ node ์ค‘์—์„œ, ํ•ด๋‹น pod๋ฅผ ํ• ๋‹นํ–ˆ์„ ๋•Œ ์—ฌ์œ ๋ถ„์ด ๋งŽ์€ ๋…ธ๋“œ์— ๋” ๋†’์€ ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.
  • scheduling plugin : Node resource fit plugin์„์ด์šฉํ•ด์„œ ๋…ธ๋“œ์— ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌ image locality : pod๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ์ด๋ฏธ์ง€์ธ node์—๊ฒŒ ๋†’์€ ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌ
  1. binding step: ๊ฐ€์ค‘์น˜๊ฐ€ ์ œ์ผ ๋†’์€ node์— pod๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
  • scheduling plugin : default binding

Monitor

kubelet์—๋Š” ์„œ๋ธŒ component๋กœ cAdvisor ๊ฐ€ ์žˆ๋Š”๋ฐ ๋…ธ๋“œ๋‚ด์—์„œ ์‹คํ–‰์ค‘์ธ ํฌ๋“œ์˜ ๋ฉ”ํŠธ๋ฆญ์„ ๋ฐ›๋Š”๋‹ค. ์ด ๋ฉ”ํŠธ๋ฆญ์„ kubeapi server ๋ฅผ ์ด์šฉํ•ด์„œ ํฌ๋“œ์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.

minikube cluster๋ฅผ ์šด์˜์ค‘์ด๋ผ๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ cAdvisor๋ฅผ ํ™œ์„ฑํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. minikube addons enable metric-server

minikube๋ฅผ ์šด์˜ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด, metric-server.git ์„ ๋‹ค์šด๋ฐ›๊ณ  ๋‹ค์šด๋ฐ›์€ ํŒŒ์ผ์˜ definition ํŒŒ์ผ์„ ์ ์šฉํ•ด์ค€๋‹ค.

kubectl top node / pod ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ๋…ธ๋“œ ๋˜๋Š” ํฌ๋“œ์˜ ๋ฆฌ์†Œ์Šค ์ ์œ  ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

rolling update and rollback

pod์˜ ์ด๋ฏธ์ง€๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š”๋ฐฉ๋ฒ•์—๋Š” 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  1. yamlํŒŒ์ผ์„ ์ˆ˜์ •ํ•œ ํ›„ apply ๋ช…๋ น์„ ์ ์šฉ
  2. kubectl set image [deployment-name] [image]

์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ์„ ์ ์šฉํ•˜๊ณ  describe ํ•ด๋ณด๋ฉด, strategyType : Recreate / Rolling update ๋ฐฉ์‹ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. recreate ์˜ ๊ฒฝ์šฐ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” pod๋ฅผ ํ•œ๋ฒˆ์— ์ข…๋ฃŒํ›„ ๋ฐ”๋€ ์ด๋ฏธ์ง€๊ฐ€ ์ ์šฉ๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒˆ๋กœ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด๊ณ  rolling update์˜ ๊ฒฝ์šฐ pod1๊ฐœ์”ฉ ์ข…๋ฃŒํ•˜๊ณ  1๊ฐœ์”ฉ ์ƒˆ๋กœ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” deployment๋ฅผ ์ƒˆ๋กœ ๋ฐฐํฌํ•  ๋•Œ ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” replicaset์„ ๊ตฌ์„ฑํ•˜๋Š” pod๊ฐฏ์ˆ˜๋งŒํผ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” replicaset์„ ์ƒˆ๋กœ ํ•˜๋‚˜ ์ƒ์„ฑํ•˜๊ณ  ๊ธฐ์กด replicaset์˜ pod๋ฅผ ์ฃฝ์ด๋ฉด์„œ ์ƒˆ๋กœ์šด replicaset์— ์ƒˆ๋กœ์šด pod๋ฅผ ๋„์šด๋‹ค.

kubectl rollout status deployment/my-deployment -> ๋ฐฐํฌ์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

rollback์„ ํ•˜๊ธฐ ์œ„ํ•ด์„  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. kubectl rollout undo [deployment-name]

commands and arguments

environment variables

spec.container.env ๋Š” key-value ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋ฐ›์•„์„œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ๋“ฑ๋กํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๋‹จ์ˆœํžˆ key-value ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, configMapRef / secretValueRef๋ฅผ ํ†ตํ•ด ์ฐธ์กฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

  • config Maps
  1. imperative way
1
2
3
4
5
6
kubectl create configMap \
    <config-name> --from-literal=<key>=<value>
                  --from-literal=<key>=<value>

kubectl create configMap \
    <config-name> --from-file=
  1. declarative way
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# configmap-definition.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: game-demo
data:
  # property-like keys; each key maps to a simple value
  player_initial_lives: "3"
  ui_properties_file_name: "user-interface.properties"

  # file-like keys
  game.properties: |
    enemy.types=aliens,monsters
    player.maximum-lives=5
  user-interface.properties: |
    color.good=purple
    color.bad=yellow
    allow.textmode=true


~ > kubectl create -f configmap-definition.yaml

configure secret

os upgrade

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

  1. ๋…ธ๋“œ๋ฅผ Unschedulable๋กœ ์„ค์ •ํ•˜๊ธฐ ๋จผ์ €, ๋…ธ๋“œ๋ฅผ unschedulable ์ƒํƒœ๋กœ ์„ค์ •ํ•ด์„œ ์ƒˆ๋กœ์šด ํŒŒ๋“œ๊ฐ€ ์Šค์ผ€์ค„๋˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•ด. ์ด๊ฒƒ์€ kubectl cordon ๋ช…๋ น์–ด๋กœ ํ•  ์ˆ˜ ์žˆ์–ด:

bash Copy code kubectl cordon node01 ์ด ๋ช…๋ น์–ด๋Š” node01์ด๋ผ๋Š” ๋…ธ๋“œ์— ๋” ์ด์ƒ ์ƒˆ๋กœ์šด ํŒŒ๋“œ๊ฐ€ ํ• ๋‹น๋˜์ง€ ์•Š๋„๋ก ์„ค์ •ํ•ด.

  1. ๊ธฐ์กด ํŒŒ๋“œ๋“ค์„ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ด๋™์‹œํ‚ค๊ธฐ ์ด์ œ node01์— ์žˆ๋Š” ๊ธฐ์กด ํŒŒ๋“œ๋“ค์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ด๋™์‹œํ‚ฌ ์ฐจ๋ก€์•ผ. ์ด ์ž‘์—…์€ kubectl drain ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด:

bash Copy code kubectl drain node01 –ignore-daemonsets –delete-emptydir-data –ignore-daemonsets: ๋ฐ๋ชฌ์…‹์œผ๋กœ ์ƒ์„ฑ๋œ ํŒŒ๋“œ๋Š” ๋ฌด์‹œํ•˜๊ณ  ๋“œ๋ ˆ์ธ์„ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ด. –delete-emptydir-data: EmptyDir ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜๋Š” ํŒŒ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ํŒŒ๋“œ๋ฅผ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ด๋™์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด. 3. ์œ ์ง€๋ณด์ˆ˜ ํ›„ ๋…ธ๋“œ ๋ณต๊ตฌ ์œ ์ง€๋ณด์ˆ˜ ์ž‘์—…์ด ๋๋‚˜๊ณ  ๋…ธ๋“œ๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ๋…ธ๋“œ๋ฅผ ๋‹ค์‹œ schedulable ์ƒํƒœ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด:

bash Copy code kubectl uncordon node01 ์ด ๋ช…๋ น์–ด๋Š” node01 ๋…ธ๋“œ๋ฅผ ๋‹ค์‹œ ํ™œ์„ฑํ™”์‹œ์ผœ์„œ ์ƒˆ๋กœ์šด ํŒŒ๋“œ๋“ค์ด ์Šค์ผ€์ค„๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด.

์ด๋Ÿฐ ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ๋…ธ๋“œ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€๋ณด์ˆ˜ ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•˜๊ณ , ์ž‘์—… ํ›„ ๋‹ค์‹œ ์ •์ƒ์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์–ด! ํ•„์š”ํ•œ ๋„์›€์ด๋‚˜ ์ถ”๊ฐ€ ์งˆ๋ฌธ์ด ์žˆ์œผ๋ฉด ์–ธ์ œ๋“ ์ง€ ๋ฌผ์–ด๋ด ์ค˜.

Cluster upgrade

controlplane ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ๊ฐ์˜ pod์˜ ๋ฒ„์ „์€ kube-apiserver๋ฅผ ๋„˜์–ด์„ค ์ˆ˜ ์—†๋‹ค.

master node๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์šด์‹œ์ผœ๋„, worker node๊ฐ€ ์šด์˜๋˜๋Š” ๊ฒƒ์—๋Š” ์ง€์žฅ์ด ์—†๋‹ค. ํ•˜์ง€๋งŒ, ์ƒˆ๋กœ์šด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ„์œผํ•˜๋‹ค.

backup and restore

https://velog.io/@khyup0629/K8S-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%84%A4%EC%A0%95

restore etcd

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
Command:
      etcd
      --advertise-client-urls=https://192.6.229.9:2379
      --cert-file=/etc/kubernetes/pki/etcd/server.crt
      --client-cert-auth=true
      --data-dir=/var/lib/etcd
      --experimental-initial-corrupt-check=true
      --experimental-watch-progress-notify-interval=5s
      --initial-advertise-peer-urls=https://192.6.229.9:2380
      --initial-cluster=controlplane=https://192.6.229.9:2380
      --key-file=/etc/kubernetes/pki/etcd/server.key
      --listen-client-urls=https://127.0.0.1:2379,https://192.6.229.9:2379
      --listen-metrics-urls=http://127.0.0.1:2381
      --listen-peer-urls=https://192.6.229.9:2380
      --name=controlplane
      --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
      --peer-client-cert-auth=true
      --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
      --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
      --snapshot-count=10000
      --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt

์œ„ ์˜ต์…˜ ์ค‘ url ๊ด€๋ จ ์˜ต์…˜ –advertise-client-urls=https://192.6.229.9:2379 –initial-advertise-peer-urls=https://192.6.229.9:2380 –initial-cluster=controlplane=https://192.6.229.9:2380 –listen-client-urls=https://127.0.0.1:2379,https://192.6.229.9:2379 etcd ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ํŠน์ • ์ฃผ์†Œ์—์„œ ๋ฆฌ์Šค๋‹ํ•˜๊ณ  ์žˆ๋Š” url์„ ์˜๋ฏธํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ localhost๋Š” etcd ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๋จธ์‹ ๊ณผ ๊ฐ™์€ ๋จธ์‹ ์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์„œ๋ฒ„์˜ ์ฃผ์†Œ๋ฅผ ๋ฐ›๋Š” url์„ ์˜๋ฏธํ•˜๊ณ  ๋’ค ์ฃผ์†Œ๋Š” etcd ์„œ๋ฒ„๊ฐ€ ์„ค์น˜๋œ ๋จธ์‹ ์˜ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค์— ํ• ๋‹น๋œ ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋‚˜ ํด๋Ÿฌ์Šคํ„ฐ๋‚ด ๋‹ค๋ฅธ pod๋Š” ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด etcd ์„œ๋ฒ„์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋‹ค. –listen-metrics-urls=http://127.0.0.1:2381 –listen-peer-urls=https://192.6.229.9:2380