为了更好的解决服务编排的问题, 我们可以使用Deployment控制器。这种控制器不直接管理pod,他通过ReplicaSet来管理pod。
目录
1.使用yaml文件形式,创建deployment
2.扩缩容
3.镜像更新
4.版本回退
5.金丝雀发布
金丝雀发布的优点
金丝雀发布的缺点
Deployment主要功能:
- 支持ReplicaSet的所有公共
- 支持发布的停止、继续
- 支持滚动升级和回退版本
1.使用yaml文件形式,创建deployment
# 创建一个ddd的命名空间
kubectl create ns ddd
# vim dep.yaml
apiVersion: apps/v1 #版本号
kind: Deployment #种类,注意大小写
metadata: #元数据
name: dep #rs名称
namespace: ddd #所属命名空间
spec: #详情描述
replicas: 3 #副本数量
selector: #选择器,通过他指定该控制器管理那些pod
matchLabels: #Label匹配规则
app: nginx-pod #标签名
template: #模板,当副本数量不足时,会根据下面模板创建pod
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.17.1
# 创建deployment,注意要加 --record=true
kubectl create -f dep.yaml --record=true
# 查看dep
# UP-TO-DATE 最新版本的pod的数量
# AVAILABLE 当前可用的pod的数量
kubectl get deploy dep -n ddd
NAME READY UP-TO-DATE AVAILABLE AGE
dep 3/3 3 3 4s
# 查看rs
kubectl get rs -n ddd
NAME DESIRED CURRENT READY AGE
dep-858db84f89 3 3 3 4m16s
# 查看pod
NAME READY STATUS RESTARTS AGE
dep-858db84f89-5qmxq 1/1 Running 0 4m58s
dep-858db84f89-766t8 1/1 Running 0 4m58s
dep-858db84f89-gjb6m 1/1 Running 0 4m58s
2.扩缩容
扩容可以有两种方法
1. 命令变更副本数量为5个
[root@k8s-master ~]# kubectl scale deploy dep --replicas=5 -n ddd
[root@k8s-master ~]# kubectl get deploy dep -n ddd
NAME READY UP-TO-DATE AVAILABLE AGE
dep 5/5 5 5 8m40s
2. 编辑更新副本数量为6个
[root@k8s-master ~]# kubectl edit deploy dep -n ddd
编辑spec里的replicas
spec:
progressDeadlineSeconds: 600
replicas: 6
[root@k8s-master ~]# kubectl get deploy dep -n ddd
NAME READY UP-TO-DATE AVAILABLE AGE
dep 6/6 6 6 11m
3.镜像更新
编辑dep.yaml,添加重建更新策略
spec:
strategy: # 策略
type: Recreate # 重建更新
kubectl apply -f dep.yaml
# 查看当前镜像版本为1.17.1
[root@k8s-master ~]# kubectl get deploy dep -n dev -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
dep 3/3 3 3 14m nginx nginx:1.17.1 app=nginx-pod
# 更改为1.17.2
[root@k8s-master ~]# kubectl set image deploy dep nginx=nginx:1.17.2 -n dev
deployment.apps/dep image updated
[root@k8s-master ~]# kubectl get deploy dep -n dev -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
dep 3/3 3 3 16m nginx nginx:1.17.2 app=nginx-pod
# 查看rs,发现现在rs是2个了,pod数量为6个
[root@k8s-master ~]# kubectl get rs -n dev
NAME DESIRED CURRENT READY AGE
dep-57c77dd4dd 3 3 3 2m47s
dep-6c78d7875b 0 0 0 4m31s
编辑dep.yaml,添加滚动更新策略
spec:
strategy: # 策略
type: RollingUpdate # 滚动更新策略
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
kubectl apply -f dep.yaml
# 变更镜像
[root@k8s-master ~]# kubectl set image deployment dep nginx=nginx:1.17.1 -n ddd
# 过几秒钟查看升级
[root@k8s-master ~]# kubectl get pod -n ddd
4.版本回退
kubectl rollout: 版本升级相关功能,支持下面的选项:
-
status 显示当前升级状态
-
history 显示 升级历史记录
-
pause 暂停版本升级过程
-
resume 继续已经暂停的版本升级过程
-
restart 重启版本升级过程
-
undo 回滚到上一级版本
# 查看当前升级版本的状态
[root@k8s-master ~]# kubectl rollout status deploy dep -n ddd
deployment "dep" successfully rolled out
# 查看升级历史记录
[root@k8s-master ~]# kubectl rollout history deploy dep -n ddd
deployment.apps/dep
REVISION CHANGE-CAUSE
1 kubectl create --filename=dep.yaml --record=true
2 kubectl create --filename=dep.yaml --record=true
3 kubectl create --filename=dep.yaml --record=true
# 可以发现有三次版本记录,说明完成过两次升级
# 版本回滚
# 使用--to-revision=1回滚到了1版本
[root@k8s-master ~]# kubectl rollout undo deployment dep --to-revision=1 -n ddd
# 查看发现,通过nginx镜像版本可以发现到了第一版
[root@k8s-master1 ~]# kubectl get deploy -n ddd -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES
dep 3/3 3 3 74m nginx nginx:1.17.1
5.金丝雀发布
类似灰度发布:让一小部分用户先用上新版本,还有一部分人有旧版本
Deployment控制器支持控制更新过程中的控制,如“暂停(pause)”或“继续(resume)”更新操作。
金丝雀发布的优点:
1、按比例将流量无差别地导向新版本,新版本故障影响范围小;
2、发布期间逐步对新版本扩容,同时对老版本缩容,资源利用率高。
金丝雀发布的缺点:
1、流量无差别地导向新版本,可能会影响重要用户的体验;文章来源:https://www.toymoban.com/news/detail-780041.html
2、发布周期长。文章来源地址https://www.toymoban.com/news/detail-780041.html
# 更新deployment的版本,并配置暂停deployment
[root@k8s-master ~]# kubectl set image deploy dep nginx=nginx:1.17.3 -n ddd && kubectl rollout pause depl oyment dep -n ddd
#观察更新状态
[root@k8s-master ~]# kubectl rollout status deploy dep -n ddd
Waiting for deployment "dep" rollout to finish: 1 out of 3 new replicas have been updated...
# 查看资源,发现有一部分在1,有意部分在3
[root@k8s-master ~]# kubectl get rs -n ddd -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
dep-57c77dd4dd 0 0 0 54m nginx nginx:1.17.2 app=nginx-pod,pod-template-hash=57c77dd4dd
dep-6c78d7875b 3 3 3 56m nginx nginx:1.17.1 app=nginx-pod,pod-template-hash=6c78d7875b
dep-849d4778f4 1 1 1 66s nginx nginx:1.17.3 app=nginx-pod,pod-template-hash=849d4778f4
# 确保更新的pod没问题了,继续更新
[root@k8s-master ~]# kubectl rollout resume deploy dep -n ddd
# 查看最后的更新情况,全部就为
[root@k8s-master ~]# kubectl get rs -n ddd -o wide
到了这里,关于【K8s】¹版本回退升级&金丝雀发布的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!