๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“š Book Review/๐Ÿ“˜ Kubernetes Best Practice

[Kubernetes Best Practice] 2. ๊ฐœ๋ฐœ์ž ์›Œํฌํ”Œ๋กœ

by Seongpyo Hong 2021. 1. 31.

์ด ๊ธ€์€ Kubernetes Best Practice๋ฅผ ์ฝ๊ณ  ๊ฐœ์ธ์ ์œผ๋กœ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ์ž˜ ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋‚ด์šฉ์€ ์ฑ…์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•˜์˜€์œผ๋ฉฐ ์ž์„ธํ•œ ๋‚ด์šฉ์ด ๊ถ๊ธˆํ•˜์‹  ๋ถ„๋“ค์€ ์ฑ…์„ ๊ตฌ๋งคํ•ด์„œ ์ฝ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ๋“œ๋ฆฝ๋‹ˆ๋‹ค. 

์ตœ๊ทผ ์„œ๋น„์Šค ๋ฉ”์‹œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฑฐ๋‚˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ค์—ˆ๋˜ ์ƒ๊ฐ์€ ์ด ๋ฐฉ๋ฒ•์ด ์ตœ์„ ์ธ๊ฐ€? ๋ผ๋Š” ์ƒ๊ฐ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๊ถ๊ธˆ์ฆ์„ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ๋„์›€์ด ๋ ๋งŒํ•œ ์ฑ…์„ ๋ฐœ๊ฒฌํ•ด์„œ ์ฝ์–ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.


๊ฐœ๋ฐœ๋‹จ๊ณ„์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™œ์šฉ

Kubernetes๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌ ์ธก๋ฉด์—์„œ ๋งŽ์€ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Controller๋ฅผ ํ†ตํ•œ Reconcile ๋กœ์ง ์ˆ˜ํ–‰, Deployment๋ฅผ ํ†ตํ•œ Rollout๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ์ด์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ์ž…์žฅ์—์„œ๋„ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ๋„์ž…ํ•จ์œผ๋กœ์จ ์ด์ ์„ ์–ป์œผ๋ ค๋ฉด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์šด์˜ ๋‹จ๊ณ„์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ์˜ ํŽธ์˜์„ฑ์„ ์œ„ํ•ด์„œ๋„ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

  • ํด๋Ÿฌ์Šคํ„ฐ์— ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • merge ์ „ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ ๋ฌธ์ œ๋กœ ์ธํ•ด ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์šฉ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์ถ•

๊ฐœ๋ฐœ์šฉ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํŒ€๋ณ„(ํ˜น์ธ ๊ฐœ์ธ๋ณ„)๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋‹จ์ผ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ธํ„ด์„ ์ง„ํ–‰ํ–ˆ๋˜ ๊ณณ์—์„œ๋Š” ํ›„์ž์˜ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ–ˆ์—ˆ๊ณ  ๋‹น์‹œ ์ด์œ ์— ๋Œ€ํ•ด ๊ถ๊ธˆํ–ˆ์—ˆ๋Š”๋ฐ... ๊ฐ ๋ฐฉ๋ฒ•์˜ ์žฅ๋‹จ์ ์„ ํŒŒ์•…ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

๋จผ์ € ๊ฐœ๋ณ„์ ์ธ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ๊ฐ€์žฅ ํฐ ๋‹จ์ ์€ ๋น„์šฉ๊ณผ ๊ด€๋ฆฌํ•ด์•ผํ•  ๋Œ€์ƒ์ด ๋งŽ์•„์ง„๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์‚ฌ์šฉ๋ฅ ์ด ๋น„ํšจ์œจ์ ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๊ธฐ๋ณธ์œผ๋กœ ํ• ๋‹น๋œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ŠคํŽ™์ด ์˜ค๋ฒ„์ŠคํŽ™์ด ๋  ์ˆ˜๋„..) ํ•˜์ง€๋งŒ, ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ„์˜ ๊ฐ„์„ญ์ด ์—†๋‹ค๋Š” ์žฅ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

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

์ถ”์ฒœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํ›„์ž๋กœ ์ด๋ฅผ ๋„์ž…ํ•จ์— ์žˆ์–ด ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์˜จ๋ณด๋”ฉ ๊ณผ์ •๊ณผ ์‚ฌ์šฉ์ž ๊ถŒํ•œ ๋ฐ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ๋‚ญ๋น„๋˜๊ณ  ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†๋Š”์ง€ ๊ด€๋ฆฌํ•˜๋Š” ์ž‘์—…์— ์‹œ๊ฐ„์„ ํˆฌ์žํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๋‹ค์Œ์œผ๋กœ๋Š” ๊ณต์šฉ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ์š”์•ฝํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

์˜จ๋ณด๋”ฉ ํ”„๋กœ์„ธ์Šค

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

์ฑ…์—์„œ๋Š” ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ pemํŒŒ์ผ๊ณผ csr ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ์ฆ๋ช…์„ ์ƒ์„ฑ, ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๋Š” Kubernetes์—์„œ ๋ฐœ๊ธ‰ํ•œ ์ธ์ฆ์„œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผํ•˜๊ณ , ์ด ์ธ์ฆ์„œ๋ฅผ API ํ˜ธ์ถœ์˜ Certificate Header๋กœ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ kubectl์„ ํ†ตํ•ด ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ฆ๋ช… ์ƒ์„ฑ

๊ฐ€์žฅ ๋จผ์ € ํ•ด์•ผํ•˜๋Š” ์ž‘์—…์€ private key์™€ CSR์„ ๋ฐœ๊ธ‰๋ฐ›๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ถ€๋ถ„์€ ๋”ฐ๋กœ ๋‹ค๋ฃจ์ง„ ์•Š์ง€๋งŒ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” key.pem ํŒŒ์ผ๊ณผ csr ํŒŒ์ผ์ด ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ์œ ์ €๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Kubernetes์— ์ธ์ฆ์„œ ๋ฐœ๊ธ‰์„ ์š”์ฒญํ•˜๋Š” CertificateSigningRequest ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ฑ…์—์„œ ์‚ฌ์šฉํ•œ api ๋ฒ„์ „์€ v1beta1์ด์ง€๋งŒ ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด v1์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ , v1 ๋ฒ„์ „์—์„œ๋Š” signerName ํ•„๋“œ๊ฐ€ ํ•„์ˆ˜๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค).

cat <<EOF | kubectl create -f -
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
    name: ${csr_name}
spec:
    groups:
    - system:authenticated
    request: $(cat ${csr} | base64 | tr -d '\n')
    signerName: kubernetes.io/kube-apiserver-client
    usages:
    - digital signature
    - key encipherment
    - client auth
EOF

 

๋‹ค์Œ์œผ๋กœ kubectl์„ ํ†ตํ•ด CSR์„ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ์Šน์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์Šน์ธ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉด csr์„ ํ†ตํ•ด crt ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

> kubectl certificate approve <csr_name>
> kubectl get csr/<csr_name> -o jsonpath='{.status.certificate}' \
	| base 64 --decode > <csr_name>.crt

 

๋งˆ์ง€๋ง‰์œผ๋กœ crtํŒŒ์ผ๊ณผ pem ํŒŒ์ผ์„ kubeconfig์— ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ์ƒˆ๋กœ์šด ์œ ์ €๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubectl config set-credentials <user_name> \
--client-key=<key-file> \
--client-certificate=<crt=file> \
--embed-certs=true

์ฐธ๊ณ  ๊ธ€ : kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/


Namespace ์ ‘๊ทผ ๊ถŒํ•œ ๋ถ€์—ฌ

์œ„์˜ ๊ณผ์ •์„ ํ†ตํ•ด์„œ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๋ฅผ ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•ด RoleBinding์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
    name: user-role-binding
    namespace: my-namespace
roleRef:
  apiGroup: rbac.authorization.k8s.io/v1
  kind: ClusterRole
  name: edit
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: myuser

์—ฌ๊ธฐ์„œ ์™œ ClusterRole๊ณผ ๋ฐ”์ธ๋”ฉํ•˜๋Š”์ง€ ๊ฐœ์ธ์ ์œผ๋กœ ๊ถ๊ธˆํ•ด์„œ ์ƒ๊ฐํ•ด๋ดค๋Š”๋ฐ ์ €์ž๋Š” Role์„ ๋”ฐ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” clusterRole์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•œ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด ClusterRole์„ RoleBinding์„ ํ†ตํ•ด ๋ฐ”์ธ๋”ฉ ํ•˜๋Š” ๊ฒฝ์šฐ ์ง€์ •ํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์•ˆ์—์„œ ClusterRole์˜ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ๋•Œ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์ž‘์—…์„ ๋ณด๊ธฐ ์œ„ํ•ด ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ์— ์ฝ๊ธฐ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ์ด ์‹ค์šฉ์ ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์‹œํฌ๋ฆฟ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด์„œ๋Š” ์ฝ๊ธฐ ๊ถŒํ•œ์„ ์ œ์™ธ์‹œ์ผœ ํ•ด์•ผํ•œ๋‹ค๋Š” ์ ์„ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ์ œํ•œ

ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์˜ ๋ฆฌ์†Œ์Šค์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ณ„๋กœ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Kubernetes์—์„œ๋Š” ResourceQuota๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 


๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ด€๋ฆฌ

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

์ฑ…์—์„œ๋Š” ๋™์ ์œผ๋กœ ์ƒˆ๋กœ์šด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” CRD๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜๊ณ  ์žˆ๋‹ค. ๋‹ค์Œ ๊ธ€์—์„œ๋Š” ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ณด๋Š” ๊ฑธ๋กœ ํ•ด์•ผ๊ฒ ๋‹ค.


ํด๋Ÿฌ์Šคํ„ฐ ์ˆ˜์ค€์˜ ์„œ๋น„์Šค ์ œ๊ณต

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


์ง€๊ธˆ๊นŒ์ง€ ๋‹จ์ˆœํžˆ ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ตฌ์ถ•๋œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋งŒ ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ, ์‹ค์ œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๊ณผ์ •์ด ํ•„์š”ํ•˜๊ณ  ์–ด๋–ค ๊ฒƒ๋“ค์„ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š”์ง€ ์กฐ๊ธˆ์€ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋˜ ํŒŒํŠธ์˜€๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. 

 

๋Œ“๊ธ€