Yandex.Cloud ಗಾಗಿ Kubernetes ನಲ್ಲಿ CSI ಡ್ರೈವರ್ ಅನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುವಲ್ಲಿ ನಮ್ಮ ಅನುಭವ

Yandex.Cloud ಗಾಗಿ Kubernetes ನಲ್ಲಿ CSI ಡ್ರೈವರ್ ಅನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುವಲ್ಲಿ ನಮ್ಮ ಅನುಭವ

ಬಿಡುಗಡೆ ಮಾಡುವ ಮೂಲಕ ಕುಬರ್ನೆಟ್ಸ್‌ಗಾಗಿ ಓಪನ್ ಸೋರ್ಸ್ ಪರಿಕರಗಳಿಗೆ ಫ್ಲಾಂಟ್ ತನ್ನ ಕೊಡುಗೆಯನ್ನು ವಿಸ್ತರಿಸುತ್ತಿದೆ ಎಂದು ಘೋಷಿಸಲು ನಾವು ಸಂತೋಷಪಡುತ್ತೇವೆ CSI ಡ್ರೈವರ್‌ನ ಆಲ್ಫಾ ಆವೃತ್ತಿ Yandex.Cloud ಗಾಗಿ (ಕಂಟೇನರ್ ಸ್ಟೋರೇಜ್ ಇಂಟರ್ಫೇಸ್).

ಆದರೆ ಅನುಷ್ಠಾನದ ವಿವರಗಳಿಗೆ ತೆರಳುವ ಮೊದಲು, ಯಾಂಡೆಕ್ಸ್ ಈಗಾಗಲೇ ಸೇವೆಯನ್ನು ಹೊಂದಿರುವಾಗ ಇದು ಏಕೆ ಬೇಕು ಎಂಬ ಪ್ರಶ್ನೆಗೆ ಉತ್ತರಿಸೋಣ. ಕುಬರ್ನೆಟ್ಸ್ಗಾಗಿ ನಿರ್ವಹಿಸಲಾದ ಸೇವೆ.

ಪರಿಚಯ

ಇದು ಯಾಕೆ?

ನಮ್ಮ ಕಂಪನಿಯೊಳಗೆ, ಉತ್ಪಾದನೆಯಲ್ಲಿ ಕುಬರ್ನೆಟ್ ಅನ್ನು ಬಳಸುವ ಪ್ರಾರಂಭದಿಂದಲೂ (ಅಂದರೆ ಈಗ ಹಲವಾರು ವರ್ಷಗಳಿಂದ), ನಾವು ನಮ್ಮದೇ ಆದ ಸಾಧನವನ್ನು (ಡೆಕ್‌ಹೌಸ್) ಅಭಿವೃದ್ಧಿಪಡಿಸುತ್ತಿದ್ದೇವೆ, ಅದು ಮೂಲಕ, ನಾವು ಶೀಘ್ರದಲ್ಲೇ ಓಪನ್ ಸೋರ್ಸ್ ಯೋಜನೆಯಾಗಿ ಲಭ್ಯವಾಗುವಂತೆ ಯೋಜಿಸಿದ್ದೇವೆ. . ಅದರ ಸಹಾಯದಿಂದ, ನಾವು ನಮ್ಮ ಎಲ್ಲಾ ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಏಕರೂಪವಾಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡುತ್ತೇವೆ ಮತ್ತು ಕಾನ್ಫಿಗರ್ ಮಾಡುತ್ತೇವೆ ಮತ್ತು ಪ್ರಸ್ತುತ ಅವುಗಳಲ್ಲಿ 100 ಕ್ಕಿಂತ ಹೆಚ್ಚು ಇವೆ, ವಿವಿಧ ರೀತಿಯ ಹಾರ್ಡ್‌ವೇರ್ ಕಾನ್ಫಿಗರೇಶನ್‌ಗಳಲ್ಲಿ ಮತ್ತು ಲಭ್ಯವಿರುವ ಎಲ್ಲಾ ಕ್ಲೌಡ್ ಸೇವೆಗಳಲ್ಲಿ.

ಡೆಕ್‌ಹೌಸ್ ಅನ್ನು ಬಳಸುವ ಕ್ಲಸ್ಟರ್‌ಗಳು ಕಾರ್ಯಾಚರಣೆಗೆ ಅಗತ್ಯವಾದ ಎಲ್ಲಾ ಘಟಕಗಳನ್ನು ಹೊಂದಿವೆ: ಬ್ಯಾಲೆನ್ಸರ್‌ಗಳು, ಅನುಕೂಲಕರ ಚಾರ್ಟ್‌ಗಳೊಂದಿಗೆ ಮೇಲ್ವಿಚಾರಣೆ, ಮೆಟ್ರಿಕ್‌ಗಳು ಮತ್ತು ಎಚ್ಚರಿಕೆಗಳು, ಎಲ್ಲಾ ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌ಗಳಿಗೆ ಪ್ರವೇಶಕ್ಕಾಗಿ ಬಾಹ್ಯ ಪೂರೈಕೆದಾರರ ಮೂಲಕ ಬಳಕೆದಾರರ ದೃಢೀಕರಣ, ಇತ್ಯಾದಿ. ನಿರ್ವಹಿಸಿದ ದ್ರಾವಣದಲ್ಲಿ ಅಂತಹ "ಪಂಪ್ಡ್ ಅಪ್" ಕ್ಲಸ್ಟರ್ ಅನ್ನು ಸ್ಥಾಪಿಸುವುದರಲ್ಲಿ ಯಾವುದೇ ಅರ್ಥವಿಲ್ಲ, ಏಕೆಂದರೆ ಇದು ಸಾಮಾನ್ಯವಾಗಿ ಅಸಾಧ್ಯವಾಗಿದೆ ಅಥವಾ ಅರ್ಧದಷ್ಟು ಘಟಕಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವ ಅಗತ್ಯಕ್ಕೆ ಕಾರಣವಾಗುತ್ತದೆ.

NB: ಇದು ನಮ್ಮ ಅನುಭವ, ಮತ್ತು ಇದು ಸಾಕಷ್ಟು ನಿರ್ದಿಷ್ಟವಾಗಿದೆ. ರೆಡಿಮೇಡ್ ಪರಿಹಾರಗಳನ್ನು ಬಳಸುವ ಬದಲು ಪ್ರತಿಯೊಬ್ಬರೂ ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್‌ಗಳನ್ನು ಸ್ವಂತವಾಗಿ ನಿಯೋಜಿಸಬೇಕೆಂದು ನಾವು ಯಾವುದೇ ರೀತಿಯಲ್ಲಿ ಸೂಚಿಸುತ್ತಿಲ್ಲ. ಮೂಲಕ, ಯಾಂಡೆಕ್ಸ್‌ನಿಂದ ಕುಬರ್ನೆಟ್ಸ್ ಅನ್ನು ನಿರ್ವಹಿಸುವಲ್ಲಿ ನಮಗೆ ಯಾವುದೇ ನೈಜ ಅನುಭವವಿಲ್ಲ ಮತ್ತು ಈ ಲೇಖನದಲ್ಲಿ ನಾವು ಈ ಸೇವೆಯ ಯಾವುದೇ ಮೌಲ್ಯಮಾಪನವನ್ನು ನೀಡುವುದಿಲ್ಲ.

ಅದು ಏನು ಮತ್ತು ಯಾರಿಗೆ?

ಆದ್ದರಿಂದ, ಕುಬರ್ನೆಟ್ಸ್ನಲ್ಲಿ ಶೇಖರಣೆಗೆ ಆಧುನಿಕ ವಿಧಾನದ ಬಗ್ಗೆ ನಾವು ಈಗಾಗಲೇ ಮಾತನಾಡಿದ್ದೇವೆ: CSI ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ? и ಸಮುದಾಯ ಹೇಗೆ ಬಂದಿತು ಈ ವಿಧಾನಕ್ಕೆ.

ಪ್ರಸ್ತುತ, ಅನೇಕ ದೊಡ್ಡ ಕ್ಲೌಡ್ ಸೇವಾ ಪೂರೈಕೆದಾರರು ತಮ್ಮ ಕ್ಲೌಡ್ ಡಿಸ್ಕ್ಗಳನ್ನು ಕುಬರ್ನೆಟ್ಸ್ನಲ್ಲಿ ಪರ್ಸಿಸ್ಟೆಂಟ್ ವಾಲ್ಯೂಮ್ ಆಗಿ ಬಳಸುವುದಕ್ಕಾಗಿ ಡ್ರೈವರ್ಗಳನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸಿದ್ದಾರೆ. ಸರಬರಾಜುದಾರರು ಅಂತಹ ಚಾಲಕವನ್ನು ಹೊಂದಿಲ್ಲದಿದ್ದರೆ, ಆದರೆ ಎಲ್ಲಾ ಅಗತ್ಯ ಕಾರ್ಯಗಳನ್ನು API ಮೂಲಕ ಒದಗಿಸಿದರೆ, ಚಾಲಕವನ್ನು ನೀವೇ ಕಾರ್ಯಗತಗೊಳಿಸುವುದರಿಂದ ಏನೂ ನಿಮ್ಮನ್ನು ತಡೆಯುವುದಿಲ್ಲ. ಇದು Yandex.Cloud ನಲ್ಲಿ ಏನಾಯಿತು.

ನಾವು ಅಭಿವೃದ್ಧಿಗೆ ಆಧಾರವಾಗಿ ತೆಗೆದುಕೊಂಡಿದ್ದೇವೆ DigitalOcean ಕ್ಲೌಡ್‌ಗಾಗಿ CSI ಚಾಲಕ ಮತ್ತು ಒಂದೆರಡು ವಿಚಾರಗಳು GCP ಗಾಗಿ ಚಾಲಕರು, ಈ ಮೋಡಗಳ (ಗೂಗಲ್ ಮತ್ತು ಯಾಂಡೆಕ್ಸ್) API ಯೊಂದಿಗಿನ ಪರಸ್ಪರ ಕ್ರಿಯೆಯು ಹಲವಾರು ಹೋಲಿಕೆಗಳನ್ನು ಹೊಂದಿದೆ. ನಿರ್ದಿಷ್ಟವಾಗಿ, API ಮತ್ತು ಜಿಸಿಪಿ, ಮತ್ತು ನಲ್ಲಿ ಯಾಂಡೆಕ್ಸ್ ವಸ್ತುವನ್ನು ಹಿಂತಿರುಗಿ Operation ದೀರ್ಘಾವಧಿಯ ಕಾರ್ಯಾಚರಣೆಗಳ ಸ್ಥಿತಿಯನ್ನು ಪತ್ತೆಹಚ್ಚಲು (ಉದಾಹರಣೆಗೆ, ಹೊಸ ಡಿಸ್ಕ್ ಅನ್ನು ರಚಿಸುವುದು). Yandex.Cloud API ನೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸಲು, ಬಳಸಿ Yandex.Cloud Go SDK.

ಮಾಡಿದ ಕೆಲಸದ ಫಲಿತಾಂಶ GitHub ನಲ್ಲಿ ಪ್ರಕಟಿಸಲಾಗಿದೆ ಮತ್ತು ಕೆಲವು ಕಾರಣಗಳಿಗಾಗಿ, Yandex.Cloud ವರ್ಚುವಲ್ ಗಣಕಗಳಲ್ಲಿ ತಮ್ಮದೇ ಆದ ಕುಬರ್ನೆಟ್ ಸ್ಥಾಪನೆಯನ್ನು ಬಳಸುವವರಿಗೆ (ಆದರೆ ಸಿದ್ಧ-ನಿರ್ವಹಿಸಿದ ಕ್ಲಸ್ಟರ್ ಅಲ್ಲ) ಮತ್ತು 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 ಪ್ಲಗಿನ್ ಸ್ವತಃ ಕುಬರ್ನೆಟ್ಸ್ API ನೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸುವುದಿಲ್ಲ, ಆದರೆ ಸೈಡ್‌ಕಾರ್ ಕಂಟೈನರ್‌ಗಳಿಂದ ಕಳುಹಿಸಲಾದ gRPC ಕರೆಗಳಿಗೆ ಮಾತ್ರ ಪ್ರತಿಕ್ರಿಯಿಸುತ್ತದೆ. ಇತ್ತೀಚಿನ ಅಭಿವೃದ್ಧಿಪಡಿಸಲಾಗುತ್ತಿದೆ ಕುಬರ್ನೆಟ್ಸ್ ಸಮುದಾಯದಿಂದ.

ನಮ್ಮ ಸಂದರ್ಭದಲ್ಲಿ (CSI ಪ್ಲಗಿನ್), ಡಿಸ್ಕ್ ಅನ್ನು ಹೆಚ್ಚಿಸುವ ಕಾರ್ಯಾಚರಣೆಯು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:

  1. ನಾವು gRPC ಕರೆಯನ್ನು ಸ್ವೀಕರಿಸುತ್ತೇವೆ ControllerExpandVolume;
  2. ನಾವು API ನಲ್ಲಿ ಡಿಸ್ಕ್ ಅನ್ನು ಹೆಚ್ಚಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದ್ದೇವೆ, ಆದರೆ ಡಿಸ್ಕ್ ಅನ್ನು ಆರೋಹಿಸಲಾಗಿರುವುದರಿಂದ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ನಿರ್ವಹಿಸುವ ಅಸಾಧ್ಯತೆಯ ಬಗ್ಗೆ ನಾವು ದೋಷವನ್ನು ಸ್ವೀಕರಿಸುತ್ತೇವೆ;
  3. ನಾವು ಡಿಸ್ಕ್ ಐಡೆಂಟಿಫೈಯರ್ ಅನ್ನು ಮ್ಯಾಪ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸುತ್ತೇವೆ, ಇದರಲ್ಲಿ ಹೆಚ್ಚಳ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ನಿರ್ವಹಿಸಬೇಕಾದ ಡಿಸ್ಕ್‌ಗಳಿವೆ. ಕೆಳಗೆ, ಸಂಕ್ಷಿಪ್ತತೆಗಾಗಿ, ನಾವು ಈ ನಕ್ಷೆಯನ್ನು ಹೀಗೆ ಕರೆಯುತ್ತೇವೆ volumeResizeRequired;
  4. ಡಿಸ್ಕ್ ಅನ್ನು ಬಳಸುತ್ತಿರುವ ಪಾಡ್ ಅನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ತೆಗೆದುಹಾಕಿ. ಕುಬರ್ನೆಟ್ಸ್ ಅದನ್ನು ಮರುಪ್ರಾರಂಭಿಸುತ್ತಾರೆ. ಆದ್ದರಿಂದ ಡಿಸ್ಕ್ ಅನ್ನು ಆರೋಹಿಸಲು ಸಮಯವಿಲ್ಲ (ControllerPublishVolume) ಆರೋಹಿಸಲು ಪ್ರಯತ್ನಿಸುವಾಗ ಹೆಚ್ಚಳದ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸುವ ಮೊದಲು, ನೀಡಿರುವ ಡಿಸ್ಕ್ ಇನ್ನೂ ಇದೆಯೇ ಎಂದು ನಾವು ಪರಿಶೀಲಿಸುತ್ತೇವೆ volumeResizeRequired ಮತ್ತು ದೋಷವನ್ನು ಹಿಂತಿರುಗಿಸಿ;
  5. CSI ಚಾಲಕವು ಮರುಗಾತ್ರಗೊಳಿಸುವ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಮರು-ಕಾರ್ಯಗತಗೊಳಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ. ಕಾರ್ಯಾಚರಣೆ ಯಶಸ್ವಿಯಾದರೆ, ಡಿಸ್ಕ್ ಅನ್ನು ತೆಗೆದುಹಾಕಿ volumeResizeRequired;
  6. ಏಕೆಂದರೆ ಡಿಸ್ಕ್ ಐಡಿ ಕಾಣೆಯಾಗಿದೆ 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)

ತುರ್ತಾಗಿ ಚರ್ಚೆಯನ್ನು ಪ್ರಾರಂಭಿಸುವುದು ಮತ್ತು ಬಾಹ್ಯ-ರೀಸೈಜರ್ ಅನ್ನು ಪ್ಯಾಚ್ ಮಾಡುವುದು ಅಗತ್ಯವೆಂದು ನಾವು ಪರಿಗಣಿಸಲಿಲ್ಲ, ಏಕೆಂದರೆ ಡಿಸ್ಕ್‌ಗಳ ಆಫ್‌ಲೈನ್ ಮರುಗಾತ್ರಗೊಳಿಸುವಿಕೆಯು ಥ್ರೋಬ್ಯಾಕ್ ಆಗಿದ್ದು ಅದು ಶೀಘ್ರದಲ್ಲೇ ಎಲ್ಲಾ ಕ್ಲೌಡ್ ಪೂರೈಕೆದಾರರಿಂದ ಕಣ್ಮರೆಯಾಗುತ್ತದೆ.

ಬಳಸಲು ಪ್ರಾರಂಭಿಸುವುದು ಹೇಗೆ?

ಚಾಲಕವು ಕುಬರ್ನೆಟ್ಸ್ ಆವೃತ್ತಿ 1.15 ಮತ್ತು ಹೆಚ್ಚಿನದರಲ್ಲಿ ಬೆಂಬಲಿತವಾಗಿದೆ. ಚಾಲಕ ಕೆಲಸ ಮಾಡಲು, ಈ ಕೆಳಗಿನ ಅವಶ್ಯಕತೆಗಳನ್ನು ಪೂರೈಸಬೇಕು:

  • ಧ್ವಜ --allow-privileged ಮೌಲ್ಯಕ್ಕೆ ಹೊಂದಿಸಲಾಗಿದೆ true API ಸರ್ವರ್ ಮತ್ತು ಕುಬೆಲೆಟ್‌ಗಾಗಿ;
  • ಒಳಗೊಂಡಿತ್ತು --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true API ಸರ್ವರ್ ಮತ್ತು ಕುಬೆಲೆಟ್‌ಗಾಗಿ;
  • ಆರೋಹಣ ಪ್ರಸರಣ (ಆರೋಹಣ ಪ್ರಸರಣ) ಕ್ಲಸ್ಟರ್‌ನಲ್ಲಿ ಸಕ್ರಿಯಗೊಳಿಸಬೇಕು. ಡಾಕರ್ ಅನ್ನು ಬಳಸುವಾಗ, ಹಂಚಿದ ಆರೋಹಣಗಳನ್ನು ಅನುಮತಿಸಲು ಡೀಮನ್ ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಬೇಕು.

ಅನುಸ್ಥಾಪನೆಗೆ ಅಗತ್ಯವಿರುವ ಎಲ್ಲಾ ಹಂತಗಳು ಸ್ವತಃ README ನಲ್ಲಿ ವಿವರಿಸಲಾಗಿದೆ. ಅನುಸ್ಥಾಪನೆಯು ಮ್ಯಾನಿಫೆಸ್ಟ್‌ಗಳಿಂದ ಕುಬರ್ನೆಟ್ಸ್‌ನಲ್ಲಿ ವಸ್ತುಗಳನ್ನು ರಚಿಸುವುದನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.

ಚಾಲಕ ಕೆಲಸ ಮಾಡಲು ನಿಮಗೆ ಈ ಕೆಳಗಿನವುಗಳು ಬೇಕಾಗುತ್ತವೆ:

  • ಮ್ಯಾನಿಫೆಸ್ಟ್‌ನಲ್ಲಿ ಡೈರೆಕ್ಟರಿ ಐಡೆಂಟಿಫೈಯರ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿ (folder-id) Yandex.Cloud (ದಸ್ತಾವೇಜನ್ನು ನೋಡಿ);
  • Yandex.Cloud API ನೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸಲು, CSI ಡ್ರೈವರ್ ಸೇವಾ ಖಾತೆಯನ್ನು ಬಳಸುತ್ತದೆ. ಮ್ಯಾನಿಫೆಸ್ಟ್ನಲ್ಲಿ, ರಹಸ್ಯವನ್ನು ರವಾನಿಸಬೇಕು ಅಧಿಕೃತ ಕೀಲಿಗಳು ಸೇವಾ ಖಾತೆಯಿಂದ. ದಾಖಲಾತಿಯಲ್ಲಿ ವಿವರಿಸಲಾಗಿದೆ, ಸೇವಾ ಖಾತೆಯನ್ನು ಹೇಗೆ ರಚಿಸುವುದು ಮತ್ತು ಕೀಗಳನ್ನು ಪಡೆಯುವುದು ಹೇಗೆ.

ಒಟ್ಟಾರೆ - ಪ್ರಯತ್ನಿಸಿ, ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಸ್ವೀಕರಿಸಲು ನಾವು ಸಂತೋಷಪಡುತ್ತೇವೆ ಮತ್ತು ಹೊಸ ಸಮಸ್ಯೆಗಳುನೀವು ಯಾವುದೇ ಸಮಸ್ಯೆಗಳನ್ನು ಎದುರಿಸಿದರೆ!

ಮತ್ತಷ್ಟು ಬೆಂಬಲ

ಇದರ ಪರಿಣಾಮವಾಗಿ, ನಾವು ಈ CSI ಡ್ರೈವರ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಿರುವುದು Go ನಲ್ಲಿ ಮೋಜಿನ ಬರವಣಿಗೆಯ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಹೊಂದುವ ಅಪೇಕ್ಷೆಯಿಂದಲ್ಲ, ಆದರೆ ಕಂಪನಿಯೊಳಗೆ ತುರ್ತು ಅಗತ್ಯದ ಕಾರಣದಿಂದ ಎಂದು ನಾವು ಗಮನಿಸಲು ಬಯಸುತ್ತೇವೆ. ನಮ್ಮ ಸ್ವಂತ ಅನುಷ್ಠಾನವನ್ನು ನಿರ್ವಹಿಸಲು ನಮಗೆ ಪ್ರಾಯೋಗಿಕವಾಗಿ ತೋರುತ್ತಿಲ್ಲ, ಆದ್ದರಿಂದ Yandex ಆಸಕ್ತಿಯನ್ನು ತೋರಿಸಿದರೆ ಮತ್ತು ಚಾಲಕವನ್ನು ಬೆಂಬಲಿಸುವುದನ್ನು ಮುಂದುವರಿಸಲು ನಿರ್ಧರಿಸಿದರೆ, ಅವರಿಗೆ ರೆಪೊಸಿಟರಿಯನ್ನು ವರ್ಗಾಯಿಸಲು ನಾವು ಸಂತೋಷಪಡುತ್ತೇವೆ.

ಹೆಚ್ಚುವರಿಯಾಗಿ, Yandex ಬಹುಶಃ ಅದರ ನಿರ್ವಹಿಸಿದ ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್‌ನಲ್ಲಿ CSI ಡ್ರೈವರ್‌ನ ತನ್ನದೇ ಆದ ಅನುಷ್ಠಾನವನ್ನು ಹೊಂದಿದೆ, ಅದನ್ನು ಮುಕ್ತ ಮೂಲದಲ್ಲಿ ಬಿಡುಗಡೆ ಮಾಡಬಹುದು. ನಾವು ಈ ಅಭಿವೃದ್ಧಿ ಆಯ್ಕೆಯನ್ನು ಅನುಕೂಲಕರವಾಗಿ ನೋಡುತ್ತೇವೆ - ಸಮುದಾಯವು ಸೇವಾ ಪೂರೈಕೆದಾರರಿಂದ ಸಾಬೀತಾದ ಚಾಲಕವನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ ಮತ್ತು ಮೂರನೇ ವ್ಯಕ್ತಿಯ ಕಂಪನಿಯಿಂದಲ್ಲ.

ಪಿಎಸ್

ನಮ್ಮ ಬ್ಲಾಗ್‌ನಲ್ಲಿಯೂ ಓದಿ:

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ