k8s 中 Pod 的控制器( 二 )

可以看到 Deployment 中默认的更新方式滚动更新 , 并且默认的滚动更新的策略是 最大 25% 不可用 , 最大 25% 增加 。
更新 Deployment1、直接更新
$ kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.20.1 -n study-k8s# 或者$ kubectl set image deployment/nginx-deployment nginx=nginx:1.20.1 -n study-k8s2、对 Deployment 执行 edit 操作
$ kubectl get deployment -n study-k8sNAMEREADYUP-TO-DATEAVAILABLEAGEnginx-deployment3/33318m$ kubectl edit deployment -n study-k8s# 修改对应的镜像版本 , 保存即可spec:containers:- image: nginx:1.20.3imagePullPolicy: IfNotPresentname: nginx3、直接编辑部署的 YAML 文件 , 然后重新 Apply
$ kubectl apply -f nginx-deployment.yaml -n study-k8sdeployment.apps/nginx-deployment configured$ kubectl get pods -n study-k8sNAMEREADYSTATUSRESTARTSAGEnginx-deployment-6bcf8f4884-dxxxg1/1Running038snginx-deployment-6bcf8f4884-plbkh0/1ContainerCreating013snginx-deployment-cc4b758d6-lzlxl1/1Running07m25snginx-deployment-cc4b758d6-r5rkb1/1Running07m11s回滚 deployment了解了如何更新 deployment , 那么当部署出现问题 , 如果回滚呢 , 下面来详细介绍下
查看之前部署的版本
$ kubectl rollout history deployment/nginx-deployment -n study-k8sdeployment.apps/nginx-deploymentREVISIONCHANGE-CAUSE1<none>2<none>3<none>4<none>5<none>6<none>7image updated to 1.21.1REVISION:就是之前部署的版本信息;
CHANGE-CAUSE:变动的备注信息 。
$ kubectl apply -f nginx-deployment.yaml -n study-k8s --record加上 --record , 或者每次部署完之后 , 使用
$ kubectl annotate deployment/nginx-deployment kubernetes.io/change-cause="image updated to 1.21.1" -n study-k8sCHANGE-CAUSE 信息就会被记录
查看历史版本的详细详细
$ kubectl rollout history deployment/nginx-deployment --revision=6 -n study-k8sdeployment.apps/nginx-deployment with revision #6Pod Template:Labels: app=nginx pod-template-hash=d985dd8bfContainers:nginx:Image: nginx:1.20.3Port: 80/TCPHost Port: 0/TCPEnvironment: <none>Mounts: <none>Volumes: <none>回滚
# 回滚到上一个版本$ kubectl rollout undo deployment/nginx-deployment -n study-k8s# 回滚到指定的版本$ kubectl rollout undo deployment/nginx-deployment --to-revision=5 -n study-k8s缩放 Deployment
$ kubectl scale deployment/nginx-deployment --replicas=10 -n study-k8s$kubectl get pods -n study-k8sNAMEREADYSTATUSRESTARTSAGEnginx-deployment-66b6c48dd5-5scbj1/1Running044snginx-deployment-66b6c48dd5-7nmtp1/1Running044snginx-deployment-66b6c48dd5-f5xsg1/1Running012mnginx-deployment-66b6c48dd5-fnpnb1/1Running012mnginx-deployment-66b6c48dd5-gg4ng1/1Running044snginx-deployment-66b6c48dd5-qd5z71/1Running044snginx-deployment-66b6c48dd5-qqh4m1/1Running044snginx-deployment-66b6c48dd5-xww491/1Running044snginx-deployment-66b6c48dd5-zndlh1/1Running044snginx-deployment-66b6c48dd5-zp45g1/1Running012m关于使用 deployment 实现 k8s 中的几种部署策略 , 可参见Kubernetes 部署策略详解
StatefulSetStatefulSet 用来管理有状态的应用 。
在 Pods 管理的基础上 , 保证 Pods 的顺序和一致性 。与 Deployment一样 , StatefulSet 也是使用容器的 Spec 来创建Pod , 与之不同 StatefulSet 创建的 Pods 在生命周期中会保持持久的标记(例如Pod Name) 。
StatefulSet 适用于具有以下特点的应用:
1、稳定的、唯一的网络标识符;
2、稳定的、持久的存储;
3、有序的、优雅的部署和扩缩;
4、有序的、自动的滚动更新 。
那么什么是有状态服务什么是无状态服务呢?

经验总结扩展阅读