Kubernetes - Deployment创建Pod及滚动升级,回滚命令 示例
我们先看看deployment的官方解释:
Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController 来方便的管理应用。典型的应用场景包括:
- 定义Deployment来创建Pod和ReplicaSet
- 滚动升级和回滚应用
- 扩容和缩容
- 暂停和继续Deployment
看起来说的是升级版的RC和RS,提供了更加完善的版本升级和版本回滚功能;
1、和使用helm一样,先构建一个简单的文件夹:
tree demodeploy/ demodeploy/ ├── Chart.yaml ├── templates │ └── demodeploy.yaml └── values.yaml
2、
[root demodeploy]# cat Chart.yaml
name: demodeploy
version: "v1.0"
description: demodeploy build by Helm
3、
[root demodeploy]# cat templates/demodeploy.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: demodeploy
spec:
minReadySeconds: 5 #滚动升级时,容器准备就绪时间最少为5s
strategy:
type: RollingUpdate #升级方式 recreate
rollingUpdate: ##若replicas为3,则整个升级,pod个数在2-4个之间
maxSurge: 1 ##滚动升级时会先启动1个pod
maxUnavailable: 1 ##滚动升级时允许的最大Unavailable的pod个数
replicas: {{.Values.core.replicas}}
template:
metadata:
labels:
app: demodeploy
spec:
containers:
- name: demodeploy
image: {{.Values.docker.registry}}/demo:{{.Values.demodeploy.version}}
imagePullPolicy: {{.Values.docker.pullPolicy}}
# resources:
# limits:
# memory: "128Mi"
# requests:
# memory: "64Mi"
volumeMounts:
- mountPath: /home/test/daopinz
name: config-volume
volumes:
- name: config-volume
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: demodeploy
labels:
app: demodepoly
spec:
type: NodePort
sessionAffinity: ClientIP
ports:
- port: 12321
name: demodeploy-port
nodePort: 32111
selector:
app: demodeploy
4、
[root demodeploy]# cat values.yaml
docker:
registry: xxx-xxx:5000/docker.io
pullPolicy: Always
core:
replicas: 2
demodeploy: #此处不允许有-
version: "v1.0"
5、
helm lint demodeploy/ #检查依赖和模板配置是否正确,如果文件格式错误,可以根据提示进行修改
helm install --dry-run --debug demodeploy/ #检查配置和模板是否有效
helm install -n demodeploy demodeploy #根据配置创建Pod
6、
deployment:(多种升级方案:Recreate--删除所有已存在的pod,重新创建新的; RollingUpdate--滚动升级,逐步替换的策略,同时滚动升级时,支持更多的附加参数,例如设置最大不可用pod数量,最小升级间隔时间等等。
recreate策略将会在升级过程中,停止服务,但会保证应用版本一致;使用rollingUpdate不会中断服务,但会导致调用时出现应用版本不一致的情况,输出内容不一致。)
kubectl api-versions #查看ApiServer版本信息
kubectl create -f demodeploy.yaml --record=true #创建Deployment,记录版本历史(–record=true)注,不使用此方式创建deployment,使用helm创建,依旧可使用下面的命令
[root demodeploy]# kubectl rollout history deployment/demodeploy
deployments "demodeploy"
REVISION CHANGE-CAUSE
5 kubectl set image deployment/demodeploy demodeploy=bcmt-registry:5000/docker.io/dome:v3.0 --record=true
7 <none>
8 kubectl set image deployment/demodeploy demodeploy=bcmt-registry:5000/docker.io/dome:v1.0 --record=true
9 kubectl set image deployment/demodeploy demodeploy=bcmt-registry:5000/docker.io/dome:v2.0 --record=true
kubectl rollout history deployments
kubectl rollout history deployment --revision=3 #可以查看deployment版本历史明细
kubectl describe deployment/demodeploy
kubectl rollout status deployment/demodeploy #查看部署状态
kubectl set image deployment/demodeploy demodeploy=xxx-xxx:5000/docker.io/dome:v2.0 --record #滚动升级 (推荐使用)
kubectl apply -f update-nginx-deployment.yaml #修改了demodeploy的镜像,就相当于升级 (参考使用)
kubectl rollout pause deployment/demodeploy #暂停
kubectl rollout resume deployment/demodeploy #继续
kubectl rollout undo deployment/demodeploy #回滚
kubectl rollout undo deployment/demodeploy --to-revision=2 #回滚至指定版本