lab:kubernetes_app:step_6_-_application_configuration
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
lab:kubernetes_app:step_6_-_application_configuration [2024/02/15 01:20] – [Kick Off the Update] user | lab:kubernetes_app:step_6_-_application_configuration [2024/05/13 18:16] (current) – removed user | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Step 6 - Application Configuration ====== | ||
- | // See [[https:// | ||
- | In this step we look at deploying different application images | ||
- | * doritoes/ | ||
- | * doritoes/ | ||
- | * doritoes/ | ||
- | |||
- | Strategies supported by Kubernetes out of the box: | ||
- | * rolling deployment (default) - replaces pods running the older version with the new version one-by-one | ||
- | * recreate deployment - terminates all pods and replaces them with the new version | ||
- | Strategies that requires customization or specialized tools: | ||
- | * ramped slow rollout | ||
- | * best-effort controlled rollout | ||
- | * blue/green deployment | ||
- | * canary deployment | ||
- | * shadow deployment | ||
- | * A/B testing | ||
- | |||
- | ====== Rolling Deployment ====== | ||
- | ===== Open a Second Session to Monitor the Process ===== | ||
- | Open a second terminal or ssh session and run the watch command | ||
- | < | ||
- | You will watch the status of your deployment here. | ||
- | |||
- | ===== Update the Image in k8s-deployment-web.yml ===== | ||
- | Update '' | ||
- | < | ||
- | |||
- | Here is the entire modified file: | ||
- | <file yaml k8s-deployment-web.yml> | ||
- | apiVersion: apps/v1 | ||
- | kind: Deployment | ||
- | metadata: | ||
- | name: web-deployment | ||
- | spec: | ||
- | replicas: 2 | ||
- | selector: | ||
- | matchLabels: | ||
- | app: web | ||
- | template: | ||
- | metadata: | ||
- | labels: | ||
- | app: web | ||
- | spec: | ||
- | nodeSelector: | ||
- | my-role: worker # restrict scheduling to the nodes with the label my-role: worker | ||
- | containers: | ||
- | - name: web | ||
- | image: doritoes/ | ||
- | ports: | ||
- | - containerPort: | ||
- | livenessProbe: | ||
- | httpGet: | ||
- | path: / | ||
- | port: 8080 | ||
- | initialDelaySeconds: | ||
- | periodSeconds: | ||
- | readinessProbe: | ||
- | httpGet: | ||
- | path: / | ||
- | port: 8080 | ||
- | initialDelaySeconds: | ||
- | periodSeconds: | ||
- | </ | ||
- | |||
- | ===== Kick Off the Update ===== | ||
- | This process will perform a one-by-one replacement. Health checks (liveness and readiness) ensure new pods are healthy before taking old ones offline. | ||
- | |||
- | Start the update | ||
- | < | ||
- | |||
- | Observe the rollout | ||
- | < | ||
- | |||
- | Watch the status in the other session. What can you see, and what useful information is missing? | ||
- | |||
- | Examine the deployment and see which image is running: | ||
- | < | ||
- | |||
- | Here is a way to get the images running on all pods: | ||
- | < | ||
- | kubectl get pods --all-namespaces -o jsonpath=' | ||
- | sort | ||
- | </ | ||
- | ===== Troubleshooting ===== | ||
- | If the rollout is stalled, use these commands to investigate potential issues: | ||
- | < | ||
- | kubectl describe deployment web-deployment | ||
- | kubectl get pods | ||
- | kubectl logs < | ||
- | </ | ||
- | |||
- | ===== Rollback ===== | ||
- | Roll back the update using | ||
- | < | ||
- | kubectl rollout undo deployment/ | ||
- | </ | ||
- | |||
- | |||
- | Observe the rollback | ||
- | < | ||
- | |||
- | Watch the status in the other session. | ||
- | |||
- | ===== Improvements ===== | ||
- | You can customize the rolling deployment behavior within your Deployment spec with the '' | ||
- | |||
- | For example here is adding the ability to add up to 25% of the desired number of pods and ensuring you never drop before the desired number of pods. | ||
- | |||
- | <code yaml> | ||
- | spec: | ||
- | replicas: 2 | ||
- | strategy: | ||
- | type: RollingUpdate | ||
- | rollingUpdate: | ||
- | maxSurge: 25% # Can exceed the desired number of pods | ||
- | maxUnavailable: | ||
- | # ... rest of your deployment specification ... | ||
- | </ | ||
- | |||
- | ====== Next Step ====== | ||
- | Continue to [[Step 7 - Load Balancing]] | ||
- | |||
- | Or, back to [[Step 5 - Application Pods]] or [[Start]] |
lab/kubernetes_app/step_6_-_application_configuration.1707960035.txt.gz · Last modified: 2024/02/15 01:20 by user