k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

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

์ด ํ”„๋กœ์ ํŠธ๋Š” Go๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ 1๋…„ ๋ฐ˜์ด ๋„˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ปค๋ฐ‹์€ 2019๋…„ 9000์›” XNUMX์ผ์— ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ธ€์„ ์“ฐ๋Š” ์‹œ์ ์— XNUMX๊ฐœ ์ด์ƒ์˜ ๋ณ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. GitHub์˜ ์•ฝ 80๋ช…์˜ ๊ธฐ์—ฌ์ž. k9์ด ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณผ๊นŒ์š”?

์„ค์น˜ ๋ฐ ์‹คํ–‰

์ด๊ฒƒ์€ Docker ์ด๋ฏธ์ง€๋กœ ์‹คํ–‰ํ•˜๊ธฐ ๊ฐ€์žฅ ์‰ฌ์šด ํด๋ผ์ด์–ธํŠธ(Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์™€ ๊ด€๋ จํ•˜์—ฌ) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค.

docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s

์ผ๋ถ€ Linux ๋ฐฐํฌํŒ ๋ฐ ๊ธฐํƒ€ ์šด์˜ ์ฒด์ œ์˜ ๊ฒฝ์šฐ ๋ฐ”๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊พธ๋Ÿฌ๋ฏธ. ์ผ๋ฐ˜์ ์œผ๋กœ Linux ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sudo wget -qO- https://github.com/derailed/k9s/releases/download/v0.22.0/k9s_Linux_x86_64.tar.gz | tar zxvf -  -C /tmp/
sudo mv /tmp/k9s /usr/local/bin

K8s ํด๋Ÿฌ์Šคํ„ฐ ์ž์ฒด์— ๋Œ€ํ•œ ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฆฌ๋ทฐ์— ๋”ฐ๋ฅด๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ 1.12์™€ ๊ฐ™์€ ์ด์ „ ๋ฒ„์ „์˜ Kubernetes์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ํ‘œ์ค€ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. .kube/config - ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. kubectl.

ํ•ญํ•ด

๊ธฐ๋ณธ์ ์œผ๋กœ ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•ด ์ง€์ •๋œ ๊ธฐ๋ณธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์žˆ๋Š” ์ฐฝ์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค. ์ฆ‰, ๋‹น์‹ ์ด ์“ด ๊ฒฝ์šฐ kubectl config set-context --current --namespace=test๊ทธ๋Ÿฌ๋ฉด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์—ด๋ฆฝ๋‹ˆ๋‹ค. test. (์ปจํ…์ŠคํŠธ/๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ž˜๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.)

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

์ด๋™ ๋ช…๋ น ๋ชจ๋“œ ":"์„ ๋ˆ„๋ฅด๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ k9์˜ ์ž‘๋™์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ˜„์žฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ๋Š” StatefulSet ๋ชฉ๋ก์„ ๋ณด๋ ค๋ฉด ๋‹ค์Œ์„ ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. :sts.

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

์ผ๋ถ€ ๋‹ค๋ฅธ Kubernetes ๋ฆฌ์†Œ์Šค์˜ ๊ฒฝ์šฐ:

  • :ns โ€” ๋„ค์ž„์ŠคํŽ˜์ด์Šค;
  • :deploy โ€” ๋ฐฐํฌ
  • :ing โ€” ์ˆ˜์‹ ;
  • :svc - ์„œ๋น„์Šค.

๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค ์œ ํ˜•์˜ ์ „์ฒด ๋ชฉ๋ก์„ ํ‘œ์‹œํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์ด ์žˆ์Šต๋‹ˆ๋‹ค. :aliases.

๋˜ํ•œ ํ˜„์žฌ ์ฐฝ์—์„œ ๋ฐ”๋กœ ๊ฐ€๊ธฐ ํ‚ค ์กฐํ•ฉ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น ๋ชฉ๋ก์„ ๋ณด๋Š” ๊ฒƒ๋„ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด "?"๋ฅผ ํด๋ฆญํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

k9s์—๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ๋ชจ๋“œ, "/"๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ˜„์žฌ "์ฐฝ"์˜ ๋‚ด์šฉ์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด์ „์— ์ž…๋ ฅํ•œ ๊ฒฝ์šฐ :ns, ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ชฉ๋ก์ด ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ์˜ค๋žซ๋™์•ˆ ์•„๋ž˜๋กœ ์Šคํฌ๋กคํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๊ฐ€์žˆ๋Š” ์ฐฝ์— ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. /mynamespace.

๋ ˆ์ด๋ธ”๋กœ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด ์›ํ•˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ๋ชจ๋“  ํŒŸ(Pod)์„ ์„ ํƒํ•œ ํ›„ ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค. / -l app=whoami. ๋‹ค์Œ ๋ ˆ์ด๋ธ”์ด ์žˆ๋Š” ํฌ๋“œ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

๊ฒ€์ƒ‰์€ ๋กœ๊ทธ, YAML ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ณด๊ธฐ, describe ๋ฆฌ์†Œ์Šค - ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ „์ฒด ํƒ์ƒ‰ ํ๋ฆ„์€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ์Šต๋‹ˆ๊นŒ?

๋ช…๋ น์œผ๋กœ :ctx ์ปจํ…์ŠคํŠธ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์„ ํƒํ•˜๋ ค๋ฉด ์ด๋ฏธ ์–ธ๊ธ‰ํ•œ ๋ช…๋ น์ด ์žˆ์Šต๋‹ˆ๋‹ค. :ns, ๊ทธ๋Ÿฐ ๋‹ค์Œ ์›ํ•˜๋Š” ๊ณต๊ฐ„ ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. /test.

์ด์ œ ๊ด€์‹ฌ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค(์˜ˆ: ๋™์ผํ•œ StatefulSet)๋ฅผ ์„ ํƒํ•˜๋ฉด ํ•ด๋‹น ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘์ธ ํฌ๋“œ ์ˆ˜์™€ ๊ทธ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

ํฌ๋“œ๋งŒ ๊ด€์‹ฌ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅํ•˜๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. :pod. ConfigMap์˜ ๊ฒฝ์šฐ(:cm - ์ด๋Ÿฌํ•œ ๋ฆฌ์†Œ์Šค ๋ชฉ๋ก์˜ ๊ฒฝ์šฐ) ๊ด€์‹ฌ ์žˆ๋Š” ๊ฐœ์ฒด๋ฅผ ์„ ํƒํ•˜๊ณ  "u"๋ฅผ ํด๋ฆญํ•˜๋ฉด K9s๊ฐ€ ํ•ด๋‹น ๊ฐœ์ฒด๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ(์ด CM)์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

๋ฆฌ์†Œ์Šค๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์€ "์—‘์Šค๋ ˆ์ด"(์—‘์Šค๋ ˆ์ด ๋ณด๊ธฐ). ์ด ๋ชจ๋“œ๋Š” ๋ช…๋ น์— ์˜ํ•ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. :xray RESOURCE ๊ทธ๋ฆฌ๊ณ  ... ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ StatefulSet์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค
(์ด๋Ÿฌํ•œ ๊ฐ ๋ฆฌ์†Œ์Šค๋Š” ํŽธ์ง‘, ๋ณ€๊ฒฝ, ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. describe.)

Ingress๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฐํฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

๋ฆฌ์†Œ์Šค ์ž‘์—…

YAML ๋˜๋Š” ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์˜ ๊ฐ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. describe ํ•ด๋‹น ํ‚ค๋ณด๋“œ ๋‹จ์ถ•ํ‚ค(๊ฐ๊ฐ "y" ๋ฐ "d")๋ฅผ ๋ˆŒ๋Ÿฌ ๋ฌผ๋ก  ๋” ๋งŽ์€ ๊ธฐ๋ณธ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉ๋ก๊ณผ ํ‚ค๋ณด๋“œ ๋‹จ์ถ•ํ‚ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ํŽธ๋ฆฌํ•œ "ํ—ค๋”" ๋•๋ถ„์— ํ•ญ์ƒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(Ctrl + e๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ˆจ๊ฒจ์ง).

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

๋ฆฌ์†Œ์Šค๋ฅผ ํŽธ์ง‘ํ•  ๋•Œ(์„ ํƒ ํ›„ "e") ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ •์˜๋œ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๊ฐ€ ์—ด๋ฆฝ๋‹ˆ๋‹ค(export EDITOR=vim).

๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค(describe):

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

์ด ์ถœ๋ ฅ(๋˜๋Š” YAML ๋ฆฌ์†Œ์Šค ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ณด๊ธฐ ์ถœ๋ ฅ)์€ ์ต์ˆ™ํ•œ ํ‚ค๋ณด๋“œ ๋‹จ์ถ•ํ‚ค Ctrl + s๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์žฅ ์œ„์น˜๋Š” K9s ๋ฉ”์‹œ์ง€์—์„œ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully!

์‹œ์Šคํ…œ ๋ ˆ์ด๋ธ” ๋ฐ ์ฃผ์„์„ ์ œ๊ฑฐํ•œ ํ›„ ์ƒ์„ฑ๋œ ๋ฐฑ์—… ํŒŒ์ผ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณต์›ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ ค๋ฉด ๊ทธ๋“ค๊ณผ ํ•จ๊ป˜ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (:dir /tmp), ์›ํ•˜๋Š” ํŒŒ์ผ ์„ ํƒ ํ›„ ์ ์šฉ apply.

๊ทธ๋Ÿฐ๋ฐ ํ˜„์žฌ ReplicaSet์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์–ธ์ œ๋“ ์ง€ ์ด์ „ ReplicaSet์œผ๋กœ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์›ํ•˜๋Š” RS(:rs ๊ทธ๋“ค์˜ ๋ชฉ๋ก):

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

... Ctrl + l๋กœ ๋กค๋ฐฑํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ๋˜์—ˆ๋‹ค๋Š” ์•Œ๋ฆผ์„ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

k9s/whoami-5cfbdbb469 successfully rolled back

๊ทธ๋ฆฌ๊ณ  ๋ณต์ œ๋ณธ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๋ ค๋ฉด "s"(ํฌ๊ธฐ)๋ฅผ ํด๋ฆญํ•˜๊ณ  ์›ํ•˜๋Š” ์ธ์Šคํ„ด์Šค ์ˆ˜๋ฅผ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค.

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

์…ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์›ํ•˜๋Š” ์ฐฝ์œผ๋กœ ์ด๋™ํ•˜์—ฌ "s"(์…ธ)๋ฅผ ํด๋ฆญํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํŠน์ง•๋“ค

๋ฌผ๋ก  ๋กœ๊ทธ ๋ณด๊ธฐ๋„ ์ง€์›๋ฉ๋‹ˆ๋‹ค(์„ ํƒํ•œ ๋ฆฌ์†Œ์Šค์˜ ๊ฒฝ์šฐ "l"). ๊ทธ๋ฆฌ๊ณ  ์ƒˆ ๋กœ๊ทธ๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด Enter ํ‚ค๋ฅผ ๊ณ„์† ๋ˆ„๋ฅผ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. (โ€œmโ€)์„ ํ‘œ์‹œํ•œ ๋‹ค์Œ ์ƒˆ ๋ฉ”์‹œ์ง€๋งŒ ์ถ”์ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

๋˜ํ•œ ๊ฐ™์€ ์ฐฝ์—์„œ ๋กœ๊ทธ ์ถœ๋ ฅ์— ๋Œ€ํ•œ ์‹œ๊ฐ„ ๋ฒ”์œ„๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ‚ค "1" - 1๋ถ„ ๋™์•ˆ;
  • "2" - 5๋ถ„;
  • "3" - 15๋ถ„;
  • "4" - 30๋ถ„;
  • "5" - 1์‹œ๊ฐ„;
  • "0" - ํฌ๋“œ์˜ ์ „์ฒด ์ˆ˜๋ช… ๋™์•ˆ.

ํŠน์ˆ˜ ์ž‘๋™ ๋ชจ๋“œ ํŽ„์Šค(๋ช…๋ น :pulse)๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ์ผ๋ฐ˜ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

์—ฌ๊ธฐ์—์„œ ๋ฆฌ์†Œ์Šค ์ˆ˜์™€ ํ•ด๋‹น ์ƒํƒœ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋…น์ƒ‰์€ ์ƒํƒœ๊ฐ€ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. Running).

K9s์˜ ๋˜ ๋‹ค๋ฅธ ๋ฉ‹์ง„ ๊ธฐ๋Šฅ์€ ๋ฝ€๋น ์ด. ํŠน์ • ์ •ํ™•์„ฑ ๊ธฐ์ค€์— ๋Œ€ํ•ด ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ํ™•์ธํ•˜๊ณ  ์„ค๋ช…๊ณผ ํ•จ๊ป˜ ๊ฒฐ๊ณผ "๋“ฑ๊ธ‰"์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ƒ˜ํ”Œ์ด๋‚˜ ์ œํ•œ์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ์ผ๋ถ€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฃจํŠธ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

Helm์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์›์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌ๋œ ๋ฆด๋ฆฌ์Šค๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

:helm all # ะฒัะต
:helm $namespace # ะฒ ะบะพะฝะบั€ะตั‚ะฝะพะผ ะฟั€ะพัั‚ั€ะฐะฝัั‚ะฒะต ะธะผะตะฝ

๊ธฐ์ค€

K9์—๋„ ๋‚ด์žฅ ์•ˆ๋…• ๋” ์ž˜ ์•Œ๋ ค์ง„ ab(ApacheBench)์˜ ๋Œ€์•ˆ์ธ ๊ฐ„๋‹จํ•œ HTTP ์„œ๋ฒ„ ๋กœ๋“œ ์ƒ์„ฑ๊ธฐ์ž…๋‹ˆ๋‹ค.

ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ํฌ๋“œ์—์„œ ํฌํŠธ ์ „๋‹ฌ์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ํฌ๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ  Shift + f๋ฅผ ๋ˆ„๋ฅด๊ณ  "pf" ๋ณ„์นญ์„ ์‚ฌ์šฉํ•˜์—ฌ ํฌํŠธ ํฌ์›Œ๋“œ ํ•˜์œ„ ๋ฉ”๋‰ด๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

ํฌํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ  Ctrl + b๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ฒค์น˜๋งˆํฌ ์ž์ฒด๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ๊ทธ์˜ ์ž‘์—… ๊ฒฐ๊ณผ๋Š” /tmp ๋‚˜์ค‘์— K9์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค
k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

๋ฒค์น˜๋งˆํฌ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. $HOME/.k9s/bench-<my_context>.yml (๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด ์ •์˜๋จ).

NB: ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  YAML ํŒŒ์ผ์˜ ํ™•์žฅ์ž๋Š” .k9s ๊ทธ๊ฒƒ์€ ์ •ํ™•ํžˆ .yml (.yaml ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ).

๊ตฌ์„ฑ ์˜ˆ :

benchmarks:
  defaults:
    # ะšะพะปะธั‡ะตัั‚ะฒะพ ะฟะพั‚ะพะบะพะฒ
    concurrency: 2
    # ะšะพะปะธั‡ะตัั‚ะฒะพ ะทะฐะฟั€ะพัะพะฒ
    requests: 1000
  containers:
    # ะะฐัั‚ั€ะพะนะบะธ ะดะปั ะบะพะฝั‚ะตะนะฝะตั€ะฐ ั ะฑะตะฝั‡ะผะฐั€ะบะพะผ
    # ะšะพะฝั‚ะตะนะฝะตั€ ะพะฟั€ะตะดะตะปัะตั‚ัั ะบะฐะบ namespace/pod-name:container-name
    default/nginx:nginx:
      concurrency: 2
      requests: 10000
      http:
        path: /
        method: POST
        body:
          {"foo":"bar"}
        header:
          Accept:
            - text/html
          Content-Type:
            - application/json
 services:
    # ะœะพะถะฝะพ ะฟั€ะพะฒะพะดะธั‚ัŒ ะฑะตะฝั‡ะผะฐั€ะบ ะฝะฐ ัะตั€ะฒะธัะฐั… ั‚ะธะฟะฐ NodePort ะธ LoadBalancer
    # ะกะธะฝั‚ะฐะบัะธั: namespace/service-name
    default/nginx:
      concurrency: 5
      requests: 500
      http:
        method: GET
        path: /auth
      auth:
        user: flant
        password: s3cr3tp455w0rd

์ธํ„ฐํŽ˜์ด์Šค

๋ฆฌ์†Œ์Šค ๋ชฉ๋ก์— ๋Œ€ํ•œ ์—ด์˜ ๋ชจ์–‘์€ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค. $HOME/.k9s/views.yml. ๋‚ด์šฉ์˜ ์˜ˆ:

k9s:
 views:
   v1/pods:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - IP
       - NODE
       - STATUS
       - READY
   v1/services:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - TYPE
       - CLUSTER-IP

์‚ฌ์‹ค, ๋ ˆ์ด๋ธ”์— ๋Œ€ํ•œ ์—ด์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ ๋ฌธ์ œ.

์—ด๋ณ„ ์ •๋ ฌ์€ ํ‚ค๋ณด๋“œ ๋‹จ์ถ•ํ‚ค๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

  • Shift + n - ์ด๋ฆ„์œผ๋กœ;
  • Shift + o - ๋…ธ๋“œ ๊ธฐ์ค€;
  • Shift + i - IP ๊ธฐ์ค€;
  • Shift + a - ์ปจํ…Œ์ด๋„ˆ์˜ ์ˆ˜๋ช…๋งŒํผ;
  • Shift + t - ์žฌ์‹œ์ž‘ ํšŸ์ˆ˜๋งŒํผ;
  • Shift + r - ์ค€๋น„ ์ƒํƒœ ๊ธฐ์ค€;
  • Shift + c - CPU ์‚ฌ์šฉ๋Ÿ‰ ๊ธฐ์ค€;
  • Shift + m - ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ธฐ์ค€.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ธฐ๋ณธ ์ƒ‰ ๊ตฌ์„ฑํ‘œ๋ฅผ ์ข‹์•„ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด K9s๋Š” ์Šคํ‚จ. ๊ธฐ์„ฑํ’ˆ ์˜ˆ(7๊ฐœ) ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๊ธฐ์—. ๋‹ค์Œ์€ ์ด๋Ÿฌํ•œ ์Šคํ‚จ ์ค‘ ํ•˜๋‚˜์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. (ํ•ด๊ตฐ์—์„œ):

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

ํ”Œ๋Ÿฌ๊ทธ์ธ

๋งˆ์ง€๋ง‰์œผ๋กœ, ํ”Œ๋Ÿฌ๊ทธ์ธ K9s์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‚ด ์ž‘์—…์—์„œ ๊ทธ์ค‘ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. kubectl get all -n $namespace.

์ด๋ ‡๊ฒŒ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ $HOME/.k9s/plugin.yml ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์œผ๋กœ:

plugin:
 get-all:
   shortCut: g    
   confirm: false    
   description: get all
   scopes:
   - all
   command: sh
   background: false
   args:
   - -c
   - "kubectl -n $NAMESPACE get all -o wide | less"

์ด์ œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์ด๋™ํ•˜๊ณ  "g"๋ฅผ ๋ˆŒ๋Ÿฌ ํ•ด๋‹น ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

k9s ๊ฐœ์š” - Kubernetes์šฉ ๊ณ ๊ธ‰ ํ„ฐ๋ฏธ๋„ ์ธํ„ฐํŽ˜์ด์Šค

์˜ˆ๋ฅผ ๋“ค์–ด ํ”Œ๋Ÿฌ๊ทธ์ธ ์ค‘์—๋Š” kubectl-jq์™€์˜ ํ†ตํ•ฉ ๋ฐ ๋กœ๊ทธ ๋ณด๊ธฐ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๋ฌผ.

๊ฒฐ๋ก 

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

* ํ•˜์ง€๋งŒ ๋กœ๊ทธ์˜ ์–‘์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— K9์˜ ๋Š๋ฆฐ ์ž‘๋™๋„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์ˆœ๊ฐ„ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” Intel Xeon E2xx์—์„œ 312๊ฐœ์˜ ์ฝ”์–ด๋ฅผ "๋จน๊ณ " ์ •์ง€๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ˆ„๋ฝ๋œ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•˜์ง€ ์•Š๊ณ  ์ด์ „ ๋ฒ„์ „(RS์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜์ง€ ์•Š์Œ)์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๋กค๋ฐฑํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ณต๊ตฌ๋Š” ๋‹ค์Œ์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋งŒ ๋ฆฌ์†Œ์Šค: ์ฃผ์„์ด๋‚˜ ๋ ˆ์ด๋ธ”์„ ์‚ญ์ œํ•˜๋ฉด ์ „์ฒด ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋ณต์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์—ฌ๊ธฐ์„œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•ด์•ผ ํ•จ). ๋˜ ๋‹ค๋ฅธ ์‚ฌ์†Œํ•œ ์ผ - ์ €์žฅ๋œ "๋ฐฑ์—…"์— ๋Œ€ํ•œ ๋‚ ์งœ๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PS

๋ธ”๋กœ๊ทธ์—์„œ๋„ ์ฝ์–ด๋ณด์„ธ์š”.

์ถœ์ฒ˜ : habr.com

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