Yandex.Cloud์šฉ Kubernetes์—์„œ CSI ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•œ ๊ฒฝํ—˜

Yandex.Cloud์šฉ Kubernetes์—์„œ CSI ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•œ ๊ฒฝํ—˜

Flant๊ฐ€ Kubernetes์šฉ ์˜คํ”ˆ ์†Œ์Šค ๋„๊ตฌ์— ๋Œ€ํ•œ ๊ธฐ์—ฌ๋ฅผ ํ™•๋Œ€ํ•˜๊ณ  ์žˆ์Œ์„ ๋ฐœํ‘œํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์˜๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. CSI ๋“œ๋ผ์ด๋ฒ„์˜ ์•ŒํŒŒ ๋ฒ„์ „ (์ปจํ…Œ์ด๋„ˆ ์Šคํ† ๋ฆฌ์ง€ ์ธํ„ฐํŽ˜์ด์Šค) Yandex.Cloud์šฉ.

ํ•˜์ง€๋งŒ ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์œผ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— Yandex๊ฐ€ ์ด๋ฏธ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ด๊ฒƒ์ด ์™œ ํ•„์š”ํ•œ์ง€ ์งˆ๋ฌธ์— ๋‹ตํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Kubernetes์šฉ ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค.

์†Œ๊ฐœ

์™œ ์ด๋ž˜?

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

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

NB: ์ด๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ๊ฒฝํ—˜์ด๋ฉฐ ๋งค์šฐ ๊ตฌ์ฒด์ ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๊ธฐ์„ฑ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ž์ฒด์ ์œผ๋กœ ๋ฐฐํฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์šฐ๋ฆฌ๋Š” Yandex์—์„œ Kubernetes๋ฅผ ์šด์˜ํ•˜๋Š” ์‹ค์ œ ๊ฒฝํ—˜์ด ์—†์œผ๋ฉฐ ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ์ด ์„œ๋น„์Šค์— ๋Œ€ํ•œ ํ‰๊ฐ€๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋ฌด์—‡์ด๋ฉฐ ๋ˆ„๊ตฌ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ธ๊ฐ€?

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ Kubernetes์˜ ์Šคํ† ๋ฆฌ์ง€์— ๋Œ€ํ•œ ํ˜„๋Œ€์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. CSI๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”? ะธ ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์–ด๋–ป๊ฒŒ ์™”๋Š”์ง€ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์—.

ํ˜„์žฌ ๋งŽ์€ ๋Œ€๊ทœ๋ชจ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ์ œ๊ณต์—…์ฒด๋Š” ํด๋ผ์šฐ๋“œ ๋””์Šคํฌ๋ฅผ Kubernetes์—์„œ ์˜๊ตฌ ๋ณผ๋ฅจ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ธ‰์—…์ฒด์— ํ•ด๋‹น ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์—†์ง€๋งŒ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด API๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋˜๋Š” ๊ฒฝ์šฐ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋˜๋Š” ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Yandex.Cloud์—์„œ ์ผ์–ด๋‚œ ์ผ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ฐœ์ „์˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ผ์•˜์Šต๋‹ˆ๋‹ค DigitalOcean ํด๋ผ์šฐ๋“œ์šฉ CSI ๋“œ๋ผ์ด๋ฒ„ ๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๊ฐ€์ง€ ์•„์ด๋””์–ด GCP์šฉ ๋“œ๋ผ์ด๋ฒ„, ์ด๋Ÿฌํ•œ ํด๋ผ์šฐ๋“œ(Google ๋ฐ Yandex)์˜ API์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์—๋Š” ๋งŽ์€ ์œ ์‚ฌ์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ API์™€ GCP๊ทธ๋ฆฌ๊ณ  ๋„ˆ. Yandex ์ฃผ์ฐจ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋‹ค Operation ์žฅ๊ธฐ ์‹คํ–‰ ์ž‘์—…(์˜ˆ: ์ƒˆ ๋””์Šคํฌ ์ƒ์„ฑ) ์ƒํƒœ๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. Yandex.Cloud API์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์„ธ์š”. Yandex.Cloud Go SDK.

์™„๋ฃŒ๋œ ์ž‘์—…์˜ ๊ฒฐ๊ณผ GitHub์— ๊ฒŒ์‹œ๋จ ์–ด๋–ค ์ด์œ ๋กœ Yandex.Cloud ๊ฐ€์ƒ ๋จธ์‹ (๊ธฐ์„ฑ ๊ด€๋ฆฌํ˜• ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์•„๋‹˜)์—์„œ ์ž์ฒด Kubernetes ์„ค์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  CSI๋ฅผ ํ†ตํ•ด ๋””์Šคํฌ๋ฅผ ์‚ฌ์šฉ(์ฃผ๋ฌธ)ํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ะ ะตะฐะปะธะทะฐั†ะธั

์ฃผ์š” ๊ธฐ๋Šฅ

ํ˜„์žฌ ๋“œ๋ผ์ด๋ฒ„๋Š” ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ํด๋Ÿฌ์Šคํ„ฐ์— ์žˆ๋Š” ๋…ธ๋“œ์˜ ํ† ํด๋กœ์ง€์— ๋”ฐ๋ผ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  ์˜์—ญ์—์„œ ๋””์Šคํฌ๋ฅผ ์ฃผ๋ฌธํ•ฉ๋‹ˆ๋‹ค.
  • ์ด์ „์— ์ฃผ๋ฌธํ•œ ๋””์Šคํฌ ์ œ๊ฑฐ
  • ๋””์Šคํฌ์˜ ์˜คํ”„๋ผ์ธ ํฌ๊ธฐ ์กฐ์ •(Yandex.Cloud ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ๊ฐ€์ƒ ๋จธ์‹ ์— ๋งˆ์šดํŠธ๋œ ๋””์Šคํฌ๋ฅผ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค. ํฌ๊ธฐ ์กฐ์ •์„ ์ตœ๋Œ€ํ•œ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ˆ˜์ •ํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ–ฅํ›„์—๋Š” ๋””์Šคํฌ ์Šค๋ƒ…์ƒท ์ƒ์„ฑ ๋ฐ ์‚ญ์ œ ์ง€์›์„ ๊ตฌํ˜„ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ํฐ ์–ด๋ ค์›€๊ณผ ๊ทน๋ณต ๋ฐฉ๋ฒ•

Yandex.Cloud API์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋””์Šคํฌ๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ•˜๋‹ค๋Š” ์ ์€ PV(์˜๊ตฌ ๋ณผ๋ฅจ)์— ๋Œ€ํ•œ ํฌ๊ธฐ ์กฐ์ • ์ž‘์—…์„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ œํ•œ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋””์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํฌ๋“œ๋ฅผ ์ค‘์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ€๋™ ์ค‘์ง€๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์— ๋”ฐ๋ฅด๋ฉด CSI ์‚ฌ์–‘, CSI ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋””์Šคํฌ ํฌ๊ธฐ๋ฅผ "์˜คํ”„๋ผ์ธ"์œผ๋กœ๋งŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ณด๊ณ ํ•˜๋Š” ๊ฒฝ์šฐ(VolumeExpansion.OFFLINE), ๋””์Šคํฌ๋ฅผ ๋Š˜๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ์—๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ VolumeExpansion.OFFLINE ํ™•์žฅ ๊ธฐ๋Šฅ ๋ฐ ๋ณผ๋ฅจ์ด ํ˜„์žฌ ๊ฒŒ์‹œ๋˜์—ˆ๊ฑฐ๋‚˜ ๋…ธ๋“œ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ControllerExpandVolume ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜ ์ดํ›„์—๋งŒ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ํ”Œ๋Ÿฌ๊ทธ์ธ์—๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค PUBLISH_UNPUBLISH_VOLUME ๋Šฅ๋ ฅ๊ณผ ControllerUnpublishVolume ์„ฑ๊ณต์ ์œผ๋กœ ํ˜ธ์ถœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด

  • ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค PUBLISH_UNPUBLISH_VOLUME ๊ธฐ๋Šฅ, ํ”Œ๋Ÿฌ๊ทธ์ธ์—๋Š” ๋…ธ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค STAGE_UNSTAGE_VOLUME ๋Šฅ๋ ฅ, ๊ทธ๋ฆฌ๊ณ  NodeUnstageVolume ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด

  • ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค PUBLISH_UNPUBLISH_VOLUME ๊ธฐ๋Šฅ๋„ ๋…ธ๋“œ๋„ ์•„๋‹™๋‹ˆ๋‹ค. STAGE_UNSTAGE_VOLUME ๋Šฅ๋ ฅ, ๊ทธ๋ฆฌ๊ณ  NodeUnpublishVolume ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๋””์Šคํฌ๋ฅผ ํ™•์žฅํ•˜๊ธฐ ์ „์— ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ๋””์Šคํฌ๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ถˆํ–‰ํžˆ๋„ ๊ตฌํ˜„ ์‚ฌ์ด๋“œ์นด๋ฅผ ํ†ตํ•œ CSI ์‚ฌ์–‘์€ ๋‹ค์Œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ์—์„œ csi-attacher, ๋งˆ์šดํŠธ ์‚ฌ์ด์— ํ•„์š”ํ•œ ๊ฐ„๊ฒฉ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ์ด ๊ธฐ๋Šฅ์€ ์˜คํ”„๋ผ์ธ ํฌ๊ธฐ ์กฐ์ •์—์„œ๋Š” ๊ตฌํ˜„๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋…ผ์˜๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—.
  • ์ด ๋งฅ๋ฝ์—์„œ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๋ž€ ์ •ํ™•ํžˆ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? CSI ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž์ฒด๋Š” Kubernetes API์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜์ง€ ์•Š์ง€๋งŒ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋ณด๋‚ธ gRPC ํ˜ธ์ถœ์—๋งŒ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹  ๊ฐœ๋ฐœ ์ค‘ Kubernetes ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ(CSI ํ”Œ๋Ÿฌ๊ทธ์ธ) ๋””์Šคํฌ๋ฅผ ๋Š˜๋ฆฌ๋Š” ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. gRPC ํ˜ธ์ถœ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ControllerExpandVolume;
  2. API์—์„œ ๋””์Šคํฌ๋ฅผ ๋Š˜๋ฆฌ๋ ค๊ณ  ํ•˜๋Š”๋ฐ ๋””์Šคํฌ๊ฐ€ ๋งˆ์šดํŠธ๋˜์–ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  3. ์ฆ๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋””์Šคํฌ๊ฐ€ ํฌํ•จ๋œ ๋งต์— ๋””์Šคํฌ ์‹๋ณ„์ž๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ดํ•˜์—์„œ๋Š” ๊ฐ„๋žตํ•˜๊ฒŒ ์ด ์ง€๋„๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ถ€๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. volumeResizeRequired;
  4. ๋””์Šคํฌ๋ฅผ ์‚ฌ์šฉ ์ค‘์ธ ํฌ๋“œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. Kubernetes๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋””์Šคํฌ์— ๋งˆ์šดํŠธํ•  ์‹œ๊ฐ„์ด ์—†๋„๋ก(ControllerPublishVolume) ๋งˆ์šดํŠธ ์‹œ๋„ ์‹œ ์ฆ๊ฐ€ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๋””์Šคํฌ๊ฐ€ ์•„์ง ๋‚จ์•„ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. volumeResizeRequired ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  5. CSI ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํฌ๊ธฐ ์กฐ์ • ์ž‘์—…์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์ด ์„ฑ๊ณตํ•˜๋ฉด ๋””์Šคํฌ๋ฅผ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค. volumeResizeRequired;
  6. ์™œ๋ƒํ•˜๋ฉด ๋””์Šคํฌ ID๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. volumeResizeRequired, ControllerPublishVolume ์„ฑ๊ณต์ ์œผ๋กœ ํ†ต๊ณผํ•˜๋ฉด ๋””์Šคํฌ๊ฐ€ ๋งˆ์šดํŠธ๋˜๊ณ  ํฌ๋“œ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

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

func DefaultControllerRateLimiter() RateLimiter {
  return NewMaxOfRateLimiter(
  NewItemExponentialFailureRateLimiter(5*time.Millisecond, 1000*time.Second),
  // 10 qps, 100 bucket size.  This is only for retry speed and its only the overall factor (not per item)
  &BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(10), 100)},
  )
}

์ด๋กœ ์ธํ•ด ๋””์Šคํฌ ํ™•์žฅ ์ž‘์—…์ด ์ฃผ๊ธฐ์ ์œผ๋กœ 15๋ถ„ ์ด์ƒ ์—ฐ์žฅ๋˜์–ด ํ•ด๋‹น ํฌ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž ์žฌ์ ์ธ ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์„ ์•„์ฃผ ์‰ฝ๊ณ  ๊ณ ํ†ต ์—†์ด ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์˜ต์…˜์€ ์ตœ๋Œ€ ์‹œ๊ฐ„ ์ดˆ๊ณผ ์ œํ•œ์ด ์žˆ๋Š” ์™ธ๋ถ€ ํฌ๊ธฐ ์กฐ์ •๊ธฐ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. 5์ดˆ ์•ˆ์—:

workqueue.NewItemExponentialFailureRateLimiter(5*time.Millisecond, 5*time.Second)

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

์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋“œ๋ผ์ด๋ฒ„๋Š” Kubernetes ๋ฒ„์ „ 1.15 ์ด์ƒ์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ์šด์ „์ž๊ฐ€ ์ž‘๋™ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๊นƒ๋ฐœ --allow-privileged ๊ฐ’์œผ๋กœ ์„ค์ • true API ์„œ๋ฒ„ ๋ฐ kubelet์˜ ๊ฒฝ์šฐ;
  • ํฌํ•จ๋จ --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true API ์„œ๋ฒ„ ๋ฐ kubelet์˜ ๊ฒฝ์šฐ;
  • ๋งˆ์šดํŠธ ์ „ํŒŒ(๋งˆ์šดํŠธ ์ „ํŒŒ)์„ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Docker๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ณต์œ  ๋งˆ์šดํŠธ๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ๋ฐ๋ชฌ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ์ž์ฒด์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋‹จ๊ณ„ README์— ์„ค๋ช…๋˜์–ด ์žˆ์Œ. ์„ค์น˜์—๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ์—์„œ Kubernetes์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ž‘๋™ํ•˜๋ ค๋ฉด ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ๋””๋ ‰ํ„ฐ๋ฆฌ ์‹๋ณ„์ž๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค(folder-id) Yandex.Cloud(๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”);
  • Yandex.Cloud API์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•ด CSI ๋“œ๋ผ์ด๋ฒ„๋Š” ์„œ๋น„์Šค ๊ณ„์ •์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋งค๋‹ˆํŽ˜์ŠคํŠธ์—์„œ Secret์„ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šน์ธ๋œ ํ‚ค ์„œ๋น„์Šค ๊ณ„์ •์—์„œ. ๋ฌธ์„œ์—์„œ ์„ค๋ช…, ์„œ๋น„์Šค ๊ณ„์ •์„ ๋งŒ๋“ค๊ณ  ํ‚ค๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•.

์ „์ฒด์ ์œผ๋กœ- ์‹œ๋„ํ•˜๋‹ค, ์šฐ๋ฆฌ๋Š” ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ๊ธฐ๋ปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด!

์ถ”๊ฐ€ ์ง€์›

๊ฒฐ๊ณผ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” Go์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•˜๋Š” ์žฌ๋ฏธ๋ฅผ ๋Š๋ผ๊ณ  ์‹ถ์–ด์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ํšŒ์‚ฌ ๋‚ด ๊ธด๊ธ‰ํ•œ ํ•„์š” ๋•Œ๋ฌธ์— ์ด CSI ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค๋Š” ์ ์„ ์ง€์ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ž์ฒด ๊ตฌํ˜„์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ์‹ค์šฉ์ ์ด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ Yandex๊ฐ€ ๊ด€์‹ฌ์„ ๋ณด์ด๊ณ  ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ณ„์† ์ง€์›ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๋ฉด ์ €์žฅ์†Œ๋ฅผ ๊ธฐ๊บผ์ด ๊ทธ๋“ค์—๊ฒŒ ์ด์ „ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ Yandex๋Š” ์•„๋งˆ๋„ ๊ด€๋ฆฌํ˜• Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ์˜คํ”ˆ ์†Œ์Šค๋กœ ์ถœ์‹œ๋  ์ˆ˜ ์žˆ๋Š” CSI ๋“œ๋ผ์ด๋ฒ„์˜ ์ž์ฒด ๊ตฌํ˜„์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ์ด ๊ฐœ๋ฐœ ์˜ต์…˜์ด ์œ ๋ฆฌํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์ œXNUMX์ž ํšŒ์‚ฌ๊ฐ€ ์•„๋‹Œ ์„œ๋น„์Šค ์ œ๊ณต์—…์ฒด์˜ ์ž…์ฆ๋œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

PS

๋ธ”๋กœ๊ทธ์—์„œ๋„ ์ฝ์–ด๋ณด์„ธ์š”.

์ถœ์ฒ˜ : habr.com

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