24 steps k8s - deptno/deptno.github.io GitHub Wiki

24-steps-k8s|24๋‹จ๊ณ„ ์‹ค์Šต์œผ๋กœ ์ •๋ณตํ•˜๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค

๋ชฉ์ฐจ

[1๋ถ€] ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๊ฐœ๋…๊ณผ ์„ค์น˜, ๊ธฐ๋ณธ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•

โ–ฃ 01์žฅ: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ฐœ์š”์™€ ํด๋Ÿฌ์Šคํ„ฐ ์„ค์น˜

  1. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ž€?
  2. Kubespray๋ฅผ ์ด์šฉํ•ด 3๊ฐœ์˜ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์ถ•
  3. K3s๋ฅผ ์ด์šฉํ•ด ๋‹จ์ผ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์ถ•
  4. ๋กœ์ปฌํ˜ธ์ŠคํŠธ์—์„œ ์›๊ฒฉ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ด€๋ฆฌํ•˜๊ธฐ __1.4.1 ๋กœ์ปฌํ˜ธ์ŠคํŠธ์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ช…๋ น์–ด ์‹คํ–‰ ๋„๊ตฌ์ธ kubectl ์„ค์น˜ __1.4.2 ์›๊ฒฉ ํด๋Ÿฌ์Šคํ„ฐ ์ •๋ณด๋ฅผ kubeconfig ํŒŒ์ผ์— ๋“ฑ๋ก

โ–ฃ 02์žฅ: ํšจ์œจ์ ์ธ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ kubectl CLI ํ™˜๊ฒฝ ์ตœ์ ํ™”

  1. kubectl ์ž๋™ ์™„์„ฑ๊ณผ ๋ช…๋ น์–ด ์•จ๋ฆฌ์–ด์Šค ํ™œ์šฉ
  2. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค krew๋ฅผ ์ด์šฉํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ด€๋ฆฌ
  3. kube-ctx(์ปจํ…์ŠคํŠธ), kube-ns(๋„ค์ž„์ŠคํŽ˜์ด์Šค), kube-ps1(ํ”„๋กฌํ”„ํŠธ) ํ™œ์šฉ

โ–ฃ 03์žฅ: kubectl ๋ช…๋ น์–ด๋กœ ์ตํžˆ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ฃผ์š” ์˜ค๋ธŒ์ ํŠธ

  1. NGINX ํŒŒ๋“œ ์‹คํ–‰๊ณผ ๋ฐฐ์‹œ ์‹คํ–‰
  2. ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ํŒŒ๋“œ ๊ฐœ์ˆ˜ ๋ณ€๊ฒฝ๊ณผ ์‚ญ์ œ
  3. ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ƒ์„ฑ

โ–ฃ 04์žฅ: YAML ํŒŒ์ผ์„ ์ด์šฉํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜ค๋ธŒ์ ํŠธ ๊ด€๋ฆฌ

  1. YAML ํŒŒ์ผ ์ต์ŠคํฌํŠธ ํ”Œ๋Ÿฌ๊ทธ์ธ kube-neat ์„ค์น˜
  2. YAML ํŒŒ์ผ์„ ์ด์šฉํ•œ ํŒŒ๋“œ ๋ฐฐํฌ
  3. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค YAML ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ ๊ฒ€์ƒ‰ ๋ฐ ๋„ค์ด๋ฐ ๊ทœ์น™์„ ์ ์šฉํ•ด ํŒŒ์ผ ์ €์žฅํ•˜๊ธฐ

โ–ฃ 05์žฅ: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์˜ ๊ธฐ๋ณธ ํ”„๋กœ์„ธ์Šค

  1. ๊ธฐ๋ณธ ์—๋Ÿฌ ์กฐ์น˜ ํ”„๋กœ์„ธ์Šค์˜ ์ดํ•ด: Apply - Get - Describe -Logs - Get Event ์ˆœ์œผ๋กœ ์กฐ์น˜
  2. ์žฅ์•  ์ฒ˜๋ฆฌ ์‚ฌ๋ก€: ํ˜ธ์ŠคํŠธ ๋…ธ๋“œ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ ์šฉ๋Ÿ‰ ์ดˆ๊ณผ

โ–ฃ 06์žฅ: ํ—ฌ๋ฆ„ ๊ธฐ๋ฐ˜์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์น˜ํ•˜๊ธฐ

  1. ํ—ฌ๋ฆ„์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ: ํ—ฌ๋ฆ„ ์ฐจํŠธ, ํ—ฌ๋ฆ„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ, ํ—ฌ๋ฆ„ ํ…œํ”Œ๋ฆฟ 02. ํ—ฌ๋ฆ„ ์ฐจํŠธ๋ฅผ ์ด์šฉํ•œ NGINX ์›น์„œ๋ฒ„ ์„ค์น˜ __6.2.1 ํ—ฌ๋ฆ„์„ ์ด์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ __6.2.2 ํ—ฌ๋ฆ„ ํ…œํ”Œ๋ฆฟ ๋ณ€์ˆ˜ ํŒŒ์ผ ์‚ฌ์šฉํ•˜๊ธฐ __6.2.3 ๋ฆฌ์†Œ์Šค Requests/Limits ์ดํ•ด

[2๋ถ€] ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋„คํŠธ์›Œํฌ ๋ฐ ์Šคํ† ๋ฆฌ์ง€ ์ธํ”„๋ผ ํ™˜๊ฒฝ ๊ตฌ์„ฑ

โ–ฃ 07์žฅ: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค ์‚ฌ์šฉํ•˜๊ธฐ

  1. ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ ํŒŒ๋“œ ๊ฐ„ ํ†ต์‹  __7.1.1 ํด๋Ÿฌ์Šคํ„ฐIP ํƒ€์ž…์˜ ์„œ๋น„์Šค ์ƒ์„ฑ __7.1.2 ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ์˜ ์ดํ•ด
  2. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค DNS ๊ธฐ๋Šฅ ์ดํ•ด __7.2.1 CoreDNS ๋ฐ LocalDNS ์„ค์ • ์ดํ•ด __7.2.2 ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค DNS์˜ Search ์˜ต์…˜ ์„ค์ • ์ดํ•ด
  3. ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€์˜ ํŒŒ๋“œ ์—ฐ๊ฒฐ __7.3.1 ๋…ธ๋“œํฌํŠธ ํƒ€์ž…์˜ ์„œ๋น„์Šค ์ƒ์„ฑ __7.3.2 ๋ถ€ํ•˜๋ถ„์‚ฐ ์„ค์ •์˜ ์ดํ•ด

โ–ฃ 08์žฅ: MetalLB๋ฅผ ์ด์šฉํ•œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ํƒ€์ž… ์„œ๋น„์Šค ๊ตฌ์ถ•

  1. ํ—ฌ๋ฆ„์„ ์ด์šฉํ•œ MetalLB ์„ค์น˜
  2. MetalLB ํŒŒ๋“œ ์•„ํ‚คํ…์ฒ˜ ํ™•์ธ __8.2.1 kubetail ์„ค์น˜ __8.2.2 MetalLB ํŒŒ๋“œ ๋กœ๊ทธ ํ™•์ธ
  3. MetalLB ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๋ฐ ๊ณ ๊ฐ€์šฉ์„ฑ ์‹œ๋‚˜๋ฆฌ์˜ค ๊ฒ€์ฆ __8.3.1 k6๋ฅผ ์ด์šฉํ•œ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ __8.3.2 ๋…ธ๋“œ ์žฅ์•  ์‹œ์˜ ์„œ๋น„์Šค ๋‹ค์šด์‹œ๊ฐ„ ์ธก์ •

โ–ฃ 09์žฅ: Traefik์„ ์ด์šฉํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ธ๊ทธ๋ ˆ์Šค ๊ตฌ์ถ•

  1. Traefik ์ธ๊ทธ๋ ˆ์Šค ์ปจํŠธ๋กค๋Ÿฌ ์„ค์น˜
  2. ์ธ๊ทธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์น˜
  3. Traefik ์ธ๊ทธ๋ ˆ์Šค ์„ค์ • ํ…Œ์ŠคํŠธ __9.3.1 Traefik CRD๋ฅผ ์ด์šฉํ•œ ์ธ๊ทธ๋ ˆ์Šค ์„ค์ •์˜ ์ดํ•ด __9.3.2 ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ์™€ URL ๊ฒฝ๋กœ์— ๋”ฐ๋ฅธ ์„œ๋น„์Šค ๋ถ„๊ธฐ __9.3.3 ์‚ฌ์šฉ์ž SSL/TLS ์ธ์ฆ์„œ ์ ์šฉ

โ–ฃ 10์žฅ: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์Šคํ† ๋ฆฌ์ง€

  1. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜๊ตฌ๋ณผ๋ฅจ, PVC, ์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค์˜ ์ดํ•ด
  2. OpenEBS ๋กœ์ปฌ ํ˜ธ์ŠคํŠธํŒจ์Šค ์„ค์น˜
  3. ์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•œ PVC ๋ฐ ์˜๊ตฌ๋ณผ๋ฅจ ์‚ฌ์šฉ
  4. ์‚ฌ์šฉ์ž ์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•ด ํ—ฌ๋ฆ„ ์ฐจํŠธ MySQL ์„ค์น˜ํ•˜๊ธฐ
  5. ๋กœ์ปฌ ํ˜ธ์ŠคํŠธํŒจ์Šค ์Šคํ† ๋ฆฌ์ง€ ํด๋ž˜์Šค์˜ ์žฅ์  ๋ฐ ์ œ์•ฝ ์‚ฌํ•ญ __10.5.1 ๋›ฐ์–ด๋‚œ IOPS ์„ฑ๋Šฅ - Kubestr์„ ์ด์šฉํ•œ ์„ฑ๋Šฅ ์ธก์ • __10.5.2 ์Šคํ† ๋ฆฌ์ง€ ๊ณ ๊ฐ€์šฉ์„ฑ ๊ตฌ์„ฑ ์ œ์•ฝ - ๋…ธ๋“œ ์ œ๊ฑฐ ํ…Œ์ŠคํŠธ

โ–ฃ 11์žฅ: ์Šคํ† ๋ฆฌ์ง€ ๋ณผ๋ฅจ ์Šค๋ƒ…์ƒท ์‚ฌ์šฉํ•˜๊ธฐ

  1. rook-ceph๋ฅผ ์ด์šฉํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์…ฐํ”„ ์Šคํ† ๋ฆฌ์ง€ ์„ค์น˜
  2. ์›Œ๋“œํ”„๋ ˆ์Šค ๋ธ”๋กœ๊ทธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์น˜ ๋ฐ ์Šค๋ƒ…์ƒท ์ƒ์„ฑ __11.2.1 ์›Œ๋“œํ”„๋ ˆ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์น˜ __11.2.2 ์Šคํ† ๋ฆฌ์ง€ ๋ณผ๋ฅจ ์Šค๋ƒ…์ƒท ์ƒ์„ฑ
  3. ์Šค๋ƒ…์ƒท์„ ์ด์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ
  4. rook-ceph ์Šคํ† ๋ฆฌ์ง€์˜ ๊ฐ€์šฉ์„ฑ ํ…Œ์ŠคํŠธ ๋ฐ IOPS ์„ฑ๋Šฅ ์ธก์ •

โ–ฃ 12์žฅ: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ์—์„œ ๊ณต์œ  ํŒŒ์ผ ์Šคํ† ๋ฆฌ์ง€ ์‚ฌ์šฉํ•˜๊ธฐ

  1. ๋ฃจํฌ-์…ฐํ”„ ์ด์šฉํ•œ ๊ณต์œ  ํŒŒ์ผ ์Šคํ† ๋ฆฌ์ง€ ์„ค์น˜
  2. ์—ฌ๋Ÿฌ ํŒŒ๋“œ์—์„œ ๋™์‹œ์— ๋‹จ์ผ ํŒŒ์ผ ์Šคํ† ๋ฆฌ์ง€์— ๋งˆ์šดํŠธํ•˜๊ธฐ
  3. ์Šคํ† ๋ฆฌ์ง€ ๊ณ ๊ฐ€์šฉ์„ฑ ํ…Œ์ŠคํŠธ

[03๋ถ€] ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ์ธํ”„๋ผ ๊ตฌ์ถ•

โ–ฃ 13์žฅ: ํ•˜๋ฒ„๋ฅผ ์ด์šฉํ•œ ๋กœ์ปฌ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ ๊ตฌ์ถ•

  1. ํ—ฌ๋ฆ„ ์ฐจํŠธ๋ฅผ ์ด์šฉํ•œ ํ•˜๋ฒ„ ์„ค์น˜
  2. ๋กœ์ปฌ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์›๊ฒฉ ํ•˜๋ฒ„ ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ๋กœ ์—…๋กœ๋“œ
  3. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค YAML ํŒŒ์ผ์˜ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ ์ฃผ์†Œ๋ฅผ ๋กœ์ปฌ ํ•˜๋ฒ„๋กœ ๋ณ€๊ฒฝ
  4. ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์‹œ ์ž๋™์œผ๋กœ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ๋ณด์•ˆ ์Šค์บ” ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”

โ–ฃ 14์žฅ: ๊นƒ๋žฉ์„ ์ด์šฉํ•œ ๋กœ์ปฌ Git ์†Œ์Šค ์ €์žฅ์†Œ ๊ตฌ์ถ•

  1. ํ—ฌ๋ฆ„ ์ฐจํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๊นƒ๋žฉ ์„ค์น˜
  2. ๋กœ์ปฌ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค YAML ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์›๊ฒฉ ๊นƒ๋žฉ ์ €์žฅ์†Œ์— ๋™๊ธฐํ™”

โ–ฃ 15์žฅ: ์•„๋ฅด๊ณ ์‹œ๋””๋ฅผ ํ™œ์šฉํ•œ ๊นƒ์˜ต์Šค ์‹œ์Šคํ…œ ๊ตฌ์ถ•

  1. ํ—ฌ๋ฆ„ ์ฐจํŠธ๋ฅผ ์ด์šฉํ•œ ์•„๋ฅด๊ณ ์‹œ๋”” ์„ค์น˜
  2. ์•„๋ฅด๊ณ ์‹œ๋””๋ฅผ ์ด์šฉํ•œ ๋ž˜๋น—์— ํ ํ—ฌ๋ฆ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ
  3. GitOps ์‹ค์Šต: ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ • ๋‚ด์—ญ ๋ณ€๊ฒฝ๊ณผ ๊นƒ ์ €์žฅ์†Œ ์ž๋™ ๋ฐ˜์˜

[04๋ถ€] ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋กœ๊น… ์‹œ์Šคํ…œ ๊ตฌ์ถ•

โ–ฃ 16์žฅ: ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ

  1. ๋ฉ”ํŠธ๋ฆญ ์„œ๋ฒ„๋ฅผ ์ด์šฉํ•œ ํŒŒ๋“œ ๋ฐ ๋…ธ๋“œ์˜ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ
  2. ๋ช…๋ น์–ด ๊ธฐ๋ฐ˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ k9s

โ–ฃ 17์žฅ: ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค - ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ

  1. ํ—ฌ๋ฆ„ ์ฐจํŠธ ๊ธฐ๋ฐ˜์˜ ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค-์Šคํƒ ์„ค์น˜
  2. ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค ์•„ํ‚คํ…์ฒ˜
  3. ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค ์›น UI ํ™œ์šฉ: ์ƒ์„ธ ์„ค์ • ๋‚ด์—ญ ํ™•์ธ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ทธ๋ž˜ํ”„ ํ™•์ธํ•˜๊ธฐ

โ–ฃ 18์žฅ: ๊ทธ๋ผํŒŒ๋‚˜ - ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์‹œ๋ณด๋“œ

  1. ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค-์Šคํƒ์— ์‚ฌ์ „ ํฌํ•จ๋œ ๊ทธ๋ผํŒŒ๋‚˜ ๋Œ€์‹œ๋ณด๋“œ ์‚ฌ์šฉํ•˜๊ธฐ __18.1.1 ๊ทธ๋ผํŒŒ๋‚˜์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ• __18.1.2 ๊ธฐ๋ณธ ๋Œ€์‹œ๋ณด๋“œ ํ™•์ธ
  2. ๊ทธ๋ผํŒŒ๋‚˜ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์˜ ํ…œํ”Œ๋ฆฟ ๋Œ€์‹œ๋ณด๋“œ ์ถ”๊ฐ€ํ•˜๊ธฐ
  3. NGINX ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์‹œ๋ณด๋“œ ์ถ”๊ฐ€: ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค ์„œ๋น„์Šค๋ชจ๋‹ˆํ„ฐ์™€ PromQL์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

โ–ฃ 19์žฅ: ์–ผ๋Ÿฟ๋งค๋‹ˆ์ € - ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ฒฝ๋ณด ์„œ๋น„์Šค

  1. ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค์™€ ์–ผ๋Ÿฟ๋งค๋‹ˆ์ €์˜ ์‹œ์Šคํ…œ ๊ฒฝ๋ณด ๊ธฐ๋Šฅ
  2. ์‹œ์Šคํ…œ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ์„ ์œ„ํ•œ ์Šฌ๋ž™ ์ฑ„๋„ ๋ฐ ์›นํ›… URL ์ƒ์„ฑ
  3. ์–ผ๋Ÿฟ๋งค๋‹ˆ์ € ์„ค์ • ํŒŒ์ผ์— ์Šฌ๋ž™ ์›นํ›… URL ๋“ฑ๋ก
  4. ์–ผ๋Ÿฟ๋งค๋‹ˆ์ € ๊ธฐ๋Šฅ ๊ฒ€์ฆ __19.4.1 ์ž„์˜์˜ ๋…ธ๋“œ๋ฅผ ๋‹ค์šด์‹œํ‚จ ํ›„ ์Šฌ๋ž™ ์ฑ„๋„ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธ __19.4.2 ์‹œ์Šคํ…œ ๊ฒฝ๊ณ  ์ •์ฑ…(prometheusrules)์˜ ์ƒ์„ธ ๋‚ด์šฉ ํ™•์ธ __19.4.3 ์–ผ๋Ÿฟ๋งค๋‹ˆ์ €์˜ ์ผ์‹œ ์ค‘์ง€ ๊ธฐ๋Šฅ ์‚ฌ์šฉํ•˜๊ธฐ
  5. ์‚ฌ์šฉ์ž ์ •์˜ prometheusrules ์ •์ฑ… ์„ค์ •: ํŒŒ์ผ์‹œ์Šคํ…œ ์‚ฌ์šฉ๋ฅ  80% ์ดˆ๊ณผ ์‹œ ์‹œ์Šคํ…œ ๊ฒฝ๊ณ  ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ

โ–ฃ 20์žฅ: ๋กœํ‚ค - ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋กœ๊น… ์‹œ์Šคํ…œ

  1. ๋กœํ‚ค ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ์™€ ์„ค์น˜
  2. ๋กœํ‚ค๋ฅผ ์ด์šฉํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋กœ๊ทธ ๊ฒ€์ƒ‰
  3. LogQL ์‚ฌ์šฉ๋ฒ• ์ตํžˆ๊ธฐ: ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋กœ๊ทธ ๋ฐ ์ •๊ทœ ํ‘œํ˜„์‹์„ ์ด์šฉํ•œ ๋กœ๊ทธ ๊ฒ€์ƒ‰

[05๋ถ€] ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ณด์•ˆ ์‹œ์Šคํ…œ ๊ตฌ์ถ•

21์žฅ: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ณด์•ˆ ๋„๊ตฌ ํ™œ์šฉ

  1. kubescape - NSA/CISA ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ์ ๊ฒ€ ๋„๊ตฌ
  2. ํด๋ผ๋ฆฌ์Šค ํ™œ์šฉ __21.2.1 ๋ ˆ๋””์Šค ํ—ฌ๋ฆ„ ์ฐจํŠธ ์„ค์น˜ __21.2.2 ํด๋ผ๋ฆฌ์Šค ์„ค์น˜ ๋ฐ ๋ ˆ๋””์Šค์˜ ๋ณด์•ˆ ์ทจ์•ฝ์  ํ™•์ธ

โ–ฃ 22์žฅ: ์—ญํ•  ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด(RBAC) ์„ค์ •

  1. Role/RoleBinding๊ณผ ClusterRole/ClusterRoleBinding ์ดํ•ด
  2. ServiceAccount์™€ User, kubeconfig ํŒŒ์ผ ์ดํ•ด: ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ถŒํ•œ๋งŒ ๊ฐ€์ง€๋Š” ์‚ฌ์šฉ์ž ์ƒ์„ฑ
  3. ๋ฉ€ํ‹ฐํ…Œ๋„Œ์‹œ ํ™˜๊ฒฝ์˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ตฌ์„ฑ: ์‚ฌ์šฉ์ž๋ณ„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‹จ์œ„์˜ ๊ถŒํ•œ ์ œํ•œ

[06๋ถ€] ์‹ค์ œ ์„œ๋น„์Šค ์šด์˜์— ํ•„์š”ํ•œ ๊ธฐ์ˆ 

โ–ฃ 23์žฅ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ์™€ ๊ณ ๊ฐ€์šฉ์„ฑ ํ…Œ์ŠคํŠธ

  1. ๋ฐ๋ชจ ์šฉ๋„์˜ ๋ฐฉ๋ช…๋ก ์„œ๋น„์Šค ์„ค์น˜
  2. k6๋ฅผ ์ด์šฉํ•œ ์›น ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ
  3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ ๊ฐ€์šฉ์„ฑ ํ…Œ์ŠคํŠธ __23.3.1 ํŠน์ • ๋…ธ๋“œ ๋‚ด์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ํŒŒ๋“œ ์ข…๋ฃŒํ•˜๊ธฐ __23.3.2 ํŒŒ๋“œ ์‚ญ์ œ ๋ฐ ๋…ธ๋“œ ์ข…๋ฃŒ ์‹œ ์„œ๋น„์Šค ์ด์ƒ ์—ฌ๋ถ€ ๊ฒ€์ฆ

โ–ฃ 24์žฅ: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋…ธ๋“œ ๋ณ€๊ฒฝ๊ณผ ์ถ”๊ฐ€

  1. ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋…ธ๋“œ ๋ณ€๊ฒฝ๊ณผ ์›Œ์ปค ๋…ธ๋“œ ์ถ”๊ฐ€

์‹ค์Šต

  1. 01์žฅ: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ฐœ์š”์™€ ํด๋Ÿฌ์Šคํ„ฐ ์„ค์น˜
  • ํด๋Ÿฌ์Šคํ„ฐ ์„ค์น˜
    1. ../multipass ์„ค์ •
    • DONE: ์ธ์Šคํ„ด์Šค stop ํ›„ start ํ–ˆ์„๋•Œ api-server ๊ฐ€ ๋จนํ†ต start ํ›„ ์‹œ๊ฐ„์ด ๊ฝค ํ˜๋Ÿฌ์•ผํ•จ, 20๋ถ„์ •๋„ ํ›„์— ํ…Œ์ŠคํŠธ ํ•ด๋ณด๋‹ˆ ๋จ
    • instace 3๋Œ€์‹œ์ž‘ kube0{0,1,2} ../kubespray
    1. ../kubespray
    • multipass ls
    • multipass shell kube00
      • vi /etc/hosts
        • kube00
127.0.1.1 kube00 kube00 
127.0.1.1 localhost
    - [ ] TODO: ip ์ž์ฒด๋ฅผ ํ• ๋‹นํ•  ๊ฒฝ์šฐ kubespray ์„ค์น˜ ์‹คํŒจ ์žฌ์‹œ๋„ ํ•„์š”
    - ssh kube01
3. ํƒ€ ์ธ์Šคํ„ด์Šค ์ ‘์†์„ ์œ„ํ•œ /etc/hosts
127.0.1.1 kube00 kube00
192.168.64.5 kube00 kube00
192.168.64.6 kube01 kube01
192.168.64.7 kube02 kube02
127.0.0.1 localhost
4. kubectl ์„ ํ†ตํ•ด์„œ ์ปจํ”ผ๊ทธ ๋“ฑ ํ™•์ธ, ์ด๋ฏธ ํ•ด์„œ ํŒจ์Šค
  1. 02์žฅ: ํšจ์œจ์ ์ธ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ kubectl CLI ํ™˜๊ฒฝ ์ตœ์ ํ™” ๋กœ์ปฌ os ์„ค์ •
  2. shell autocomplete ์„ค์ •
  3. ../krew k8s plugin manager ์„ค์ • - ns
kubectl krew install ctx
kubectl ctx # listing
kubectl ctx [context-name] # ์ปจํ…์ŠคํŠธ ๋ณ€๊ฒฝ
- ctx
kubectl krew install ns
kubectl ns # listing
kubectl ns [namespace-name] # ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ณ€๊ฒฝ
  1. kube-ps1 shell ์—์„œ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์คŒ ์„ค์น˜ํ•˜์ง€ ์•Š์Œ, tmux ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ๋Œ€์ฒดํ–ˆ์Œ
  2. 03์žฅ: kubectl ๋ช…๋ น์–ด๋กœ ์ตํžˆ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ฃผ์š” ์˜ค๋ธŒ์ ํŠธ
  • pod
$ k ns
Context "[email protected]" modified.
Active namespace is "default".
$ k run nginx --image=nginx
pod/nginx created
$ kgp
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          10s
$ k run nginx01 --image=nginx
pod/nginx01 created
$ kgpwide
NAME      READY   STATUS              RESTARTS   AGE     IP              NODE     NOMINATED NODE   READINESS GATES
nginx     1/1     Running             0          2m12s   10.233.85.197   kube02   <none>           <none>
nginx01   0/1     ContainerCreating   0          3s      <none>          kube01   <none>           <none>
- ํŒŒ๋“œ๋‚ด ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค ํ™•์ธ
$ k exec -it nginx -- bash
root@nginx:/# apt -y update && apt -y install procps # ps ์‹คํ–‰์„ ์œ„ํ•ด ์„ค์น˜
root@nginx:/# ps aux
- ๊ฐœ๋ฐœ ํŒŒ๋“œ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ณผ๋ฅจ์€ ํ˜ธ์ŠคํŠธ ๋…ธ๋“œ์˜ /var/lib/containers/[pod-name]
  - [ ] ๋ง‰์ƒ ๋“ค์–ด๊ฐ€๋ณด๋‹ˆ ๋””๋ ‰ํ† ๋ฆฌ ์ž์ฒด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ
    - /var/lib/containerd/* ์€ ์กด์žฌํ•˜๋‚˜ pod(nginx) ๋Š” ์กด์žฌํ•˜์ง€ ์•Š์•˜์Œ
  • deployment
$ k create deployment httpd --image=httpd
deployment.apps/httpd created
$ kgpwide                         ok  1.59.0 rust  [email protected] kube  15:31:47
NAME                     READY   STATUS              RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
httpd-65bfffd87f-59rpd   0/1     ContainerCreating   0          3s    <none>          kube00   <none>           <none>
nginx                    1/1     Running             0          17m   10.233.85.197   kube02   <none>           <none>
nginx01                  1/1     Running             0          15m   10.233.72.132   kube01   <none>           <none>
$ kgpwide                         ok  1.59.0 rust  [email protected] kube  15:31:50
NAME                     READY   STATUS              RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
httpd-65bfffd87f-59rpd   0/1     ContainerCreating   0          6s    <none>          kube00   <none>           <none>
nginx                    1/1     Running             0          17m   10.233.85.197   kube02   <none>           <none>
nginx01                  1/1     Running             0          15m   10.233.72.132   kube01   <none>           <none>
$ kgpwide                         ok  1.59.0 rust  [email protected] kube  15:31:53
NAME                     READY   STATUS    RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
httpd-65bfffd87f-59rpd   1/1     Running   0          10s   10.233.102.7    kube00   <none>           <none>
nginx                    1/1     Running   0          18m   10.233.85.197   kube02   <none>           <none>
nginx01                  1/1     Running   0          15m   10.233.72.132   kube01   <none>           <none>
$ k scale deployment httpd --replicas 10
deployment.apps/httpd scaled
$ kgpwide                         ok  1.59.0 rust  [email protected] kube  15:32:14
NAME                     READY   STATUS              RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
httpd-65bfffd87f-226lx   0/1     ContainerCreating   0          3s    <none>          kube00   <none>           <none>
httpd-65bfffd87f-4lm5x   0/1     ContainerCreating   0          3s    <none>          kube01   <none>           <none>
httpd-65bfffd87f-59rpd   1/1     Running             0          30s   10.233.102.7    kube00   <none>           <none>
httpd-65bfffd87f-5nvp4   0/1     ContainerCreating   0          3s    <none>          kube02   <none>           <none>
httpd-65bfffd87f-9fb55   0/1     ContainerCreating   0          3s    <none>          kube02   <none>           <none>
httpd-65bfffd87f-d5qdk   0/1     ContainerCreating   0          3s    <none>          kube01   <none>           <none>
httpd-65bfffd87f-d9ztz   0/1     ContainerCreating   0          3s    <none>          kube01   <none>           <none>
httpd-65bfffd87f-q66vs   0/1     ContainerCreating   0          3s    <none>          kube02   <none>           <none>
httpd-65bfffd87f-r5fgn   0/1     ContainerCreating   0          3s    <none>          kube00   <none>           <none>
httpd-65bfffd87f-zr2zp   0/1     ContainerCreating   0          3s    <none>          kube00   <none>           <none>
nginx                    1/1     Running             0          18m   10.233.85.197   kube02   <none>           <none>
nginx01                  1/1     Running             0          16m   10.233.72.132   kube01   <none>           <none>
$ k scale deployment httpd --replicas 0
deployment.apps/httpd scaled
$ kgpwide                         ok  1.59.0 rust  [email protected] kube  15:35:06
NAME      READY   STATUS    RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
nginx     1/1     Running   0          21m   10.233.85.197   kube02   <none>           <none>
nginx01   1/1     Running   0          19m   10.233.72.132   kube01   <none>           <none>
$ k scale deployment httpd --replicas 1
deployment.apps/httpd scaled
$ kgpwide                         ok  1.59.0 rust  [email protected] kube  15:35:15
NAME                     READY   STATUS              RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
httpd-65bfffd87f-jtc8x   0/1     ContainerCreating   0          2s    <none>          kube00   <none>           <none>
nginx                    1/1     Running             0          21m   10.233.85.197   kube02   <none>           <none>
nginx01                  1/1     Running             0          19m   10.233.72.132   kube01   <none>           <none>
$ k delete pod httpd-65bfffd87f-jtc8x
pod "httpd-65bfffd87f-jtc8x" deleted
$ kgpwide                         ok  1.59.0 rust  [email protected] kube  15:37:18
NAME                     READY   STATUS    RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
httpd-65bfffd87f-x7ddc   1/1     Running   0          6s    10.233.85.201   kube02   <none>           <none>
nginx                    1/1     Running   0          23m   10.233.85.197   kube02   <none>           <none>
nginx01                  1/1     Running   0          21m   10.233.72.132   kube01   <none>           <none>
- ํŒŒ๋“œ๋ฅผ ์‚ญ์ œํ•ด๋„ deployment ์˜ replicas ๋กœ ์ธํ•ด ํŒŒ๋“œ๊ฐ€ ์ž๋™ ์žฌ์ƒ์„ฑ ๋˜๋Š” ๊ฒƒ ํ™•์ธ
  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ƒ์„ฑ
$ k create ns default01                                                                  ok  [email protected] kube  15:39:28
namespace/default01 created
$ k ns default                                                                           ok  [email protected] kube  15:39:40
Context "[email protected]" modified.
Active namespace is "default".
$ k delete pod nginx{,01}                                                             1 err  [email protected] kube  15:40:20
pod "nginx" deleted
pod "nginx01" deleted
$ k delete deployments.apps httpd                                                        ok  [email protected] kube  15:40:27
deployment.apps "httpd" deleted
$ kgpwide                                                                                ok  [email protected] kube  15:40:39
No resources found in default namespace.
- ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์—์„œ๋Š” ๊ฐ™์€ ์ด๋ฆ„์˜ ํŒŒ๋“œ๋ฅผ ์žฌ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค
$ k run nginx --image=nginx                                                              ok  [email protected] kube  15:40:41
pod/nginx created
$ k run nginx --image=nginx                                                              ok  [email protected] kube  15:41:28
Error from server (AlreadyExists): pods "nginx" already exists
$ k ns default01                                                                      1 err  [email protected] kube  15:41:29
Context "[email protected]" modified.
Active namespace is "default01".
$ k run nginx --image=nginx                                                    ok  [email protected]/default01 kube  15:41:57
pod/nginx created
- ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ํŒŒ๋“œ๊ฐ„ ํ†ต์‹ 
  ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ๋„คํŠธ์›Œํฌ ์ˆ˜์ค€์˜ ๋ถ„๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋‹ค
 ~  kgpwide -n default01                                                                                                   INT  9s  15:45:13
 ~  kgpwide -n default                                                      INT  9s  [email protected]/default01 kube  15:45:13
NAME    READY   STATUS    RESTARTS   AGE     IP              NODE     NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          3m53s   10.233.85.202   kube02   <none>           <none>
 ~  kgpwide -n default01                                                         ok  [email protected]/default01 kube  15:45:21
NAME    READY   STATUS    RESTARTS   AGE     IP              NODE     NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          3m19s   10.233.72.136   kube01   <none>           <none>
 ~  k exec -it nginx -- bash                                                     ok  [email protected]/default01 kube  15:45:22
root@nginx:/# apt-get update -y && apt-get install iputils-ping -y
root@nginx:/# ping 10.233.85.202 -c 1
PING 10.233.85.202 (10.233.85.202) 56(84) bytes of data.
64 bytes from 10.233.85.202: icmp_seq=1 ttl=62 time=0.632 ms
root@nginx:/# ping 10.233.72.136 -c 1
PING 10.233.72.136 (10.233.72.136) 56(84) bytes of data.
64 bytes from 10.233.72.136: icmp_seq=1 ttl=64 time=0.035 ms
--- 10.233.72.136 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.035/0.035/0.035/0.000 ms
root@nginx:/#
  1. 04์žฅ: YAML ํŒŒ์ผ์„ ์ด์šฉํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜ค๋ธŒ์ ํŠธ ๊ด€๋ฆฌ
  • neat ์„ค์น˜, ์ƒํƒœ๋‚˜ ๊ธฐ๋ณธ๊ฐ’์„ ์ œ๊ฑฐํ•œ ์ด๋ ฅ ๊ด€๋ฆฌ์šฉ yaml ์„ ์ถ”์ถœ
$ k run busybox --image=busybox                                                          ok  [email protected] kube  16:00:14
pod/busybox created
$ kgpwide # busybox ๊ฐ€ ์‹คํ–‰ ํ›„ ๋ฐ”๋กœ ์™„๋ฃŒ๋จ                                                                                ok  [email protected] kube  16:00:52
NAME      READY   STATUS      RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
busybox   0/1     Completed   0          5s    10.233.102.14   kube00   <none>           <none>
nginx     1/1     Running     0          19m   10.233.85.202   kube02   <none>           <none>
$ kgp busybox -o yaml                                
# ... verbose yaml
- neat ์„ค์น˜
$ k krew install neat                                                                    ok  [email protected] kube  16:01:58
Updated the local copy of plugin index.
Installing plugin: neat
Installed plugin: neat
\
 | Use this plugin:
 |      kubectl neat
 | Documentation:
 |      https://github.com/itaysk/kubectl-neat
/
WARNING: You installed plugin "neat" from the krew-index plugin repository.
   These plugins are not audited for security by the Krew maintainers.
   Run them at your own risk.
$ kgp busybox -o yaml | k neat                                                          INT  [email protected] kube  16:02:17
apiVersion: v1
kind: Pod
metadata:
# ... yaml
$ kgp busybox -o yaml | k neat > busybox-pod.yaml
$ vi busybox-pod.yaml

... ๋ฐ”๋กœ ์™„๋ฃŒ๋˜์ง€ ์•Š๊ณ  ์‚ด์•„์žˆ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ command ์ถ”๊ฐ€

spec:
  containers:
  - image: busybox
    name: busybox
    command:
    - "/bin/sh"
    - "-c"
    - "sleep inf"
 ~/w/st/k8s-24-steps  kaf busybox-pod.yaml
 ~/w/st/k8s-24-steps  kaf busybox-pod.yaml                                            ok  11s  [email protected] kube  16:11:46
pod/busybox created
 ~/w/st/k8s-24-steps  kgpwide                                                              ok  [email protected] kube  16:12:04
NAME      READY   STATUS    RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
busybox   1/1     Running   0          3s    10.233.102.16   kube00   <none>           <none>
nginx     1/1     Running   0          30m   10.233.85.202   kube02   <none>           <none>
 ~/w/st/k8s-24-steps  vi busybox-pod.yaml                                                  ok  [email protected] kube  16:12:04
# ... resources ์ถ”๊ฐ€
    command:
    - "/bin/sh"
    - "-c"
    - "sleep inf"
    resources:
      limits:
        memory: 512Mi
      requests:
        memory: 128Mi
  • ๋„ค์ด๋ฐ ๊ทœ์น™
    • ๊ฑฐ์˜ ๋ชจ๋“  k8s ์˜ค๋ธŒ์ ํŠธ๋Š”AKMS(apiVersion,kind,metadata,spec)ํ•„ ์„ ํฌํ•จ
    • ์ €์ž์˜ ๊ทœ์น™
      • [app-name]-[option]-[object-name].yaml
      • ๋””๋ ‰ํ† ๋ฆฌ
        1. Pods
        2. Deployments
        3. StatefulSet
        4. Daemonset
        5. JobCronjob
        6. volume
        7. network
  1. 05์žฅ: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์˜ ๊ธฐ๋ณธ ํ”„๋กœ์„ธ์Šค
  • AGDLG
    1. Apply
    2. Get
    3. Describe
    4. Logs
    5. Get Event
  • ์—†๋Š” ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•œ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ์‹œ๋‚˜๋ฆฌ์˜ค
 ~/workspace/study/k8s-24-steps  vi nginx-error-pod.yaml                                                                        ok  16:25:08
 ~/workspace/study/k8s-24-steps  cat nginx-error-pod.yaml                                                               ok  1m 35s  16:26:54
apiVersion: v1
kind: Pod
metadata:
  name: nginx-19
spec:
  container:
    name: nginx-pod
    image: nginx:1.19.19 # ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ด๋ฏธ์ง€
 ~/w/st/k8s-24-steps  kaf nginx-error-pod.yaml                                             ok  [email protected] kube  16:27:01
error: error validating "nginx-error-pod.yaml": error validating data: [ValidationError(Pod.spec): unknown field "container" in io.k8s.api.core.v1.PodSpec, ValidationError(Pod.spec): missing required field "containers" in io.k8s.api.core.v1.PodSpec]; if you choose to ignore these errors, turn validation off with --validate=false
 ~/workspace/study/k8s-24-steps  !v                                                                                          1 err  16:27:06
 ~/workspace/study/k8s-24-steps  vi nginx-error-pod.yaml                                                                     1 err  16:27:16
 ~/workspace/study/k8s-24-steps                                                                                            ok  10s  16:27:26
 ~/workspace/study/k8s-24-steps                                                                                            ok  10s  16:27:26
 ~/workspace/study/k8s-24-steps  !v                                                                                        ok  10s  16:27:26
 ~/workspace/study/k8s-24-steps  vi nginx-error-pod.yaml                                                                        ok  16:27:30
 ~/workspace/study/k8s-24-steps  cat nginx-error-pod.yaml                                                                       ok  16:27:31
apiVersion: v1
kind: Pod
metadata:
  name: nginx-19
spec:
  containers:
    - name: nginx-pod
      image: nginx:1.19.19 # ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ด๋ฏธ์ง€
 ~/w/st/k8s-24-steps  kaf nginx-error-pod.yaml                                             ok  [email protected] kube  16:27:34
pod/nginx-19 created
 ~/w/st/k8s-24-steps  kgpwide                                                              ok  [email protected] kube  16:27:39
NAME       READY   STATUS         RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
busybox    1/1     Running        0          15m   10.233.102.16   kube00   <none>           <none>
nginx      1/1     Running        0          46m   10.233.85.202   kube02   <none>           <none>
nginx-19   0/1     ErrImagePull   0          7s    10.233.85.203   kube02   <none>           <none>
 ~/w/st/k8s-24-steps  kdp nginx-19                                                         ok  [email protected] kube  16:27:46
Name:         nginx-19
Namespace:    default
Priority:     0
Node:         kube02/192.168.64.7
Start Time:   Tue, 20 Dec 2022 16:27:39 +0900
Labels:       <none>
Annotations:  cni.projectcalico.org/containerID: a4249b8b4f1ad3cc1dc92af29a9ea267e7bcb14a88a678ab18d6508c93c4ece8
              cni.projectcalico.org/podIP: 10.233.85.203/32
              cni.projectcalico.org/podIPs: 10.233.85.203/32
Status:       Pending
IP:           10.233.85.203
IPs:
  IP:  10.233.85.203
Containers:
  nginx-pod:
    Container ID:
    Image:          nginx:1.19.19
    Image ID:
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ErrImagePull
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-9bxfp (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  kube-api-access-9bxfp:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  70s                default-scheduler  Successfully assigned default/nginx-19 to kube02
  Normal   Pulling    24s (x3 over 70s)  kubelet            Pulling image "nginx:1.19.19"
  Warning  Failed     21s (x3 over 67s)  kubelet            Failed to pull image "nginx:1.19.19": rpc error: code = NotFound desc = failed to pull and unpack image "docker.io/library/nginx:1.19.19": failed to resolve reference "docker.io/library/nginx:1.19.19": docker.io/library/nginx:1.19.19: not found
  Warning  Failed     21s (x3 over 67s)  kubelet            Error: ErrImagePull
  Normal   BackOff    11s (x3 over 67s)  kubelet            Back-off pulling image "nginx:1.19.19"
  Warning  Failed     11s (x3 over 67s)  kubelet            Error: ImagePullBackOff
 ~/workspace/study/k8s-24-steps  vi nginx-error-pod.yaml                                                                        ok  16:28:49
 ~/workspace/study/k8s-24-steps  cat nginx-error-pod.yaml                                                                  ok  10s  16:29:35
apiVersion: v1
kind: Pod
metadata:
  name: nginx-19
spec:
  containers:
    - name: nginx-pod
      image: nginx:1.19
 ~/w/st/k8s-24-steps  kaf nginx-error-pod.yaml                                             ok  [email protected] kube  16:29:39
pod/nginx-19 configured
 ~/w/st/k8s-24-steps  kgpwide                                                              ok  [email protected] kube  16:30:03
NAME       READY   STATUS             RESTARTS   AGE     IP              NODE     NOMINATED NODE   READINESS GATES
busybox    1/1     Running            0          18m     10.233.102.16   kube00   <none>           <none>
nginx      1/1     Running            0          48m     10.233.85.202   kube02   <none>           <none>
nginx-19   0/1     ImagePullBackOff   0          2m28s   10.233.85.203   kube02   <none>           <none>
 ~/w/st/k8s-24-steps  kgpwide                                                              ok  [email protected] kube  16:30:07
NAME       READY   STATUS             RESTARTS   AGE     IP              NODE     NOMINATED NODE   READINESS GATES
busybox    1/1     Running            0          18m     10.233.102.16   kube00   <none>           <none>
nginx      1/1     Running            0          48m     10.233.85.202   kube02   <none>           <none>
nginx-19   0/1     ImagePullBackOff   0          2m30s   10.233.85.203   kube02   <none>           <none>
 ~/w/st/k8s-24-steps  k delete pod nginx19                                                 ok  [email protected] kube  16:30:09
Error from server (NotFound): pods "nginx19" not found
 ~/w/st/k8s-24-steps  k delete pod nginx-19                                             1 err  [email protected] kube  16:30:14
pod "nginx-19" deleted
 ~/w/st/k8s-24-steps  kaf nginx-error-pod.yaml                                             ok  [email protected] kube  16:30:17
pod/nginx-19 created
 ~/w/st/k8s-24-steps  kgpwide                                                              ok  [email protected] kube  16:30:20
NAME       READY   STATUS    RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
busybox    1/1     Running   0          18m   10.233.102.16   kube00   <none>           <none>
nginx      1/1     Running   0          48m   10.233.85.202   kube02   <none>           <none>
nginx-19   1/1     Running   0          6s    10.233.85.204   kube02   <none>           <none>
 ~/w/st/k8s-24-steps  klf nginx-19                                                         ok  [email protected] kube  16:30:26
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
^C
1. get 
2. describe ๋ฅผ ํ†ตํ•ด์„œ ๋””ํ…Œ์ผํ•œ ์ด์Šˆ ํ™•์ธ
3. ์ •์ƒ์ž‘๋™์„ log ํ†ตํ•ด์„œ ํ™•์ธ
   label ๋กœ ํ•„ํ„ฐ๋งํ•˜๋ฉด ์—ฌ๋Ÿฌ ํŒŒ๋“œ์˜ ๋กœ๊ทธ๋ฅผ ํ•จ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์ž‡๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค
 ~/w/study/k8s-24-steps  kl1h -l component=kube-apiserver -n kube-system                                          ok  [email protected] kube  16:38:59
I1220 06:39:40.498414       1 controller.go:616] quota admission added evaluator for: serviceaccounts
I1220 06:39:40.478986       1 controller.go:616] quota admission added evaluator for: namespaces
I1220 07:32:11.071205       1 trace.go:205] Trace[908013652]: "Get" url:/api/v1/namespaces/default/pods/nginx-19/log,user-agent:kubectl/v1.22.5 (darwin/arm64) kubernetes/5c99e2a,audit-id:cf9bb093-8905-4708-a974-2ee9fbc2ae83,client:192.168.64.1,accept:application/json, */*,protocol:HTTP/2.0 (20-Dec-2022 07:31:25.959) (total time: 45111ms):
Trace[908013652]: ---"Writing http response done" 45107ms (07:32:11.071)
Trace[908013652]: [45.111899611s] [45.111899611s] END
- events
$ k get events
$ k get events -n kube-system
$ k get events -A # all namespaces
  • ํ˜ธ์ŠคํŠธ ๋…ธ๋“œ์˜ ์šฉ๋Ÿ‰ ์ดˆ๊ณผ ์‹œ๋‚˜๋ฆฌ์˜ค ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
 ~/workspace/study/k8s-24-steps  vim busybox-deploy.yaml                                                                        ok  16:55:20
 ~/workspace/study/k8s-24-steps  cat busybox-deploy.yaml                                                                     1 err  16:55:26
apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox
  labels:
    app: busybox
spec:
  replicas: 10
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      containers:
        - name: busybox
          image: busybox
          command:
          - "/bin/sh"
          - "-c"
          - "sleep inf"
 ~/w/st/k8s-24-steps  kaf busybox-deploy.yaml                                              ok  [email protected] kube  16:55:27
deployment.apps/busybox created
 ~/w/st/k8s-24-steps  kgpwide                                                              ok  [email protected] kube  16:55:29
NAME                      READY   STATUS              RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
busybox-9ff887cc8-487jr   1/1     Running             0          8s    10.233.85.206   kube02   <none>           <none>
busybox-9ff887cc8-cgfwf   0/1     ContainerCreating   0          8s    <none>          kube01   <none>           <none>
busybox-9ff887cc8-ctqt4   1/1     Running             0          8s    10.233.72.138   kube01   <none>           <none>
busybox-9ff887cc8-dh7kh   1/1     Running             0          8s    10.233.72.137   kube01   <none>           <none>
busybox-9ff887cc8-f7gtp   1/1     Running             0          8s    10.233.85.207   kube02   <none>           <none>
busybox-9ff887cc8-hwwtn   0/1     ContainerCreating   0          8s    <none>          kube01   <none>           <none>
busybox-9ff887cc8-l7fdb   1/1     Running             0          8s    10.233.85.205   kube02   <none>           <none>
busybox-9ff887cc8-mv8v4   1/1     Running             0          8s    10.233.102.17   kube00   <none>           <none>
busybox-9ff887cc8-nnkrx   1/1     Running             0          8s    10.233.102.18   kube00   <none>           <none>
busybox-9ff887cc8-rtwtm   1/1     Running             0          8s    10.233.102.19   kube00   <none>           <none>
nginx                     1/1     Running             0          74m   10.233.85.202   kube02   <none>           <none>
nginx-19                  1/1     Running             0          25m   10.233.85.204   kube02   <none>           <none>
- kube01 ์— ์ ‘์†ํ•ด์„œ ํฐ ์šฉ๋Ÿ‰์˜ ํŒŒ์ผ์„ ์ƒ์„ฑ  
 ~/workspace/study/k8s-24-steps  m shell kube01                                                                                 ok  16:55:37
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-56-generic aarch64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Tue Dec 20 16:59:06 KST 2022

  System load:             0.7626953125
  Usage of /:              74.7% of 9.52GB
  Memory usage:            24%
  Swap usage:              0%
  Processes:               145
  Users logged in:         0
  IPv4 address for enp0s1: 192.168.64.6
  IPv6 address for enp0s1: fdec:f006:592:f10d:5054:ff:fe8d:ef7f

 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
   just raised the bar for easy, resilient and secure K8s cluster deployment.

   https://ubuntu.com/engage/secure-kubernetes-at-the-edge

9 updates can be applied immediately.
To see these additional updates run: apt list --upgradable


The list of available updates is more than a week old.
To check for new updates run: sudo apt update

Last login: Tue Dec 20 15:22:10 2022 from 192.168.64.1
ubuntu@kube01:~$ df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.6G  7.2G  2.4G  75% /
ubuntu@kube01:~$ fallocate -l 2.2g 2.2g-file
ubuntu@kube01:~$ df -h  /
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.6G  8.8G  820M  92% /
ubuntu@kube01:~$ exit
- ์šฉ๋Ÿ‰ ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด kube01 ๋…ธ๋“œ์˜ ํŒŒ๋“œ๋“ค์ด ์—๋Ÿฌ๋ฅผ ๋‚ด๊ณ  ๋‹ค๋ฅธ ๋…ธ๋“œ์—์„œ ContainerCreating ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธ
 ~/w/study/k8s-24-steps  kgpwide                                                                                  ok  [email protected] kube  17:05:25
NAME                      READY   STATUS              RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
busybox-9ff887cc8-487jr   1/1     Running             0          10m   10.233.85.206   kube02   <none>           <none>
busybox-9ff887cc8-cgfwf   0/1     Error               0          10m   10.233.72.140   kube01   <none>           <none>
busybox-9ff887cc8-ctqt4   0/1     Error               0          10m   10.233.72.138   kube01   <none>           <none>
busybox-9ff887cc8-dh7kh   0/1     Error               0          10m   10.233.72.137   kube01   <none>           <none>
busybox-9ff887cc8-f7gtp   1/1     Running             0          10m   10.233.85.207   kube02   <none>           <none>
busybox-9ff887cc8-hwwtn   1/1     Running             0          10m   10.233.72.139   kube01   <none>           <none>
busybox-9ff887cc8-l7fdb   1/1     Running             0          10m   10.233.85.205   kube02   <none>           <none>
busybox-9ff887cc8-mv8v4   1/1     Running             0          10m   10.233.102.17   kube00   <none>           <none>
busybox-9ff887cc8-nnkrx   1/1     Running             0          10m   10.233.102.18   kube00   <none>           <none>
busybox-9ff887cc8-rn2v6   0/1     ContainerCreating   0          2s    <none>          kube00   <none>           <none>
busybox-9ff887cc8-rtwtm   1/1     Running             0          10m   10.233.102.19   kube00   <none>           <none>
busybox-9ff887cc8-sdgld   1/1     Running             0          33s   10.233.85.208   kube02   <none>           <none>
busybox-9ff887cc8-swz78   1/1     Running             0          64s   10.233.102.20   kube00   <none>           <none>
nginx                     1/1     Running             0          84m   10.233.85.202   kube02   <none>           <none>
nginx-19                  1/1     Running             0          35m   10.233.85.204   kube02   <none>           <none>
 ~/w/study/k8s-24-steps  k get events | head -n 20                                                             1 err  [email protected] kube  17:14:15
LAST SEEN   TYPE      REASON                 OBJECT                         MESSAGE
18m         Normal    Scheduled              pod/busybox-9ff887cc8-487jr    Successfully assigned default/busybox-9ff887cc8-487jr to kube02
18m         Normal    Pulling                pod/busybox-9ff887cc8-487jr    Pulling image "busybox"
18m         Normal    Pulled                 pod/busybox-9ff887cc8-487jr    Successfully pulled image "busybox" in 5.44378738s
18m         Normal    Created                pod/busybox-9ff887cc8-487jr    Created container busybox
18m         Normal    Started                pod/busybox-9ff887cc8-487jr    Started container busybox
18m         Normal    Scheduled              pod/busybox-9ff887cc8-cgfwf    Successfully assigned default/busybox-9ff887cc8-cgfwf to kube01
18m         Normal    Pulling                pod/busybox-9ff887cc8-cgfwf    Pulling image "busybox"
18m         Normal    Pulled                 pod/busybox-9ff887cc8-cgfwf    Successfully pulled image "busybox" in 8.104276201s
18m         Normal    Created                pod/busybox-9ff887cc8-cgfwf    Created container busybox
18m         Normal    Started                pod/busybox-9ff887cc8-cgfwf    Started container busybox
10m         Warning   Evicted                pod/busybox-9ff887cc8-cgfwf    The node was low on resource: ephemeral-storage. Container busybox was using 36Ki, which exceeds its request of 0.
10m         Normal    Killing                pod/busybox-9ff887cc8-cgfwf    Stopping container busybox
10m         Warning   ExceededGracePeriod    pod/busybox-9ff887cc8-cgfwf    Container runtime did not kill the pod within specified grace period.
18m         Normal    Scheduled              pod/busybox-9ff887cc8-ctqt4    Successfully assigned default/busybox-9ff887cc8-ctqt4 to kube01
18m         Normal    Pulling                pod/busybox-9ff887cc8-ctqt4    Pulling image "busybox"
18m         Normal    Pulled                 pod/busybox-9ff887cc8-ctqt4    Successfully pulled image "busybox" in 5.48281798s
18m         Normal    Created                pod/busybox-9ff887cc8-ctqt4    Created container busybox
18m         Normal    Started                pod/busybox-9ff887cc8-ctqt4    Started container busybox
9m9s        Warning   Evicted                pod/busybox-9ff887cc8-ctqt4    The node was low on resource: ephemeral-storage. Container busybox was using 36Ki, which exceeds its request of 0.
 ~/w/st/k8s-24-steps  kdno kube01 # kubectl describe node kube01                                           PIPE|0 ok  [email protected] kube  17:14:20
Name:               kube01
Roles:              control-plane
Labels:             beta.kubernetes.io/arch=arm64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=arm64
                    kubernetes.io/hostname=kube01
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/control-plane=
                    node.kubernetes.io/exclude-from-external-load-balancers=
Annotations:        kubeadm.alpha.kubernetes.io/cri-socket: unix:///var/run/containerd/containerd.sock
                    node.alpha.kubernetes.io/ttl: 0
                    projectcalico.org/IPv4Address: 192.168.64.6/24
                    projectcalico.org/IPv4VXLANTunnelAddr: 10.233.72.128
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Sun, 27 Nov 2022 17:38:40 +0900
Taints:             node.kubernetes.io/disk-pressure:NoSchedule
Unschedulable:      false
Lease:
  HolderIdentity:  kube01
  AcquireTime:     <unset>
  RenewTime:       Tue, 20 Dec 2022 17:16:39 +0900
Conditions:
  Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----                 ------  -----------------                 ------------------                ------                       -------
  NetworkUnavailable   False   Tue, 20 Dec 2022 14:33:02 +0900   Tue, 20 Dec 2022 14:33:02 +0900   CalicoIsUp                   Calico is running on this node
  MemoryPressure       False   Tue, 20 Dec 2022 17:16:38 +0900   Sun, 27 Nov 2022 17:38:40 +0900   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure         True    Tue, 20 Dec 2022 17:16:38 +0900   Tue, 20 Dec 2022 17:04:13 +0900   KubeletHasDiskPressure       kubelet has disk pressure
  PIDPressure          False   Tue, 20 Dec 2022 17:16:38 +0900   Sun, 27 Nov 2022 17:38:40 +0900   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready                True    Tue, 20 Dec 2022 17:16:38 +0900   Sun, 27 Nov 2022 17:40:40 +0900   KubeletReady                 kubelet is posting ready status. AppArmor enabled
Addresses:
  InternalIP:  192.168.64.6
  Hostname:    kube01
Capacity:
  cpu:                2
  ephemeral-storage:  9982728Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  hugepages-32Mi:     0
  hugepages-64Ki:     0
  memory:             4004328Ki
  pods:               110
Allocatable:
  cpu:                1800m
  ephemeral-storage:  9200082110
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  hugepages-32Mi:     0
  hugepages-64Ki:     0
  memory:             3377640Ki
  pods:               110
System Info:
  Machine ID:                 c5237e2f98fe4706a98ac34e87b03dd2
  System UUID:                c5237e2f98fe4706a98ac34e87b03dd2
  Boot ID:                    7201145a-5e8e-4853-a166-b776a905fabc
  Kernel Version:             5.15.0-56-generic
  OS Image:                   Ubuntu 22.04.1 LTS
  Operating System:           linux
  Architecture:               arm64
  Container Runtime Version:  containerd://1.6.10
  Kubelet Version:            v1.25.4
  Kube-Proxy Version:         v1.25.4
PodCIDR:                      10.233.65.0/24
PodCIDRs:                     10.233.65.0/24
Non-terminated Pods:          (7 in total)
  Namespace                   Name                              CPU Requests  CPU Limits  Memory Requests  Memory Limits  Age
  ---------                   ----                              ------------  ----------  ---------------  -------------  ---
  kube-system                 calico-node-vkvpg                 150m (8%)     300m (16%)  64M (1%)         500M (14%)     22d
  kube-system                 coredns-588bb58b94-xtsgs          100m (5%)     0 (0%)      70Mi (2%)        300Mi (9%)     22d
  kube-system                 kube-apiserver-kube01             250m (13%)    0 (0%)      0 (0%)           0 (0%)         22d
  kube-system                 kube-controller-manager-kube01    200m (11%)    0 (0%)      0 (0%)           0 (0%)         22d
  kube-system                 kube-proxy-nggj9                  0 (0%)        0 (0%)      0 (0%)           0 (0%)         22d
  kube-system                 kube-scheduler-kube01             100m (5%)     0 (0%)      0 (0%)           0 (0%)         22d
  kube-system                 nodelocaldns-bxm48                100m (5%)     0 (0%)      70Mi (2%)        200Mi (6%)     22d
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests        Limits
  --------           --------        ------
  cpu                900m (50%)      300m (16%)
  memory             210800640 (6%)  1024288k (29%)
  ephemeral-storage  0 (0%)          0 (0%)
  hugepages-1Gi      0 (0%)          0 (0%)
  hugepages-2Mi      0 (0%)          0 (0%)
  hugepages-32Mi     0 (0%)          0 (0%)
  hugepages-64Ki     0 (0%)          0 (0%)
Events:
  Type     Reason                Age                   From     Message
  ----     ------                ----                  ----     -------
  Normal   NodeHasDiskPressure   12m                   kubelet  Node kube01 status is now: NodeHasDiskPressure
  Warning  FreeDiskSpaceFailed   10m                   kubelet  failed to garbage collect required amount of images. Wanted to free 2044429926 bytes, but freed 0 bytes
  Warning  EvictionThresholdMet  2m25s (x53 over 12m)  kubelet  Attempting to reclaim ephemeral-storage
- `NodeHasDiskPressure` ์ด๋ฒคํŠธ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค
- ์ •๋ฆฌ
 ~/w/study/k8s-24-steps  k delete deployments.apps busybox                                                        ok  [email protected] kube  17:16:40
deployment.apps "busybox" deleted
 ~/w/study/k8s-24-steps  kgpwide                                                                                  ok  [email protected] kube  17:18:48
NAME                      READY   STATUS        RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
busybox-9ff887cc8-487jr   1/1     Terminating   0          23m   10.233.85.206   kube02   <none>           <none>
busybox-9ff887cc8-f7gtp   1/1     Terminating   0          23m   10.233.85.207   kube02   <none>           <none>
busybox-9ff887cc8-fnkcc   1/1     Terminating   0          12m   10.233.85.209   kube02   <none>           <none>
busybox-9ff887cc8-l7fdb   1/1     Terminating   0          23m   10.233.85.205   kube02   <none>           <none>
busybox-9ff887cc8-mv8v4   1/1     Terminating   0          23m   10.233.102.17   kube00   <none>           <none>
busybox-9ff887cc8-nnkrx   1/1     Terminating   0          23m   10.233.102.18   kube00   <none>           <none>
busybox-9ff887cc8-rn2v6   1/1     Terminating   0          13m   10.233.102.21   kube00   <none>           <none>
busybox-9ff887cc8-rtwtm   1/1     Terminating   0          23m   10.233.102.19   kube00   <none>           <none>
busybox-9ff887cc8-sdgld   1/1     Terminating   0          13m   10.233.85.208   kube02   <none>           <none>
busybox-9ff887cc8-swz78   1/1     Terminating   0          14m   10.233.102.20   kube00   <none>           <none>
nginx                     1/1     Running       0          97m   10.233.85.202   kube02   <none>           <none>
nginx-19                  1/1     Running       0          48m   10.233.85.204   kube02   <none>           <none>
 ~/workspace/study/k8s-24-steps  m shell kube01                                                                                                        ok  17:18:56
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-56-generic aarch64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Tue Dec 20 17:19:01 KST 2022

  System load:             1.98583984375
  Usage of /:              99.8% of 9.52GB
  Memory usage:            23%
  Swap usage:              0%
  Processes:               130
  Users logged in:         0
  IPv4 address for enp0s1: 192.168.64.6
  IPv6 address for enp0s1: fdec:f006:592:f10d:5054:ff:fe8d:ef7f

  => / is using 99.8% of 9.52GB

 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
   just raised the bar for easy, resilient and secure K8s cluster deployment.

   https://ubuntu.com/engage/secure-kubernetes-at-the-edge

9 updates can be applied immediately.
To see these additional updates run: apt list --upgradable


The list of available updates is more than a week old.
To check for new updates run: sudo apt update

Last login: Tue Dec 20 17:05:02 2022 from 192.168.64.1
ubuntu@kube01:~$ ls
2.2g-file  28g-file  snap
ubuntu@kube01:~$ rm *-file
ubuntu@kube01:~$ ll
total 44
drwxr-x--- 6 ubuntu ubuntu 4096 Dec 20 17:19 ./
drwxr-xr-x 3 root   root   4096 Nov 27 17:06 ../
drwx------ 3 ubuntu ubuntu 4096 Nov 27 17:26 .ansible/
-rw------- 1 ubuntu ubuntu  593 Dec 20 17:05 .bash_history
-rw-r--r-- 1 ubuntu ubuntu  220 Jan  7  2022 .bash_logout
-rw-r--r-- 1 ubuntu ubuntu 3771 Jan  7  2022 .bashrc
drwx------ 2 ubuntu ubuntu 4096 Nov 27 17:06 .cache/
-rw-r--r-- 1 ubuntu ubuntu  807 Jan  7  2022 .profile
drwx------ 2 ubuntu ubuntu 4096 Nov 27 17:10 .ssh/
-rw-r--r-- 1 ubuntu ubuntu    0 Nov 27 17:20 .sudo_as_admin_successful
-rw------- 1 ubuntu ubuntu 3432 Nov 27 17:10 .viminfo
drwx------ 3 ubuntu ubuntu 4096 Nov 27 17:24 snap/
ubuntu@kube01:~$ exit
logout
 ~/w/study/k8s-24-steps  kgpwide                                                                             ok  11s  [email protected] kube  17:19:12
NAME       READY   STATUS    RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
nginx      1/1     Running   0          97m   10.233.85.202   kube02   <none>           <none>
nginx-19   1/1     Running   0          49m   10.233.85.204   kube02   <none>           <none>
  1. 06์žฅ: ํ—ฌ๋ฆ„ ๊ธฐ๋ฐ˜์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์น˜ํ•˜๊ธฐ ../helm
  • https://artifacthub.io ๋‹จ์ผ ํ—ฌ๋ฆ„ ์ฐจํŠธ ์ €์žฅ์†Œ
  • ์ฐจํŠธ๋‚ด values.yaml ํŒŒ์ผ์„ ํ†ตํ•ด ๋ณ€์ˆ˜ํ™” ํ•˜๊ณ  template ๋””๋ ‰ํ† ๋ฆฌ์˜ yaml ์— ๋ณ€์ˆ˜๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ์‹
  • helm permission warning ์ œ๊ฑฐ
 ~/w/study/k8s-24-steps  helm repo list                                                                        1 err  [email protected] kube  17:31:06
WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /Users/deptno/.kube/config
WARNING: Kubernetes configuration file is world-readable. This is insecure. Location: /Users/deptno/.kube/config
NAME    URL
bitnami https://charts.bitnami.com/bitnami
 ~/workspace/study/k8s-24-steps  ll ~/.kube/config                                                                                                     ok  17:32:07
Permissions Links Size User   Date Modified    Git Name
.rw-r--r--      1 5.7k deptno 2022-12-20 15:54  -I ๎—ผ /Users/deptno/.kube/config
 ~/workspace/study/k8s-24-steps  chmod 600 ~/.kube/config                                                                                              ok  17:32:16
 ~/w/study/k8s-24-steps  helm repo list                                                                           ok  [email protected] kube  17:32:40
NAME    URL
bitnami https://charts.bitnami.com/bitnami
 ~/workspace/study/k8s-24-steps  ll ~/.kube/config                                                                                                     ok  17:32:22
Permissions Links Size User   Date Modified    Git Name
.rw-------      1 5.7k deptno 2022-12-20 15:54  -I ๎—ผ /Users/deptno/.kube/config
  • chart ์„ค์น˜
 ~/w/study/k8s-24-steps  helm repo update                                                                      1 err  [email protected] kube  17:40:36
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "bitnami" chart repository
Update Complete. โŽˆHappy Helming!โŽˆ
 ~/w/study/k8s-24-steps  helm search repo nginx                                                                   ok  [email protected] kube  17:40:41
NAME                                    CHART VERSION   APP VERSION     DESCRIPTION
bitnami/nginx                           13.2.19         1.23.3          NGINX Open Source is a web server that can be a...
bitnami/nginx-ingress-controller        9.3.24          1.6.0           NGINX Ingress Controller is an Ingress controll...
bitnami/nginx-intel                     2.1.13          0.4.9           NGINX Open Source for Intel is a lightweight se...
 ~/w/study/k8s-24-steps  helm pull bitnami/nginx                                                                  ok  [email protected] kube  17:41:15
 ~/workspace/study/k8s-24-steps  ls                                                                                                                    ok  17:41:30
busybox-deploy.yaml  busybox-pod.yaml     nginx-13.2.19.tgz    nginx-error-pod.yaml
 ~/workspace/study/k8s-24-steps  tar xfvz nginx-13.2.19.tgz                                                                                            ok  17:41:33
x nginx/Chart.yaml
x nginx/Chart.lock
x nginx/values.yaml
x nginx/values.schema.json
x nginx/templates/NOTES.txt
# ...
 ~/workspace/study/k8s-24-steps  rm nginx-13.2.19.tgz                                                                                                  ok  17:41:44
 ~/workspace/study/k8s-24-steps  mv nginx nginx.tgz                                                                                                    ok  17:41:58
 ~/workspace/study/k8s-24-steps  ls                                                                                                                    ok  17:42:20
busybox-deploy.yaml  busybox-pod.yaml     nginx-13.2.19        nginx-error-pod.yaml
 ~/workspace/study/k8s-24-steps  cd nginx-13.2.19                                                                                                     INT  17:42:24
 ~/workspace/study/k8s-24-steps/nginx-13.2.19  ls                                                                                                      ok  17:42:32
Chart.lock         Chart.yaml         README.md          charts             templates          values.schema.json values.yaml
 ~/workspace/study/k8s-24-steps/nginx-13.2.19  ls templates                                                                                            ok  17:42:39
NOTES.txt                   extra-list.yaml             ingress.yaml                server-block-configmap.yaml svc.yaml
_helpers.tpl                health-ingress.yaml         pdb.yaml                    serviceaccount.yaml         tls-secrets.yaml
deployment.yaml             hpa.yaml                    prometheusrules.yaml        servicemonitor.yaml
 ~/workspace/study/k8s-24-steps/nginx-13.2.19  cp {,my-}values.yaml                                                                                    ok  17:42:45
 ~/workspace/study/k8s-24-steps/nginx-13.2.19  vi my-}alues.yaml                                                                                       ok  17:42:46
 # replicaCount ๋ฅผ 2๋กœ ์ˆ˜์ •
 ~/workspace/study/k8s-24-steps/nginx-13.2.19  ls                                                                                                      ok  17:47:30
Chart.lock         Chart.yaml         README.md          charts             my-values.yaml     templates          values.schema.json values.yaml
 ~/w/st/k/nginx-13.2.19  k create ns nginx                                                                        ok  [email protected] kube  17:47:32
namespace/nginx created
 ~/w/st/k/nginx-13.2.19  k ns nginx                                                                            1 err  [email protected] kube  17:47:54
Context "[email protected]" modified.
Active namespace is "nginx".
 ~/w/st/k/nginx-13.2.19  helm install nginx -f my-values.yaml .                                          1 err  [email protected]/nginx kube  17:48:54
NAME: nginx
LAST DEPLOYED: Tue Dec 20 17:49:04 2022
NAMESPACE: nginx
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: nginx
CHART VERSION: 13.2.19
APP VERSION: 1.23.3

** Please be patient while the chart is being deployed **
NGINX can be accessed through the following DNS name from within your cluster:

    nginx.nginx.svc.cluster.local (port 80)

To access NGINX from outside the cluster, follow the steps below:

1. Get the NGINX URL by running these commands:

  NOTE: It may take a few minutes for the LoadBalancer IP to be available.
        Watch the status with: 'kubectl get svc --namespace nginx -w nginx'

    export SERVICE_PORT=$(kubectl get --namespace nginx -o jsonpath="{.spec.ports[0].port}" services nginx)
    export SERVICE_IP=$(kubectl get svc --namespace nginx nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    echo "http://${SERVICE_IP}:${SERVICE_PORT}"
 ~/w/st/k/nginx-13.2.19  helm ls                                                                            ok  [email protected]/nginx kube  17:49:04
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
nginx   nginx           1               2022-12-20 17:49:04.604435 +0900 KST    deployed        nginx-13.2.19   1.23.3
- `CrashLoopBackOff` ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…
 ~/w/st/k/nginx-13.2.19  kgp                                                                                ok  [email protected]/nginx kube  18:20:44
NAME                     READY   STATUS             RESTARTS        AGE
nginx-6bb994745d-86tvg   0/1     CrashLoopBackOff   7 (2m10s ago)   13m
nginx-6bb994745d-z9h8t   0/1     CrashLoopBackOff   7 (2m27s ago)   13m
 ~/w/st/k/nginx-13.2.19  k logs nginx-6bb994745d-                                                           ok  [email protected]/nginx kube  18:20:59
Error from server (NotFound): pods "nginx-6bb994745d-" not found
 ~/w/st/k/nginx-13.2.19  k logs nginx-6bb994745d-86tvg                                                   1 err  [email protected]/nginx kube  18:21:09
exec /opt/bitnami/scripts/nginx/entrypoint.sh: exec format error
    m1 ์—์„œ ์ด๋ฏธ์ง€๊ฐ€ ์‹คํ–‰ ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค
    - https://github.com/bitnami/bitnami-docker-nginx/issues/178
    - https://github.com/bitnami/charts/issues/7305
    - https://github.com/canonical/multipass/issues/886
    - stress ์ด๋ฏธ์ง€๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋˜์ง€ ์•Š๋Š”๋‹ค
- ๋ชจ๋“  ํŒŒ๋“œ ์ •๋ฆฌ
kdelp --all
  • resource ๋ณด์žฅ
    • memory ๋Š” ๋ณด์žฅ๋ฐ›๋Š”๋‹ค ๋…ธ๋“œ์˜ ๋ฌผ๋ฆฌ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ limits ๋Š” ๋ณด์žฅ๋ฐ›์ง€ ๋ชปํ•œ๋‹ค.
  1. 07์žฅ: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค ์‚ฌ์šฉํ•˜๊ธฐ
  • service
    • service ๊ฐ€ label selector ๋ฅผ ๊ฐ€์ง€๋ฉด endpoint ๊ฐ€ ์ž๋™ ์ƒ์„ฑ
      • ์„œ๋น„์Šค ์ƒ์„ฑ ํ›„ endpoint ํ™•์ธํ•˜๋Š” ์Šต๊ด€
    • ๋‚ด๋ถ€์—์„œ ๋„๋ฉ”์ธ ์ด๋ฆ„์œผ๋กœ ํ†ต์‹ 
    • clusterIp ๋Š” cluster ๋‚ด์—์„œ ์œ ํšจํ•˜๋ฉฐ ํ•œ node ์— ๊ตญํ•œ๋˜์ง€ ์•Š๋Š”๋‹ค
    • nodePort ๋Š” node ๊ฐ€ ๋…ธ์ถœํ•˜๋Š” ์‹ค์ œ ํฌํŠธ๋กœ ์™ธ๋ถ€ ์ ‘์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค
    • nodePort ๋Š” clusterIp ๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ํผ์ ธ์žˆ๋Š” ํŒŒ๋“œ์˜ endpoint ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
    • nodePort ๋Š” ํฌํŠธ ์ œ์•ฝ์ด ์žˆ์Œ 30000 ~ 32767
    • nodePort ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ํฌํŠธ ๊ฐœ๋ฐฉ์ด ์ด๋ฃจ์–ด์ง„๋‹ค
  • endpoint
  • cluster ๋‚ด์—์„œ๋Š” service ์ด๋ฆ„์œผ๋กœ ํ†ต์‹ ์ด ๊ฐ€๋Šฅ
  • ์ ‘๊ทผ ๊ตฌ์กฐ
    • loadBalancer ์™ธ๋ถ€ ์š”์ฒญ
      • nodePort
        • clusterIp
          • endpoint00
          • endpoint01
          • endpoint02
      • nodePort
        • clusterIp
          • endpoint00
          • endpoint01
          • endpoint02
      • nodePort
        • clusterIp
          • endpoint00
          • endpoint01
          • endpoint02
  • dns
    • coredns ์ด์ค‘ํ™” ํŒŒ๋“œ๋กœ ๋™์ž‘
      • localdns coredns ์˜ ์บ์‹œ๋กœ daemonset ์œผ๋กœ ๋™์ž‘
    • ์š”์ฒญ์‹œ [service].[namespace].svc.cluster.local ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋˜๋ฉฐ ๊ฐ™์€ namespace ์ธ๊ฒฝ์šฐ [service] ๋งŒ์œผ๋กœ ํ†ต์‹ ์ด ๊ฐ€๋Šฅ
    • ../nslookup
  • kube-proxy
    • ipvs
      • ipvsadm ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ” ํ™•์ธ
    • iptables
  1. 08์žฅ: MetalLB๋ฅผ ์ด์šฉํ•œ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ํƒ€์ž… ์„œ๋น„์Šค ๊ตฌ์ถ•
  • metallb ๋ฒ„์ „์ด 0.13.x ๋กœ ์ง„์ž…ํ•˜๋ฉด์„œ configInline ์„ค์ •์ด ๊ฐ crd ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.
  • ๋•Œ๋ฌธ์— ์ถ”๊ฐ€์ ์ธ crd ์ƒ์„ฑ์ด ํ•„์š”
    • IPAddressPool ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ip ๋Œ€์—ญ๋Œ€๋ฅผ ์žก์•„๋‘”๋‹ค
    • L2Advertisement LoadBalancer ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด arp ๋ฅผ ํ†ตํ•ด์„œ ์™ธ๋ถ€ ์ ‘์†์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•œ๋‹ค
  • ../kubetail ์—ฌ๋Ÿฌ ํŒŒ๋“œ์˜ ๋กœ๊ทธ ๋ณด๊ธฐ
  • ../k6 ์„ ํ™œ์šฉํ•œ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ
  • ๋‹จ์ ˆ ํ™•์ธ, ๋…ธ๋“œ ์ค‘ ์–ด๋–ค ๋…ธ๋“œ๋ฅผ reboot ํ•ด๋„ ๋‹จ์ ˆ์ด ํ™•์ธ ๋จ
while true; do curl -I 192.168.64.50 --silent | grep -E 'Date|OK'; sleep 1; done
$ ssh kube02
$$ sudo reboot 
  1. 09์žฅ: Traefik์„ ์ด์šฉํ•œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ธ๊ทธ๋ ˆ์Šค ๊ตฌ์ถ•
  • ์„ค์น˜
helm repo add traefik https://traefik.github.io/charts
helm repo update
helm pull traefik
# ์ˆ˜์ • ํ›„
helm install traefik -f values.yml .
  • ๋ณ„๋„์˜ crd ์ธ ingressroute ๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ผ์šฐํŒ… ํ•œ๋‹ค
  • ๊ธฐ๋ณธ์ ์œผ๋กœ lets-encrypt ๋ฅผ ์ง€์›ํ•œ๋‹ค
  • tls ์„ค์ •์„ ๋จน์ด๋ฉด http ์ ‘์†์ด ๋จนํ†ต์ด ๋œ๋‹ค
  • ๋Œ€์‹œ๋ณด๋“œ๋„ ์ œ๊ณต๋œ๋‹ค 9000 ํฌํŠธ
  • ์ž์ฒด ์ธ์ฆ์„œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ƒ๋žต
  1. 10์žฅ: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์Šคํ† ๋ฆฌ์ง€
  • ../openebs ์„ค์น˜
    • openebs-device - mount ๋˜์ง€ ์•Š์€ device ๋ฅผ ์‚ฌ์šฉ
    • openebs-hostpath - ํŠน์ • hostpath ๋ฅผ ์‚ฌ์šฉ
    • pvc ์ƒ์„ฑ
apiVersion: v1
kind: persistentVolumeClaim
metadata:
  name: default-pvc
  namespace: default
spec:
  accessModes:
  - ReadWriteOnce
  volumeMode: FileSystem
  resources:
    requests:
      storage: 1Gi
  storageClassName: "openebs-hostpath"
- reclaim ์ •์ฑ…์ด ๊ธฐ๋ณธ์œผ๋กœ delete ๋ผ pv ๋Š” pvc ์™€ ํ•จ๊ป˜ ์ œ๊ฑฐ๋จ
- kubestr ํ†ตํ•œ iops ์ธก์ •
  1. 11์žฅ: ์Šคํ† ๋ฆฌ์ง€ ๋ณผ๋ฅจ ์Šค๋ƒ…์ƒท ์‚ฌ์šฉํ•˜๊ธฐ
  • todo:
  1. 12์žฅ: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ์—์„œ ๊ณต์œ  ํŒŒ์ผ ์Šคํ† ๋ฆฌ์ง€ ์‚ฌ์šฉํ•˜๊ธฐ
  • todo:
  1. 13์žฅ: ํ•˜๋ฒ„๋ฅผ ์ด์šฉํ•œ ๋กœ์ปฌ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ ๊ตฌ์ถ•
  • ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ
  • helm ์„ค์น˜
  1. 24์žฅ: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋…ธ๋“œ ๋ณ€๊ฒฝ๊ณผ ์ถ”๊ฐ€
  • ubuntu server ์„ค์น˜ + openssh
  • helm chart ์„ค์น˜
vi /etc/hosts # ๋…ธ๋“œ ์ •๋ณด ์ถ”๊ฐ€
vi inventory/mycluster/hosts.yml # host ์ •๋ณด ์ถ”๊ฐ€ + node ์ถ”๊ฐ€
ansible-playbook -i inventory/mycluster/hosts.yml -b facts.yml
ansible-playbook -i inventory/mycluster/hosts.yml -b scale.yml --limit=[nodename]

architecture issue

exec /opt/bitnami/scripts/nginx/entrypoint.sh: exec format error

์‹ค์Šต์— ์‚ฌ์šฉ๋œ ํŠน์ • image ๋“ค์€ arm ์—์„œ ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
x86 emulation ์ด ํ•„์š”ํ•˜๋‹ค.

link

โš ๏ธ **GitHub.com Fallback** โš ๏ธ