ಬಳಕೆದಾರರ ಉಪವಿಭಾಗದಲ್ಲಿ ಹೊಸ ಕೋಡ್ ಅನ್ನು ಪರೀಕ್ಷಿಸಲು ಕ್ಯಾನರಿ ನಿಯೋಜನೆಯು ಅತ್ಯಂತ ಪರಿಣಾಮಕಾರಿ ಮಾರ್ಗವಾಗಿದೆ. ಇದು ನಿಯೋಜನೆ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ ಸಮಸ್ಯಾತ್ಮಕವಾಗಬಹುದಾದ ಟ್ರಾಫಿಕ್ ಲೋಡ್ ಅನ್ನು ಗಣನೀಯವಾಗಿ ಕಡಿಮೆ ಮಾಡುತ್ತದೆ, ಏಕೆಂದರೆ ಇದು ನಿರ್ದಿಷ್ಟ ಉಪವಿಭಾಗದೊಳಗೆ ಮಾತ್ರ ಸಂಭವಿಸುತ್ತದೆ. ಕುಬರ್ನೆಟ್ಸ್ ಮತ್ತು ನಿಯೋಜನೆ ಯಾಂತ್ರೀಕೃತತೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಅಂತಹ ನಿಯೋಜನೆಯನ್ನು ಹೇಗೆ ಆಯೋಜಿಸುವುದು ಎಂಬುದಕ್ಕೆ ಈ ಟಿಪ್ಪಣಿಯನ್ನು ಮೀಸಲಿಡಲಾಗಿದೆ. ಹೆಲ್ಮ್ ಮತ್ತು ಕುಬರ್ನೆಟ್ಸ್ ಸಂಪನ್ಮೂಲಗಳ ಬಗ್ಗೆ ನಿಮಗೆ ಏನಾದರೂ ತಿಳಿದಿದೆ ಎಂದು ನಾವು ಭಾವಿಸುತ್ತೇವೆ.
ಕುಬರ್ನೆಟ್ಸ್ಗೆ ಸರಳವಾದ ಕ್ಯಾನರಿ ನಿಯೋಜನೆಯು ಎರಡು ಪ್ರಮುಖ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಒಳಗೊಂಡಿದೆ: ಸೇವೆಯೇ ಮತ್ತು ನಿಯೋಜನೆ ಸಾಧನ. ನವೀಕರಣ ದಟ್ಟಣೆಯನ್ನು ಒದಗಿಸುವ ಎರಡು ವಿಭಿನ್ನ ಸಂಪನ್ಮೂಲಗಳೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸುವ ಏಕೈಕ ಸೇವೆಯ ಮೂಲಕ ಕ್ಯಾನರಿ ನಿಯೋಜನೆಯು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಈ ಸಂಪನ್ಮೂಲಗಳಲ್ಲಿ ಒಂದು "ಕ್ಯಾನರಿ" ಆವೃತ್ತಿಯೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ ಮತ್ತು ಎರಡನೆಯದು ಸ್ಥಿರ ಆವೃತ್ತಿಯೊಂದಿಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಈ ಪರಿಸ್ಥಿತಿಯಲ್ಲಿ, ಸೇವೆಗೆ ಅಗತ್ಯವಿರುವ ದಟ್ಟಣೆಯ ಪ್ರಮಾಣವನ್ನು ಕಡಿಮೆ ಮಾಡಲು ನಾವು ಕ್ಯಾನರಿ ಆವೃತ್ತಿಗಳ ಸಂಖ್ಯೆಯನ್ನು ನಿಯಂತ್ರಿಸಬಹುದು. ಉದಾಹರಣೆಗೆ, ನೀವು Yaml ಅನ್ನು ಬಳಸಲು ಬಯಸಿದರೆ, ಅದು ಕುಬರ್ನೆಟ್ಸ್ನಲ್ಲಿ ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:
kind: Deployment
metadata:
name: app-canary
labels:
app: app
spec:
replicas: 1
...
image: myapp:canary
---
kind: Deployment
metadata:
name: app
labels:
app: app
spec:
replicas: 5
...
image: myapp:stable
---
kind: Service
selector:
app: app # Selector will route traffic to both deployments.
kubectl ಮತ್ತು ಇನ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಈ ಆಯ್ಕೆಯನ್ನು ಕಲ್ಪಿಸುವುದು ಇನ್ನೂ ಸುಲಭವಾಗಿದೆ
ಕ್ಯಾನರಿ ನಿಯೋಜನೆಯ ಆಟೊಮೇಷನ್
ಮೊದಲನೆಯದಾಗಿ, ನಮಗೆ ಹೆಲ್ಮ್ ಚಾರ್ಟ್ ಮ್ಯಾಪ್ ಅಗತ್ಯವಿದೆ, ಅದು ಈಗಾಗಲೇ ನಾವು ಮೇಲೆ ಚರ್ಚಿಸಿದ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಒಳಗೊಂಡಿದೆ. ಇದು ಈ ರೀತಿ ಕಾಣಿಸಬೇಕು:
~/charts/app
├── Chart.yaml
├── README.md
├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ └── service.yaml
└── values.yaml
ಹೆಲ್ಮ್ ಪರಿಕಲ್ಪನೆಯ ಆಧಾರವು ಬಹು-ಆವೃತ್ತಿಯ ಬಿಡುಗಡೆಗಳ ನಿರ್ವಹಣೆಯಾಗಿದೆ. ಸ್ಥಿರ ಆವೃತ್ತಿಯು ಪ್ರಾಜೆಕ್ಟ್ ಕೋಡ್ನ ನಮ್ಮ ಮುಖ್ಯ ಸ್ಥಿರ ಶಾಖೆಯಾಗಿದೆ. ಆದರೆ ಹೆಲ್ಮ್ನೊಂದಿಗೆ ನಾವು ನಮ್ಮ ಪ್ರಾಯೋಗಿಕ ಕೋಡ್ನೊಂದಿಗೆ ಕ್ಯಾನರಿ ಬಿಡುಗಡೆಯನ್ನು ನಿಯೋಜಿಸಬಹುದು. ಸ್ಥಿರ ಆವೃತ್ತಿ ಮತ್ತು ಕ್ಯಾನರಿ ಬಿಡುಗಡೆಯ ನಡುವೆ ಸಂಚಾರ ವಿನಿಮಯವನ್ನು ನಿರ್ವಹಿಸುವುದು ಮುಖ್ಯ ವಿಷಯವಾಗಿದೆ. ವಿಶೇಷ ಆಯ್ಕೆಯನ್ನು ಬಳಸಿಕೊಂಡು ನಾವು ಎಲ್ಲವನ್ನೂ ನಿರ್ವಹಿಸುತ್ತೇವೆ:
selector:
app.kubernetes.io/name: myapp
ನಮ್ಮ "ಕ್ಯಾನರಿ" ಮತ್ತು ಸ್ಥಿರ ನಿಯೋಜನೆ ಸಂಪನ್ಮೂಲಗಳು ಮಾಡ್ಯೂಲ್ಗಳಲ್ಲಿ ಈ ಲೇಬಲ್ ಅನ್ನು ಸೂಚಿಸುತ್ತವೆ. ಎಲ್ಲವನ್ನೂ ಸರಿಯಾಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಿದ್ದರೆ, ನಮ್ಮ ಹೆಲ್ಮ್ ಚಾರ್ಟ್ ನಕ್ಷೆಯ ಕ್ಯಾನರಿ ಆವೃತ್ತಿಯ ನಿಯೋಜನೆಯ ಸಮಯದಲ್ಲಿ ಹೊಸದಾಗಿ ನಿಯೋಜಿಸಲಾದ ಮಾಡ್ಯೂಲ್ಗಳಿಗೆ ದಟ್ಟಣೆಯನ್ನು ನಿರ್ದೇಶಿಸಲಾಗುವುದು ಎಂದು ನಾವು ನೋಡುತ್ತೇವೆ. ಈ ಆಜ್ಞೆಯ ಸ್ಥಿರ ಆವೃತ್ತಿಯು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:
helm upgrade
--install myapp
--namespace default
--set app.name=myapp # Goes into app.kubernetes.io/name
--set app.version=v1 # Goes into app.kubernetes.io/version
--set image.tag=stable
--set replicaCount=5
ಈಗ ನಮ್ಮ ಕ್ಯಾನರಿ ಬಿಡುಗಡೆಯನ್ನು ಪರಿಶೀಲಿಸೋಣ. ಕ್ಯಾನರಿ ಆವೃತ್ತಿಯನ್ನು ನಿಯೋಜಿಸಲು, ನಾವು ಎರಡು ವಿಷಯಗಳನ್ನು ನೆನಪಿನಲ್ಲಿಟ್ಟುಕೊಳ್ಳಬೇಕು. ಬಿಡುಗಡೆಯ ಹೆಸರು ವಿಭಿನ್ನವಾಗಿರಬೇಕು ಆದ್ದರಿಂದ ನಾವು ಪ್ರಸ್ತುತ ಸ್ಥಿರ ಆವೃತ್ತಿಗೆ ನವೀಕರಣವನ್ನು ಹೊರತರುವುದಿಲ್ಲ. ಆವೃತ್ತಿ ಮತ್ತು ಟ್ಯಾಗ್ ಕೂಡ ವಿಭಿನ್ನವಾಗಿರಬೇಕು ಆದ್ದರಿಂದ ನಾವು ಇತರ ಕೋಡ್ ಅನ್ನು ನಿಯೋಜಿಸಬಹುದು ಮತ್ತು ಸಂಪನ್ಮೂಲ ಟ್ಯಾಗ್ಗಳ ಮೂಲಕ ವ್ಯತ್ಯಾಸಗಳನ್ನು ಗುರುತಿಸಬಹುದು.
helm upgrade
--install myapp-canary
--namespace default
--set app.name=myapp # Goes into app.kubernetes.io/name
--set app.version=v2 # Goes into app.kubernetes.io/version
--set image.tag=canary
--set replicaCount=1
ಅಷ್ಟೇ! ನೀವು ಸೇವೆಯನ್ನು ಪಿಂಗ್ ಮಾಡಿದರೆ, ಕ್ಯಾನರಿ ಅಪ್ಡೇಟ್ ಟ್ರಾಫಿಕ್ ಮಾರ್ಗಗಳನ್ನು ಸಮಯದ ಒಂದು ಭಾಗ ಮಾತ್ರ ಎಂದು ನೀವು ನೋಡಬಹುದು.
ವಿವರಿಸಿದ ತರ್ಕವನ್ನು ಒಳಗೊಂಡಿರುವ ನಿಯೋಜನೆ ಯಾಂತ್ರೀಕೃತಗೊಂಡ ಸಾಧನಗಳನ್ನು ನೀವು ಹುಡುಕುತ್ತಿದ್ದರೆ, ನಂತರ ಗಮನ ಕೊಡಿ
ಮೂಲ: www.habr.com