简介
本全面教程将探讨 Kubernetes 部署的基础知识,为开发人员和 DevOps 专业人员提供有关管理容器化应用程序的深入见解。通过最佳实践和实际示例,学习如何配置、扩展和更新部署。
本全面教程将探讨 Kubernetes 部署的基础知识,为开发人员和 DevOps 专业人员提供有关管理容器化应用程序的深入见解。通过最佳实践和实际示例,学习如何配置、扩展和更新部署。
Kubernetes 部署是容器编排的关键组件,可在分布式计算环境中实现可靠且可扩展的应用程序管理。它提供了一种声明式方法,用于在集群中定义、更新和维护应用程序实例。
Kubernetes 中的部署通过定义 Pod 和副本集的期望状态来管理无状态应用程序工作负载。它们确保高可用性,并便于无缝更新和回滚。
| 参数 | 描述 | 默认值 |
|---|---|---|
| 副本数 | Pod 实例的数量 | 1 |
| 策略 | 更新策略 | RollingUpdate |
| 选择器 | 匹配 Pod 的标签 | 必填 |
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Kubernetes 提供了强大的 CLI 工具来管理部署:
## 创建部署
kubectl apply -f nginx-deployment.yaml
## 扩展部署
kubectl scale deployment nginx-deployment --replicas=5
## 更新部署镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.19.0
Kubernetes 支持多种部署策略,以确保最少的停机时间和顺利的应用程序更新:
滚动重启是 Kubernetes 中一种强大的机制,用于在零停机时间的情况下重启部署。它允许进行无缝的应用程序更新和 Pod 重新创建,而不会中断服务可用性。
| 方法 | 命令 | 行为 |
|---|---|---|
| 完全重启 | kubectl rollout restart deployment | 重新创建所有 Pod |
| 选择性重启 | kubectl rollout restart deployment/specific - app | 重启特定部署 |
| 基于镜像的重启 | kubectl set image deployment | 使用新镜像更新并重启 |
## 重启整个部署
kubectl rollout restart deployment nginx - deployment
## 重启特定部署
kubectl rollout restart deployment/web - app
## 更新部署镜像并自动重启
kubectl set image deployment/web - app web - app=newimage:v2
## 验证滚动更新状态
kubectl rollout status deployment/web - app
## 暂停滚动更新过程
kubectl rollout pause deployment/web - app
## 恢复滚动更新
kubectl rollout resume deployment/web - app
## 回滚到上一版本
kubectl rollout undo deployment/web - app
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
蓝绿部署通过维护两个相同的生产环境来实现零停机更新:
apiVersion: apps/v1
kind: Deployment
metadata:
name: canary-deployment
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
| 技术 | 流量分配 | 风险级别 | 复杂度 |
|---|---|---|---|
| 滚动更新 | 渐进式 | 低 | 中等 |
| 蓝绿部署 | 即时切换 | 中等 | 高 |
| 金丝雀部署 | 基于百分比 | 低 | 高 |
## 执行渐进式部署
kubectl rollout history deployment/web-app
kubectl rollout undo deployment/web-app --to-revision=2
## 实施金丝雀部署
kubectl apply -f canary-deployment.yaml
kubectl set image deployment/web-app web-app=new-image:v2
## 自动水平 Pod 扩展
kubectl autoscale deployment web-app --min=2 --max=10 --cpu-percent=70
## 精确控制更新部署
kubectl patch deployment web-app -p '{"spec":{"strategy":{"type":"RollingUpdate","rollingUpdate":{"maxUnavailable":1}}}}'
## 原子镜像替换
kubectl set image deployment/web-app web-app=newimage:v2 --record
## 验证部署状态
kubectl rollout status deployment/web-app
Kubernetes 部署对于维护健壮、可扩展且具有弹性的容器化应用程序至关重要。通过理解部署配置、滚动更新策略和管理技术,团队能够有效地编排复杂的容器环境,确保分布式系统中的高可用性和无缝的应用程序更新。