Study: DeveloperTools(DevTool)/DevTool: Container

[Kubernetes] ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ž…๋ฌธ: Part I. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹œ์ž‘ํ•˜๊ธฐ

DrawingProcess 2023. 2. 23. 18:46
๋ฐ˜์‘ํ˜•
๐Ÿ’ก ๋ณธ ๋ฌธ์„œ๋Š” '์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ž…๋ฌธ: Part I. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹œ์ž‘ํ•˜๊ธฐ'์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋†“์€ ๊ธ€์ž…๋‹ˆ๋‹ค.
'์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ž…๋ฌธ'์ด๋ผ๋Š” Kubernetest์˜ ๊ฐœ๋… ๋ฐ ์‹ค์Šต์„ ๋‹ค๋ฃฌ ์ฑ…์„ ์ฝ์œผ๋ฉฐ ๊ด€๋ จ ํ•ต์‹ฌ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ณธ ๋ฌธ์„œ์˜ ๊ฒฝ์šฐ 'Part I. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹œ์ž‘ํ•˜๊ธฐ'์˜ ๋‚ด์šฉ์ธ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ์‚ฌ๋žŒ์ด ๊ผญ ์•Œ์•„์•ผ ํ•  ๋‚ด์šฉ์— ๋Œ€ํ•ด ๋‹ค๋ฃจ์—ˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ, ํ•ด๋‹น ์ฑ…์˜ ์ƒ˜ํ”Œ ์˜ˆ์ œ๋Š” [github] kubernetes-book-sample์—์„œ ๋‹ค์šด ๋ฐ›์•„ kubectl apply -f <filename>.yaml ๋ช…๋ น์„ ํ†ตํ•ด ์‹ค์Šตํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

1. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์†Œ๊ฐœ

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์™€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์†Œ๊ฐœํ•˜๊ณ  ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ฃผ์š” ํŠน์ง•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ

๋ฆฌ๋ˆ…์Šค๋Š” ์›๋ž˜ ํ”„๋กœ์„ธ์Šค ๋ณ„๋กœ ์ž์›์„ ๊ฒฉ๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” cgroup๊ณผ ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๊ถŒํ•œ์„ ์ œํ•œํ•˜๋Š” chroot ๋“ฑ์œผ๋กœ ๊ฒฉ๋ฆฌ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋””์Šคํฌ์˜ ํŒŒ์ผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ ˆ์ด์–ด ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ํ•ฉํ•ด '์ปจํ…Œ์ด๋„ˆ'๋ผ๋Š” ๊ฐœ๋…์ด ํƒ„์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด์˜ ๊ฐ€์ƒํ™”๋‚˜ ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ…์„ ์„ค๋ช…ํ•  ๋•Œ์— ๊ฐ€์ƒ ๋จธ์‹ (Virtual Machine, VM)์„ ๋งŽ์ด ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•Œ๋ ค์ง€๋ฉฐ ๊ตฌ์กฐ์ƒ ๋ ˆ์ด์–ด๊ฐ€ ๋” ๊ฐ„๋‹จํ•œ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ ์— ๊ด€์‹ฌ์ด ์ ๋ฆฌ๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ์šฐ, Host OS ์œ„์— ๋„์ปค๊ฐ€ ์žˆ์œผ๋‚˜
  • ๊ฐ€์ƒ๋จธ์‹ ์˜ ๊ฒฝ์šฐ, ํ•˜์ดํผ๋ฐ”์ด์ € ์œ„์— ๊ฐ€์ƒ๋จธ์‹ ๋งˆ๋‹ค Guest OS๊ฐ€ ์žˆ๊ณ  ๊ทธ ์œ„์— ์•ฑ์ด ์œ„์น˜

๋”ฐ๋ผ์„œ ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์กฐ๊ฐ€ ํ›จ์”ฌ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋„์ปค๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•œ ๋ช…๋ น์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ์ €์žฅ/์‹คํ–‰์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ

์ด๋ ‡๊ฒŒ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ์—๋Š” ๋„์ปค๊ฐ€ ๋งค์šฐ ํŽธ๋ฆฌํ•˜์ง€๋งŒ, ์‹ค์ œ ์ƒ์šฉ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•  ๋•Œ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ์—๋Š” ๋ถˆํŽธํ•œ ์ ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋„์™€์ฃผ๋Š” ์‹œ์Šคํ…œ์„ '์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜'์ด๋ผ ํ•˜๋ฉฐ, ์ด๋Ÿฌํ•œ ์‹œ์Šคํ…œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์„œ๋ฒ„ ํ•˜๋‚˜์— ์žฅ์•  ๋ฐœ์ƒ์‹œ ์ƒ์šฉ ์„œ๋น„์Šค์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ๊ด€๋ฆฌ
  2. ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„๋ฅผ ํ•œ๋ฒˆ์˜ ๋ช…๋ น์œผ๋กœ ์ž๋™ ๋ฐฐํฌ

์ด๋ ‡๊ฒŒ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ์—๋Š” ์—ฌ๋Ÿฌ ์ƒ์šฉ ์„œ๋น„์Šค๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ํ˜„์žฌ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(Kubernetes, k8s)๊ฐ€ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ํŠน์ง•

  1. ์„ ์–ธ์  API
    • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„ค์ •ํ•œ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๊ทธ๊ฒƒ์— ๋งž๊ฒŒ ์ž๋™์œผ๋กœ ๋งž์ถค(ํ•ญ์ƒ ์›ํ•˜๋Š” ์ƒํƒœ๋กœ ์ž๋™ ๋ณต๊ตฌ)
    • ํ•˜์ง€๋งŒ ์ด๋กœ ์ธํ•ด ๋ถˆํŽธํ•œ ์ ๋„ ์žˆ์Œ(์•ฑ์ด ์—†์–ด์•ผ ํ•  ๋•Œ๋Š” ์„ค์ •ํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ, ์•ฑ ์žฌ์‹œ์ž‘ ๊ฐ™์€ ๋‹จ์ˆœํ•œ ์ž‘์—…์€ ํ•  ์ˆ˜ ์—†์Œ → ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹œ์Šคํ…œ ๋‚ด๋ถ€ ๋™์ž‘์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ œ์–ดํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ)
  2. ์›Œํฌ๋กœ๋“œ ๋ถ„๋ฆฌ
    • ๋ถ„์‚ฐ๋œ ํ”„๋กœ์„ธ์Šค์˜ ๊ด€๋ฆฌ๋ฅผ ์ถ”์ƒํ™”ํ•˜๋Š” ๋ ˆ์ด์–ด๊ฐ€ ๋˜๋ฏ€๋กœ ์‹œ์Šคํ…œ ์šด์˜์— ๋Œ€ํ•ด ๊ณ ๋ฏผ์„ ๋œ์–ด์ค๋‹ˆ๋‹ค.
  3. ์–ด๋””์„œ๋‚˜ ์‹คํ–‰ ๊ฐ€๋Šฅ
    • ๊ฐœ์ธ ์ปดํ“จํ„ฐ, ์—ฌ๋Ÿฌ ๋Œ€ ์„œ๋ฒ„, ํผ๋ธ”๋ฆญ ํด๋ผ์šฐ๋“œ, ๋‹จ์ˆœํžˆ ์›น์—์„œ ๊ตฌ๋™ ๊ฐ€๋Šฅ.
  4. ์ปค๋ฎค๋‹ˆํ‹ฐ
    • 2019๋…„ 12์›” ๊ธฐ์ค€ ์•ฝ 2,300๋ช…์˜ ๊ธฐ์—ฌ์ž์™€ 86,000๊ฐœ์˜ ์ปค๋ฐ‹์ด ์žˆ์Œ
    • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ณต์‹ ๊นƒํ—ˆ๋ธŒ์˜ Issue
    • slack ์ฑ„๋„(kubernetes-users)
    • ํŽ˜์ด์Šค๋ถ ๊ทธ๋ฃน(Kubernetes Korea Group)
  5. ํด๋ผ์šฐ๋“œ ํ”Œ๋ ›ํผ: ๋‚ฎ์€ ์ง„์ž…์žฅ๋ฒฝ
    • Google Cloud Platform
    • Microsoft Azure
    • Amazon EKS: AWS์—์„œ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค

2. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„ค์น˜ํ•˜๊ธฐ

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

์ด์ œ๋ถ€ํ„ฐ ์‹ค์ œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ปดํ“จํ„ฐ์— ๋„์ปค์™€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด 4๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์›น ์ƒ์—์„œ ์ด์šฉ: ์นดํƒ€์ฝ”๋‹ค ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ (kubectl ๊ด€๋ จ ๋ช…๋ น ์‹คํ–‰ ๊ฐ€๋Šฅ)
    • O'reilly์— ์ธ์ˆ˜๋˜์–ด ํ˜„์žฌ ์ง€์›ํ•˜์ง€ ์•Š์Œ (22.06.15. ์ดํ›„)
  2. ๋„์ปค ๋ฐ์Šคํฌํ†ฑ: ๋กœ์ปฌ์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ง์ ‘ ์„ค์น˜
    • ๋„์ปค ๋ฐ์Šคํฌํˆฝ ์‹คํ–‰ ํ›„ ‘Enable Kubernetes’, ‘Deploy Docker Stacks to Kubernetes by default’ ์˜ต์…˜ ์ ์šฉ
  3. ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค: ์‹ค์ œ ์ƒ์šฉ ์„œ๋น„์Šค์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•
    • ๊ตฌ๊ธ€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์—”์ง„(GKE)
    • ์•„๋งˆ์กด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ผ๋ž˜์Šคํ‹ฑ ์ปจํ…Œ์ด๋„ˆ ์„œ๋น„์Šค(Amazon EKS)
    • ์• ์ € ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์Šค(AKS)
  4. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ง์ ‘ ๊ตฌ์„ฑํ•˜๋Š” ๋„๊ตฌ: ๊ทœ์น™์ค€์ˆ˜ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ ํ™œ์šฉ
    • Kubeadm
    • Kubespray

์ด๋ ‡๊ฒŒ 4๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๋ชจ๋‘ kubernetes๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ kubectl ๋ช…๋ น์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ '์›น ์ƒ์—์„œ ์ด์šฉ', '๋„์ปค ๋ฐ์Šคํฌํ†ฑ', 'ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค'์˜ ๊ฒฝ์šฐ ์ฑ… ์ƒ์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃจ๊ณ  ์žˆ์ง€ ์•Š๊ธฐ์— ๋”ฐ๋กœ ์ž์„ธํžˆ ์†Œ๊ฐœํ•˜์ง€ ์•Š๊ณ , '์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ง์ ‘ ๊ตฌ์„ฑํ•˜๋Š” ๋„๊ตฌ'์— ๋Œ€ํ•ด ์ƒ์„ธํžˆ ์„ค๋ช…ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ง์ ‘ ๊ตฌ์„ฑํ•˜๋Š” ๋„๊ตฌ

ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋„๊ตฌ๋ฅผ ์ด์šฉํ•˜๋”๋ผ๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์‚ฌ์ • ๋•Œ๋ฌธ์— ์ง์ ‘ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•  ๋•Œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” ์‚ฌ๋‚ด ์„œ๋ฒ„ ์ž์›์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ง์ ‘ ๊ตฌ์„ฑํ•˜๊ฑฐ๋‚˜, ๊ทœ์น™ ์ค€์ˆ˜(compliance) ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ ํ™œ์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋„๊ตฌ์ธ Kubeadm, Kubespray๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1) Kubeadm

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

  • ์—ฌ๋Ÿฌ ๋Œ€์˜ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๊ทธ ์•ž์— ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ๋‘์–ด ์›Œ์ปค ๋…ธ๋“œ๋“ค์ด ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์— ์ ‘๊ทผํ•  ๋•Œ ๋กœ๋“œ๋ฒจ๋Ÿฐ์„œ๋ฅผ ๊ฑฐ์ณ ์ ‘๊ทผ
  • ๋”ฐ๋ผ์„œ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ 1๋Œ€์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์—์„œ ๋‹ค๋ฅธ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋กœ ์ ‘๊ทผํ•˜๊ฒŒ ํ•˜์—ฌ ์‹ ๋ขฐ์„ฑ ์œ ์ง€ ๊ฐ€๋Šฅ
  • ์ฐธ๊ณ ๋กœ, ์œ„ ๊ทธ๋ฆผ์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์—ญํ• ์„ ํ•˜๋Š” etcd ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์— ํ•จ๊ป˜ ์„ค์น˜ํ•˜์—ฌ ์šด์˜ํ•˜๋Š” 'stacked etcd' ๋ฐฉ๋ฒ•์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ, ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์™€ ์›Œ์ปค๋…ธ๋“œ๋ž€?

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

2) Kubespray

Kubespray๋Š” ์ƒ์šฉ ์„œ๋น„์Šค์— ์ ํ•ฉํ•œ ๋ณด์•ˆ์„ฑ๊ณผ ๊ณ ๊ฐ€์šฉ์„ฑ์ด ์žˆ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ์„ค์ •์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งž๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์˜จํ”„๋ ˆ๋ฏธ์Šค ํ™˜๊ฒฝ์—์„œ ์ƒ์šฉ์„œ๋น„์Šค์˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์„ค์น˜ ์ดํ›„์— ingress-nginx ์ปจํŠธ๋กค๋Ÿฌ, Helm, ๋ณผ๋ฅจ ํ”Œ๋Ÿฌ๊ทธ์ธ, cephfs๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” cephfs-provisioner, SSL ์ธ์ฆ์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” cert-manager ๋“ฑ์˜ ์ถ”๊ฐ€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ณต์‹๋ฌธ์„œ์—์„œ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kubespray์—์„œ ์ œ๊ณตํ•˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๊ณ ๊ฐ€์šฉ์„ฑ ๊ตฌ์กฐ๋Š” Kubeadm๊ณผ ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

https://taco-docs.readthedocs.io/ko/latest/tacoplay/kubespray.html

Kubeadm์ฒ˜๋Ÿผ ๋ณ„๋„์˜ ๋กœ๋“œ๋ฒจ๋Ÿฐ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋…ธ๋“œ ๊ฐ๊ฐ์˜ nginx๊ฐ€ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋กœ ์‹คํ–‰๋˜๋ฉฐ, ์ด nginx-proxy๊ฐ€ ์ „์ฒด ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ๋ฅผ ๋ฐ”๋ผ๋ณด๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ์ง์ ‘ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์™€ ํ†ต์‹ ํ•˜์ง€ ์•Š๊ณ  ์ž์‹ ์˜ ์„œ๋ฒ„ ์•ˆ์˜ nginx์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์˜ ์žฅ์•  ๊ฐ์ง€๋Š” health check๋ฅผ ์ด์šฉํ•ด nginx๊ฐ€ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” Container Network Interface(CNI)๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋„คํŠธ์›Œํฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ง€์›ํ•˜์—ฌ, ๊ฐ„๋‹จํ•œ ์„ค์ •์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ๋„คํŠธ์›Œํฌ๋ฅผ ์ž๋™ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

3. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋กœ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ํ•˜๊ธฐ

์ด ์ฑ…์˜ ์‹ค์Šต ๊ธฐ๋ฐ˜์ธ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ปค๋งจ๋“œ๋ผ์ธ ์ธํ„ฐํŽ˜์ด์Šค kubectl ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•๊ณผ ์ด๋ฅผ ์ด์šฉํ•œ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

3.1 kubectl

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ณ ๋‚˜๋ฆฌํ•˜๋Š” ๋™์ž‘์€ ๋Œ€๋ถ€๋ถ„ kubectl์ด๋ผ๋Š” CLI๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ง€์›ํ•˜๋Š” ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.

  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ž์›๋“ค์˜ ์ƒ์„ฑ, ์—…๋ฐ์ดํŠธ, ์‚ญ์ œ(create, update, delete)
  • ๋””๋ฒ„๊ทธ, ๋ชจ๋‹ˆํ„ฐ๋ง, ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…(log, exec, cp, top, attach, ...)
  • ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ(cordon, top, drain, taint, ...)

๋”์šฑ ๋” ์ž์„ธํ•œ kubectl ์‚ฌ์šฉ๋ฒ•์€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”~

3.1.1 ์„ค์น˜

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

์„ค์น˜๋Š” ์šด์˜์ฒด์ œ๋ณ„ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €(ubuntu: apt, mac: brew, window: chocholatey,...)์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์˜ ์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ์— kubectl์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Apple sillicon MacOS์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin/kubectl

์ฃผ์š” ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋„๊ตฌ์—๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์— kubectl์„ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

3.1.2 ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

kubectl์€ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ๋ช…๋ น์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค

kubectl [command] [Type] [NAME] [FLAG]
  • command: ์ž์›์— ์‹คํ–‰ํ•˜๋ ค๋Š” ๋™์ž‘์ด๋ฉฐ, create, get, delete ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • TYPE: ์ž์› ํƒ€์ž…์ด๋ฉฐ, pod, service, ingress ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • NAME: ์ž์› ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • FLAG: ๋ถ€๊ฐ€์ ์œผ๋กœ ์„ค์ •ํ•  ์˜ต์…˜์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ minikube tutorial์—์„œ ์ œ๊ณตํ•˜๋Š” ์‹œ๊ฐ„๊ฐ’์„ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ์„œ๋ฒ„๊ฐ€ ๋™์ž‘ํ•˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋„์šฐ๋Š” kubectl ๋ช…๋ น ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

% kubectl run hello --image=registry.k8s.io/e2e-test-images/agnhost:2.39 --port=8081
pod/echoserver created

์ดํ›„ ํŒŒ๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

% kubectl get pods             
NAME    READY   STATUS    RESTARTS   AGE
hello   1/1     Running   0          96s
  • NAME: ํŒŒ๋“œ์˜ ์ด๋ฆ„์„ ํ‘œ์‹œ
  • READY: ํŒŒ๋“œ์˜ ์ค€๋น„ ์ƒํƒœ๋ฅผ ํ‘œ์‹œ
    • 0/1: ํ˜„์žฌ ํŒŒ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์œผ๋‚˜ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋˜์ง€ ์•Š์•˜์Œ
    • 1/1: ํŒŒ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์œผ๋ฉฐ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋๋‚ฌ์Œ
  • STATUS: ํŒŒ๋“œ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํ‘œ์‹œ
  • RESTARTS: ํ•ด๋‹น ํŒŒ๋“œ๊ฐ€ ๋ช‡๋ฒˆ ์žฌ์‹œ์ž‘ํ–ˆ๋Š”์ง€ ํ‘œ์‹œ
  • AGE: ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ์ง€๋‚ฌ๋Š”์ง€

K8s์˜ Pod์— ์ ‘๊ทผํ•  ๋–„ ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ž์„œ ๋‹จ์ˆœํžˆ ์ด๋ฏธ์ง€๋ฅผ ๋„์› ๋˜ 'hello' ํŒŒ๋“œ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ์˜ ๋ช…๋ น์–ด๋กœ ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

% kubectl expose po hello --type=LoadBalancer --port=8081
service/hello exposed

๋‹ค์Œ์œผ๋กœ ์„œ๋น„์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

% kubectl get service                                    
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
hello        LoadBalancer   10.106.2.186     localhost     8081:30129/TCP   5s
kubernetes   ClusterIP      10.96.0.1        <none>        443/TCP          28d
  • NAME: ์„œ๋น„์Šค์˜ ์ด๋ฆ„์„ ํ‘œ์‹œ
  • TYPE: ์„œ๋น„์Šค์˜ ํƒ€์ž…์„ ์˜๋ฏธ
  • CLUSTER-IP: ํ˜„์žฌ ํด๋Ÿฌ์Šคํ„ฐ ์•ˆ์—์„œ ์‚ฌ์šฉ๋˜๋Š” IP
  • EXTERNAL-IP: ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์—์„œ ์ ‘์†ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” IP
    • <none>: ๋ณ„๋„๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์Œ
  • PORT(S): ํ•ด๋‹น ์„œ๋น„์Šค์— ์ ‘์†ํ•˜๋Š” ํฌํŠธ๋ฅผ ํ‘œ์‹œ
  • AGE: ์ž์›์„ ์ƒ์„ฑํ•˜๊ณ  ์–ผ๋งˆ๋‚˜ ์‹œ๊ฐ„์ด ์ง€๋‚ฌ๋Š”์ง€ ๋‚˜ํƒ€๋ƒ„

์ฐธ๊ณ ๋กœ, ์—ฌ๊ธฐ์„œ kubernetes๋ผ๋Š” ์ด๋ฆ„์˜ ์„œ๋น„์Šค๋Š” kube-apiserver ๊ด€๋ จ ํŒŒ๋“œ๋“ค์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

์ด์ œ ์›น ๋ธŒ๋Ÿฌ์šฐ์ €์—์„œ http://localhost:8080/ ๋กœ ์ ‘์†ํ•˜๊ฑฐ๋‚˜ curl์„ ์ด์šฉํ•˜๋ฉด ๋‹ค์Œ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

% curl http://localhost:8080
NOW: 2023-03-02 03:19:03.265168927 +0000 UTC m=+1601.533555441

์ดํ›„ pod์ด๋‚˜ service๋ฅผ ์ค€์ง€ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

% kubectl delete pod hello
pod "hello" deleted
% kubectl delete service hello
service "hello" deleted

3.1.3 POSIX/GNU ์Šคํƒ€์ผ์˜ ๋ช…๋ น ์ž‘์„ฑ ๊ทœ์น™

kubectl์€ ๊ธฐ๋ณธ์ ์œผ๋กœ POSIX/GNU์Šคํƒ€์ผ ๋ช…๋ น ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

  • - ๊ณผ ํ•จ๊ป˜ํ•˜๋Š” ์˜ต์…˜: ์งง์€ ์˜ต์…˜์œผ๋กœ ๋‹จ์ผ ์•ŒํŒŒ๋ฒณ/์ˆซ์ž ์ธ์ž๋ฅผ ์‚ฌ์šฉํ•จ
  • - ๊ณผ ํ•จ๊ป˜ํ•˜๋Š” ์˜ต์…˜: ๊ธด ์˜ต์…˜์œผ๋กœ ๋‘ ๊ธ€์ž ์ด์ƒ์˜ ์•ŒํŒŒ๋ฒณ/์ˆซ์ž ์ธ์ž๋ฅผ ์‚ฌ์šฉํ•จ
  • Ref. program Argument Syntax Conventions: https://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html

3.1.4 ํ”Œ๋ž˜๊ทธ

๋ชจ๋“  ๋ช…๋ น์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ „์—ญ ํ”Œ๋ž˜๊ทธ์™€ ๊ฐœ๋ณ„ ๋ช…๋ น์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ณ„ ํ”Œ๋ž˜๊ทธ๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์ „์—ญํ”Œ๋ž˜๊ทธ์˜ ๊ฒฝ์šฐ kubectl options ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ -h, -v๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • -h(help): kubectl [command] --help ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ฐœ๋ณ„ ๋ช…๋ น์˜ ๋„์›€๋ง์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • -v [log level]: ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์˜ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜ ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์„ค์ •ํ•˜๋ฉฐ, ๋””๋ฒ„๊น…ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

3.1.5 kubeconfig ํ™˜๊ฒฝ ๋ณ€์ˆ˜

kubectl์€ ๊ธฐ๋ณธ์ ์œผ๋กœ $HOME/.kube/config ํŒŒ์ผ์—์„œ ํด๋Ÿฌ์Šคํ„ฐ, ์ธ์ฆ, ์ปจํ…์ŠคํŠธ ์ •๋ณด๋ฅผ ์ฝ์–ด ๋“ค์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ ์ •๋ณด๋ฅผ kubeconfig๋ผ ์นญํ•ฉ๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž์›๋“ค์€ kubectl api-resources ๋ช…๋ น์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

% kubectl api-resources
NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
bindings                                       v1                                     true         Binding
componentstatuses                 cs           v1                                     false        ComponentStatus
configmaps                        cm           v1                                     true         ConfigMap
endpoints                         ep           v1                                     true         Endpoints
...
  • SHORTNAMES: : ์ž์›์˜ ๋‹จ์ถ• ์ด๋ฆ„
  • APIGROUP: ํ•จ๊ป˜ ๋…ธ์ถœ๋˜๋Š” ์ž์› ์ง‘ํ•ฉ
  • NAMESPACED: ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์†ํ•˜๋Š” ์ž์›
  • KIND: ๊ฐ์ฒด ์Šคํ‚ค๋งˆ

๋„์ปค ๋ฐ์Šคํฌํ†ฑ์œผ๋กœ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ž๋™์œผ๋กœ kubeconfig๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

% kubectl config use-context docker-desktop

๋ฌผ๋ก , --kubeconfig ์˜ต์…˜์œผ๋กœ ๋‹ค๋ฅธ ์„ค์ • ํŒŒ์ผ์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

kubectl -kubeconfig=AWSconfig get pods

์ด๋Š” ๋‹ค์ค‘ ํฌ๋Ÿฌ์Šคํ„ฐ์— ๋‹ค๋ฅธ ์ธ์ฆ/ํด๋Ÿฌ์Šคํ„ฐ ์ •๋ณด๋กœ ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Kubespray๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ–ˆ๋‹ค๋ฉด ๋จผ์ € ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์— ์ง์ ‘ ์ ‘๊ทผํ•ด ~/.kube/config ๋‚ด์šฉ์„ ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์˜ ์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ ~/.kube/config์— ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ kubespray ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

kubectl์€ bash zsh์—์„œ์˜ ์ž๋™์™„์„ฑ์„ ๊ณต์‹์ ์œผ๋กœ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

% echo 'source <(kubectl completion bash)' >>~/.bashrc
% echo 'source <(kubectl completion zsh)' >>~/.zshrc

 

3.2 ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์ด์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ํ•˜๊ธฐ

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. kubectl run ๋ช…๋ น์œผ๋กœ ์ง์ ‘ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ
  2. ์ปจํ…Œ์ด๋„ˆ ์„ค์ • ์‚ฌํ•ญ์„ ๋‹ด์€ yaml ํ˜•์‹์˜ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ

ํŠนํžˆ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๊ณผ ์—ฐ๋™ํ•ด์„œ ์ž์› ์ •์˜ ๋ณ€๋™ ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

3.2.1 kubectl run์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ํ•˜๊ธฐ

deployment๋ฅผ ์ด์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

% kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080
deployment.apps/hello-node created

๋‹ค์Œ์˜ ๋ช…๋ น์œผ๋กœ deployment์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

% kubectl get deployments
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
hello-node   1/1     1            1           11s

๋‹ค์Œ์˜ ๋ช…๋ น์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ œ๋Œ€๋กœ ์‹คํ–‰๋๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

% kubectl get pods             
NAME                         READY   STATUS    RESTARTS   AGE
hello-node-67949d9db-2h4br   1/1     Running   0          96s

๋‹ค์Œ์˜ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰์ค‘์ธ ํŒŒ๋“œ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„ get deployments ๋ช…๋ น์œผ๋กœ ํ™•์ธํ•˜๋ฉด ํŒŒ๋“œ๊ฐ€ 2๊ฐœ๋กœ ์ฆ๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

% kubectl scale deploy hello-node --replicas=2
deployment.apps/hello-node scaled

3.2.2 ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ํ•˜๊ธฐ

์ปจํ…Œ์ด๋„ˆ ์„ค์ • ์‚ฌํ•ญ์„ ๋‹ด์€ .yaml ํŒŒ์ผ์„ ๋งŒ๋“  ํ›„ ๋‹ค์Œ์˜ ๋ช…๋ น์„ ํ†ตํ•ด ํŒŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

% kubectl apply -f <ํŒŒ์ผ์ด๋ฆ„>.yaml

3.3 ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์—์„œ ํด๋Ÿฌ์Šคํ„ฐ ์•ˆ ์•ฑ์— ์ ‘๊ทผํ•˜๊ธฐ

์‹คํ–‰๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„œ๋น„์Šค๋กœ ์‹คํ–‰์‹œ์ผœ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

% kubectl expose deployment hello-node --type=LoadBalancer --port=8080
service/hello-node exposed
% kubectl get service                                    
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
hello-node   LoadBalancer   10.110.186.126   localhost     8080:32568/TCP   20m
kubernetes   ClusterIP      10.96.0.1        <none>        443/TCP          28d

๋‹ค์Œ์˜ ๋ช…๋ น์„ ํ†ตํ•ด ์ข€ ๋” ์ƒ์„ธํ•œ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

% kubectl describe service hello-node
Name:                     hello-node
Namespace:                default
Labels:                   app=hello-node
Annotations:              <none>
Selector:                 app=hello-node
Type:                     LoadBalancer
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.110.186.126
IPs:                      10.110.186.126
LoadBalancer Ingress:     localhost
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  32568/TCP
Endpoints:                10.1.0.16:8080,10.1.0.22:8080
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

์ดํ›„ TargetPort์— ํ•ด๋‹นํ•˜๋Š” ํฌํŠธ๋กœ ์ ‘์†ํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ 

๋ฐ˜์‘ํ˜•