Kubernetes์šฉ ์—ฐ์‚ฐ์ž: ์ƒํƒœ ์ €์žฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

Kubernetes์˜ ์ƒํƒœ ์ €์žฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฌธ์ œ

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

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ์ปจํ…Œ์ด๋„ˆ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ PHP/Ruby/Python์œผ๋กœ ๋ฐฑ์—”๋“œ ๋ณต์‚ฌ๋ณธ 5๊ฐœ๋ฅผ ๋” ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์ƒˆ ์„œ๋ฒ„๋ฅผ XNUMX๋ฒˆ ์„ค์ •ํ•˜๊ณ  ์†Œ์Šค๋ฅผ ๋ณต์‚ฌํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ์™€ init ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ชจ๋‘ ์ด๋ฏธ์ง€์— ์žˆ์œผ๋ฏ€๋กœ ์ƒํƒœ ๋น„์ €์žฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ™•์žฅ์€ ์™„์ „ํžˆ ๊ธฐ๋ณธ์ด ๋ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์™€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ํŒฌ์ด๋ผ๋ฉด ์ž˜ ์•Œ๊ฒ ์ง€๋งŒ, ์–ด๋ ค์›€์€ ์ƒํƒœ ์ €์žฅ ์•ฑ, ์ฆ‰. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ์บ์‹œ(MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra...)์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์ง€์†์„ฑ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ฟผ๋Ÿผ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด(์˜ˆ: Percona XtraDB ๋ฐ Cassandra)์™€ ๋ณ„๋„์˜ ๊ด€๋ฆฌ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ํ•„์š”ํ•œ ์†Œํ”„ํŠธ์›จ์–ด(์˜ˆ: Redis, MySQL, PostgreSQL...) ๋ชจ๋‘์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

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

CoreOS ์šด์˜์ž

์šด์˜ ์ง€์‹์„ "ํ”„๋กœ๊ทธ๋ž˜๋ฐ"ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘๋…„ ๋ง CoreOS ํ”„๋กœ์ ํŠธ ๋„์ž… ๋œ Kubernetes ํ”Œ๋žซํผ์„ ์œ„ํ•œ "์ƒˆ๋กœ์šด ์ข…๋ฅ˜์˜ ์†Œํ”„ํŠธ์›จ์–ด" - Operators(์˜์–ด "์šด์˜", ์ฆ‰ "์šด์˜"์—์„œ ์œ ๋ž˜).

Kubernetes์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ํ™•์žฅํ•˜๋Š” ์šด์˜์ž(ํฌํ•จ) StatefulSet, ์•„๋ž˜ ์ฐจ์ด์  ์ฐธ์กฐ) DevOps ์ „๋ฌธ๊ฐ€๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์— ์šด์˜ ์ง€์‹์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šด์˜์ž์˜ ๋ชฉ์  โ€” ๋‚ด๋ถ€ ๋‚ด์šฉ(์–ด๋–ค ๋ฐ์ดํ„ฐ์™€ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋Š”์ง€, ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€)์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์—ฌ๋Ÿฌ ์ƒํƒœ ์ €์žฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—”ํ„ฐํ‹ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” API๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ). ์‹ค์ œ๋กœ Operator๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์—…์„ ์ตœ๋Œ€ํ•œ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ์ด์ „์— ์ˆ˜๋™์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ–ˆ๋˜ ์šด์˜ ์ž‘์—…์˜ ์‹คํ–‰์„ ์ž๋™ํ™”ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์šด์˜์ž์˜ ์ž‘๋™ ๋ฐฉ์‹

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

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

๋”ฐ๋ผ์„œ, ์ด ๋ชจ๋“  ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ์šด์˜์ž๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ด€๋ฆฌ์ž ๋ฐ๋ชฌ์ž…๋‹ˆ๋‹ค.

  1. Kubernetes์˜ ์ด๋ฒคํŠธ API๋ฅผ ๊ตฌ๋…ํ•ฉ๋‹ˆ๋‹ค.
  2. ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋ ˆํ”Œ๋ฆฌ์นด์„ธํŠธ, ๊ผฌํˆฌ๋ฆฌ, ์„œ๋น„์Šค ๋“ฑ๋“ฑ.);
  3. ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค ํƒ€์‚ฌ ๋ฆฌ์†Œ์Šค (์•„๋ž˜ ์˜ˆ ์ฐธ์กฐ)
  4. ์™ธ๋ชจ/๋ณ€ํ™”์— ๋ฐ˜์‘ ํƒ€์‚ฌ ๋ฆฌ์†Œ์Šค (์˜ˆ๋ฅผ ๋“ค์–ด ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋“ฑ)
  5. ์‹œ์Šคํ…œ ์ƒํƒœ์˜ ๋ณ€ํ™”์— โ€‹โ€‹๋ฐ˜์‘ํ•ฉ๋‹ˆ๋‹ค. ๋ ˆํ”Œ๋ฆฌ์นด์„ธํŠธ, ๊ผฌํˆฌ๋ฆฌ, ์„œ๋น„์Šค ๋“ฑ๋“ฑ.);
  6. ๊ฐ€์žฅ ์ค‘์š” :
    1. Kubernetes API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค(๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ์ž์ฒด ๋ ˆํ”Œ๋ฆฌ์นด์„ธํŠธ, ๊ผฌํˆฌ๋ฆฌ, ์„œ๋น„์Šค...),
    2. ๋ช‡ ๊ฐ€์ง€ ๋งˆ๋ฒ•์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค(๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด Operator๊ฐ€ Pod ์ž์ฒด์— ๋“ค์–ด๊ฐ€์„œ ๋ช…๋ น์„ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํด๋Ÿฌ์Šคํ„ฐ์— ๊ฐ€์ž…ํ•˜๊ฑฐ๋‚˜ ๋ฒ„์ „์„ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค).

Kubernetes์šฉ ์—ฐ์‚ฐ์ž: ์ƒํƒœ ์ €์žฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•
์‹ค์ œ๋กœ ๊ทธ๋ฆผ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—๋Š” ๋‹จ์ˆœํžˆ ๋ณ„๋„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ถ”๊ฐ€๋œ๋‹ค(์ผ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜). ์ „๊ฐœ ั ๋ ˆํ”Œ๋ฆฌ์นด์…‹)๋ฅผ ์—ฐ์‚ฐ์ž๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜ ๊ผฌํˆฌ๋ฆฌ(๋ณดํ†ต ๋‹จ ํ•˜๋‚˜)์— ๊ฑฐ์ฃผํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•ด๋‹น ๊ผฌํˆฌ๋ฆฌ์—๋งŒ ์ฑ…์ž„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค. ์ด ์šด์˜์ž ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ง์ ‘์ ์œผ๋กœ๋Š” ์•„๋‹ˆ์ง€๋งŒ API๋ฅผ ํ†ตํ•ด API๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ํƒ€์‚ฌ ๋ฆฌ์†Œ์Šค ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ํ›„ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ์šด์˜์ž๋‹˜, ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ํƒ€์‚ฌ ๋ฆฌ์†Œ์Šค.

etcd์˜ ์˜ˆ (์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ์ฐธ์กฐ):

apiVersion: etcd.coreos.com/v1beta1
kind: Cluster
metadata:
  name: example-etcd-cluster
spec:
  size: 3
  version: 3.1.0

Elasticsearch์˜ ์˜ˆ:

apiVersion: enterprises.upmc.com/v1
kind: ElasticsearchCluster
metadata:
  name: example-es-cluster
spec:
  client-node-replicas: 3
  master-node-replicas: 2
  data-node-replicas: 3
  zones:
  - us-east-1c
  - us-east-1d
  - us-east-1e
  data-volume-size: 10Gi
  java-options: "-Xms1024m -Xmx1024m"
  snapshot:
    scheduler-enabled: true
    bucket-name: elasticsnapshots99
    cron-schedule: "@every 2m"
  storage:
    type: gp2
    storage-class-provisioner: kubernetes.io/aws-ebs

์šด์˜์ž ์š”๊ตฌ ์‚ฌํ•ญ

CoreOS๋Š” ์—”์ง€๋‹ˆ์–ด๊ฐ€ Operator ์ž‘์—…์„ ํ•˜๋ฉด์„œ ์–ป์€ ์ฃผ์š” ํŒจํ„ด์„ ๊ณต์‹ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  Operator๊ฐ€ ๊ฐœ๋ณ„์ ์ด๋ผ๋Š” ์‚ฌ์‹ค์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ (๊ณ ์œ ํ•œ ํŠน์„ฑ๊ณผ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ๋Š” ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•ด ์ƒ์„ฑ๋จ) ์ด๋“ค์˜ ์ƒ์„ฑ์€ ๋‹ค์Œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋ถ€๊ณผํ•˜๋Š” ์ผ์ข…์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์„ค์น˜๋Š” ๋‹จ์ผ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ „๊ฐœ: kubectl create -f SOME_OPERATOR_URL/deployment.yaml - ์ถ”๊ฐ€ ์กฐ์น˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. Kubernetes์— Operator๋ฅผ ์„ค์น˜ํ•  ๋•Œ ์ƒˆ๋กœ์šด ํƒ€์‚ฌ ์œ ํ˜•์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (ํƒ€์‚ฌ ๋ฆฌ์†Œ์Šค). ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์Šคํ„ด์Šค(ํด๋Ÿฌ์Šคํ„ฐ ์ธ์Šคํ„ด์Šค)๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์ถ”๊ฐ€๋กœ ๊ด€๋ฆฌ(๋ฒ„์ „ ์—…๋ฐ์ดํŠธ, ํฌ๊ธฐ ์กฐ์ • ๋“ฑ)ํ•˜๋ ค๋ฉด ์ด ์œ ํ˜•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฐ€๋Šฅํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค์Œ๊ณผ ๊ฐ™์ด Kubernetes์— ๋‚ด์žฅ๋œ ๊ธฐ๋ณธ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค ะธ ๋ ˆํ”Œ๋ฆฌ์นด์„ธํŠธ์ž˜ ํ…Œ์ŠคํŠธ๋˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  4. Operators์˜ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด ํ•„์š”ํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑํ•œ ๋ฆฌ์†Œ์Šค์˜ ์ด์ „ ๋ฒ„์ „์— ๋Œ€ํ•œ ์ง€์›์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  5. Operator๊ฐ€ ์ œ๊ฑฐ๋˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด๋Š” ๋ณ€๊ฒฝ ์—†์ด ๊ณ„์† ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  6. ์‚ฌ์šฉ์ž๋Š” ์›ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์„ ์ •์˜ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ์—…๋ฐ์ดํŠธ ๋ถ€์กฑ์€ ์šด์˜ ๋ฐ ๋ณด์•ˆ ๋ฌธ์ œ์˜ ์ผ๋ฐ˜์ ์ธ ์›์ธ์ด๋ฏ€๋กœ ์šด์˜์ž๋Š” ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์‚ฌ์šฉ์ž๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  7. ์šด์˜์ž๋Š” Pod, ๊ตฌ์„ฑ ๋ฐ ๋„คํŠธ์›Œํฌ์˜ ์ž ์žฌ์ ์ธ ์˜ค๋ฅ˜๋ฅผ ์‹๋ณ„ํ•˜๋Š” Chaos Monkey์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

etcd ์—ฐ์‚ฐ์ž

์—ฐ์‚ฐ์ž ๊ตฌํ˜„ ์˜ˆ - etcd ์šด์˜์ž, ์ค€๋น„๋œ ์ด๋ฒˆ ์ปจ์…‰ ๋ฐœํ‘œ ๋‹น์ผ. etcd ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์€ ์ฟผ๋Ÿผ ์œ ์ง€, ํด๋Ÿฌ์Šคํ„ฐ ๋ฉค๋ฒ„์‹ญ ์žฌ๊ตฌ์„ฑ, ๋ฐฑ์—… ์ƒ์„ฑ ๋“ฑ์˜ ํ•„์š”์„ฑ์œผ๋กœ ์ธํ•ด ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, etcd ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ˆ˜๋™์œผ๋กœ ํ™•์žฅํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ ๋ฉค๋ฒ„์— ๋Œ€ํ•œ DNS ์ด๋ฆ„์„ ์ƒ์„ฑํ•˜๊ณ , ์ƒˆ etcd ์—”ํ„ฐํ‹ฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ , ์ƒˆ ๋ฉค๋ฒ„์— ๋Œ€ํ•ด ํด๋Ÿฌ์Šคํ„ฐ์— ๊ฒฝ๊ณ ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(etcdctl ํšŒ์› ์ถ”๊ฐ€). Operator์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๋Š” ํด๋Ÿฌ์Šคํ„ฐ ํฌ๊ธฐ๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ์ž‘์—…์€ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  etcd๋„ CoreOS์—์„œ ์ƒ์„ฑ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น Operator๊ฐ€ ๋จผ์ € ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋…ผ๋ฆฌ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Š” ์–ด๋–ป๊ฒŒ ์ผํ•ฉ๋‹ˆ๊นŒ? ์—ฐ์‚ฐ์ž ๋กœ์ง etcd ์„ธ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

  1. ๊ด€์ฐฐํ•˜๋‹ค. ์šด์˜์ž๋Š” Kubernetes API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ถ„์„. ํ˜„์žฌ ์ƒํƒœ์™€ ์›ํ•˜๋Š” ์ƒํƒœ(์‚ฌ์šฉ์ž ๊ตฌ์„ฑ์— ์˜ํ•ด ์ •์˜๋จ) ์‚ฌ์ด์˜ ์ฐจ์ด์ ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
  3. ํ–‰๋™. etcd ๋ฐ/๋˜๋Š” Kubernetes ์„œ๋น„์Šค API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ง€๋œ ์ฐจ์ด์ ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

Kubernetes์šฉ ์—ฐ์‚ฐ์ž: ์ƒํƒœ ์ €์žฅ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

์ด ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด Operator์— ํ•จ์ˆ˜๊ฐ€ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ/ํŒŒ๊ดด (etcd ํด๋Ÿฌ์Šคํ„ฐ ๋ฉค๋ฒ„ ์ƒ์„ฑ ๋ฐ ์‚ญ์ œ) ๋ฐ ํฌ๊ธฐ ์กฐ์ • (ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์› ์ˆ˜ ๋ณ€๊ฒฝ) ์ž‘๋™์˜ ์ •ํ™•์„ฑ์€ Netflix์˜ Chaos Monkey์™€ ์œ ์‚ฌํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. etcd ํฌ๋“œ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

etcd์˜ ์ „์ฒด ์ž‘๋™์„ ์œ„ํ•ด Operator๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—… (๋ฐฑ์—… ๋ณต์‚ฌ๋ณธ ์ƒ์„ฑ์ด ์ž๋™์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด์ง€ ์•Š์Œ - ๊ตฌ์„ฑ์—์„œ๋Š” ๋ฐฑ์—… ๋ณต์‚ฌ๋ณธ ์ƒ์„ฑ ๋นˆ๋„์™€ ์ €์žฅํ•  ๊ฐœ์ˆ˜๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ์ดํ›„์— ํ•ด๋‹น ๋ณต์‚ฌ๋ณธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์›ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•จ) ์—…๊ทธ๋ ˆ์ด๋“œ (๋‹ค์šดํƒ€์ž„ ์—†์ด etcd ์„ค์น˜ ์—…๋ฐ์ดํŠธ)

์˜คํผ๋ ˆ์ดํ„ฐ์™€ ํ•จ๊ป˜ ์ผํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ค ๋ชจ์Šต์ธ๊ฐ€์š”?

$ kubectl create -f https://coreos.com/operators/etcd/latest/deployment.yaml
$ kubectl create -f https://coreos.com/operators/etcd/latest/example-etcd-cluster.yaml
$ kubectl get pods
NAME                             READY     STATUS    RESTARTS   AGE
etcd-cluster-0000                1/1       Running   0          23s
etcd-cluster-0001                1/1       Running   0          16s
etcd-cluster-0002                1/1       Running   0          8s
etcd-cluster-backup-tool-rhygq   1/1       Running   0          18s

etcd Operator์˜ ํ˜„์žฌ ์ƒํƒœ๋Š” ๋ฒ ํƒ€ ๋ฒ„์ „์ด๋ฉฐ ์‹คํ–‰ํ•˜๋ ค๋ฉด Kubernetes 1.5.3+ ๋ฐ etcd 3.0+๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ์™€ ๋ฌธ์„œ(์‚ฌ์šฉ ์ง€์นจ ํฌํ•จ)๋Š” ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub์˜.

CoreOS์˜ ๋˜ ๋‹ค๋ฅธ ๊ตฌํ˜„ ์˜ˆ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค ์˜คํผ๋ ˆ์ดํ„ฐ, ๊ทธ๋Ÿฌ๋‚˜ ์•„์ง์€ ์•ŒํŒŒ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค(๊ณ„ํš๋œ ๊ธฐ๋Šฅ์ด ๋ชจ๋‘ ๊ตฌํ˜„๋˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค).

ํ˜„ํ™ฉ ๋ฐ ์ „๋ง

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜คํผ๋ ˆ์ดํ„ฐ ๋ฐœํ‘œ ์ดํ›„ 5๊ฐœ์›”์ด ์ง€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ณต์‹ CoreOS ์ €์žฅ์†Œ์—๋Š” ์•„์ง ๋‘ ๊ฐ€์ง€ ๊ตฌํ˜„๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(etcd ๋ฐ Prometheus์šฉ). ๋‘˜ ๋‹ค ์•„์ง ์•ˆ์ •์ ์ธ ๋ฒ„์ „์— ๋„๋‹ฌํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์ปค๋ฐ‹์€ ๋งค์ผ ๊ด€์ฐฐ๋ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๋Š” "์‚ฌ์šฉ์ž๊ฐ€ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— Postgres Operator, Cassandra Operator ๋˜๋Š” Redis Operator๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์˜ค๋Š˜๋‚  ์ƒํƒœ ๋น„์ €์žฅ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณต์ œ๋ณธ์„ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์‰ฝ๊ฒŒ ์ด๋Ÿฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์—”ํ„ฐํ‹ฐ์™€ ์ž‘์—…ํ•˜๋Š” ๋ฏธ๋ž˜"๋ฅผ ๊ตฌ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํƒ€์‚ฌ ๊ฐœ๋ฐœ์ž์˜ ์—ฐ์‚ฐ์ž ์ •๋ง ๋‚˜ํƒ€๋‚˜๊ธฐ ์‹œ์ž‘ํ–ˆ์–ด์š”:

2017๋…„ XNUMX์›” ๋ธŒ๋คผ์…€์—์„œ ์—ด๋ฆฐ ์œ ๋Ÿฝ ์ตœ๋Œ€ ์ž์œ  ์†Œํ”„ํŠธ์›จ์–ด ์ปจํผ๋Ÿฐ์Šค FOSDEM์—์„œ CoreOS์˜ Josh Wood๋Š” Operators๋ฅผ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณด๊ณ  (๋™์˜์ƒ์€ ๋งํฌ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!) ์ด๋Š” ๋” ๋„“์€ ์˜คํ”ˆ ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ด ๊ฐœ๋…์˜ ์ธ๊ธฐ๋ฅผ ๋†’์ด๋Š” ๋ฐ ๊ธฐ์—ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

PS ๊ธฐ์‚ฌ์— ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์šฐ๋ฆฌ ํ—ˆ๋ธŒ๋ฅผ ๊ตฌ๋…ํ•˜์„ธ์š”, DevOps ๋ฐ GNU/Linux ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์ž๋ฃŒ์™€ ๋ ˆ์‹œํ”ผ๋ฅผ ๋†“์น˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์ •๊ธฐ์ ์œผ๋กœ ๊ฒŒ์‹œํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค!

์ถœ์ฒ˜ : habr.com

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