ಕುಬರ್ನೆಟ್ಸ್ ಜೊತೆ ಕೆಲಸ ಮಾಡುವಾಗ ಕ್ಲೌಡ್ ವೆಚ್ಚವನ್ನು ಹೇಗೆ ಉಳಿಸುವುದು? ಒಂದೇ ಸರಿಯಾದ ಪರಿಹಾರವಿಲ್ಲ, ಆದರೆ ಈ ಲೇಖನವು ನಿಮ್ಮ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ನಿರ್ವಹಿಸಲು ಮತ್ತು ನಿಮ್ಮ ಕ್ಲೌಡ್ ಕಂಪ್ಯೂಟಿಂಗ್ ವೆಚ್ಚವನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಸಹಾಯ ಮಾಡುವ ಹಲವಾರು ಸಾಧನಗಳನ್ನು ವಿವರಿಸುತ್ತದೆ.
AWS ಗಾಗಿ ನಾನು ಈ ಲೇಖನವನ್ನು ಕುಬರ್ನೆಟ್ಸ್ ಅನ್ನು ಮನಸ್ಸಿನಲ್ಲಿಟ್ಟುಕೊಂಡು ಬರೆದಿದ್ದೇನೆ, ಆದರೆ ಇದು ಇತರ ಕ್ಲೌಡ್ ಪೂರೈಕೆದಾರರಿಗೆ (ಬಹುತೇಕ) ಅದೇ ರೀತಿಯಲ್ಲಿ ಅನ್ವಯಿಸುತ್ತದೆ. ನಿಮ್ಮ ಕ್ಲಸ್ಟರ್(ಗಳು) ಈಗಾಗಲೇ ಸ್ವಯಂ ಸ್ಕೇಲಿಂಗ್ ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿದೆ ಎಂದು ನಾನು ಭಾವಿಸುತ್ತೇನೆ (ಕ್ಲಸ್ಟರ್-ಆಟೋಸ್ಕೇಲರ್) ಸಂಪನ್ಮೂಲಗಳನ್ನು ತೆಗೆದುಹಾಕುವುದು ಮತ್ತು ನಿಮ್ಮ ನಿಯೋಜನೆಯನ್ನು ಕಡಿಮೆಗೊಳಿಸುವುದು ನಿಮ್ಮ ವರ್ಕರ್ ನೋಡ್ಗಳ ಫ್ಲೀಟ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡಿದರೆ ಮಾತ್ರ ನಿಮ್ಮ ಹಣವನ್ನು ಉಳಿಸುತ್ತದೆ (EC2 ನಿದರ್ಶನಗಳು).
ಈ ಲೇಖನವು ಒಳಗೊಳ್ಳುತ್ತದೆ:
ಬಳಕೆಯಾಗದ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸುವುದು (ಕುಬೆ-ದ್ವಾರಪಾಲಕ)
ಕೆಲಸ ಮಾಡದ ಸಮಯದಲ್ಲಿ ಸ್ಕೇಲಿಂಗ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡಿ (kube-downscaler)
ವೇಗದ ವಾತಾವರಣದಲ್ಲಿ ಕೆಲಸ ಮಾಡುವುದು ಉತ್ತಮವಾಗಿದೆ. ನಮಗೆ ಟೆಕ್ ಸಂಸ್ಥೆಗಳು ಬೇಕು ವೇಗವರ್ಧಿತ. ವೇಗವಾದ ಸಾಫ್ಟ್ವೇರ್ ಡೆಲಿವರಿ ಎಂದರೆ ಹೆಚ್ಚು PR ನಿಯೋಜನೆಗಳು, ಪೂರ್ವವೀಕ್ಷಣೆ ಪರಿಸರಗಳು, ಮೂಲಮಾದರಿಗಳು ಮತ್ತು ವಿಶ್ಲೇಷಣಾ ಪರಿಹಾರಗಳು. ಎಲ್ಲವನ್ನೂ ಕುಬರ್ನೆಟ್ಸ್ನಲ್ಲಿ ನಿಯೋಜಿಸಲಾಗಿದೆ. ಪರೀಕ್ಷಾ ನಿಯೋಜನೆಗಳನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ಸ್ವಚ್ಛಗೊಳಿಸಲು ಯಾರಿಗೆ ಸಮಯವಿದೆ? ಒಂದು ವಾರದ ಹಳೆಯ ಪ್ರಯೋಗವನ್ನು ಅಳಿಸುವುದನ್ನು ಮರೆಯುವುದು ಸುಲಭ. ನಾವು ಮುಚ್ಚಲು ಮರೆತಿರುವ ಕಾರಣದಿಂದ ಕ್ಲೌಡ್ ಬಿಲ್ ಏರುತ್ತದೆ:
(ಹೆನ್ನಿಂಗ್ ಜೇಕಬ್ಸ್:
ಝಿಝಾ:
(ಉಲ್ಲೇಖಗಳು) ಕೋರೆ ಕ್ವಿನ್:
ಮಿಥ್ಯ: ನಿಮ್ಮ AWS ಖಾತೆಯು ನೀವು ಹೊಂದಿರುವ ಬಳಕೆದಾರರ ಸಂಖ್ಯೆಯ ಕಾರ್ಯವಾಗಿದೆ.
ಸತ್ಯ: ನಿಮ್ಮ AWS ಸ್ಕೋರ್ ನೀವು ಹೊಂದಿರುವ ಇಂಜಿನಿಯರ್ಗಳ ಸಂಖ್ಯೆಯ ಕಾರ್ಯವಾಗಿದೆ.
ಇವಾನ್ ಕುರ್ನೋಸೊವ್ (ಪ್ರತಿಕ್ರಿಯೆಯಲ್ಲಿ):
ನೈಜ ಸಂಗತಿ: ನಿಮ್ಮ AWS ಸ್ಕೋರ್ ನೀವು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು/ಅಳಿಸಲು ಮರೆತಿರುವ ವಿಷಯಗಳ ಕಾರ್ಯವಾಗಿದೆ.)
ಕುಬರ್ನೆಟ್ಸ್ ದ್ವಾರಪಾಲಕ (kube-janitor) ನಿಮ್ಮ ಕ್ಲಸ್ಟರ್ ಅನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ದ್ವಾರಪಾಲಕ ಸಂರಚನೆಯು ಜಾಗತಿಕ ಮತ್ತು ಸ್ಥಳೀಯ ಬಳಕೆಗೆ ಹೊಂದಿಕೊಳ್ಳುತ್ತದೆ:
ಕ್ಲಸ್ಟರ್-ವೈಡ್ ನಿಯಮಗಳು PR/ಪರೀಕ್ಷೆಯ ನಿಯೋಜನೆಗಳಿಗಾಗಿ ಗರಿಷ್ಠ ಸಮಯವನ್ನು (TTL) ವ್ಯಾಖ್ಯಾನಿಸಬಹುದು.
ಪ್ರತ್ಯೇಕ ಸಂಪನ್ಮೂಲಗಳನ್ನು ದ್ವಾರಪಾಲಕ/ಟಿಟಿಎಲ್ನೊಂದಿಗೆ ಟಿಪ್ಪಣಿ ಮಾಡಬಹುದು, ಉದಾಹರಣೆಗೆ 7 ದಿನಗಳ ನಂತರ ಸ್ಪೈಕ್/ಪ್ರೊಟೊಟೈಪ್ ಅನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತೆಗೆದುಹಾಕಲು.
ಸಾಮಾನ್ಯ ನಿಯಮಗಳನ್ನು YAML ಫೈಲ್ನಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ. ಅದರ ಮಾರ್ಗವು ನಿಯತಾಂಕದ ಮೂಲಕ ಹಾದುಹೋಗುತ್ತದೆ --rules-file ಕುಬೆ-ದ್ವಾರಪಾಲಕನಲ್ಲಿ. ಎಲ್ಲಾ ನೇಮ್ಸ್ಪೇಸ್ಗಳನ್ನು ತೆಗೆದುಹಾಕಲು ಒಂದು ಉದಾಹರಣೆ ನಿಯಮ ಇಲ್ಲಿದೆ -pr- ಎರಡು ದಿನಗಳ ನಂತರ ಹೆಸರಿನಲ್ಲಿ:
ಕೆಳಗಿನ ಉದಾಹರಣೆಯು 2020 ರಲ್ಲಿ ಎಲ್ಲಾ ಹೊಸ ನಿಯೋಜನೆಗಳು/ಸ್ಟೇಟ್ಫುಲ್ಸೆಟ್ಗಳಿಗಾಗಿ ನಿಯೋಜನೆ ಮತ್ತು ಸ್ಟೇಟ್ಫುಲ್ಸೆಟ್ ಪಾಡ್ಗಳಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್ ಲೇಬಲ್ನ ಬಳಕೆಯನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ, ಆದರೆ ಅದೇ ಸಮಯದಲ್ಲಿ ಈ ಲೇಬಲ್ ಇಲ್ಲದೆಯೇ ಒಂದು ವಾರದವರೆಗೆ ಪರೀಕ್ಷೆಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಅನುಮತಿಸುತ್ತದೆ:
- id: require-application-label
# удалить deployments и statefulsets без метки "application"
resources:
- deployments
- statefulsets
# см. http://jmespath.org/specification.html
jmespath: "!(spec.template.metadata.labels.application) && metadata.creationTimestamp > '2020-01-01'"
ttl: 7d
ಕ್ಲಸ್ಟರ್ ಚಾಲನೆಯಲ್ಲಿರುವ ಕ್ಯೂಬ್-ಜಾನಿಟರ್ನಲ್ಲಿ 30 ನಿಮಿಷಗಳ ಕಾಲ ಸಮಯ-ಸೀಮಿತ ಡೆಮೊವನ್ನು ರನ್ ಮಾಡಿ:
kubectl run nginx-demo --image=nginx
kubectl annotate deploy nginx-demo janitor/ttl=30m
ಹೆಚ್ಚುತ್ತಿರುವ ವೆಚ್ಚಗಳ ಮತ್ತೊಂದು ಮೂಲವೆಂದರೆ ನಿರಂತರ ಸಂಪುಟಗಳು (AWS EBS). ಕುಬರ್ನೆಟ್ಸ್ ಸ್ಟೇಟ್ಫುಲ್ಸೆಟ್ ಅನ್ನು ಅಳಿಸುವುದರಿಂದ ಅದರ ನಿರಂತರ ಸಂಪುಟಗಳನ್ನು ಅಳಿಸುವುದಿಲ್ಲ (PVC - PersistentVolumeClaim). ಬಳಕೆಯಾಗದ EBS ಸಂಪುಟಗಳು ತಿಂಗಳಿಗೆ ನೂರಾರು ಡಾಲರ್ಗಳ ವೆಚ್ಚವನ್ನು ಸುಲಭವಾಗಿ ಉಂಟುಮಾಡಬಹುದು. ಬಳಕೆಯಾಗದ PVC ಗಳನ್ನು ಸ್ವಚ್ಛಗೊಳಿಸಲು Kubernetes Janitor ವೈಶಿಷ್ಟ್ಯವನ್ನು ಹೊಂದಿದೆ. ಉದಾಹರಣೆಗೆ, ಮಾಡ್ಯೂಲ್ನಿಂದ ಆರೋಹಿಸದ ಮತ್ತು ಸ್ಟೇಟ್ಫುಲ್ಸೆಟ್ ಅಥವಾ ಕ್ರಾನ್ಜಾಬ್ನಿಂದ ಉಲ್ಲೇಖಿಸದ ಎಲ್ಲಾ PVC ಗಳನ್ನು ಈ ನಿಯಮವು ತೆಗೆದುಹಾಕುತ್ತದೆ:
# удалить все PVC, которые не смонтированы и на которые не ссылаются StatefulSets
- id: remove-unused-pvcs
resources:
- persistentvolumeclaims
jmespath: "_context.pvc_is_not_mounted && _context.pvc_is_not_referenced"
ttl: 24h
ಕುಬರ್ನೆಟ್ಸ್ ಜಾನಿಟರ್ ನಿಮ್ಮ ಕ್ಲಸ್ಟರ್ ಅನ್ನು ಸ್ವಚ್ಛವಾಗಿಡಲು ಮತ್ತು ಕ್ಲೌಡ್ ಕಂಪ್ಯೂಟಿಂಗ್ ವೆಚ್ಚಗಳು ನಿಧಾನವಾಗಿ ಹೆಚ್ಚಾಗುವುದನ್ನು ತಡೆಯಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ನಿಯೋಜನೆ ಮತ್ತು ಸಂರಚನಾ ಸೂಚನೆಗಳಿಗಾಗಿ, ಅನುಸರಿಸಿ README ಕುಬೆ-ದ್ವಾರಪಾಲಕ.
ಕೆಲಸ ಮಾಡದ ಸಮಯದಲ್ಲಿ ಸ್ಕೇಲಿಂಗ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡಿ
ಪರೀಕ್ಷೆ ಮತ್ತು ಸ್ಟೇಜಿಂಗ್ ವ್ಯವಸ್ಥೆಗಳು ಸಾಮಾನ್ಯವಾಗಿ ವ್ಯವಹಾರದ ಸಮಯದಲ್ಲಿ ಮಾತ್ರ ಕಾರ್ಯಾಚರಣೆಗೆ ಅಗತ್ಯವಿರುತ್ತದೆ. ಬ್ಯಾಕ್ ಆಫೀಸ್/ಆಡ್ಮಿನ್ ಪರಿಕರಗಳಂತಹ ಕೆಲವು ಉತ್ಪಾದನಾ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಸೀಮಿತ ಲಭ್ಯತೆಯ ಅಗತ್ಯವಿರುತ್ತದೆ ಮತ್ತು ರಾತ್ರಿಯಿಡೀ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು.
ಕುಬರ್ನೆಟ್ಸ್ ಡೌನ್ಸ್ಕೇಲರ್ (kube-downscaler) ಬಳಕೆದಾರರು ಮತ್ತು ನಿರ್ವಾಹಕರು ಕೆಲಸ ಮಾಡದ ಸಮಯದಲ್ಲಿ ಸಿಸ್ಟಮ್ ಅನ್ನು ಸ್ಕೇಲ್ ಮಾಡಲು ಅನುಮತಿಸುತ್ತದೆ. ನಿಯೋಜನೆಗಳು ಮತ್ತು ಸ್ಟೇಟ್ಫುಲ್ಸೆಟ್ಗಳು ಶೂನ್ಯ ಪ್ರತಿಕೃತಿಗಳಿಗೆ ಅಳೆಯಬಹುದು. CronJobs ಅನ್ನು ಅಮಾನತುಗೊಳಿಸಬಹುದು. Kubernetes Downscaler ಅನ್ನು ಸಂಪೂರ್ಣ ಕ್ಲಸ್ಟರ್, ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ನೇಮ್ಸ್ಪೇಸ್ಗಳು ಅಥವಾ ವೈಯಕ್ತಿಕ ಸಂಪನ್ಮೂಲಗಳಿಗಾಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿದೆ. ನೀವು "ಐಡಲ್ ಸಮಯ" ಅಥವಾ ಇದಕ್ಕೆ ವಿರುದ್ಧವಾಗಿ "ಕೆಲಸದ ಸಮಯ" ಅನ್ನು ಹೊಂದಿಸಬಹುದು. ಉದಾಹರಣೆಗೆ, ರಾತ್ರಿ ಮತ್ತು ವಾರಾಂತ್ಯಗಳಲ್ಲಿ ಸ್ಕೇಲಿಂಗ್ ಅನ್ನು ಸಾಧ್ಯವಾದಷ್ಟು ಕಡಿಮೆ ಮಾಡಲು:
image: hjacobs/kube-downscaler:20.4.3
args:
- --interval=30
# не отключать компоненты инфраструктуры
- --exclude-namespaces=kube-system,infra
# не отключать kube-downscaler, а также оставить Postgres Operator, чтобы исключенными БД можно было управлять
- --exclude-deployments=kube-downscaler,postgres-operator
- --default-uptime=Mon-Fri 08:00-20:00 Europe/Berlin
- --include-resources=deployments,statefulsets,stacks,cronjobs
- --deployment-time-annotation=deployment-time
ವಾರಾಂತ್ಯದಲ್ಲಿ ಕ್ಲಸ್ಟರ್ ವರ್ಕರ್ ನೋಡ್ಗಳನ್ನು ಸ್ಕೇಲಿಂಗ್ ಮಾಡಲು ಗ್ರಾಫ್ ಇಲ್ಲಿದೆ:
~13 ರಿಂದ 4 ವರ್ಕರ್ ನೋಡ್ಗಳಿಗೆ ಸ್ಕೇಲಿಂಗ್ ಮಾಡುವುದು ಖಂಡಿತವಾಗಿಯೂ ನಿಮ್ಮ AWS ಬಿಲ್ನಲ್ಲಿ ಗಮನಾರ್ಹ ವ್ಯತ್ಯಾಸವನ್ನು ಮಾಡುತ್ತದೆ.
ಆದರೆ ಕ್ಲಸ್ಟರ್ "ಡೌನ್ಟೈಮ್" ಸಮಯದಲ್ಲಿ ನಾನು ಕೆಲಸ ಮಾಡಬೇಕಾದರೆ ಏನು ಮಾಡಬೇಕು? ಡೌನ್ಸ್ಕೇಲರ್/ಹೊರಗಿಡುವಿಕೆಯನ್ನು ಸೇರಿಸುವ ಮೂಲಕ ಕೆಲವು ನಿಯೋಜನೆಗಳನ್ನು ಸ್ಕೇಲಿಂಗ್ನಿಂದ ಶಾಶ್ವತವಾಗಿ ಹೊರಗಿಡಬಹುದು: ನಿಜವಾದ ಟಿಪ್ಪಣಿ. YYYY-MM-DD HH:MM (UTC) ಸ್ವರೂಪದಲ್ಲಿ ಸಂಪೂರ್ಣ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ನೊಂದಿಗೆ ಡೌನ್ಸ್ಕೇಲರ್/ಹೊರಗಿಡುವವರೆಗೆ ಟಿಪ್ಪಣಿಯನ್ನು ಬಳಸಿಕೊಂಡು ನಿಯೋಜನೆಗಳನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ಹೊರಗಿಡಬಹುದು. ಅಗತ್ಯವಿದ್ದರೆ, ಟಿಪ್ಪಣಿಯೊಂದಿಗೆ ಪಾಡ್ ಅನ್ನು ನಿಯೋಜಿಸುವ ಮೂಲಕ ಸಂಪೂರ್ಣ ಕ್ಲಸ್ಟರ್ ಅನ್ನು ಹಿಂತಿರುಗಿಸಬಹುದು downscaler/force-uptime, ಉದಾಹರಣೆಗೆ, nginx ಖಾಲಿಯನ್ನು ಪ್ರಾರಂಭಿಸುವ ಮೂಲಕ:
kubectl run scale-up --image=nginx
kubectl annotate deploy scale-up janitor/ttl=1h # удалить развертывание через час
kubectl annotate pod $(kubectl get pod -l run=scale-up -o jsonpath="{.items[0].metadata.name}") downscaler/force-uptime=true
ನೋಡಿ README kube-downscaler, ನೀವು ನಿಯೋಜನೆ ಸೂಚನೆಗಳು ಮತ್ತು ಹೆಚ್ಚುವರಿ ಆಯ್ಕೆಗಳಲ್ಲಿ ಆಸಕ್ತಿ ಹೊಂದಿದ್ದರೆ.
ಸಮತಲ ಆಟೋಸ್ಕೇಲಿಂಗ್ ಬಳಸಿ
ಅನೇಕ ಅಪ್ಲಿಕೇಶನ್ಗಳು/ಸೇವೆಗಳು ಡೈನಾಮಿಕ್ ಲೋಡಿಂಗ್ ಮಾದರಿಯೊಂದಿಗೆ ವ್ಯವಹರಿಸುತ್ತವೆ: ಕೆಲವೊಮ್ಮೆ ಅವುಗಳ ಮಾಡ್ಯೂಲ್ಗಳು ನಿಷ್ಕ್ರಿಯವಾಗಿರುತ್ತವೆ ಮತ್ತು ಕೆಲವೊಮ್ಮೆ ಪೂರ್ಣ ಸಾಮರ್ಥ್ಯದಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ. ಗರಿಷ್ಠ ಗರಿಷ್ಠ ಹೊರೆಯನ್ನು ನಿಭಾಯಿಸಲು ಪಾಡ್ಗಳ ಶಾಶ್ವತ ಫ್ಲೀಟ್ ಅನ್ನು ನಿರ್ವಹಿಸುವುದು ಆರ್ಥಿಕವಾಗಿರುವುದಿಲ್ಲ. ಕುಬರ್ನೆಟ್ಸ್ ಸಂಪನ್ಮೂಲದಾದ್ಯಂತ ಸಮತಲ ಸ್ವಯಂ-ಸ್ಕೇಲಿಂಗ್ ಅನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ ಅಡ್ಡಾದಿಡ್ಡಿಪಾಡ್ ಆಟೋಸ್ಕೇಲರ್ (HPA). CPU ಬಳಕೆಯು ಸಾಮಾನ್ಯವಾಗಿ ಸ್ಕೇಲಿಂಗ್ಗೆ ಉತ್ತಮ ಸೂಚಕವಾಗಿದೆ:
ಸ್ಕೇಲಿಂಗ್ಗಾಗಿ ಕಸ್ಟಮ್ ಮೆಟ್ರಿಕ್ಗಳನ್ನು ಸುಲಭವಾಗಿ ಸಂಪರ್ಕಿಸಲು Zalando ಒಂದು ಘಟಕವನ್ನು ರಚಿಸಿದೆ: ಕುಬೆ ಮೆಟ್ರಿಕ್ಸ್ ಅಡಾಪ್ಟರ್ (kube-metrics-adapter) ಕುಬರ್ನೆಟ್ಸ್ಗಾಗಿ ಒಂದು ಜೆನೆರಿಕ್ ಮೆಟ್ರಿಕ್ಸ್ ಅಡಾಪ್ಟರ್ ಆಗಿದ್ದು ಅದು ಪಾಡ್ಗಳ ಸಮತಲ ಆಟೋಸ್ಕೇಲಿಂಗ್ಗಾಗಿ ಕಸ್ಟಮ್ ಮತ್ತು ಬಾಹ್ಯ ಮೆಟ್ರಿಕ್ಗಳನ್ನು ಸಂಗ್ರಹಿಸಬಹುದು ಮತ್ತು ಸೇವೆ ಮಾಡಬಹುದು. ಇದು ಪ್ರಮೀತಿಯಸ್ ಮೆಟ್ರಿಕ್ಸ್, SQS ಕ್ಯೂಗಳು ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್ಗಳ ಆಧಾರದ ಮೇಲೆ ಸ್ಕೇಲಿಂಗ್ ಅನ್ನು ಬೆಂಬಲಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಅಪ್ಲಿಕೇಶನ್ನಿಂದ ಪ್ರತಿನಿಧಿಸುವ ಕಸ್ಟಮ್ ಮೆಟ್ರಿಕ್ಗೆ ನಿಮ್ಮ ನಿಯೋಜನೆಯನ್ನು ಅಳೆಯಲು /ಮೆಟ್ರಿಕ್ಸ್ ಬಳಕೆಯಲ್ಲಿ JSON:
HPA ನೊಂದಿಗೆ ಸಮತಲವಾದ ಆಟೋಸ್ಕೇಲಿಂಗ್ ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡುವುದು ಸ್ಥಿತಿಯಿಲ್ಲದ ಸೇವೆಗಳಿಗೆ ದಕ್ಷತೆಯನ್ನು ಸುಧಾರಿಸಲು ಡೀಫಾಲ್ಟ್ ಕ್ರಿಯೆಗಳಲ್ಲಿ ಒಂದಾಗಿರಬೇಕು. Spotify ಅವರ ಅನುಭವ ಮತ್ತು HPA ಗಾಗಿ ಶಿಫಾರಸುಗಳೊಂದಿಗೆ ಪ್ರಸ್ತುತಿಯನ್ನು ಹೊಂದಿದೆ: ನಿಮ್ಮ ನಿಯೋಜನೆಗಳನ್ನು ಅಳೆಯಿರಿ, ನಿಮ್ಮ ವ್ಯಾಲೆಟ್ ಅಲ್ಲ.
ಸಂಪನ್ಮೂಲ ಓವರ್ಬುಕಿಂಗ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡಿ
ಕುಬರ್ನೆಟ್ಸ್ ಕೆಲಸದ ಹೊರೆಗಳು ತಮ್ಮ CPU/ಮೆಮೊರಿ ಅಗತ್ಯಗಳನ್ನು "ಸಂಪನ್ಮೂಲ ವಿನಂತಿಗಳ" ಮೂಲಕ ನಿರ್ಧರಿಸುತ್ತವೆ. CPU ಸಂಪನ್ಮೂಲಗಳನ್ನು ವರ್ಚುವಲ್ ಕೋರ್ಗಳಲ್ಲಿ ಅಥವಾ ಹೆಚ್ಚು ಸಾಮಾನ್ಯವಾಗಿ "ಮಿಲಿಕೋರ್ಗಳಲ್ಲಿ" ಅಳೆಯಲಾಗುತ್ತದೆ, ಉದಾಹರಣೆಗೆ 500m 50% vCPU ಅನ್ನು ಸೂಚಿಸುತ್ತದೆ. ಮೆಮೊರಿ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಬೈಟ್ಗಳಲ್ಲಿ ಅಳೆಯಲಾಗುತ್ತದೆ ಮತ್ತು 500Mi, ಅಂದರೆ 500 ಮೆಗಾಬೈಟ್ಗಳಂತಹ ಸಾಮಾನ್ಯ ಪ್ರತ್ಯಯಗಳನ್ನು ಬಳಸಬಹುದು. ಸಂಪನ್ಮೂಲ ವಿನಂತಿಗಳು ವರ್ಕರ್ ನೋಡ್ಗಳಲ್ಲಿ ಸಾಮರ್ಥ್ಯವನ್ನು "ಲಾಕ್" ಮಾಡುತ್ತವೆ, ಅಂದರೆ 1000 vCPU ಗಳನ್ನು ಹೊಂದಿರುವ ನೋಡ್ನಲ್ಲಿ 4m CPU ವಿನಂತಿಯನ್ನು ಹೊಂದಿರುವ ಪಾಡ್ ಕೇವಲ 3 vCPU ಗಳನ್ನು ಇತರ ಪಾಡ್ಗಳಿಗೆ ಲಭ್ಯವಾಗುವಂತೆ ಮಾಡುತ್ತದೆ. [1]
ಸ್ಲಾಕ್ (ಹೆಚ್ಚುವರಿ ಮೀಸಲು) ವಿನಂತಿಸಿದ ಸಂಪನ್ಮೂಲಗಳು ಮತ್ತು ನಿಜವಾದ ಬಳಕೆಯ ನಡುವಿನ ವ್ಯತ್ಯಾಸವಾಗಿದೆ. ಉದಾಹರಣೆಗೆ, 2 GiB ಮೆಮೊರಿಯನ್ನು ವಿನಂತಿಸುವ ಆದರೆ 200 MiB ಅನ್ನು ಮಾತ್ರ ಬಳಸುವ ಪಾಡ್ ~1,8 GiB "ಹೆಚ್ಚುವರಿ" ಮೆಮೊರಿಯನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಅಧಿಕ ಹಣ ಖರ್ಚಾಗುತ್ತದೆ. 1 GiB ರಿಡಂಡೆಂಟ್ ಮೆಮೊರಿಗೆ ತಿಂಗಳಿಗೆ ~$10 ವೆಚ್ಚವಾಗುತ್ತದೆ ಎಂದು ಒಬ್ಬರು ಅಂದಾಜು ಮಾಡಬಹುದು. [2]
ಕುಬರ್ನೆಟ್ಸ್ ಸಂಪನ್ಮೂಲ ವರದಿ (kube-resource-report) ಹೆಚ್ಚುವರಿ ಮೀಸಲುಗಳನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ ಮತ್ತು ಉಳಿತಾಯದ ಸಾಮರ್ಥ್ಯವನ್ನು ನಿರ್ಧರಿಸಲು ನಿಮಗೆ ಸಹಾಯ ಮಾಡುತ್ತದೆ:
ಕುಬರ್ನೆಟ್ಸ್ ಸಂಪನ್ಮೂಲ ವರದಿ ಅಪ್ಲಿಕೇಶನ್ ಮತ್ತು ಆಜ್ಞೆಯಿಂದ ಒಟ್ಟುಗೂಡಿಸಲಾದ ಹೆಚ್ಚುವರಿ ತೋರಿಸುತ್ತದೆ. ಸಂಪನ್ಮೂಲ ಬೇಡಿಕೆಗಳನ್ನು ಕಡಿಮೆ ಮಾಡಬಹುದಾದ ಸ್ಥಳಗಳನ್ನು ಹುಡುಕಲು ಇದು ನಿಮ್ಮನ್ನು ಅನುಮತಿಸುತ್ತದೆ. ರಚಿಸಲಾದ HTML ವರದಿಯು ಸಂಪನ್ಮೂಲ ಬಳಕೆಯ ಸ್ನ್ಯಾಪ್ಶಾಟ್ ಅನ್ನು ಮಾತ್ರ ಒದಗಿಸುತ್ತದೆ. ಸಾಕಷ್ಟು ಸಂಪನ್ಮೂಲ ವಿನಂತಿಗಳನ್ನು ನಿರ್ಧರಿಸಲು ನೀವು ಕಾಲಾನಂತರದಲ್ಲಿ CPU/ಮೆಮೊರಿ ಬಳಕೆಯನ್ನು ನೋಡಬೇಕು. "ವಿಶಿಷ್ಟ" CPU-ಹೆವಿ ಸೇವೆಗಾಗಿ ಗ್ರಾಫನಾ ಚಾರ್ಟ್ ಇಲ್ಲಿದೆ: ಎಲ್ಲಾ ಪಾಡ್ಗಳು ವಿನಂತಿಸಿದ 3 CPU ಕೋರ್ಗಳಿಗಿಂತ ಗಮನಾರ್ಹವಾಗಿ ಕಡಿಮೆ ಬಳಸುತ್ತಿವೆ:
CPU ವಿನಂತಿಯನ್ನು 3000m ನಿಂದ ~400m ಗೆ ಕಡಿಮೆ ಮಾಡುವುದರಿಂದ ಇತರ ಕೆಲಸದ ಹೊರೆಗಳಿಗೆ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಮುಕ್ತಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ಕ್ಲಸ್ಟರ್ ಚಿಕ್ಕದಾಗಲು ಅನುಮತಿಸುತ್ತದೆ.
ಆದರೆ ಜನರು YAML ಫೈಲ್ಗಳಲ್ಲಿ ಮೌಲ್ಯಗಳನ್ನು ಬದಲಾಯಿಸುವುದನ್ನು ನಾವು ನಿಜವಾಗಿಯೂ ಬಯಸುತ್ತೇವೆಯೇ? ಇಲ್ಲ, ಯಂತ್ರಗಳು ಅದನ್ನು ಉತ್ತಮವಾಗಿ ಮಾಡಬಹುದು! ಕುಬರ್ನೆಟ್ಸ್ ಲಂಬ ಪಾಡ್ ಆಟೋಸ್ಕೇಲರ್ (VPA) ಅದನ್ನೇ ಮಾಡುತ್ತದೆ: ಕೆಲಸದ ಹೊರೆಗೆ ಅನುಗುಣವಾಗಿ ಸಂಪನ್ಮೂಲ ವಿನಂತಿಗಳು ಮತ್ತು ನಿರ್ಬಂಧಗಳನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳುತ್ತದೆ. ಪ್ರಮೀತಿಯಸ್ ಸಿಪಿಯು ವಿನಂತಿಗಳ ಉದಾಹರಣೆ ಗ್ರಾಫ್ ಇಲ್ಲಿದೆ (ತೆಳುವಾದ ನೀಲಿ ರೇಖೆ) ಕಾಲಾನಂತರದಲ್ಲಿ VPA ಅಳವಡಿಸಿಕೊಂಡಿದೆ:
ಗೋಲ್ಡಿಲಾಕ್ಸ್ ಫೇರ್ವಿಂಡ್ನಿಂದ ನೇಮ್ಸ್ಪೇಸ್ನಲ್ಲಿ ಪ್ರತಿ ನಿಯೋಜನೆಗಾಗಿ VPA ಅನ್ನು ರಚಿಸುವ ಸಾಧನವಾಗಿದೆ ಮತ್ತು ನಂತರ ಅದರ ಡ್ಯಾಶ್ಬೋರ್ಡ್ನಲ್ಲಿ VPA ಶಿಫಾರಸುಗಳನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ. ಡೆವಲಪರ್ಗಳು ತಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗಾಗಿ ಸರಿಯಾದ CPU/ಮೆಮೊರಿ ವಿನಂತಿಗಳನ್ನು ಹೊಂದಿಸಲು ಇದು ಸಹಾಯ ಮಾಡುತ್ತದೆ:
ಕೊನೆಯದಾಗಿ ಆದರೆ, ಕುಬರ್ನೆಟ್ಸ್ ವರ್ಕರ್ ನೋಡ್ಗಳಂತೆ ಸ್ಪಾಟ್ ನಿದರ್ಶನಗಳನ್ನು ಬಳಸುವ ಮೂಲಕ AWS EC2 ವೆಚ್ಚವನ್ನು ಕಡಿಮೆ ಮಾಡಬಹುದು [3]. ಬೇಡಿಕೆಯ ಬೆಲೆಗಳಿಗೆ ಹೋಲಿಸಿದರೆ ಸ್ಪಾಟ್ ನಿದರ್ಶನಗಳು 90% ವರೆಗೆ ರಿಯಾಯಿತಿಯಲ್ಲಿ ಲಭ್ಯವಿದೆ. EC2 ಸ್ಪಾಟ್ನಲ್ಲಿ ಕುಬರ್ನೆಟ್ಸ್ ಅನ್ನು ರನ್ ಮಾಡುವುದು ಉತ್ತಮ ಸಂಯೋಜನೆಯಾಗಿದೆ: ಹೆಚ್ಚಿನ ಲಭ್ಯತೆಗಾಗಿ ನೀವು ಹಲವಾರು ವಿಭಿನ್ನ ನಿದರ್ಶನ ಪ್ರಕಾರಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಬೇಕಾಗಿದೆ, ಅಂದರೆ ನೀವು ಅದೇ ಅಥವಾ ಕಡಿಮೆ ಬೆಲೆಗೆ ದೊಡ್ಡ ನೋಡ್ ಅನ್ನು ಪಡೆಯಬಹುದು ಮತ್ತು ಹೆಚ್ಚಿದ ಸಾಮರ್ಥ್ಯವನ್ನು ಕಂಟೈನರೈಸ್ಡ್ ಕುಬರ್ನೆಟ್ಸ್ ವರ್ಕ್ಲೋಡ್ಗಳಿಂದ ಬಳಸಬಹುದು.
EC2 ಸ್ಪಾಟ್ನಲ್ಲಿ ಕುಬರ್ನೆಟ್ಸ್ ಅನ್ನು ರನ್ ಮಾಡುವುದು ಹೇಗೆ? ಹಲವಾರು ಆಯ್ಕೆಗಳಿವೆ: SpotInst ನಂತಹ ಮೂರನೇ ವ್ಯಕ್ತಿಯ ಸೇವೆಯನ್ನು ಬಳಸಿ (ಈಗ "Spot" ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ, ಏಕೆ ಎಂದು ನನ್ನನ್ನು ಕೇಳಬೇಡಿ), ಅಥವಾ ನಿಮ್ಮ ಕ್ಲಸ್ಟರ್ಗೆ Spot AutoScalingGroup (ASG) ಅನ್ನು ಸೇರಿಸಿ. ಉದಾಹರಣೆಗೆ, ಬಹು ನಿದರ್ಶನ ಪ್ರಕಾರಗಳೊಂದಿಗೆ "ಸಾಮರ್ಥ್ಯ-ಆಪ್ಟಿಮೈಸ್ಡ್" Spot ASG ಗಾಗಿ CloudFormation ತುಣುಕು ಇಲ್ಲಿದೆ:
ಕುಬರ್ನೆಟ್ಸ್ನಲ್ಲಿ ಕ್ಲೌಡ್ ವೆಚ್ಚವನ್ನು ಉಳಿಸಲು ನಿಮ್ಮ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು ಯಾವುವು? ದಯವಿಟ್ಟು ನನಗೆ ತಿಳಿಸಿ Twitter (@ try_except_).
[1] ವಾಸ್ತವವಾಗಿ, ಕಾಯ್ದಿರಿಸಿದ ಸಿಸ್ಟಮ್ ಸಂಪನ್ಮೂಲಗಳಿಂದ ನೋಡ್ನ ಥ್ರೋಪುಟ್ ಕಡಿಮೆಯಾಗುವುದರಿಂದ 3 ಕ್ಕಿಂತ ಕಡಿಮೆ vCPU ಗಳು ಬಳಕೆಯಾಗುತ್ತವೆ. ಕುಬರ್ನೆಟ್ಸ್ ಭೌತಿಕ ನೋಡ್ ಸಾಮರ್ಥ್ಯ ಮತ್ತು "ಒದಗಿಸಿದ" ಸಂಪನ್ಮೂಲಗಳ ನಡುವೆ ವ್ಯತ್ಯಾಸವನ್ನು ತೋರಿಸುತ್ತದೆ (ನೋಡ್ ಹಂಚಿಕೆ).
[2] ಲೆಕ್ಕಾಚಾರದ ಉದಾಹರಣೆ: 5 GiB ಮೆಮೊರಿಯೊಂದಿಗೆ ಒಂದು m8.ದೊಡ್ಡ ನಿದರ್ಶನವು ತಿಂಗಳಿಗೆ ~$84 ಆಗಿದೆ (eu-ಸೆಂಟ್ರಲ್-1, ಆನ್-ಡಿಮ್ಯಾಂಡ್), ಅಂದರೆ. 1/8 ನೋಡ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸುವುದು ಸರಿಸುಮಾರು ~$10/ತಿಂಗಳು.
[3] ಕಾಯ್ದಿರಿಸಿದ ನಿದರ್ಶನಗಳು, ಉಳಿತಾಯ ಯೋಜನೆ ಇತ್ಯಾದಿಗಳಂತಹ ನಿಮ್ಮ EC2 ಬಿಲ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡಲು ಇನ್ನೂ ಹಲವು ಮಾರ್ಗಗಳಿವೆ - ನಾನು ಆ ವಿಷಯಗಳನ್ನು ಇಲ್ಲಿ ಕವರ್ ಮಾಡುವುದಿಲ್ಲ, ಆದರೆ ನೀವು ಖಂಡಿತವಾಗಿಯೂ ಅವುಗಳನ್ನು ನೋಡಬೇಕು!