ಡೌನ್‌ಟೈಮ್ ಇಲ್ಲದೆ ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್ ಅನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ

ಡೌನ್‌ಟೈಮ್ ಇಲ್ಲದೆ ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್ ಅನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ

ನಿಮ್ಮ ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್‌ಗಾಗಿ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಅಪ್‌ಗ್ರೇಡ್ ಮಾಡಿ

ಕೆಲವು ಹಂತದಲ್ಲಿ, ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್ ಅನ್ನು ಬಳಸುವಾಗ, ಚಾಲನೆಯಲ್ಲಿರುವ ನೋಡ್ಗಳನ್ನು ನವೀಕರಿಸುವ ಅವಶ್ಯಕತೆಯಿದೆ. ಇದು ಪ್ಯಾಕೇಜ್ ನವೀಕರಣಗಳು, ಕರ್ನಲ್ ನವೀಕರಣಗಳು ಅಥವಾ ಹೊಸ ವರ್ಚುವಲ್ ಯಂತ್ರ ಚಿತ್ರಗಳ ನಿಯೋಜನೆಯನ್ನು ಒಳಗೊಂಡಿರಬಹುದು. ಕುಬರ್ನೆಟ್ಸ್ ಪರಿಭಾಷೆಯಲ್ಲಿ ಇದನ್ನು ಕರೆಯಲಾಗುತ್ತದೆ "ಸ್ವಯಂಪ್ರೇರಿತ ಅಡ್ಡಿ".

ಈ ಪೋಸ್ಟ್ 4-ಪೋಸ್ಟ್ ಸರಣಿಯ ಭಾಗವಾಗಿದೆ:

  1. ಈ ಪೋಸ್ಟ್.
  2. ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್‌ನಲ್ಲಿ ಪಾಡ್‌ಗಳ ಸರಿಯಾದ ಸ್ಥಗಿತಗೊಳಿಸುವಿಕೆ
  3. ಪಾಡ್ ಅನ್ನು ಅಳಿಸಿದಾಗ ಅದನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ವಿಳಂಬವಾಗುತ್ತದೆ
  4. PodDisruptionBudgets ಬಳಸಿಕೊಂಡು ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್ ಡೌನ್‌ಟೈಮ್ ಅನ್ನು ತಪ್ಪಿಸುವುದು ಹೇಗೆ

(ಸುಮಾರು. ಮುಂದಿನ ದಿನಗಳಲ್ಲಿ ಸರಣಿಯಲ್ಲಿ ಉಳಿದಿರುವ ಲೇಖನಗಳ ಅನುವಾದಗಳನ್ನು ನಿರೀಕ್ಷಿಸಿ)

ಈ ಲೇಖನದಲ್ಲಿ, ನಿಮ್ಮ ಕ್ಲಸ್ಟರ್‌ನಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವ ನೋಡ್‌ಗಳಿಗೆ ಶೂನ್ಯ ಅಲಭ್ಯತೆಯನ್ನು ಸಾಧಿಸಲು ಕುಬರ್ನೆಟ್ಸ್ ಒದಗಿಸುವ ಎಲ್ಲಾ ಸಾಧನಗಳನ್ನು ನಾವು ವಿವರಿಸುತ್ತೇವೆ.

ಸಮಸ್ಯೆಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವುದು

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

ನಮ್ಮ ಪ್ರಯಾಣವನ್ನು ಪ್ರಾರಂಭಿಸಲು, ನಾವು ಒಂದು ನಿರ್ದಿಷ್ಟ ಉದಾಹರಣೆಯನ್ನು ತೆಗೆದುಕೊಳ್ಳೋಣ. ನಾವು ಎರಡು ನೋಡ್‌ಗಳ ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್ ಅನ್ನು ಹೊಂದಿದ್ದೇವೆ ಎಂದು ಹೇಳೋಣ, ಅದರ ಹಿಂದೆ ಎರಡು ಪಾಡ್‌ಗಳೊಂದಿಗೆ ಅಪ್ಲಿಕೇಶನ್ ಚಾಲನೆಯಲ್ಲಿದೆ. Service:

ಡೌನ್‌ಟೈಮ್ ಇಲ್ಲದೆ ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್ ಅನ್ನು ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ

ನಮ್ಮ ಎರಡು ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್ ನೋಡ್‌ಗಳಲ್ಲಿ Nginx ಮತ್ತು ಸೇವೆ ಚಾಲನೆಯಲ್ಲಿರುವ ಎರಡು ಪಾಡ್‌ಗಳೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸೋಣ.

ನಮ್ಮ ಕ್ಲಸ್ಟರ್‌ನಲ್ಲಿ ಎರಡು ವರ್ಕರ್ ನೋಡ್‌ಗಳ ಕರ್ನಲ್ ಆವೃತ್ತಿಯನ್ನು ನವೀಕರಿಸಲು ನಾವು ಬಯಸುತ್ತೇವೆ. ನಾವು ಇದನ್ನು ಹೇಗೆ ಮಾಡಬೇಕು? ನವೀಕರಿಸಿದ ಕಾನ್ಫಿಗರೇಶನ್‌ನೊಂದಿಗೆ ಹೊಸ ನೋಡ್‌ಗಳನ್ನು ಬೂಟ್ ಮಾಡುವುದು ಮತ್ತು ಹೊಸದನ್ನು ಪ್ರಾರಂಭಿಸುವಾಗ ಹಳೆಯ ನೋಡ್‌ಗಳನ್ನು ಮುಚ್ಚುವುದು ಸರಳ ಪರಿಹಾರವಾಗಿದೆ. ಇದು ಕೆಲಸ ಮಾಡುವಾಗ, ಈ ವಿಧಾನದಲ್ಲಿ ಕೆಲವು ಸಮಸ್ಯೆಗಳಿವೆ:

  • ನೀವು ಹಳೆಯ ನೋಡ್‌ಗಳನ್ನು ಆಫ್ ಮಾಡಿದಾಗ, ಅವುಗಳ ಮೇಲೆ ಚಾಲನೆಯಲ್ಲಿರುವ ಪಾಡ್‌ಗಳನ್ನು ಸಹ ಆಫ್ ಮಾಡಲಾಗುತ್ತದೆ. ಆಕರ್ಷಕವಾದ ಸ್ಥಗಿತಕ್ಕಾಗಿ ಪಾಡ್‌ಗಳನ್ನು ತೆರವುಗೊಳಿಸಬೇಕಾದರೆ ಏನು ಮಾಡಬೇಕು? ನೀವು ಬಳಸುತ್ತಿರುವ ವರ್ಚುವಲೈಸೇಶನ್ ಸಿಸ್ಟಮ್ ಸ್ವಚ್ಛಗೊಳಿಸುವ ಪ್ರಕ್ರಿಯೆಯು ಪೂರ್ಣಗೊಳ್ಳುವವರೆಗೆ ಕಾಯದೇ ಇರಬಹುದು.
  • ನೀವು ಒಂದೇ ಸಮಯದಲ್ಲಿ ಎಲ್ಲಾ ನೋಡ್‌ಗಳನ್ನು ಆಫ್ ಮಾಡಿದರೆ ಏನು? ಪಾಡ್‌ಗಳು ಹೊಸ ನೋಡ್‌ಗಳಿಗೆ ಚಲಿಸುವಾಗ ನೀವು ಯೋಗ್ಯವಾದ ಅಲಭ್ಯತೆಯನ್ನು ಪಡೆಯುತ್ತೀರಿ.

ನಾವು ನೋಡ್‌ಗೆ ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡುವಾಗ ನಮ್ಮ ಯಾವುದೇ ಕೆಲಸಗಾರ ಪ್ರಕ್ರಿಯೆಗಳು ಚಾಲನೆಯಲ್ಲಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವಾಗ ಹಳೆಯ ನೋಡ್‌ಗಳಿಂದ ಪಾಡ್‌ಗಳನ್ನು ಆಕರ್ಷಕವಾಗಿ ಸ್ಥಳಾಂತರಿಸಲು ನಮಗೆ ಒಂದು ಮಾರ್ಗ ಬೇಕು. ಅಥವಾ ನಾವು ಕ್ಲಸ್ಟರ್‌ನ ಸಂಪೂರ್ಣ ಬದಲಿಯನ್ನು ಮಾಡಿದಾಗ, ಉದಾಹರಣೆಯಲ್ಲಿರುವಂತೆ (ಅಂದರೆ, ನಾವು VM ಚಿತ್ರಗಳನ್ನು ಬದಲಾಯಿಸುತ್ತೇವೆ), ಚಾಲನೆಯಲ್ಲಿರುವ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಹಳೆಯ ನೋಡ್‌ಗಳಿಂದ ಹೊಸದಕ್ಕೆ ವರ್ಗಾಯಿಸಲು ನಾವು ಬಯಸುತ್ತೇವೆ. ಎರಡೂ ಸಂದರ್ಭಗಳಲ್ಲಿ, ಹಳೆಯ ನೋಡ್‌ಗಳಲ್ಲಿ ಹೊಸ ಪಾಡ್‌ಗಳನ್ನು ನಿಗದಿಪಡಿಸುವುದನ್ನು ತಡೆಯಲು ನಾವು ಬಯಸುತ್ತೇವೆ ಮತ್ತು ನಂತರ ಅವುಗಳಿಂದ ಚಾಲನೆಯಲ್ಲಿರುವ ಎಲ್ಲಾ ಪಾಡ್‌ಗಳನ್ನು ಹೊರಹಾಕುತ್ತೇವೆ. ಈ ಗುರಿಗಳನ್ನು ಸಾಧಿಸಲು ನಾವು ಆಜ್ಞೆಯನ್ನು ಬಳಸಬಹುದು kubectl drain.

ನೋಡ್‌ನಿಂದ ಎಲ್ಲಾ ಪಾಡ್‌ಗಳನ್ನು ಮರುಹಂಚಿಕೆ ಮಾಡಲಾಗುತ್ತಿದೆ

ಡ್ರೈನ್ ಕಾರ್ಯಾಚರಣೆಯು ನೋಡ್‌ನಿಂದ ಎಲ್ಲಾ ಪಾಡ್‌ಗಳನ್ನು ಮರುಹಂಚಿಕೆ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಡ್ರೈನ್ ಎಕ್ಸಿಕ್ಯೂಶನ್ ಸಮಯದಲ್ಲಿ, ನೋಡ್ ಅನ್ನು ಅನಿಯಂತ್ರಿತ ಎಂದು ಗುರುತಿಸಲಾಗಿದೆ (ಧ್ವಜ NoSchedule) ಇದು ಅದರ ಮೇಲೆ ಹೊಸ ಬೀಜಕೋಶಗಳು ಕಾಣಿಸಿಕೊಳ್ಳುವುದನ್ನು ತಡೆಯುತ್ತದೆ. ನಂತರ ಡ್ರೈನ್ ನೋಡ್‌ನಿಂದ ಪಾಡ್‌ಗಳನ್ನು ಹೊರಹಾಕಲು ಪ್ರಾರಂಭಿಸುತ್ತದೆ, ಸಿಗ್ನಲ್ ಕಳುಹಿಸುವ ಮೂಲಕ ನೋಡ್‌ನಲ್ಲಿ ಪ್ರಸ್ತುತ ಚಾಲನೆಯಲ್ಲಿರುವ ಕಂಟೇನರ್‌ಗಳನ್ನು ಮುಚ್ಚುತ್ತದೆ TERM ಪಾಡ್ನಲ್ಲಿ ಪಾತ್ರೆಗಳು.

ಆದರೂ kubectl drain ಪಾಡ್‌ಗಳನ್ನು ಹೊರಹಾಕುವ ಉತ್ತಮ ಕೆಲಸವನ್ನು ಮಾಡುತ್ತದೆ, ಡ್ರೈನ್ ಕಾರ್ಯಾಚರಣೆಯು ವಿಫಲಗೊಳ್ಳಲು ಇತರ ಎರಡು ಅಂಶಗಳಿವೆ:

  • ಸಲ್ಲಿಕೆಯಾದ ಮೇಲೆ ನಿಮ್ಮ ಅರ್ಜಿಯನ್ನು ಆಕರ್ಷಕವಾಗಿ ಮುಕ್ತಾಯಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ TERM ಸಂಕೇತ. ಬೀಜಕೋಶಗಳನ್ನು ಹೊರಹಾಕಿದಾಗ, ಕುಬರ್ನೆಟ್ಸ್ ಸಂಕೇತವನ್ನು ಕಳುಹಿಸುತ್ತಾನೆ TERM ಕಂಟೈನರ್‌ಗಳು ಮತ್ತು ನಿರ್ದಿಷ್ಟ ಸಮಯದವರೆಗೆ ಅವುಗಳನ್ನು ನಿಲ್ಲಿಸಲು ಕಾಯುತ್ತದೆ, ಅದರ ನಂತರ, ಅವರು ನಿಲ್ಲಿಸದಿದ್ದರೆ, ಅದು ಅವರನ್ನು ಬಲವಂತವಾಗಿ ಕೊನೆಗೊಳಿಸುತ್ತದೆ. ಯಾವುದೇ ಸಂದರ್ಭದಲ್ಲಿ, ನಿಮ್ಮ ಕಂಟೇನರ್ ಸಿಗ್ನಲ್ ಅನ್ನು ಸರಿಯಾಗಿ ಗ್ರಹಿಸದಿದ್ದರೆ, ಪಾಡ್‌ಗಳು ಪ್ರಸ್ತುತ ಚಾಲನೆಯಲ್ಲಿದ್ದರೆ ನೀವು ಅವುಗಳನ್ನು ತಪ್ಪಾಗಿ ನಂದಿಸಬಹುದು (ಉದಾಹರಣೆಗೆ, ಡೇಟಾಬೇಸ್ ವಹಿವಾಟು ಪ್ರಗತಿಯಲ್ಲಿದೆ).
  • ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಹೊಂದಿರುವ ಎಲ್ಲಾ ಪಾಡ್‌ಗಳನ್ನು ನೀವು ಕಳೆದುಕೊಳ್ಳುತ್ತೀರಿ. ಹೊಸ ನೋಡ್‌ಗಳಲ್ಲಿ ಹೊಸ ಕಂಟೇನರ್‌ಗಳನ್ನು ಪ್ರಾರಂಭಿಸಿದಾಗ ಅದು ಲಭ್ಯವಿಲ್ಲದಿರಬಹುದು ಅಥವಾ ನಿಯಂತ್ರಕಗಳಿಲ್ಲದೆ ನಿಮ್ಮ ಪಾಡ್‌ಗಳನ್ನು ನಿಯೋಜಿಸಿದ್ದರೆ, ಅವುಗಳು ಮರುಪ್ರಾರಂಭಿಸದೇ ಇರಬಹುದು.

ಅಲಭ್ಯತೆಯನ್ನು ತಪ್ಪಿಸುವುದು

ನೋಡ್‌ನಲ್ಲಿನ ಡ್ರೈನ್ ಕಾರ್ಯಾಚರಣೆಯಂತಹ ಸ್ವಯಂಪ್ರೇರಿತ ಅಡಚಣೆಯಿಂದ ಅಲಭ್ಯತೆಯನ್ನು ಕಡಿಮೆ ಮಾಡಲು, ಕುಬರ್ನೆಟ್ಸ್ ಈ ಕೆಳಗಿನ ವೈಫಲ್ಯ ನಿರ್ವಹಣೆ ಆಯ್ಕೆಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ:

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

---
apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
 labels:
   app: nginx
spec:
 replicas: 2
 selector:
   matchLabels:
     app: nginx
 template:
   metadata:
     labels:
       app: nginx
   spec:
     containers:
     - name: nginx
       image: nginx:1.15
       ports:
       - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
 name: nginx-service
spec:
 selector:
   app: nginx
 ports:
 - protocol: TCP
   targetPort: 80
   port: 80

ಈ ಸಂರಚನೆಯು ಕನಿಷ್ಠ ಉದಾಹರಣೆಯಾಗಿದೆ Deployment, ಇದು ಕ್ಲಸ್ಟರ್‌ನಲ್ಲಿ nginx ಪಾಡ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಹೆಚ್ಚುವರಿಯಾಗಿ, ಸಂರಚನೆಯು ಸಂಪನ್ಮೂಲವನ್ನು ವಿವರಿಸುತ್ತದೆ Service, ಕ್ಲಸ್ಟರ್‌ನಲ್ಲಿ nginx ಪಾಡ್‌ಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ಇದನ್ನು ಬಳಸಬಹುದು.

ಚಕ್ರದ ಉದ್ದಕ್ಕೂ, ನಾವು ಈ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಪುನರಾವರ್ತಿತವಾಗಿ ವಿಸ್ತರಿಸುತ್ತೇವೆ ಇದರಿಂದ ಅದು ಅಂತಿಮವಾಗಿ ಅಲಭ್ಯತೆಯನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಕುಬರ್ನೆಟ್ಸ್ ಒದಗಿಸುವ ಎಲ್ಲಾ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.

AWS ಮತ್ತು ಅದರಾಚೆಗೆ ಶೂನ್ಯ ಅಲಭ್ಯತೆಗಾಗಿ ಕುಬರ್ನೆಟ್ಸ್ ಕ್ಲಸ್ಟರ್ ನವೀಕರಣಗಳ ಸಂಪೂರ್ಣ ಅಳವಡಿಸಲಾದ ಮತ್ತು ಪರೀಕ್ಷಿಸಿದ ಆವೃತ್ತಿಗೆ ಭೇಟಿ ನೀಡಿ Gruntwork.io.

ನಮ್ಮ ಬ್ಲಾಗ್‌ನಲ್ಲಿ ಇತರ ಲೇಖನಗಳನ್ನು ಸಹ ಓದಿ:

ಮೂಲ: www.habr.com

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