如何更好的用好Deployment?本文尝试从Deployment的使用、控制器实现原理及使用规范3方面进行阐述。希望对您有所帮助!
一、Kubernetes Deployment使用浅析
Kubernetes Deployment 是一种高级资源对象,用于声明和管理 Pod 和 ReplicaSet。它提供了声明式更新方式,确保系统中的应用程序处于期望的状态。以下是 Kubernetes Deployment 的详细使用说明。
1. 创建 Deployment
示例 YAML 文件
以下是一个简单的 Deployment 示例 YAML 文件:
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:1.14.2
ports:
- containerPort: 80
这个 YAML 文件定义了一个名为 nginx-deployment
的 Deployment,对应三个副本的 Pod,每个 Pod 运行一个 Nginx 容器,监听 80 端口。
创建 Deployment
使用 kubectl
命令创建 Deployment:
kubectl apply -f nginx-deployment.yaml
2. 查看 Deployment 状态
查看 Deployment 详情:
kubectl get deployments
kubectl describe deployment nginx-deployment
查看 Pod 状态:
kubectl get pods
3. 更新 Deployment
示例:更新镜像版本
修改 YAML 文件,将 Nginx 镜像版本更新为 1.16.0:
spec:
template:
spec:
containers:
- name: nginx
image: nginx:1.16.0
应用更新:
kubectl apply -f nginx-deployment.yaml
查看滚动更新状态:
kubectl rollout status deployment/nginx-deployment
4. 回滚 Deployment
如果更新出现问题,可以回滚到之前的版本:
查看更新历史记录:
kubectl rollout history deployment/nginx-deployment
执行回滚:
kubectl rollout undo deployment/nginx-deployment
回滚到指定版本:
kubectl rollout undo deployment/nginx-deployment --to-revision=2
5. 扩容和缩容 Deployment
扩容
将副本数增加到 5:
kubectl scale deployment nginx-deployment --replicas=5
缩容
将副本数减少到 2:
kubectl scale deployment nginx-deployment --replicas=2
6. 删除 Deployment
删除 Deployment 及其相关的 Pod:
kubectl delete deployment nginx-deployment
7. 高级使用
使用策略
可以在 Deployment 中定义滚动更新策略,以控制更新时的行为:
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
maxUnavailable
:更新过程中允许不可用的 Pod 数量或百分比。maxSurge
:更新过程中允许超出期望 Pod 数量的 Pod 数量或百分比。
设置环境变量
在 Deployment 中可以设置环境变量供容器使用: