ืื•ื ื“ื–ืขืจ ื“ืขืจืคืึทืจื•ื ื’ ืื™ืŸ ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’ ืึท CSI ื“ืจื™ื™ื•ื•ืขืจ ืื™ืŸ Kubernetes ืคึฟืึทืจ Yandex.Cloud

ืื•ื ื“ื–ืขืจ ื“ืขืจืคืึทืจื•ื ื’ ืื™ืŸ ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’ ืึท CSI ื“ืจื™ื™ื•ื•ืขืจ ืื™ืŸ Kubernetes ืคึฟืึทืจ Yandex.Cloud

ืžื™ืจ ื–ืขื ืขืŸ ืฆื•ืคืจื™ื“ืŸ ืฆื• ืžืขืœื“ืŸ ืึทื– ืคืœืึทื ื˜ ื™ืงืกืคึผืึทื ื“ื™ื“ ื–ื™ื™ืŸ ืฆื•ืฉื˜ื™ื™ึทืขืจ ืฆื• ืขืคึฟืŸ ืžืงื•ืจ ืžื›ืฉื™ืจื™ื ืคึฟืึทืจ Kubernetes ื“ื•ืจืš ืจื™ืœื™ืกื™ื ื’ ืึทืœืฃ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ CSI ืฉืึธืคืขืจ (Container Storage Interface) ืคึฟืึทืจ Yandex.Cloud.

ืึธื‘ืขืจ ืื™ื™ื“ืขืจ ืื™ืจ ืžืึทืš ืื•ื™ืฃ ืฆื• ื“ื™ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ื“ืขื˜ืึทื™ืœืก, ืœืึธื–ืŸ ืื•ื ื“ื– ืขื ื˜ืคึฟืขืจืŸ ื“ื™ ืงืฉื™ื ื•ื•ืึธืก ื“ืึธืก ืื™ื– ื‘ื›ืœืœ ื“ืืจืฃ ื•ื•ืขืŸ ื™ืึทื ื“ืขืงืก ื”ืื˜ ืฉื•ื™ืŸ ืึท ื“ื™ื ืกื˜ ื’ืขืจืื˜ืŸ ืกืขืจื•ื•ื™ืก ืคึฟืึทืจ Kubernetes.

ื”ืงื“ืžื”

ืคืืจื•ื•ืืก ืื™ื– ื“ืึธืก?

ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคื™ืจืžืข, ืคึฟื•ืŸ ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ื ื™ืฆืŸ Kubernetes ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข (ื“"ื” ืคึฟืึทืจ ืขื˜ืœืขื›ืข ื™ืึธืจืŸ ืื™ืฆื˜), ืžื™ืจ ื”ืึธื‘ืŸ ื“ืขื•ื•ืขืœืึธืคึผืขื“ ืื•ื ื“ื–ืขืจ ืื™ื™ื’ืขื ืข ื’ืขืฆื™ื™ึทื’ (ื“ืขืงื›ืึธื•ืกืข), ื•ื•ืึธืก, ื“ื•ืจืš ื“ืขื ื•ื•ืขื’, ืžื™ืจ ืื•ื™ืš ืคึผืœืึทืŸ ืฆื• ื‘ืึทืœื“ ืžืึทื›ืŸ ื‘ื ื™ืžืฆื ื•ื•ื™ ืึทืŸ ืขืคึฟืŸ ืžืงื•ืจ ืคึผืจื•ื™ืขืงื˜ . ืžื™ื˜ ื–ื™ื™ืŸ ื”ื™ืœืฃ, ืžื™ืจ ื™ื•ื ืึทืคืึธืจืžืœื™ ืงืึทื ืคื™ื’ื™ืขืจ ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจ ืึทืœืข ืื•ื ื“ื–ืขืจ ืงืœืึทืกื˜ืขืจื–, ืื•ืŸ ื“ืขืจื•ื•ื™ื™ึทืœ ืขืก ื–ืขื ืขืŸ ืžืขืจ ื•ื•ื™ 100 ืคื•ืŸ ื–ื™ื™, ืื•ื™ืฃ ืึท ื‘ืจื™ื™ื˜ ืคืึทืจืฉื™ื™ื“ื ืงื™ื™ึทื˜ ืคื•ืŸ ื™ื™ึทื–ื ื•ื•ืึทืจื’ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทื ื– ืื•ืŸ ืื™ืŸ ืึทืœืข ื‘ื ื™ืžืฆื ื•ื•ืึธืœืงืŸ ื‘ืึทื“ื™ื ื•ื ื’ืก.

ืงืœืึทืกื˜ืขืจื– ื•ื•ืึธืก ื ื•ืฆืŸ ื“ืขืงื›ืึธื•ืกืข ื”ืึธื‘ืŸ ืึทืœืข ื“ื™ ืงืึทืžืคึผืึธื•ื ืึทื ืฅ ื ื™ื™ื˜ื™ืง ืคึฟืึทืจ ืึธืคึผืขืจืึทืฆื™ืข: ื‘ืึทืœืึทื ืกืขืจื–, ืžืึธื ื™ื˜ืึธืจื™ื ื’ ืžื™ื˜ ื‘ืึทืงื•ื•ืขื ื˜ืฉืึทืจืฅ, ืžืขื˜ืจื™ืงืก ืื•ืŸ ืึทืœืขืจืฅ, ื‘ืึทื ื™ืฆืขืจ ืึธื˜ืขื ื˜ืึทืงื™ื™ืฉืึทืŸ ื“ื•ืจืš ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืคึผืจืึทื•ื•ื™ื™ื“ืขืจื– ืคึฟืึทืจ ืึทืงืกืขืก ืฆื• ืึทืœืข ื“ืึทืฉื‘ืึธืจื“ื–, ืื•ืŸ ืึทื–ื•ื™ ืื•ื™ืฃ. ืขืก ืื™ื– ืงื™ื™ืŸ ืคื•ื ื˜ ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ ืึทื–ืึท ืึท "ืคึผืึทืžืคึผื˜ ืึทืจื•ื™ืฃ" ืงื ื•ื™ืœ ืื™ืŸ ืึท ื’ืขืจืื˜ืŸ ืœื™ื™ื–ื•ื ื’, ื•ื•ื™ื™ึทืœ ื“ืึธืก ืื™ื– ืึธืคื˜ ืึธื“ืขืจ ืื•ืžืžืขื’ืœืขืš ืึธื“ืขืจ ื•ื•ืขื˜ ืคื™ืจืŸ ืฆื• ื“ื™ ื ื•ื™ื˜ื™ืง ืฆื• ื“ื™ืกื™ื™ื‘ืึทืœ ื”ืึทืœื‘ ืคื•ืŸ ื“ื™ ืงืึทืžืคึผืึธื•ื ืึทื ืฅ.

NB: ื“ืึธืก ืื™ื– ืื•ื ื“ื–ืขืจ ื“ืขืจืคืึทืจื•ื ื’, ืื•ืŸ ืขืก ืื™ื– ื’ืึทื ืฅ ืกืคึผืขืฆื™ืคื™ืฉ. ืžื™ืจ ืคึฟืึธืจืฉืœืึธื’ืŸ ืื™ืŸ ืงื™ื™ืŸ ื•ื•ืขื’ ืึทื– ืึทืœืขืžืขืŸ ื–ืึธืœ ืฆืขื•ื•ื™ืงืœืขืŸ Kubernetes ืงืœืึทืกื˜ืขืจื– ืื•ื™ืฃ ื–ื™ื™ืขืจ ืื™ื™ื’ืŸ ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ื ื™ืฆืŸ ืคืึทืจื˜ื™ืง ืกืึทืœื•ืฉืึทื ื–. ื“ื•ืจืš ื“ืขื ื•ื•ืขื’, ืžื™ืจ ื”ืึธื‘ืŸ ืงื™ื™ืŸ ืคืึทืงื˜ื™ืฉ ื“ืขืจืคืึทืจื•ื ื’ ืื™ืŸ ืึทืคึผืขืจื™ื™ื˜ื™ื ื’ Kubernetes ืคึฟื•ืŸ Yandex ืื•ืŸ ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ื’ืขื‘ืŸ ืงื™ื™ืŸ ืึทืกืขืกืžืึทื ื˜ ืคื•ืŸ ื“ืขื ื“ื™ื ืกื˜ ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ.

ื•ื•ืึธืก ืื™ื– ืขืก ืื•ืŸ ืคึฟืึทืจ ื•ื•ืขืžืขืŸ?

ืึทื–ื•ื™, ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื’ืขืจืขื“ื˜ ื•ื•ืขื’ืŸ ื“ื™ ืžืึธื“ืขืจืŸ ืฆื•ื’ืึทื ื’ ืฆื• ืกื˜ืึธืจื™ื“ื–ืฉ ืื™ืŸ Kubernetes: ื•ื•ื™ ื˜ื•ื˜ CSI ืึทืจื‘ืขื˜? ะธ ื•ื•ื™ ื“ื™ ืงื”ื™ืœื” ืื™ื– ื’ืขืงื•ืžืขืŸ ืฆื• ื“ืขื ืฆื•ื’ืึทื ื’.

ื“ืขืจื•ื•ื™ื™ึทืœ, ืคื™ืœืข ื’ืจื•ื™ืก ื•ื•ืึธืœืงืŸ ืกืขืจื•ื•ื™ืก ืคึผืจืึทื•ื•ื™ื™ื“ืขืจื– ื”ืึธื‘ืŸ ื“ืขื•ื•ืขืœืึธืคึผืขื“ ื“ืจื™ื•ื•ืขืจืก ืคึฟืึทืจ ื ื™ืฆืŸ ื–ื™ื™ืขืจ ื•ื•ืึธืœืงืŸ ื“ื™ืกืงืก ื•ื•ื™ ืคึผืขืจืกื™ืกื˜ืขื ื˜ ื‘ืื ื“ ืื™ืŸ Kubernetes. ืื•ื™ื‘ ื“ืขืจ ืกืึทืคึผืœื™ื™ืขืจ ื˜ื•ื˜ ื ื™ืฉื˜ ื”ืึธื‘ืŸ ืึทื–ืึท ืึท ืฉืึธืคืขืจ, ืึธื‘ืขืจ ืึทืœืข ื“ื™ ื ื™ื™ื˜ื™ืง ืคืึทื ื’ืงืฉืึทื ื– ื–ืขื ืขืŸ ืฆื•ื’ืขืฉื˜ืขืœื˜ ื“ื•ืจืš ื“ื™ ืึทืคึผื™, ื’ืึธืจื ื™ืฉื˜ ืคึผืจื™ื•ื•ืขื ืฅ ืื™ืจ ืคื•ืŸ ื™ืžืคึผืœืึทืžืขื ื™ื ื’ ื“ื™ ืฉืึธืคืขืจ ื–ื™ืš. ื“ืึธืก ืื™ื– ื•ื•ืึธืก ื’ืขื˜ืจืืคืŸ ืžื™ื˜ Yandex.Cloud.

ืžื™ืจ ื’ืขื ื•ืžืขืŸ ื•ื•ื™ ืึท ื™ืงืขืจ ืคึฟืึทืจ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ CSI ืฉืึธืคืขืจ ืคึฟืึทืจ ื“ื™ื’ื™ื˜ืึทืœ ืึธืกืขืึทืŸ ื•ื•ืึธืœืงืŸ ืื•ืŸ ืึท ืคึผืึธืจ ืคื•ืŸ ื’ืขื“ืื ืงืขืŸ ืคื•ืŸ ื“ืจื™ื•ื•ืขืจืก ืคึฟืึทืจ GCP, ื–ื™ื ื˜ ื™ื ื˜ืขืจืึทืงืฉืึทืŸ ืžื™ื˜ ื“ื™ ืึทืคึผื™ ืคื•ืŸ ื“ื™ ื•ื•ืืœืงื ืก (Google ืื•ืŸ ื™ืึทื ื“ืขืงืก) ื”ืื˜ ืึท ื ื•ืžืขืจ ืคื•ืŸ ืกื™ืžืึทืœืขืจืึทื˜ื™ื–. ืื™ืŸ ื‘ืึทื–ื•ื ื“ืขืจ, ื“ื™ API ืื•ืŸ ื’ืงืคึผ, ืื•ืŸ ื™ ื™ืึทื ื“ืขืงืก ืฆื•ืจื™ืงืงื•ืžืขืŸ ืึท ื›ื™ื™ืคืขืฅ Operation ืฆื• ืฉืคึผื•ืจ ื“ื™ ืกื˜ืึทื˜ื•ืก ืคื•ืŸ ืœืึทื ื’-ืœื•ื™ืคืŸ ืึทืคึผืขืจื™ื™ืฉืึทื ื– (ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืงืจื™ื™ื™ื˜ื™ื ื’ ืึท ื ื™ื™ึท ื“ื™ืกืง). ืฆื• ื™ื ื˜ืขืจืึทืงื˜ ืžื™ื˜ ื“ื™ Yandex.Cloud API, ื ื•ืฆืŸ Yandex.Cloud Go SDK.

ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ื“ื™ ืึทืจื‘ืขื˜ ื’ืขื˜ืืŸ ะพะฟัƒะฑะปะธะบะพะฒะฐะฝ ืื•ื™ืฃ GitHub ืื•ืŸ ืงืขืŸ ื–ื™ื™ืŸ ื ื•ืฆื™ืง ืคึฟืึทืจ ื™ืขื ืข ื•ื•ืึธืก, ืคึฟืึทืจ ืขื˜ืœืขื›ืข ืกื™ื‘ื”, ื ื•ืฆืŸ ื–ื™ื™ืขืจ ืื™ื™ื’ืขื ืข Kubernetes ื™ื ืกื˜ืึทืœื™ืจื•ื ื’ ืื•ื™ืฃ Yandex.Cloud ื•ื•ื™ืจื˜ื•ืึทืœ ืžืืฉื™ื ืขืŸ (ืึธื‘ืขืจ ื ื™ืฉื˜ ืึท ืคืึทืจื˜ื™ืง ื’ืขืจืื˜ืŸ ืงื ื•ื™ืœ) ืื•ืŸ ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ื ื•ืฆืŸ (ืกื“ืจ) ื“ื™ืกืงืก ื“ื•ืจืš CSI.

ื™ืžืคึผืœืขืžืขื ื˜ืึทื˜ื™ืึธืŸ

ืฉืœื™ืกืœ ืคึฟืขื™ึดืงื™ื™ื˜ืŸ

ื“ืขืจื•ื•ื™ื™ึทืœ ื“ืขืจ ืฉืึธืคืขืจ ืฉื˜ื™ืฆื˜ ื“ื™ ืคืืœื’ืขื ื“ืข ืคืึทื ื’ืงืฉืึทื ื–:

  • ืึธืจื“ืขืจื™ื ื’ ื“ื™ืกืงืก ืื™ืŸ ืึทืœืข ื–ืึธื ืขืก ืคื•ืŸ ื“ืขื ืงื ื•ื™ืœ ืœื•ื™ื˜ ื“ื™ ื˜ืึทืคึผืึทืœืึทื“ื–ืฉื™ ืคื•ืŸ ื“ื™ ื ืึธื•ื“ื– ืื™ืŸ ื“ืขื ืงื ื•ื™ืœ;
  • ืจื™ืžื•ื•ื•ื™ื ื’ ืคืจื™ืขืจ ื‘ืืคื•ื™ืœืŸ ื“ื™ืกืงืก;
  • ืึธืคืคืœื™ื ืข ืจืขืกื™ื–ืข ืคึฟืึทืจ ื“ื™ืกืงืก (Yandex.Cloud ื˜ืึธืŸ ื ื™ื˜ ืฉื˜ื™ืฆืŸ ื™ื ืงืจื™ืกื™ื ื’ ื“ื™ ื“ื™ืกืงืก ื•ื•ืึธืก ื–ืขื ืขืŸ ืžืึธื•ื ื˜ืขื“ ืฆื• ื“ื™ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ). ืคึฟืึทืจ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืื•ื™ืฃ ื•ื•ื™ ื“ื™ ืฉืึธืคืขืจ ื”ืื˜ ืฆื• ื–ื™ื™ืŸ ืžืึทื“ืึทืคื™ื™ื“ ืฆื• ืžืึทื›ืŸ ื“ื™ ืจืขืกื™ื–ื™ื ื’ ื•ื•ื™ ืคึผื™ื™ื ืœืึทืก ื•ื•ื™ ืžืขื’ืœืขืš, ื–ืขืŸ ืื•ื ื˜ืŸ.

ืื™ืŸ ื“ืขืจ ืฆื•ืงื•ื ืคึฟื˜, ืžื™ืจ ืคึผืœืึทืŸ ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ืงืจื™ื™ื™ื˜ื™ื ื’ ืื•ืŸ ื“ื™ืœื™ื˜ื™ื ื’ ื“ื™ืกืง ืกื ืึทืคึผืฉืึทืฅ.

ื“ื™ ื”ื•ื™ืคึผื˜ ืฉื•ื•ืขืจื™ืงื™ื™ื˜ ืื•ืŸ ื•ื•ื™ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืขืก

ื“ื™ ืคืขืœืŸ ืคื•ืŸ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืคืึทืจื’ืจืขืกืขืจืŸ ื“ื™ืกืงืก ืื™ืŸ ืคืึทืงื˜ื™ืฉ ืฆื™ื™ื˜ ืื™ืŸ ื“ื™ Yandex.Cloud API ืื™ื– ืึท ื‘ืึทื’ืจืขื ืขืฆื•ื ื’ ื•ื•ืึธืก ืงืึทืžืคึผืœื™ืงื™ื™ืฅ ื“ื™ ืจืขืกื™ื–ืข ืึธืคึผืขืจืึทืฆื™ืข ืคึฟืึทืจ ืคึผื•ื• (ืคึผืขืจืกื™ืกื˜ืขื ื˜ ื‘ืื ื“): ืื™ืŸ ื“ืขื ืคืึทืœ, ืขืก ืื™ื– ื ื™ื™ื˜ื™ืง ืฆื• ืกื˜ืึทืคึผื˜ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคึผืึธื“ ื•ื•ืึธืก ื ื™ืฆื˜ ื“ืขื ื“ื™ืกืง, ืื•ืŸ ื“ืึธืก ืงืขืŸ ืคืึทืจืฉืึทืคืŸ ื“ืึทื•ื ื˜ื™ื™ื ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–.

ืœื•ื™ื˜ 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. ืžื™ืจ ื–ืขื ืขืŸ ื˜ืจื™ื™ื ื’ ืฆื• ืคืึทืจื’ืจืขืกืขืจืŸ ื“ื™ ื“ื™ืกืง ืื™ืŸ ื“ื™ ืึทืคึผื™, ืึธื‘ืขืจ ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ืึท ื˜ืขื•ืช ื•ื•ืขื’ืŸ ื“ื™ ื™ืžืคึผืึธืกื™ื‘ื™ืœื™ื˜ื™ ืคื•ืŸ ื“ื•ืจื›ืคื™ืจืŸ ื“ื™ ืึธืคึผืขืจืึทืฆื™ืข ื•ื•ื™ื™ึทืœ ื“ื™ ื“ื™ืกืง ืื™ื– ืžืึธื•ื ื˜ืขื“;
  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 ืื•ืŸ ื”ืขื›ืขืจ. ืคึฟืึทืจ ื“ืขืจ ืฉืึธืคืขืจ ืฆื• ืึทืจื‘ืขื˜ืŸ, ื“ื™ ืคืืœื’ืขื ื“ืข ื‘ืื“ืขืจืคืขื ื™ืฉืŸ ืžื•ื–ืŸ ื–ื™ื™ืŸ ื‘ืื’ืขื’ื ื˜:

  • Flag --allow-privileged ืฉื˜ืขืœืŸ ืฆื• ื•ื•ืขืจื˜ true ืคึฟืึทืจ ืึทืคึผื™ ืกืขืจื•ื•ืขืจ ืื•ืŸ ืงื•ื‘ืขืœืขื˜;
  • ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true ืคึฟืึทืจ ืึทืคึผื™ ืกืขืจื•ื•ืขืจ ืื•ืŸ ืงื•ื‘ืขืœืขื˜;
  • ื‘ืืจื’ ืคึผืจืึทืคึผืึทื’ื™ื™ืฉืึทืŸ (ืึธื ืงืœืึทืคึผืŸ ืคึผืจืึทืคึผืึทื’ื™ื™ืฉืึทืŸ) ืžื•ื–ืŸ ื–ื™ื™ืŸ ืขื ื™ื™ื‘ืึทืœื“ ืื•ื™ืฃ ื“ืขื ืงื ื•ื™ืœ. ื•ื•ืขืŸ ืื™ืจ ื ื•ืฆืŸ ื“ืึธืงืขืจ, ื“ื™ ื“ื™ื™ืžืึทืŸ ืžื•ื–ืŸ ื–ื™ื™ืŸ ืงืึทื ืคื™ื’ื™ืขืจื“ ืฆื• ืœืึธื–ืŸ ืฉืขืจื“ ืžืึทื•ื ืฅ.

ืึทืœืข ื“ื™ ื ื™ื™ื˜ื™ืง ืกื˜ืขืคึผืก ืคึฟืึทืจ ื“ื™ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’ ื–ื™ืš ื“ื™ืกืงืจื™ื™ื‘ื“ ืื™ืŸ README. ื™ื™ึทื ืžืึธื ื˜ื™ืจื•ื ื’ ื™ื ื•ื•ืึทืœื•ื•ื– ืงืจื™ื™ื™ื˜ื™ื ื’ ืึทื‘ื“ื–ืฉืขืงืฅ ืื™ืŸ Kubernetes ืคึฟื•ืŸ ืžืึทื ื™ืคืขืกืฅ.

ืคึฟืึทืจ ื“ื™ ืฉืึธืคืขืจ ืฆื• ืึทืจื‘ืขื˜ืŸ ืื™ืจ ื•ื•ืขื˜ ื“ืึทืจืคึฟืŸ ื“ื™ ืคืืœื’ืขื ื“ืข:

  • ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ื™ื“ืขื ื˜ื™ืคื™ืขืจ ืื™ืŸ ื“ื™ ืžืึทื ืึทืคืขืกื˜ื™ื™ืฉืึทืŸ (folder-id) Yandex.Cloud (ื–ืขืŸ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ);
  • ืฆื• ื™ื ื˜ืขืจืึทืงื˜ ืžื™ื˜ ื“ื™ Yandex.Cloud API, ื“ื™ CSI ืฉืึธืคืขืจ ื ื™ืฆื˜ ืึท ืกืขืจื•ื•ื™ืก ื—ืฉื‘ื•ืŸ. ืื™ืŸ ื“ื™ ืžืึทื ืึทืคืขืกื˜ื™ื™ืฉืึทืŸ, ืกื•ื“ ืžื•ื–ืŸ ื–ื™ื™ืŸ ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ืึธื˜ืขืจื™ื™ื–ื“ ืฉืœื™ืกืœืขืŸ ืคื•ืŸ ื“ื™ ืกืขืจื•ื•ื™ืก ื—ืฉื‘ื•ืŸ. ืื™ืŸ ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ื“ื™ืกืงืจื™ื™ื‘ื“, ื•ื•ื™ ืฆื• ืฉืึทืคึฟืŸ ืึท ืกืขืจื•ื•ื™ืก ื—ืฉื‘ื•ืŸ ืื•ืŸ ื‘ืึทืงื•ืžืขืŸ ืฉืœื™ืกืœืขืŸ.

ืกืš ื”ื›ืœ โ€” ืคึผืจื•ื‘ื™ืจืŸ, ืื•ืŸ ืžื™ืจ ื•ื•ืขืœืŸ ื–ื™ื™ืŸ ืฆื•ืคืจื™ื“ืŸ ืฆื• ื‘ืึทืงื•ืžืขืŸ ื‘ืึทืžืขืจืงื•ื ื’ืขืŸ ืื•ืŸ ื ื™ื™ืข ื™ืฉื•ื–ืื•ื™ื‘ ืื™ืจ ื˜ืจืขืคืŸ ืงื™ื™ืŸ ืคืจืื‘ืœืขืžืขืŸ!

ื•ื•ื™ื™ึทื˜ืขืจ ืฉื˜ื™ืฆืŸ

ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ืžื™ืจ ื•ื•ืึธืœื˜ ื•ื•ื™ ืฆื• ื˜ืึธืŸ ืึทื– ืžื™ืจ ื™ืžืคึผืœืึทืžืขื ืึทื“ ื“ืขื CSI ืฉืึธืคืขืจ ื ื™ื˜ ืคึฟื•ืŸ ืึท ื’ืจื•ื™ืก ืคืึทืจืœืึทื ื’ ืฆื• ื”ืึธื‘ืŸ ืฉืคึผืึทืก ืžื™ื˜ ืฉืจื™ื™ื‘ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื™ืŸ Go, ืึธื‘ืขืจ ื•ื•ื™ื™ึทืœ ืคื•ืŸ ืึท ื“ืจื™ื ื’ืœืขืš ื ื•ื™ื˜ ืื™ืŸ ื“ื™ ืคื™ืจืžืข. ืขืก ืื™ื– ื ื™ืฉื˜ ืคึผืจืึทืงื˜ื™ืฉ ืคึฟืึทืจ ืื•ื ื“ื– ืฆื• ื”ืึทืœื˜ืŸ ืื•ื ื“ื–ืขืจ ืื™ื™ื’ืขื ืข ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ, ืึทื–ื•ื™ ืื•ื™ื‘ ื™ืึทื ื“ืขืงืก ื•ื•ื™ื™ึทื–ืŸ ืื™ื ื˜ืขืจืขืก ืื•ืŸ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืคืึธืจื–ืขืฆืŸ ืฆื• ืฉื˜ื™ืฆืŸ ื“ื™ ืฉืึธืคืขืจ, ืžื™ืจ ื•ื•ืขืœืŸ ื–ื™ื™ืŸ ืฆื•ืคืจื™ื“ืŸ ืฆื• ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืฆื• ื–ื™ื™.

ืื™ืŸ ืึทื“ื™ืฉืึทืŸ, ื™ืึทื ื“ืขืงืก ืžื™ืกื˜ืึธืžืข ื”ืื˜ ื–ื™ื™ืŸ ืื™ื™ื’ืขื ืข ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ CSI ืฉืึธืคืขืจ ืื™ืŸ ื–ื™ื™ืŸ ื’ืขืจืื˜ืŸ Kubernetes ืงื ื•ื™ืœ, ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืจืขืœืขืึทืกืขื“ ืื™ืŸ ืขืคึฟืŸ ืžืงื•ืจ. ืžื™ืจ ืื•ื™ืš ื–ืขืŸ ื“ืขื ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืึธืคึผืฆื™ืข ื•ื•ื™ ื’ื™ื ืฆื™ืง - ื“ื™ ืงื”ืœ ื•ื•ืขื˜ ืงืขื ืขืŸ ืฆื• ื ื•ืฆืŸ ืึท ืคึผืจืึธื•ื•ืขืŸ ืฉืึธืคืขืจ ืคื•ืŸ ืึท ืกืขืจื•ื•ื™ืก ืฉืคึผื™ื™ึทื–ืขืจ, ืื•ืŸ ื ื™ืฉื˜ ืคื•ืŸ ืึท ื“ืจื™ื˜-ืคึผืึทืจื˜ื™ื™ ืคื™ืจืžืข.

ืคึผืก

ืœื™ื™ืขื ืขืŸ ืื•ื™ืš ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ื‘ืœืึธื’:

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’