Kubernetes Operator

CRD, Kubernetes Operator

์ปจํ…Œ์ด๋„ˆ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Kubernetes๊ฐ€ ๋„์ž…๋˜์—ˆ์ง€๋งŒ, ์‚ฌ๋žŒ์ด ์ง์ ‘ ์œ ์ง€๋ณด์ˆ˜ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด ์กด์žฌํ•œ๋‹ค. ์‚ฌ๋žŒ์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜์ž‘์—…ํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๊ฒƒ์ด Kubernetes Operator์ด๋‹ค.

Kubernetes Operator๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด, ๋จผ์ € CRD์™€ Custom Controller๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.

CRD (Custom Resource Definition)

Kubernetes์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋ฉด ์–ด์ฉ”์ˆ˜ ์—†์ด ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ๊ณ , Deployment, Service ๋“ฑ์„ ์ถ”์ƒํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ณ„๋„์˜ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ํ•„์š”ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด ๋•Œ Kubernetes์—์„œ ์ œ๊ณตํ•˜๋Š” CR(Custom Resource)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. CR์€ kubernetes์—์„œ ๋‚ด์žฅํ•˜๊ณ  ์žˆ๋Š” Resource๋“ค ์ด์™ธ์— ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”์— ๋”ฐ๋ผ ์ƒˆ๋กœ ์ •์˜ํ•œ Resource๋ฅผ ๋งํ•˜๋ฉฐ, kubectl ๊ฐ™์€ kubernetes ๊ธฐ๋ณธ ๋ช…๋ น์–ด ์‚ฌ์šฉ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

Kubernetes Resource๋ฅผ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด CR์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, CR์— ์–ด๋–ค ํ•ญ๋ชฉ์ด ์ •์˜๋˜์–ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์„ ์–ธํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์˜ค๋ธŒ์ ํŠธ์ธ CRD๋ฅผ ๋จผ์ € ์ƒ์„ฑํ•˜๊ณ  Kubernetes Api Server์— ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค.

CRD๋Š” apiextensions.k8s.io/v1 ํ™•์žฅํ•ด์„œ OpenAPI Schema v3(OAS 3.0) ์ŠคํŽ™ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, OAS 3.0 ๊ธฐ๋ฐ˜์œผ๋กœ ์กฐ๊ฑด์— ์œ„๋ฐฐ๋˜๋Š” ํ•ญ๋ชฉ์ด ์žˆ๋Š”์ง€ Validationํ•  ์ˆ˜ ์žˆ๋‹ค. โ€ป ์ฐธ๊ณ ๋กœ, swagger๋Š” OAS๊ธฐ๋ฐ˜์œผ๋กœ REST API ์„ค๊ณ„, ๋นŒ๋“œ, ๋ฌธ์„œํ™”์— ์‚ฌ์šฉํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ๋„๊ตฌ์ด๋‹ค.

CRD๋ฅผ ์ž‘์„ฑํ•œ ํ›„, Custom Controller๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด, kubernetes API๋ฅผ ํ™•์žฅํ•œ Custom Resource๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Kubernetes Operator

Kubernetes Operator๋Š” CRD์™€ Controller๋กœ ๊ตฌ์„ฑ๋˜๋Š”๋ฐ, Custom Resource๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•ด์•ผ ํ•˜๊ณ , ์–ด๋–ป๊ฒŒ ๋ฐฐํฌ๋˜์–ด์•ผ ํ•˜๊ณ , (๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ) ์–ด๋–ป๊ฒŒ ๋ฐ˜์‘ํ•ด์•ผ ํ•˜๋Š”์ง€ ๋“ฑ์— ๋Œ€ํ•ด ์ •์˜ํ•˜์—ฌ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

Kubernetes Operator์˜ ๋™์ž‘ ๋ฐฉ์‹์€

1) CRD๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ CR์— ์ž‘์„ฑํ•˜๊ณ  ๋ฐฐํฌํ•˜๋ฉด, (CR์€ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ์ด ๋ฟ) 2) Custom Controller๊ฐ€ CR์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ๋ณ€๊ฒฝ๋œ CR์˜ ์ƒํƒœ๋ฅผ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ์„ค์น˜, ์—…๊ทธ๋ ˆ์ด๋“œ ๋“ฑ ํ•„์š”ํ•œ ์ž‘์—…์„ ํ•œ๋‹ค.

Kubernetes API๋กœ CR ๋“ฑ๋ก

๋‹ค์Œ์€ Kubernetes API๋กœ CR์„ ๋™๋กํ•  ๋•Œ, Client์™€ Custom Controller ๊ฐ„์˜ ๋™์ž‘ ์ ˆ์ฐจ์ด๋‹ค.

1) Reflector๋Š” Kubernetes API์—์„œ ์ง€์ •ํ•œ Resource(kind)๋ฅผ ์‹œํ•˜๋‹ค๊ฐ€, 2) ์ƒˆ๋กœ์šด Resource ์ธ์Šคํ„ด์Šค(Object)๊ฐ€ ๊ฐ์ง€๋˜๋ฉด Delta Fifo ํ์— ๋„ฃ๋Š”๋‹ค. 3) Informer๊ฐ€ Delta Fifo ํ์—์„œ Object๋ฅผ ๊บผ๋‚ด์„œ, 4) ๋‚˜์ค‘์— ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก Indexer์— ์ „๋‹ฌํ•˜๋ฉด, 5) Indexer๊ฐ€ Object์˜ Key๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น Key๋กœ Object๋ฅผ ์ €์žฅํ•œ๋‹ค. 6) ๊ทธ ๋‹ค์Œ, Informer๋Š” Custom Controller ์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ Object์˜ Key๋ฅผ ์ „๋‹ฌํ•˜๊ณ  7) Workqueue์— ๋„ฃ์œผ๋ฉด 8) Key๋ฅผ ๊บผ๋‚ด์„œ 9) Index๋ฅผ ํ†ตํ•ด Key๋กœ Object๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

Last updated

Was this helpful?