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

kubectl์„ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•: ์ž์„ธํ•œ ๊ฐ€์ด๋“œ
Kubernetes๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ kubectl์€ ์•„๋งˆ๋„ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ์ค‘ ํ•˜๋‚˜์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŠน์ • ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…ํ•˜๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์„ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ๋„๊ตฌ๋ฅผ ์ž˜ ์—ฐ๊ตฌํ•˜๊ณ  ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํŒ€ Mail.ru์˜ Kubernetes aaS kubectl์„ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํŒ๊ณผ ์š”๋ น์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” Daniel Weibel์˜ ๊ธฐ์‚ฌ๋ฅผ ๋ฒˆ์—ญํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Kubernetes์— ๋Œ€ํ•ด ๋” ๊นŠ์ด ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์ €์ž์— ๋”ฐ๋ฅด๋ฉด ์ด ๊ธฐ์‚ฌ์˜ ๋ชฉํ‘œ๋Š” Kubernetes๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ์ƒ์ ์ธ ์ž‘์—…์„ ๋” ํšจ์œจ์ ์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋” ์ฆ๊ฒ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค!

์†Œ๊ฐœ: kubectl์ด๋ž€?

kubectl์„ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋ ค๋ฉด kubectl์ด ๋ฌด์—‡์ธ์ง€, ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ kubectl์€ Kubernetes ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์–ดํŒ์ž…๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์ ์œผ๋กœ ๋งํ•˜๋ฉด, kubectl์€ Kubernetes API ํด๋ผ์ด์–ธํŠธ์ž…๋‹ˆ๋‹ค.

Kubernetes API๋Š” HTTP REST API์ž…๋‹ˆ๋‹ค. ์ด API๋Š” ์™„์ „ํžˆ ์ œ์–ด๋˜๋Š” ์ง„์ •ํ•œ Kubernetes ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“  Kubernetes ์ž‘์—…์ด API ์—”๋“œํฌ์ธํŠธ๋กœ ๋…ธ์ถœ๋˜๊ณ  ํ•ด๋‹น ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ HTTP ์š”์ฒญ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ kubectl์˜ ์ฃผ์š” ์ž‘์—…์€ Kubernetes API์— HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

kubectl์„ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•: ์ž์„ธํ•œ ๊ฐ€์ด๋“œ
Kubernetes๋Š” ์™„์ „ํžˆ ๋ฆฌ์†Œ์Šค ์ง€ํ–ฅ์ ์ธ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฆฌ์†Œ์Šค์˜ ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๋ชจ๋“  Kubernetes ์ž‘์—…์ด CRUD ์ž‘์—…์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜์—ฌ Kubernetes๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Kubernetes๋Š” ๋ฆฌ์†Œ์Šค์˜ ํ˜„์žฌ ์ƒํƒœ์— ๋”ฐ๋ผ ์ˆ˜ํ–‰ํ•  ์ž‘์—…์„ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ Kubernetes API ์ฐธ์กฐ๋Š” ๊ด€๋ จ ์ž‘์—…๊ณผ ํ•จ๊ป˜ ๋ฆฌ์†Œ์Šค ์œ ํ˜• ๋ชฉ๋ก์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค..

ReplicaSet ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ํŒŒ์ผ์˜ ReplicaSet๋ฅผ ์ด๋ฆ„์œผ๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. replicaset.yaml, ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

$ kubectl create -f replicaset.yaml

๊ทธ๋Ÿฌ๋ฉด ReplicaSet ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋’ค์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š” ๊ฑธ๊นŒ์š”?

Kubernetes์—๋Š” ReplicaSet ์ƒ์„ฑ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ž‘์—…๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ API ์—”๋“œํฌ์ธํŠธ๋กœ ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์— ๋Œ€ํ•œ ํŠน์ • API ์—”๋“œํฌ์ธํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

POST /apis/apps/v1/namespaces/{namespace}/replicasets

๋ชจ๋“  Kubernetes ์ž‘์—…์— ๋Œ€ํ•œ API ์—”๋“œํฌ์ธํŠธ๋Š” ๋‹ค์Œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ์ฐธ์กฐ (ํฌํ•จ ์œ„์˜ ๋์ ). ์—”๋“œํฌ์ธํŠธ์— ์‹ค์ œ ์š”์ฒญ์„ ํ•˜๋ ค๋ฉด ๋จผ์ € API ์ฐธ์กฐ์— ๋‚˜์—ด๋œ ์—”๋“œํฌ์ธํŠธ ๊ฒฝ๋กœ์— API ์„œ๋ฒ„ URL์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์œ„ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด kubectl์€ ์œ„ API ์—”๋“œํฌ์ธํŠธ์— HTTP POST ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ํŒŒ์ผ์— ์ œ๊ณตํ•œ ReplicaSet ์ •์˜ replicaset.yaml, ์š”์ฒญ ๋ณธ๋ฌธ์— ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

์ด๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ชจ๋“  ๋ช…๋ น์— ๋Œ€ํ•ด kubectl์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒฝ์šฐ์— kubectl์€ ์ ์ ˆํ•œ Kubernetes API ์—”๋“œํฌ์ธํŠธ์— HTTP ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Kubernetes๋ฅผ ์™„์ „ํžˆ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. curlKubernetes API์— HTTP ์š”์ฒญ์„ ์ˆ˜๋™์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. Kubectl์„ ์‚ฌ์šฉํ•˜๋ฉด Kubernetes API๋ฅผ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด kubectl์ด ๋ฌด์—‡์ธ์ง€, ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  kubectl ์‚ฌ์šฉ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•  Kubernetes API์— ๊ด€ํ•œ ๋˜ ๋‹ค๋ฅธ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes์˜ ๋‚ด๋ถ€ ์„ธ๊ณ„๋ฅผ ๊ฐ„๋‹จํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Kubernetes์˜ ๋‚ด๋ถ€ ์„ธ๊ณ„

Kubernetes๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰๋˜๋Š” ๋…๋ฆฝ ๊ตฌ์„ฑ ์š”์†Œ ์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๊ณ  ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์ž‘์—…์ž ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋ฉฐ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๊ณ ์œ ํ•œ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๋…ธ๋“œ์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋‘ฅ๊ทผ ์ฒœ์žฅ - ๋ฆฌ์†Œ์Šค ์ •์˜๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค(์ผ๋ฐ˜์ ์œผ๋กœ etcd์ž…๋‹ˆ๋‹ค).
  2. API ์„œ๋ฒ„ โ€” API๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  3. ์ปจํŠธ๋กค๋Ÿฌ ๊ด€๋ฆฌ์ž โ€” ๋ฆฌ์†Œ์Šค ์ƒํƒœ๊ฐ€ ์‚ฌ์–‘์„ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  4. ์Šค์ผ€์ค„๋Ÿฌ โ€” ์ž‘์—…์ž ๋…ธ๋“œ์—์„œ ํฌ๋“œ๋ฅผ ์˜ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—…์ž ๋…ธ๋“œ์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์ฟ ๋ฒจ๋ › โ€” ์ž‘์—… ๋…ธ๋“œ์—์„œ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์–ด๋–ป๊ฒŒ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ์™„๋ฃŒํ–ˆ๋‹ค๊ณ  ๊ฐ€์ • ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. kubectl create -f replicaset.yaml, ๊ทธ ํ›„ kubectl์€ HTTP POST ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ReplicaSet API ์—”๋“œํฌ์ธํŠธ (ReplicaSet ๋ฆฌ์†Œ์Šค ์ •์˜ ์ „๋‹ฌ)

ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋Š” ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋‚˜์š”?

  1. ํ•œ ํ›„ kubectl create -f replicaset.yaml API ์„œ๋ฒ„๋Š” ReplicaSet ๋ฆฌ์†Œ์Šค ์ •์˜๋ฅผ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

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

  2. ๋‹ค์Œ์œผ๋กœ, ReplicaSet ๋ฆฌ์†Œ์Šค์˜ ์ƒ์„ฑ, ์ˆ˜์ • ๋ฐ ์‚ญ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ReplicaSet ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ ๊ด€๋ฆฌ์ž์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

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

  3. ReplicaSet ์ปจํŠธ๋กค๋Ÿฌ๋Š” ReplicaSet ์ •์˜์˜ ํฌ๋“œ ํ…œํ”Œ๋ฆฟ์— ๋”ฐ๋ผ ๊ฐ ReplicaSet ๋ณต์ œ๋ณธ์— ๋Œ€ํ•œ ํฌ๋“œ ์ •์˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

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

  4. ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์‹œ์ž‘๋˜์–ด ์•„์ง ์ž‘์—…์ž ๋…ธ๋“œ์— ํ• ๋‹น๋˜์ง€ ์•Š์€ Pod๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.

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

  5. ์Šค์ผ€์ค„๋Ÿฌ๋Š” ๊ฐ Pod์— ์ ํ•ฉํ•œ ์ž‘์—…์ž ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ  ์ด ์ •๋ณด๋ฅผ ์ €์žฅ์†Œ์˜ Pod ์ •์˜์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

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

  6. Pod๊ฐ€ ํ• ๋‹น๋œ ์ž‘์—…์ž ๋…ธ๋“œ์—์„œ Kubelet์ด ์‹œ์ž‘๋˜๊ณ  ์ด ๋…ธ๋“œ์— ํ• ๋‹น๋œ Pod๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.

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

  7. Kubelet์€ ์Šคํ† ๋ฆฌ์ง€์—์„œ ํฌ๋“œ ์ •์˜๋ฅผ ์ฝ๊ณ  Docker์™€ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์— ๋…ธ๋“œ์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.

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

์•„๋ž˜๋Š” ์ด ์„ค๋ช…์˜ ํ…์ŠคํŠธ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

ReplicaSet ์ƒ์„ฑ ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ API ์š”์ฒญ์€ API ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. API ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ์ธ์ฆํ•˜๊ณ  ReplicaSet ๋ฆฌ์†Œ์Šค ์ •์˜๋ฅผ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ด ์ด๋ฒคํŠธ๋Š” ์ปจํŠธ๋กค๋Ÿฌ ๊ด€๋ฆฌ์ž์˜ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค์ธ ReplicaSet ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ReplicaSet ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ €์žฅ์†Œ์—์„œ ReplicaSet ๋ฆฌ์†Œ์Šค์˜ ์ƒ์„ฑ, ์—…๋ฐ์ดํŠธ ๋ฐ ์‚ญ์ œ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ด๋Ÿฌํ•œ ์ผ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ด๋ฒคํŠธ ์•Œ๋ฆผ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

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

์ƒˆ Pod ์ƒ์„ฑ์€ ์•„์ง ์ž‘์—…์ž ๋…ธ๋“œ์— ๋Œ€ํ•ด ์˜ˆ์•ฝ๋˜์ง€ ์•Š์€ Pod ์ •์˜๋ฅผ ์ถ”์ ํ•˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ์Šค์ผ€์ค„๋Ÿฌ๋Š” ๊ฐ Pod์— ์ ํ•ฉํ•œ ์ž‘์—…์ž ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ  ์ €์žฅ์†Œ์˜ Pod ์ •์˜๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹œ์ ๊นŒ์ง€๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์–ด๋””์—์„œ๋„ ์›Œํฌ๋กœ๋“œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ํ•œ ๋ชจ๋“  ์ผ์€ - ์ด๋Š” ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์˜ ์ €์žฅ์†Œ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ์ด๋ฒคํŠธ๋Š” ์ž‘์—…์ž ๋…ธ๋“œ์— ๋Œ€ํ•ด ์˜ˆ์•ฝ๋œ Pod๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” Kubelets๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ReplicaSet Pod๊ฐ€ ์„ค์น˜๋œ ์ž‘์—…์ž ๋…ธ๋“œ์˜ Kubelet์€ Docker์™€ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์— ํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๋„๋ก ์ง€์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ ReplicaSet ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋งˆ์นจ๋‚ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค!

Kubernetes API์˜ ์—ญํ• 

์ด์ „ ์˜ˆ์—์„œ ๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ Kubernetes ๊ตฌ์„ฑ ์š”์†Œ(API ์„œ๋ฒ„ ๋ฐ ์Šคํ† ๋ฆฌ์ง€ ์ œ์™ธ)๋Š” ์Šคํ† ๋ฆฌ์ง€์˜ ๋ฆฌ์†Œ์Šค ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์‹œํ•˜๊ณ  ์Šคํ† ๋ฆฌ์ง€์˜ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์Šคํ† ๋ฆฌ์ง€์™€ ์ง์ ‘ ์ƒํ˜ธ ์ž‘์šฉํ•˜์ง€ ์•Š๊ณ  Kubernetes API๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.:

  1. ReplicaSet ์ปจํŠธ๋กค๋Ÿฌ๋Š” API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ReplicaSet ๋‚˜์—ด ๋งค๊ฐœ๋ณ€์ˆ˜ ํฌํ•จ watch ReplicaSet ๋ฆฌ์†Œ์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
  2. ReplicaSet ์ปจํŠธ๋กค๋Ÿฌ๋Š” API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํฌ๋“œ ์ƒ์„ฑ (ํฌ๋“œ ์ƒ์„ฑ) ํฌ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. ์Šค์ผ€์ค„๋Ÿฌ๋Š” API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŒจ์น˜ ํฌ๋“œ (ํฌ๋“œ ํŽธ์ง‘) ์„ ํƒํ•œ ์ž‘์—…์ž ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋กœ ํฌ๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

๋ณด์‹œ๋‹ค์‹œํ”ผ ์ด๋Š” kubectl์ด ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ API์ž…๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ์™€ ์™ธ๋ถ€ ์‚ฌ์šฉ์ž์— ๋™์ผํ•œ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ Kubernetes ์„ค๊ณ„์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

์ด์ œ Kubernetes์˜ ์ž‘๋™ ๋ฐฉ์‹์„ ์š”์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์Šคํ† ๋ฆฌ์ง€๋Š” ์ƒํƒœ, ์ฆ‰ Kubernetes ๋ฆฌ์†Œ์Šค๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  2. API ์„œ๋ฒ„๋Š” Kubernetes API ํ˜•์‹์œผ๋กœ ์Šคํ† ๋ฆฌ์ง€์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‹ค๋ฅธ ๋ชจ๋“  Kubernetes ๊ตฌ์„ฑ ์š”์†Œ์™€ ์‚ฌ์šฉ์ž๋Š” API๋ฅผ ํ†ตํ•ด Kubernetes ์ƒํƒœ(๋ฆฌ์†Œ์Šค)๋ฅผ ์ฝ๊ณ  ๊ด€์ฐฐํ•˜๊ณ  ์กฐ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐœ๋…์„ ์•„๋Š” ๊ฒƒ์€ kubectl์„ ๋” ์ž˜ ์ดํ•ดํ•˜๊ณ  ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์ด์ œ kubectl์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ตฌ์ฒด์ ์ธ ํŒ๊ณผ ์š”๋ น์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1. ๋ช…๋ น์™„์„ฑ์„ ์ด์šฉํ•œ ์ž…๋ ฅ์†๋„ ํ–ฅ์ƒ

kubectl์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฐ€์žฅ ์œ ์šฉํ•˜์ง€๋งŒ ์ข…์ข… ๊ฐ„๊ณผ๋˜๋Š” ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜๋Š” ๋ช…๋ น ์™„์„ฑ์ž…๋‹ˆ๋‹ค.

๋ช…๋ น ์™„์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด Tab ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ kubectl ๋ช…๋ น์˜ ์ผ๋ถ€๋ฅผ ์ž๋™์œผ๋กœ ์™„์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฆฌ์†Œ์Šค ์ด๋ฆ„๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ํ•ญ๋ชฉ์„ ํฌํ•จํ•˜์—ฌ ํ•˜์œ„ ๋ช…๋ น, ์˜ต์…˜ ๋ฐ ์ธ์ˆ˜์— ๋Œ€ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

kubectl ๋ช…๋ น ์™„์„ฑ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

kubectl์„ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•: ์ž์„ธํ•œ ๊ฐ€์ด๋“œ
๋ช…๋ น ์™„์„ฑ์€ Bash ๋ฐ Zsh ์…ธ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ณต์‹ ๊ฐ€์ด๋“œ ์ž๋™ ์™„์„ฑ ์„ค์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ง€์นจ์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ ์•„๋ž˜์—์„œ๋Š” ์งง์€ ๋ฐœ์ทŒ ๋‚ด์šฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น ์™„์„ฑ ์ž‘๋™ ๋ฐฉ์‹

๋ช…๋ น ์™„์„ฑ์€ ์™„์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ํ•˜๋Š” ์…ธ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ํ™•์žฅ ์Šคํฌ๋ฆฝํŠธ๋Š” ํŠน์ • ๋ช…๋ น์— ๋Œ€ํ•œ ํ™•์žฅ ๋™์ž‘์„ ์ •์˜ํ•˜๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค.

Kubectl์€ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ Bash ๋ฐ Zsh์šฉ ํ™•์žฅ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

$ kubectl completion bash

ะ˜ะปะธ :

$ kubectl completion zsh

์ด๋ก ์ ์œผ๋กœ๋Š” kubectl์ด ๋ช…๋ น์„ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด๋Ÿฌํ•œ ๋ช…๋ น์˜ ์ถœ๋ ฅ์„ ์ ์ ˆํ•œ ๋ช…๋ น ์…ธ์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ Bash(Linux์™€ MacOS์˜ ์ฐจ์ด์  ํฌํ•จ)์™€ Zsh์˜ ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์•„๋ž˜์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์˜ต์…˜์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฆฌ๋ˆ…์Šค์—์„œ์˜ ๋ฐฐ์‰ฌ

Bash ์™„์„ฑ ์Šคํฌ๋ฆฝํŠธ๋Š” bash-completion ํŒจํ‚ค์ง€์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฏ€๋กœ ๋จผ์ € ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$ sudo apt-get install bash-completion

ะ˜ะปะธ :

$ yum install bash-completion

๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง€๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ type _init_completion

์‰˜ ํ•จ์ˆ˜ ์ฝ”๋“œ๊ฐ€ ์ถœ๋ ฅ๋˜๋ฉด bash-completion์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์น˜๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ช…๋ น์—์„œ "์ฐพ์„ ์ˆ˜ ์—†์Œ" ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํŒŒ์ผ์— ๋‹ค์Œ ์ค„์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ~ / .bashrc:

$ source /usr/share/bash-completion/bash_completion

์ด ์ค„์„ ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ~ / .bashrc bash-completion์„ ์„ค์น˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด๋Š” APT์—๋Š” ํ•„์š”ํ•˜์ง€๋งŒ YUM์—๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

bash-completion์„ ์„ค์น˜ํ•œ ํ›„์—๋Š” kubectl ์™„์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ชจ๋“  ์…ธ ์„ธ์…˜์—์„œ ํ™œ์„ฑํ™”๋˜๋„๋ก ๋ชจ๋“  ๊ฒƒ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ํŒŒ์ผ์— ๋‹ค์Œ ์ค„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ~ / .bashrc:

source <(kubectl completion bash)

๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ kubectl ํ™•์žฅ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. /etc/bash_completion.d (์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ƒ์„ฑ):

$ kubectl completion bash >/etc/bash_completion.d/kubectl

์นดํƒˆ๋กœ๊ทธ์˜ ๋ชจ๋“  ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ์Šคํฌ๋ฆฝํŠธ /etc/bash_completion.d bash ์™„์„ฑ์— ์ž๋™์œผ๋กœ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๋‘ ์˜ต์…˜ ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์…ธ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด kubectl ๋ช…๋ น ์™„์„ฑ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

MacOS์˜ ๋ฐฐ์‹œ

MacOS์—์„œ๋Š” ์„ค์ •์ด ์ข€ ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค MacOS๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Bash ๋ฒ„์ „ 3.2๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ kubectl ์ž๋™ ์™„์„ฑ ์Šคํฌ๋ฆฝํŠธ์—๋Š” Bash ๋ฒ„์ „ 4.1 ์ด์ƒ์ด ํ•„์š”ํ•˜๋ฉฐ Bash 3.2์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

MacOS์—์„œ ์˜ค๋ž˜๋œ ๋ฒ„์ „์˜ Bash๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ๋ผ์ด์„ผ์Šค ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Bash ๋ฒ„์ „ 4๋Š” Apple์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” GPLv3์— ๋”ฐ๋ผ ๋ผ์ด์„ผ์Šค๊ฐ€ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

MacOS์—์„œ kubectl ์ž๋™ ์™„์„ฑ์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ์ตœ์‹  ๋ฒ„์ „์˜ Bash๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ๋œ Bash๋ฅผ ๊ธฐ๋ณธ ์…ธ๋กœ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‚˜์ค‘์— ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ธฐ์‚ฌ์— ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.MacOS์—์„œ Bash ์—…๋ฐ์ดํŠธ".

๊ณ„์†ํ•˜๊ธฐ ์ „์— ์ตœ์‹  ๋ฒ„์ „์˜ Bash๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”(์ถœ๋ ฅ์„ ํ™•์ธํ•˜์„ธ์š”). bash --version).

Bash ์™„๋ฃŒ ์Šคํฌ๋ฆฝํŠธ๋Š” ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. bash ์™„์„ฑ์ด๋ฏ€๋กœ ๋จผ์ € ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ bash ์™„์„ฑ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ œ:

$ brew install bash-completion@2

์—ฌ๊ธฐ์— @2 bash-completion ๋ฒ„์ „ 2๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. kubectl ์ž๋™ ์™„์„ฑ์—๋Š” bash-completion v2๊ฐ€ ํ•„์š”ํ•˜๊ณ  bash-completion v2์—๋Š” ์ตœ์†Œ Bash ๋ฒ„์ „ 4.1์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น ์ถœ๋ ฅ brew-install ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ์‚ฌํ•ญ์„ ์ง€์ •ํ•˜๋Š” ์ฃผ์˜ ์‚ฌํ•ญ ์„น์…˜์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ~/.bash_profile:

export BASH_COMPLETION_COMPAT_DIR=/usr/local/etc/bash_completion.d
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . 
"/usr/local/etc/profile.d/bash_completion.sh"

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ ์ค„์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ~/.bash_profile, ๋ฐ c ~/.bashrc. ์ด ๊ฒฝ์šฐ ๊ธฐ๋ณธ ๋ช…๋ น ์…ธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•˜์œ„ ๋ช…๋ น ์…ธ์—์„œ๋„ ์ž๋™ ์™„์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช…๋ น ์…ธ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ ํ›„ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ type _init_completion

์ถœ๋ ฅ์— ์…ธ ๊ธฐ๋Šฅ์ด ํ‘œ์‹œ๋˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ œ ๋ชจ๋“  ์„ธ์…˜์—์„œ kubectl ์ž๋™ ์™„์„ฑ์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ์ค„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ~/.bashrc:

source <(kubectl completion bash)

๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ํด๋”์— ์ž๋™ ์™„์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. /usr/local/etc/bash_completion.d:

$ kubectl completion bash
>/usr/local/etc/bash_completion.d/kubectl

์ด ๋ฐฉ๋ฒ•์€ Homebrew๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ bash ์™„์„ฑ์„ ์„ค์น˜ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ bash-completion์€ ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ํ•œ ๊ฒฝ์šฐ Homebrew๋ฅผ ์‚ฌ์šฉํ•˜๋Š” kubectl, ์ž๋™ ์™„์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ํด๋”์— ๋ฐฐ์น˜๋˜๋ฏ€๋กœ ์ด์ „ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. /usr/local/etc/bash_completion.d ์„ค์น˜ ์ค‘. ์ด ๊ฒฝ์šฐ bash-completion์„ ์„ค์น˜ํ•˜์ž๋งˆ์ž kubectl ์ž๋™ ์™„์„ฑ์ด ์ž‘๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ์˜ต์…˜์€ ๋ชจ๋‘ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

Zsh

Zsh์šฉ ์ž๋™ ์™„์„ฑ ์Šคํฌ๋ฆฝํŠธ์—๋Š” ์ข…์†์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ช…๋ น ์…ธ์„ ๋กœ๋“œํ•  ๋•Œ ์ด๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…์€ ~/.zshrc ํŒŒ์ผ:

source <(kubectl completion zsh)

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ not found: compdef ์‰˜์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ ํ›„ ๋‚ด์žฅ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค compdef. ํŒŒ์ผ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์ถ”๊ฐ€ํ•˜์—ฌ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ~/.zshrc ๋‹ค์Œ :

autoload -Uz compinit
compinit

2. ๋ฆฌ์†Œ์Šค ์‚ฌ์–‘์„ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•˜์„ธ์š”

YAML ๋ฆฌ์†Œ์Šค ์ •์˜๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ•„๋“œ์™€ ํ•ด๋‹น ์˜๋ฏธ๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ณณ์€ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ „์ฒด ์‚ฌ์–‘์ด ํฌํ•จ๋œ API ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค.

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

๋ช…๋ น ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

$ kubectl explain resource[.field]...

์ด ๋ช…๋ น์€ ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค ๋˜๋Š” ํ•„๋“œ์˜ ์‚ฌ์–‘์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์‹œ๋˜๋Š” ์ •๋ณด๋Š” API ๋งค๋‰ด์–ผ์— ํฌํ•จ๋œ ์ •๋ณด์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ kubectl explain ํ•„๋“œ ์ค‘์ฒฉ์˜ ์ฒซ ๋ฒˆ์งธ ์ˆ˜์ค€๋งŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š” ์—ฌ๊ธฐ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค..

์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ „์ฒด ํŠธ๋ฆฌ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --recursive:

$ kubectl explain deployment.spec --recursive

์–ด๋–ค ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”ํ•œ์ง€ ์ •ํ™•ํžˆ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ๋ชจ๋‘ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ kubectl api-resources

์ด ๋ช…๋ น์€ ์ž์› ์ด๋ฆ„์„ ๋ณต์ˆ˜ํ˜•์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. deployments ๋Œ€์‹  deployment. ์˜ˆ๋ฅผ ๋“ค์–ด ์งง์€ ์ด๋ฆ„๋„ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. deploy, ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ. ์ด๋Ÿฌํ•œ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด๋Ÿฌํ•œ ์ด๋ฆ„ ์ง€์ • ์˜ต์…˜์€ ๋ชจ๋‘ kubectl๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. kubectl explain.

๋‹ค์Œ ๋ช…๋ น์€ ๋ชจ๋‘ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

$ kubectl explain deployments.spec
# ะธะปะธ
$ kubectl explain deployment.spec
# ะธะปะธ        
$ kubectl explain deploy.spec

3. ์‚ฌ์šฉ์ž ์ •์˜ ์—ด ์ถœ๋ ฅ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๊ธฐ๋ณธ ๋ช…๋ น ์ถœ๋ ฅ ํ˜•์‹ kubectl get:

$ kubectl get pods
NAME                     READY    STATUS    RESTARTS  AGE
engine-544b6b6467-22qr6   1/1     Running     0       78d
engine-544b6b6467-lw5t8   1/1     Running     0       78d
engine-544b6b6467-tvgmg   1/1     Running     0       78d
web-ui-6db964458-8pdw4    1/1     Running     0       78d

์ด ํ˜•์‹์€ ํŽธ๋ฆฌํ•˜์ง€๋งŒ ์ œํ•œ๋œ ์–‘์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์ž์› ์ •์˜ ํ˜•์‹๊ณผ ๋น„๊ตํ•˜์—ฌ ์—ฌ๊ธฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ํ•„๋“œ๋งŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ •์˜ ์—ด ์ถœ๋ ฅ ํ˜•์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ถœ๋ ฅํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ž์› ํ•„๋“œ๋ฅผ ๋ณ„๋„์˜ ์—ด๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ •์˜ ํ˜•์‹์˜ ์‚ฌ์šฉ์€ ๋‹ค์Œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

-o custom-columns=<header>:<jsonpath>[,<header>:<jsonpath>]...

๊ฐ ์ถœ๋ ฅ ์—ด์„ ์Œ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. <header>:<jsonpath>์–ด๋””์—์„œ <header> ์€ ์—ด ์ด๋ฆ„์ด๊ณ , <jsonpath> โ€” ๋ฆฌ์†Œ์Šค ํ•„๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ํ‘œํ˜„์‹์ž…๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

$ kubectl get pods -o custom-columns='NAME:metadata.name'

NAME
engine-544b6b6467-22qr6
engine-544b6b6467-lw5t8
engine-544b6b6467-tvgmg
web-ui-6db964458-8pdw4

์ถœ๋ ฅ์—๋Š” Pod ์ด๋ฆ„์ด ํฌํ•จ๋œ ์—ด ํ•˜๋‚˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ต์…˜ ํ‘œํ˜„์‹์€ ํ•„๋“œ์—์„œ ํฌ๋“œ ์ด๋ฆ„์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. metadata.name. ํ•˜์œ„ ์ด๋ฆ„ ํ•„๋“œ์— Pod ์ด๋ฆ„์ด ์ •์˜๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. metadata ํฌ๋“œ์˜ ๋ฆฌ์†Œ์Šค ์„ค๋ช…์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ๊ฐ€์ด๋“œ ๋˜๋Š” ๋ช…๋ น์„ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค kubectl explain pod.metadata.name.

์ด์ œ ์ถœ๋ ฅ์— ์ถ”๊ฐ€ ์—ด์„ ์ถ”๊ฐ€ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ ํฌ๋“œ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ๋…ธ๋“œ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž ์ •์˜ ์—ด ์˜ต์…˜์— ์ ์ ˆํ•œ ์—ด ์‚ฌ์–‘์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

$ kubectl get pods 
  -o custom-columns='NAME:metadata.name,NODE:spec.nodeName'

NAME                       NODE
engine-544b6b6467-22qr6    ip-10-0-80-67.ec2.internal
engine-544b6b6467-lw5t8    ip-10-0-36-80.ec2.internal
engine-544b6b6467-tvgmg    ip-10-0-118-34.ec2.internal
web-ui-6db964458-8pdw4     ip-10-0-118-34.ec2.internal

ํ‘œํ˜„์‹์€ ๋‹ค์Œ์—์„œ ๋…ธ๋“œ ์ด๋ฆ„์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. spec.nodeName โ€” Pod๊ฐ€ ๋…ธ๋“œ์— ํ• ๋‹น๋˜๋ฉด ํ•ด๋‹น ์ด๋ฆ„์ด ํ•„๋“œ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. spec.nodeName ํฌ๋“œ ๋ฆฌ์†Œ์Šค ์‚ฌ์–‘. ๋” ์ž์„ธํ•œ ์ •๋ณด๋Š” ์ถœ๋ ฅ์—์„œ โ€‹โ€‹ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. kubectl explain pod.spec.nodeName.

Kubernetes ๋ฆฌ์†Œ์Šค ํ•„๋“œ๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์ž์› ํ•„๋“œ๋ฅผ ์—ด๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ์‚ฌ์–‘์„ ๊ฒ€ํ† ํ•˜๊ณ  ์›ํ•˜๋Š” ํ•„๋“œ์— ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.

ํ•˜์ง€๋งŒ ๋จผ์ € ํ•„๋“œ ์„ ํƒ ํ‘œํ˜„์‹์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

JSONPath ํ‘œํ˜„์‹

์ž์› ํ•„๋“œ๋ฅผ ์„ ํƒํ•˜๋Š” ํ‘œํ˜„์‹์€ ๋‹ค์Œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. JSON๊ฒฝ๋กœ.

JSONPath๋Š” JSON ๋ฌธ์„œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๋‹จ์ผ ํ•„๋“œ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ JSONPath์˜ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค. ๊ทธ๋Š” ๊ฐ€์ง„ ๊ฒƒ์ด ๋งŽ๋‹ค ๋” ๋งŽ์€ ๊ฐ€๋Šฅ์„ฑ, ์„ ํƒ๊ธฐ, ํ•„ํ„ฐ ๋“ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

Kubectl explain์€ ์ œํ•œ๋œ ์ˆ˜์˜ JSONPath ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„ฑ๊ณผ ์˜ˆ๋Š” ์•„๋ž˜์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

# ะ’ั‹ะฑั€ะฐั‚ัŒ ะฒัะต ัะปะตะผะตะฝั‚ั‹ ัะฟะธัะบะฐ
$ kubectl get pods -o custom-columns='DATA:spec.containers[*].image'
# ะ’ั‹ะฑั€ะฐั‚ัŒ ัะฟะตั†ะธั„ะธั‡ะตัะบะธะน ัะปะตะผะตะฝั‚ ัะฟะธัะบะฐ
$ kubectl get pods -o custom-columns='DATA:spec.containers[0].image'
# ะ’ั‹ะฑั€ะฐั‚ัŒ ัะปะตะผะตะฝั‚ั‹ ัะฟะธัะบะฐ, ะฟะพะฟะฐะดะฐัŽั‰ะธะต ะฟะพะด ั„ะธะปัŒั‚ั€
$ kubectl get pods -o custom-columns='DATA:spec.containers[?(@.image!="nginx")].image'
# ะ’ั‹ะฑั€ะฐั‚ัŒ ะฒัะต ะฟะพะปั ะฟะพ ัƒะบะฐะทะฐะฝะฝะพะผัƒ ะฟัƒั‚ะธ, ะฝะตะทะฐะฒะธัะธะผะพ ะพั‚ ะธั… ะธะผะตะฝะธ
$ kubectl get pods -o custom-columns='DATA:metadata.*'
# ะ’ั‹ะฑั€ะฐั‚ัŒ ะฒัะต ะฟะพะปั ั ัƒะบะฐะทะฐะฝะฝั‹ะผ ะธะผะตะฝะตะผ, ะฒะฝะต ะทะฐะฒะธัะธะผะพัั‚ะธ ะพั‚ ะธั… ั€ะฐัะฟะพะปะพะถะตะฝะธั
$ kubectl get pods -o custom-columns='DATA:..image'

[] ์—ฐ์‚ฐ์ž๋Š” ํŠนํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ Kubernetes ๋ฆฌ์†Œ์Šค ํ•„๋“œ๋Š” ๋ชฉ๋ก์ด๋ฉฐ, ์ด ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ๋ชฉ๋ก์˜ ๊ตฌ์„ฑ์›์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉ๋ก์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ โ€‹โ€‹์„ ํƒํ•˜๊ธฐ ์œ„ํ•ด [*]์™€ ๊ฐ™์€ ์™€์ผ๋“œ์นด๋“œ์™€ ํ•จ๊ป˜ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ ์šฉ ์‚ฌ๋ก€

์ถœ๋ ฅ์— ์–ด๋–ค ํ•„๋“œ๋‚˜ ์ž์› ํ•„๋“œ์˜ ์กฐํ•ฉ๋„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž ์ •์˜ ์—ด ์ถœ๋ ฅ ํ˜•์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์€ ๋ฌด๊ถ๋ฌด์ง„ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ์ƒ˜ํ”Œ ์•ฑ์ž…๋‹ˆ๋‹ค. ์ž์œ ๋กญ๊ฒŒ ์ง์ ‘ ํƒ์ƒ‰ํ•˜๊ณ  ์ž์‹ ์—๊ฒŒ ์ ํ•ฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฐพ์•„๋ณด์„ธ์š”.

  1. Pod์˜ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ํ‘œ์‹œ:
    $ kubectl get pods 
      -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'
    
    NAME                        IMAGES
    engine-544b6b6467-22qr6     rabbitmq:3.7.8-management,nginx
    engine-544b6b6467-lw5t8     rabbitmq:3.7.8-management,nginx
    engine-544b6b6467-tvgmg     rabbitmq:3.7.8-management,nginx
    web-ui-6db964458-8pdw4      wordpress

    ์ด ๋ช…๋ น์€ ๊ฐ ํฌ๋“œ์˜ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ด๋ฆ„์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    Pod์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ฏธ์ง€ ์ด๋ฆ„์€ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋˜์–ด ํ•œ ์ค„์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  2. ๋…ธ๋“œ ๊ฐ€์šฉ์„ฑ ์˜์—ญ ํ‘œ์‹œ:
    $ kubectl get nodes 
      -o 
    custom-columns='NAME:metadata.name,ZONE:metadata.labels.failure-domain.beta.kubernetes.io/zone'
    
    NAME                          ZONE
    ip-10-0-118-34.ec2.internal   us-east-1b
    ip-10-0-36-80.ec2.internal    us-east-1a
    ip-10-0-80-67.ec2.internal    us-east-1b

    ์ด ๋ช…๋ น์€ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ํผ๋ธ”๋ฆญ ํด๋ผ์šฐ๋“œ์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ๊ฒฝ์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋…ธ๋“œ์˜ ๊ฐ€์šฉ์„ฑ ์˜์—ญ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    ๊ฐ€์šฉ์„ฑ ์˜์—ญ์€ ๋ณต์ œ ์˜์—ญ์„ ์ง€๋ฆฌ์  ์ง€์—ญ์œผ๋กœ ์ œํ•œํ•˜๋Š” ํด๋ผ์šฐ๋“œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

    ๊ฐ ๋…ธ๋“œ์˜ ๊ฐ€์šฉ ์˜์—ญ์€ ํŠน์ˆ˜ ๋ผ๋ฒจ์„ ํ†ตํ•ด ํš๋“๋ฉ๋‹ˆ๋‹ค. failure-domain.beta.kubernetes.io/zone. ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ํผ๋ธ”๋ฆญ ํด๋ผ์šฐ๋“œ์—์„œ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ ์ด ๋ ˆ์ด๋ธ”์€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ  ๊ฐ ๋…ธ๋“œ์˜ ๊ฐ€์šฉ์„ฑ ์˜์—ญ ์ด๋ฆ„์œผ๋กœ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

    ๋ผ๋ฒจ์€ Kubernetes ๋ฆฌ์†Œ์Šค ์‚ฌ์–‘์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋ผ๋ฒจ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. API ๊ฐ€์ด๋“œ. ๊ทธ๋Ÿฌ๋‚˜ YAML ๋˜๋Š” JSON ํ˜•์‹์œผ๋กœ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๋ฉด ๋‹ค๋ฅธ ๋ผ๋ฒจ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    $ kubectl get nodes -o yaml
    # ะธะปะธ
    $ kubectl get nodes -o json

    ์ด๋Š” ๋ฆฌ์†Œ์Šค ์‚ฌ์–‘์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ ์™ธ์—๋„ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

4. ํด๋Ÿฌ์Šคํ„ฐ์™€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐ„์„ ์‰ฝ๊ฒŒ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

kubectl์ด Kubernetes API์— ์š”์ฒญํ•  ๋•Œ ๋จผ์ € kubeconfig ํŒŒ์ผ์„ ์ฝ์–ด ์—ฐ๊ฒฐ์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ kubeconfig ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ~/.kube/config. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด ํŒŒ์ผ์€ ํŠน์ˆ˜ ๋ช…๋ น์œผ๋กœ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์ž‘์—…ํ•  ๋•Œ kubeconfig ํŒŒ์ผ์—๋Š” ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—… ์ค‘์ธ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ kubectl ๋ช…๋ น์— ์•Œ๋ ค์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค(๋ฌผ๋ฆฌ์  ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์˜ ๊ฐ€์ƒ ํด๋Ÿฌ์Šคํ„ฐ ์œ ํ˜•)๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubectl์€ ๋˜ํ•œ kubeconfig ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ•  ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” kubectl ๋ช…๋ น์— ์–ด๋–ค ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์•Œ๋ ค์ค„ ๋ฐฉ๋ฒ•๋„ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ ์žฅ์—์„œ๋Š” ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€, ์–ด๋–ป๊ฒŒ ํšจ๊ณผ์ ์œผ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š”์ง€์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

KUBECONFIG ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ kubeconfig ํŒŒ์ผ์ด ๋‚˜์—ด๋˜์–ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ํŒŒ์ผ์€ ๋Ÿฐํƒ€์ž„ ์‹œ ํ•˜๋‚˜์˜ ๊ณตํ†ต ๊ตฌ์„ฑ์œผ๋กœ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ kubectl์„ ์‹คํ–‰ํ•˜์—ฌ ๊ธฐ๋ณธ kubeconfig ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. --kubeconfig. ๋ณด๋‹ค ๊ณต์‹ ๋ฌธ์„œ.

kubeconfig ํŒŒ์ผ

kubeconfig ํŒŒ์ผ์— ์ •ํ™•ํžˆ ๋ฌด์—‡์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

kubectl์„ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•: ์ž์„ธํ•œ ๊ฐ€์ด๋“œ
๋ณด์‹œ๋‹ค์‹œํ”ผ kubeconfig ํŒŒ์ผ์—๋Š” ์ผ๋ จ์˜ ์ปจํ…์ŠคํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…์ŠคํŠธ๋Š” ์„ธ ๊ฐ€์ง€ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • ํด๋Ÿฌ์Šคํ„ฐ โ€” ํด๋Ÿฌ์Šคํ„ฐ ์„œ๋ฒ„์˜ API URL์ž…๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž - ํด๋Ÿฌ์Šคํ„ฐ์˜ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ž๊ฒฉ ์ฆ๋ช…์ž…๋‹ˆ๋‹ค.
  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค - ํด๋Ÿฌ์Šคํ„ฐ์— ์ฐธ๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ๋Š” kubeconfig์—์„œ ํด๋Ÿฌ์Šคํ„ฐ๋‹น ํ•˜๋‚˜์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž ๋˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ๊ตฌ๋ณ„๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋‹น ์—ฌ๋Ÿฌ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๋‹ค์ค‘ ์ปจํ…์ŠคํŠธ ๊ตฌ์„ฑ์€ ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์œผ๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ์™€ ์ปจํ…์ŠคํŠธ ๊ฐ„์— ์ผ๋Œ€์ผ ๋งคํ•‘์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์–ธ์ œ๋“ ์ง€ ์ปจํ…์ŠคํŠธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ˜„์žฌ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

kubectl์„ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•: ์ž์„ธํ•œ ๊ฐ€์ด๋“œ
kubectl์€ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ฝ์„ ๋•Œ ํ•ญ์ƒ ํ˜„์žฌ ์ปจํ…์ŠคํŠธ์—์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์—์„œ kubectl์€ Hare ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์ „ํ™˜ํ•˜๋ ค๋ฉด kubeconfig ํŒŒ์ผ์—์„œ ํ˜„์žฌ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

kubectl์„ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•: ์ž์„ธํ•œ ๊ฐ€์ด๋“œ
์ด์ œ kubectl์ด Fox ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๋™์ผํ•œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์ „ํ™˜ํ•˜๋ ค๋ฉด ํ˜„์žฌ ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์š”์†Œ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

kubectl์„ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•: ์ž์„ธํ•œ ๊ฐ€์ด๋“œ
์œ„์˜ ์˜ˆ์—์„œ kubectl์€ Fox ํด๋Ÿฌ์Šคํ„ฐ์˜ Prod ๋„ค์ž„์ŠคํŽ˜์ด์Šค(์ด์ „์— Test ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์„ค์ •๋จ)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

kubectl์€ ์˜ต์…˜๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. --cluster, --user, --namespace ะธ --context, kubeconfig์— ์„ค์ •๋œ ๋‚ด์šฉ์— ๊ด€๊ณ„์—†์ด ๊ฐœ๋ณ„ ์š”์†Œ์™€ ํ˜„์žฌ ์ปจํ…์ŠคํŠธ ์ž์ฒด๋ฅผ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋ผ๋ณด๋‹ค kubectl options.

์ด๋ก ์ ์œผ๋กœ๋Š” kubeconfig์—์„œ ์„ค์ •์„ ์ˆ˜๋™์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ถˆํŽธํ•ด์š”. ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

kubectx ์‚ฌ์šฉ

ํด๋Ÿฌ์Šคํ„ฐ์™€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ฐ„ ์ „ํ™˜์— ๋งค์šฐ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ์ž…๋‹ˆ๋‹ค.

์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ๋ช…๋ น์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค kubectx ะธ kubens ํ˜„์žฌ ์ปจํ…์ŠคํŠธ์™€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ฐ๊ฐ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ํ˜„์žฌ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํด๋Ÿฌ์Šคํ„ฐ๋‹น ํ•˜๋‚˜์˜ ์ปจํ…์ŠคํŠธ๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ด๋Ÿฌํ•œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

kubectl์„ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•: ์ž์„ธํ•œ ๊ฐ€์ด๋“œ
๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๋ช…๋ น์€ ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ kubeconfig ํŒŒ์ผ์„ ํŽธ์ง‘ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ kubectx, ๋‹ค์Œ ์ง€์นจ์„ ๋”ฐ๋ฅด์„ธ์š”. ๊ธฐ๋‘ฅ.

๋‘ ๋ช…๋ น ๋ชจ๋‘ ์ปจํ…์ŠคํŠธ ๋ฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ด๋ฆ„์˜ ์ž๋™ ์™„์„ฑ์„ ์ง€์›ํ•˜๋ฏ€๋กœ ์ด๋ฆ„์„ ์™„์ „ํžˆ ์ž…๋ ฅํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ž๋™ ์™„์„ฑ ์„ค์ • ์ง€์นจ ์—ฌ๊ธฐ์—.

๋˜ ๋‹ค๋ฅธ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ kubectx ์ด ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ. ์œ ํ‹ธ๋ฆฌํ‹ฐ์™€ ํ•จ๊ป˜ โ€‹โ€‹์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. fzf, ๋ณ„๋„๋กœ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. fzf๋ฅผ ์„ค์น˜ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. kubectx. fzf์—์„œ ์ œ๊ณตํ•˜๋Š” ๋Œ€ํ™”ํ˜• ๋ฌด๋ฃŒ ๊ฒ€์ƒ‰ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋Œ€ํ™”ํ˜•์œผ๋กœ ์ปจํ…์ŠคํŠธ์™€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‰˜ ๋ณ„์นญ ์‚ฌ์šฉ

kubectl์€ ์ด๋ฅผ ์œ„ํ•œ ๋ช…๋ น๋„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ํ˜„์žฌ ์ปจํ…์ŠคํŠธ์™€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ๋ณ„๋„์˜ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‘, ํŒ€ kubectl config kubeconfig ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜๊ธฐ ์œ„ํ•œ ํ•˜์œ„ ๋ช…๋ น์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๊ทธ ์ค‘ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

  • kubectl config get-contexts: ๋ชจ๋“  ์ปจํ…์ŠคํŠธ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • kubectl config current-context: ํ˜„์žฌ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • kubectl config use-context: ํ˜„์žฌ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • kubectl config set-context: ์ปจํ…์ŠคํŠธ ์š”์†Œ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๋ช…๋ น์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ธธ์ด๊ฐ€ ๊ธธ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋‹ค์ง€ ํŽธ๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ํ•˜๊ธฐ ์‰ฌ์šด ์‰˜ ๋ณ„์นญ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubectx์™€ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ด๋Ÿฌํ•œ ๋ช…๋ น์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณ„์นญ ์„ธํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubectl์„ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•: ์ž์„ธํ•œ ๊ฐ€์ด๋“œ
๋ณ„์นญ์€ fzf๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€ํ™”ํ˜• ๋ฌด๋ฃŒ ์กฐํšŒ ์ธํ„ฐํŽ˜์ด์Šค(์˜ˆ: kubectx์˜ ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹น์‹ ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค fzf ์„ค์น˜์ด๋Ÿฌํ•œ ๋ณ„์นญ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ณ„์นญ ์ž์ฒด์˜ ์ •์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

# ะŸะพะปัƒั‡ะธั‚ัŒ ั‚ะตะบัƒั‰ะธะน ะบะพะฝั‚ะตะบัั‚
alias krc='kubectl config current-context'
# ะกะฟะธัะพะบ ะฒัะตั… ะบะพะฝั‚ะตะบัั‚ะพะฒ
alias klc='kubectl config get-contexts -o name | sed "s/^/  /;|^  $(krc)$|s/ /*/"'
# ะ˜ะทะผะตะฝะธั‚ัŒ ั‚ะตะบัƒั‰ะธะน ะบะพะฝั‚ะตะบัั‚
alias kcc='kubectl config use-context "$(klc | fzf -e | sed "s/^..//")"'

# ะŸะพะปัƒั‡ะธั‚ัŒ ั‚ะตะบัƒั‰ะตะต ะฟั€ะพัั‚ั€ะฐะฝัั‚ะฒะพ ะธะผะตะฝ
alias krn='kubectl config get-contexts --no-headers "$(krc)" | awk "{print $5}" | sed "s/^$/default/"'
# ะกะฟะธัะพะบ ะฒัะตั… ะฟั€ะพัั‚ั€ะฐะฝัั‚ะฒ ะธะผะตะฝ
alias kln='kubectl get -o name ns | sed "s|^.*/|  |;|^  $(krn)$|s/ /*/"'
# ะ˜ะทะผะตะฝะธั‚ัŒ ั‚ะตะบัƒั‰ะตะต ะฟั€ะพัั‚ั€ะฐะฝัั‚ะฒะพ ะธะผะตะฝ
alias kcn='kubectl config set-context --current --namespace "$(kln | fzf -e | sed "s/^..//")"'

์ด๋Ÿฌํ•œ ๋ณ„์นญ์„ ์„ค์ •ํ•˜๋ ค๋ฉด ์œ„์˜ ์ •์˜๋ฅผ ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ~/.bashrc ๋˜๋Š” ~/.zshrc ์‰˜์„ ์žฌ๋ถ€ํŒ…ํ•˜์‹ญ์‹œ์˜ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ฌ์šฉ

Kubectl์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋ณธ ๋ช…๋ น๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด kubectl-foo ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๊ณ  ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. kubectl foo.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์—ฌ ์ปจํ…์ŠคํŠธ์™€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. kubectl ctx ์ƒํ™ฉ์„ ๋ฐ”๊พธ๊ณ  kubectl ns ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž‘์—…์€ ์ด์ „ ์„น์…˜์˜ ๋ณ„์นญ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

์ž‘๋™ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

kubectl์„ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•: ์ž์„ธํ•œ ๊ฐ€์ด๋“œ
ํ”Œ๋Ÿฌ๊ทธ์ธ์€ fzf๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€ํ™”ํ˜• ๋ฌด๋ฃŒ ๊ฒ€์ƒ‰ ์ธํ„ฐํŽ˜์ด์Šค(์˜ˆ: kubectx์˜ ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹น์‹ ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค fzf ์„ค์น˜์ด๋Ÿฌํ•œ ๋ณ„์นญ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. kubectl-ctx ะธ kubectl-ns PATH ๋ณ€์ˆ˜์˜ ์ž„์˜์˜ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ณต์‚ฌํ•˜๊ณ  ์˜ˆ๋ฅผ ๋“ค์–ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. chmod +x. ์ด ํ›„ ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. kubectl ctx ะธ kubectl ns.

5. ์ž๋™ ๋ณ„์นญ์œผ๋กœ ์ž…๋ ฅ ์ค„์ด๊ธฐ

์‰˜ ๋ณ„๋ช…์€ ์ž…๋ ฅ ์†๋„๋ฅผ ๋†’์ด๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ kubectl ๋ณ„์นญ ๊ธฐ๋ณธ kubectl ๋ช…๋ น์— ๋Œ€ํ•œ ์•ฝ 800๊ฐœ์˜ ๋‹จ์ถ•ํ‚ค๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

800๊ฐœ์˜ ๋ณ„์นญ์„ ์–ด๋–ป๊ฒŒ ๊ธฐ์–ตํ•˜์‹œ๋‚˜์š”? ํ•˜์ง€๋งŒ ์•„๋ž˜์— ์ œ์‹œ๋œ ๊ฐ„๋‹จํ•œ ๊ตฌ์„ฑ์— ๋”ฐ๋ผ ๊ตฌ์ถ•๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋‘ ๊ธฐ์–ตํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

kubectl์„ ๋ณด๋‹ค ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•: ์ž์„ธํ•œ ๊ฐ€์ด๋“œ
์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค

  1. kgpooyaml - kubectl์ด ํฌ๋“œ oyaml ๊ฐ€์ ธ์˜ค๊ธฐ
  2. ksysgsvcw โ€” kubectl -n kube-system svc w ๊ฐ€์ ธ์˜ค๊ธฐ
  3. ksysrmcm -kubectl -n kube-system rm cm
  4. kgdepallsl - kubectl์€ ๋ชจ๋“  sl ๋ฐฐํฌ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

๋ณด์‹œ๋‹ค์‹œํ”ผ ๋ณ„์นญ์€ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋Š” kubectl ๋ช…๋ น์˜ ํŠน์ • ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ฐ ๋ณ„์นญ์—๋Š” ๊ธฐ๋ณธ ๋ช…๋ น, ์ž‘์—… ๋ฐ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ•˜๋‚˜์˜ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋งค๊ฐœ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ ๋‹ค์ด์–ด๊ทธ๋žจ์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐ„๋‹จํžˆ "์ฑ„์šฐ๊ธฐ"๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์„ธ๋ถ€ ๋‹ค์ด์–ด๊ทธ๋žจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. GitHub์˜. ๊ฑฐ๊ธฐ์—์„œ๋„ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์š” ๋ณ„์นญ์˜ ์ „์ฒด ๋ชฉ๋ก.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ณ„์นญ kgpooyamlall์€ ๋‹ค์Œ ๋ช…๋ น๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. kubectl get pods -o yaml --all-namespaces.

์˜ต์…˜์˜ ์ƒ๋Œ€์  ์ˆœ์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. kgpooyamlall ๋ช…๋ น๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค kgpoalloyaml.

๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ณ„์นญ์œผ๋กœ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด k, kg, klo, ksys, kgpo ๋˜ํ•œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ช…๋ น์ค„์—์„œ ๋ณ„์นญ๊ณผ ์ผ๋ฐ˜ ๋ช…๋ น ๋˜๋Š” ์˜ต์…˜์„ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค

  1. ๋Œ€์‹ ์— kubectl proxy ๋‹น์‹ ์€ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค k proxy.
  2. ๋Œ€์‹ ์— kubectl get roles ๋‹น์‹ ์€ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค kg roles (ํ˜„์žฌ ์—ญํ•  ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋ณ„์นญ์€ ์—†์Šต๋‹ˆ๋‹ค).
  3. ํŠน์ • ํฌ๋“œ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์œผ๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. kgpo my-pod โ€” kubectl get pod my-pod.

์ผ๋ถ€ ๋ณ„์นญ์—๋Š” ๋ช…๋ น์ค„ ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณ„์นญ kgpol ๋ฐฉ๋ฒ• kubectl get pods -l. ์˜ต์…˜ -l ์ธ์ˆ˜(๋ ˆ์ด๋ธ” ์‚ฌ์–‘)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ณ„์นญ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. kgpol app=ui.

์ผ๋ถ€ ๋ณ„์นญ์—๋Š” ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ๋ณ„์นญ a, f ๋ฐ l์„ ๋งˆ์ง€๋ง‰์— ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ด ๊ตฌ์„ฑํ‘œ๋ฅผ ์ตํžˆ๋ฉด ์‹คํ–‰ํ•˜๋ ค๋Š” ๋ช…๋ น์—์„œ ์ง๊ด€์ ์œผ๋กœ ๋ณ„์นญ์„ ํŒŒ์ƒํ•  ์ˆ˜ ์žˆ์–ด ์ž…๋ ฅ ์‹œ๊ฐ„์„ ๋งŽ์ด ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์น˜

kubectl-aliases๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. .kubectl_aliases GitHub์—์„œ ํŒŒ์ผ์— ํฌํ•จ ~/.bashrc ๋˜๋Š” ~/.zshrc:

source ~/.kubectl_aliases

์ž๋™ ์™„์„ฑ

์ด์ „์— ๋งํ–ˆ๋“ฏ์ด ๋ช…๋ น์ค„์—์„œ ๋ณ„์นญ์— ์ถ”๊ฐ€ ๋‹จ์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

$ kgpooyaml test-pod-d4b77b989

kubectl ๋ช…๋ น ์™„์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฆฌ์†Œ์Šค ์ด๋ฆ„๊ณผ ๊ฐ™์€ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ์ž๋™ ์™„์„ฑ์„ ์‚ฌ์šฉํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ณ„์นญ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?

์ž๋™ ์™„์„ฑ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ณ„์นญ์˜ ์ด์  ์ค‘ ์ผ๋ถ€๋ฅผ ์žƒ๊ฒŒ ๋˜๋ฏ€๋กœ ์ด๋Š” ๋งค์šฐ ์ค‘์š”ํ•œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋Œ€๋‹ต์€ ์‚ฌ์šฉ ์ค‘์ธ ์‰˜์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

  1. Zsh์˜ ๊ฒฝ์šฐ ๋ณ„์นญ ์™„์„ฑ ๊ธฐ๋Šฅ์ด ์ฆ‰์‹œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ถˆํ–‰ํ•˜๊ฒŒ๋„ Bash์˜ ๊ฒฝ์šฐ ์ž๋™ ์™„์„ฑ์ด ์ž‘๋™ํ•˜๋ ค๋ฉด ์ผ๋ถ€ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Bash์—์„œ ๋ณ„์นญ ์ž๋™ ์™„์„ฑ ํ™œ์„ฑํ™”

Bash์˜ ๋ฌธ์ œ์ ์€ ๋ณ„์นญ์ด ์ฐธ์กฐํ•˜๋Š” ๋ช…๋ น(์˜ˆ๋ฅผ ๋“ค์–ด Zsh๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ)์ด ์•„๋‹ˆ๋ผ ๋ณ„์นญ์„ ์™„์„ฑํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(Tab์„ ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค). 800๊ฐœ ๋ณ„์นญ ๋ชจ๋‘์— ๋Œ€ํ•œ ์™„์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™ ์™„์„ฑ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

๋‹ค์Œ์—์„œ๋Š” ๋จผ์ € ์™„์ „ํ•œ ๋ณ„์นญ์„ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋ชจ๋“  kubectl ๋ณ„์นญ์— ๋Œ€ํ•œ ์™„์„ฑ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์™„์ „ํ•œ ๋ณ„์นญ ์„ค์น˜

์šฐ์„ , ์™„์ „ํ•œ ๋ณ„๋ช…์€ ๋‹ค์Œ์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. bash ์™„์„ฑ. ๋”ฐ๋ผ์„œ ์™„์ „ํ•œ ๋ณ„์นญ์„ ์„ค์น˜ํ•˜๊ธฐ ์ „์— bash-completion์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Linux ๋ฐ MacOS์— ๋Œ€ํ•œ ์„ค์น˜ ์ง€์นจ์€ ์ด์ „์— ์ œ๊ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

MacOS ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ์ค‘์š” ์ฐธ๊ณ  ์‚ฌํ•ญ: kubectl ์ž๋™ ์™„์„ฑ ์Šคํฌ๋ฆฝํŠธ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์™„์ „ํ•œ ๋ณ„์นญ์€ MacOS์˜ ๊ธฐ๋ณธ๊ฐ’์ธ Bash 3.2์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์™„์ „ํ•œ ๋ณ„์นญ์€ bash-completion v2(brew install bash-completion@2), ์ตœ์†Œํ•œ Bash 4.1์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” MacOS์—์„œ ์™„์ „ํ•œ ๋ณ„์นญ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ตœ์‹  ๋ฒ„์ „์˜ Bash๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. bash_completion.sh ์œผ๋กœ GitHub ์ €์žฅ์†Œ ํŒŒ์ผ์— ํฌํ•จ์‹œํ‚ค์„ธ์š” ~/.bashrc:

source ~/bash_completion.sh

์…ธ์„ ์žฌ๋ถ€ํŒ…ํ•˜๋ฉด ์™„์ „ํ•œ ๋ณ„์นญ์ด ์™„์ „ํžˆ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

kubectl ๋ณ„์นญ์— ๋Œ€ํ•œ ์ž๋™ ์™„์„ฑ ํ™œ์„ฑํ™”

๊ธฐ์ˆ ์ ์œผ๋กœ ์™„์ „ํ•œ ๋ณ„์นญ์€ ๋ž˜ํผ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. _complete_alias. ์ด ํ•จ์ˆ˜๋Š” ๋ณ„์นญ์„ ํ™•์ธํ•˜๊ณ  ๋ณ„์นญ ๋ช…๋ น์— ๋Œ€ํ•œ ์™„๋ฃŒ ํžŒํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜๋ฅผ ํŠน์ • ๋ณ„์นญ๊ณผ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ๋‚ด์žฅ๋œ Bash ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™„์ „ํ•œ, ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ _complete_alias ๋ณ„์นญ ์™„์„ฑ ํ•จ์ˆ˜๋กœ.

์˜ˆ๋ฅผ ๋“ค์–ด kubectl ๋ช…๋ น์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ„์นญ k๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ _complete_alias ์ด ๋ณ„์นญ์— ๋Œ€ํ•œ ๋ณด์™„ ๊ธฐ๋Šฅ์œผ๋กœ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$ complete -F _complete_alias k

๊ทธ ๊ฒฐ๊ณผ ๋ณ„์นญ k๋ฅผ ์ž๋™ ์™„์„ฑํ•  ๋•Œ๋งˆ๋‹ค ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. _complete_alias, ๋ณ„์นญ์„ ํ™•์ธํ•˜๊ณ  ๋ช…๋ น์— ๋Œ€ํ•œ ์™„๋ฃŒ ํžŒํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. kubectl.

๋‘ ๋ฒˆ์งธ ์˜ˆ๋กœ ๋ณ„์นญ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. kg, ์ด๋Š” ๋‹ค์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. kubectl get:

$ complete -F _complete_alias kg

์ด์ „ ์˜ˆ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ kg์„ ์ž๋™ ์™„์„ฑํ•˜๋ฉด ์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ์™„๋ฃŒ ํžŒํŠธ๋ฅผ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. kubectl get.

์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ๋ณ„์นญ์— ๋Œ€ํ•ด ์™„์ „ํ•œ ๋ณ„์นญ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ชจ๋“  kubectl ๋ณ„์นญ์— ๋Œ€ํ•ด ์ž๋™ ์™„์„ฑ์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ๊ฐ ๋ณ„์นญ์— ๋Œ€ํ•ด ์œ„ ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. kubectl-aliases๋ฅผ ๋‹ค์Œ์œผ๋กœ ์„ค์ •ํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ ์Šค๋‹ˆํŽซ์€ ์ด๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ~/.kubectl-aliases:

for _a in $(sed '/^alias /!d;s/^alias //;s/=.*$//' ~/.kubectl_aliases); 
do
  complete -F _complete_alias "$_a"
done

์ด ์ฝ”๋“œ ์กฐ๊ฐ์€ ~/.bashrc, ๋ช…๋ น ์…ธ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ชจ๋“  800๊ฐœ์˜ kubectl ๋ณ„์นญ์— ๋Œ€ํ•ด ์ž๋™ ์™„์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

6. ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ kubectl ํ™•์žฅํ•˜๊ธฐ

~๋ถ€ํ„ฐ ์‹œ์ž‘ ๋ฒ„์ „ 1.12, kubectl์€ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜, ์ถ”๊ฐ€ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์ต์ˆ™ํ•œ ๊ฒฝ์šฐ Git ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜, kubectl ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋™์ผํ•œ ์›์น™์— ๋”ฐ๋ผ ๊ตฌ์ถ•๋ฉ๋‹ˆ๋‹ค.

์ด ์žฅ์—์„œ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•, ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์œ„์น˜, ์ž์‹ ๋งŒ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜

Kubectl ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๊ฐ„๋‹จํ•œ ์‹คํ–‰ ํŒŒ์ผ๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. kubectl-x. ์ ‘๋‘์‚ฌ kubectl- ํ•„์ˆ˜์ด๋ฉฐ, ๊ทธ ๋’ค์— ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด kubectl ํ•˜์œ„ ๋ช…๋ น์ด ์˜ต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด hello ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒŒ์ผ๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. kubectl-hello.

ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋ ค๋ฉด ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. kubectl-x PATH์˜ ์ž„์˜์˜ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜์—ฌ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. chmod +x. ๊ทธ ์งํ›„์— ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. kubectl x.

๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ์‹œ์Šคํ…œ์— ์„ค์น˜๋œ ๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ kubectl plugin list

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

Krew๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ฐพ๊ธฐ ๋ฐ ์„ค์น˜

Kubectl ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์†Œํ”„ํŠธ์›จ์–ด ํŒจํ‚ค์ง€์ฒ˜๋Ÿผ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๊ณต์œ ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์–ด๋””์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‚˜์š”?

ํ”„๋กœ์ ํŠธ ํฌ๋ฃจ kubectl ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ณต์œ , ๊ฒ€์ƒ‰, ์„ค์น˜ ๋ฐ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ†ตํ•ฉ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋Š” ์Šค์Šค๋กœ๋ฅผ "kubectl ํ”Œ๋Ÿฌ๊ทธ์ธ์šฉ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž"๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค(Krew๋Š” ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค). ๊พธ๋ฏธ๋‹ค).

Krew๋Š” ์„ ํƒํ•˜๊ณ  ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” kubectl ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ๋™์‹œ์— Krew๋Š” kubectl์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” Krew ์„ค์น˜๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ kubectl ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์ง€์นจ์€ ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub ์‚ดํŽด๋ณด๊ธฐ.

๊ฐ€์žฅ ์ค‘์š”ํ•œ Krew ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

# ะŸะพะธัะบ ะฒ ัะฟะธัะบะต ะฟะปะฐะณะธะฝะพะฒ
$ kubectl krew search [<query>]
# ะŸะพัะผะพั‚ั€ะตั‚ัŒ ะธะฝั„ะพั€ะผะฐั†ะธัŽ ะพ ะฟะปะฐะณะธะฝะต
$ kubectl krew info <plugin>
# ะฃัั‚ะฐะฝะพะฒะธั‚ัŒ ะฟะปะฐะณะธะฝ
$ kubectl krew install <plugin>
# ะžะฑะฝะพะฒะธั‚ัŒ ะฒัะต ะฟะปะฐะณะธะฝั‹ ะดะพ ะฟะพัะปะตะดะฝะตะน ะฒะตั€ัะธะธ
$ kubectl krew upgrade
# ะŸะพัะผะพั‚ั€ะตั‚ัŒ ะฒัะต ะฟะปะฐะณะธะฝั‹, ัƒัั‚ะฐะฝะพะฒะปะตะฝะฝั‹ะต ั‡ะตั€ะตะท Krew
$ kubectl krew list
# ะ”ะตะธะฝัั‚ะฐะปะปะธั€ะพะฒะฐั‚ัŒ ะฟะปะฐะณะธะฝ
$ kubectl krew remove <plugin>

Krew๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ด๋„ ์œ„์—์„œ ์„ค๋ช…ํ•œ ํ‘œ์ค€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ช…๋ น์–ด๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š” kubectl krew list Krew๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ๋งŒ ํ‘œ์‹œํ•˜๋Š” ๋ฐ˜๋ฉด, ๋ช…๋ น์€ kubectl plugin list ๋ชจ๋“  ํ”Œ๋Ÿฌ๊ทธ์ธ, ์ฆ‰ Krew๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์„ค์น˜๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๊ณณ์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ฐพ๊ธฐ

Krew๋Š” ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ์ Š์€ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๋ชฉ๋ก ์•ฝ 30๊ฐœ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒƒ์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋ฉด GitHub์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๊ณณ์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GitHub ์„น์…˜์„ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. kubectl-ํ”Œ๋Ÿฌ๊ทธ์ธ. ์—ฌ๊ธฐ์„œ๋Š” ํ™•์ธํ•ด ๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ์ˆ˜์‹ญ ๊ฐœ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋งŒ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž‘์„ฑ

๋‹น์‹ ์€ ์Šค์Šค๋กœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ํ”Œ๋Ÿฌ๊ทธ์ธ ๋งŒ๋“ค๊ธฐ - ์–ด๋ ต์ง€ ์•Š์•„์š”. ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹คํ–‰ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์ด๋ฆ„์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. kubectl-x ๊ทธ๋ฆฌ๊ณ  ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ์€ bash ์Šคํฌ๋ฆฝํŠธ, Python ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” ์ปดํŒŒ์ผ๋œ GO ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์กฐ๊ฑด์€ ์šด์˜ ์ฒด์ œ์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋ฐ”๋กœ ์˜ˆ์ œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด์ „ ์„น์…˜์—์„œ๋Š” kubectl ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ Pod์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‚˜์—ดํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ์‰ฝ์Šต๋‹ˆ๋‹ค. kubectl img.

ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ kubectl-img ๋‹ค์Œ ๋‚ด์šฉ :

#!/bin/bash
kubectl get pods -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'

์ด์ œ ํŒŒ์ผ์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ์‹ญ์‹œ์˜ค. chmod +x kubectl-img PATH์˜ ์ž„์˜์˜ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ ์งํ›„์— ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค kubectl img.

์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ kubectl ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋˜๋Š” ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด๋กœ ์ž‘์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‚ด์—์„œ kubectl์„ ์‰ฝ๊ฒŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ๋” ๋ณต์žกํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. Go๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. cli ๋Ÿฐํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์ด๋Š” kubectl ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž‘์„ฑ์„ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ท€ํ•˜์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด GitHub์—์„œ ์ž์œ ๋กญ๊ฒŒ ๊ณต์œ ํ•ด ์ฃผ์„ธ์š”. ์ฃผ์ œ์— ๊ผญ ์ถ”๊ฐ€ํ•˜์„ธ์š” kubectl-ํ”Œ๋Ÿฌ๊ทธ์ธ.

ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•˜๋„๋ก ์š”์ฒญํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ๋ฃจ ๋ชฉ๋ก. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์€ GitHub ์ €์žฅ์†Œ.

๋ช…๋ น ์™„์„ฑ

ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ํ˜„์žฌ ์ž๋™ ์™„์„ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ „์ฒด ์ด๋ฆ„๊ณผ ์ธ์ˆ˜์˜ ์ „์ฒด ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ•จ์ˆ˜์— ๋Œ€ํ•œ GitHub kubectl ์ €์žฅ์†Œ์—๋Š” ๊ณต๊ฐœ ์š”์ฒญ. ๋”ฐ๋ผ์„œ ์ด ๊ธฐ๋Šฅ์€ ํ–ฅํ›„ ์–ธ์  ๊ฐ€ ๊ตฌํ˜„๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ–‰์šด์„ ๋นŒ์–ด ์š” !!!

์ฃผ์ œ์— ๋Œ€ํ•ด ๋” ์ฝ์„ ๋‚ด์šฉ:

  1. Kubernetes์˜ ์„ธ ๊ฐ€์ง€ ์ˆ˜์ค€์˜ ์ž๋™ ํ™•์žฅ ๋ฐ ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•.
  2. ๊ตฌํ˜„์„ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ์„ ๊ฐ–์ถ˜ ๋ถˆ๋ฒ• ๋ณต์ œ ์ •์‹ ์˜ Kubernetes.
  3. Telegram์˜ Kubernetes ์ฃผ๋ณ€ ์ฑ„๋„.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€