heritrix做网站,网站建设推广优化公司,wordpress多语言建站,长沙专业网站设计公司目录
一、deployment部署控制器概念
二、deployment资源的清单编写
三、小结
功能
使用场景
原理
四、deployment实现升级和回滚
1.编辑deployment资源清单#xff08;v1版本#xff09;
2.创建service资源用于访问
编辑
3.修改deploy清单中pod镜像版本为V2
4…目录
一、deployment部署控制器概念
二、deployment资源的清单编写
三、小结
功能
使用场景
原理
四、deployment实现升级和回滚
1.编辑deployment资源清单v1版本
2.创建service资源用于访问
编辑
3.修改deploy清单中pod镜像版本为V2
4.小结
5.回滚
五、deployment的升级策略 六、蓝绿发布
1.概念
2.准备“蓝环境”版本v1
3.编辑svc资源
4.蓝环境v1准备完毕访问测试
5.准备“绿环境”v2
6.切换svc资源的标签让其指向新版本
7.访问测试 编辑
七、灰度发布金丝雀发布 一、deployment部署控制器概念 在学习rc和rs控制器资源时这两个资源都是控制pod的副本数量的但是他们两个有个缺点就是在部署新版本pod或者回滚代码的时候需要先apply资源清单然后再删除现有pod通过资源控制重新拉取新的pod来实现回滚或者迭代升级deployments资源实际上就是用来专门部署业务代码的控制器专门用于企业业务代码的升级和回滚deployment部署控制器实际上控制的是rs副本控制器如果说rs副本控制器是控制pod的副本数量的那么deployment就是专门控制rs控制器资源的 先看一下Deployment、RS、Pod它们三者之间的关系 二、deployment资源的清单编写
deployment资源与replicaset资源的清单编写方式没什么区别只是kind的类型换成deployment就可以了就实现了资源清单的编辑
[rootk8s1 deploy]# cat deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: dm01
spec:#控制pod的副本数量replicas: 3#指定标签选择器基于标签匹配podselector:#声明基于标签匹配podmatchLabels:k8s: oslee#pod的编写定义pod模板template:metadata:name: pod01labels:k8s: osleespec:containers:- name: c1image: harbor.oslee.com/oslee-private/my-nginx:v1ports:- containerPort: 80[rootk8s1 deploy]# kubectl apply -f deploy.yaml
deployment.apps/dm01 created
三、小结 先以查看标签的方式查看一下pod可以看到下图中多出来一个自动生成的标签 deployment是用来部署服务的一个资源是常见的企业中经常用的资源控制器
功能 管理rs资源通过rs资源管理pod它具有上线部署、副本设置、滚动升级、回滚等功能它也提供了声明式更新可以使用apply命令进行更新镜像版本之类的能力 使用场景 企业部署迭代应用 原理 通过“标签”管理实现rs资源的控制它会在自动创建rs的过程中给rs自动生成一个特有的标签(专属于deployment)当apply更新清单的时候它会通过标签选定是使用历史的rs还是重新创建rs 四、deployment实现升级和回滚 1.编辑deployment资源清单v1版本
上面已创建好
2.创建service资源用于访问
[rootk8s1 deploy]# cat svc.yaml
apiVersion: v1
kind: Service
metadata:name: svc01
spec:type: NodePortselector:k8s: osleeclusterIP: 10.200.200.200ports:- port: 99targetPort: 80nodePort: 31000[rootk8s1 deploy]# kubectl apply -f svc.yaml
service/svc01 created3.修改deploy清单中pod镜像版本为V2
[rootk8s1 deploy]# cat deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: dm01
spec:#控制pod的副本数量replicas: 3#指定标签选择器基于标签匹配podselector:#声明基于标签匹配podmatchLabels:k8s: oslee#pod的编写定义pod模板template:metadata:name: pod01labels:k8s: osleespec:containers:- name: c1image: harbor.oslee.com/oslee-private/my-nginx:v2ports:- containerPort: 80[rootk8s1 deploy]# kubectl apply -f deploy.yaml
deployment.apps/dm01 configured 4.小结 deployment不需要删除原有的pod只需要apply重新更新一下资源清单即可实现产品迭代同比与rc和rs资源优势明显deployment资源在apply升级后是又重新创建了rs资源也就是再升级的过程中有两个rs资源每修改一次镜像就创建一个rs资源我们选择使用哪个镜像就会将这个镜像创建相应的pod副本数不用的就逐渐归零 5.回滚
# 查看滚动更新状态
kubectl rollout status deployment dm01#查看历史版本
kubectl rollout history deployment dm01#查看指定版本的信息
kubectl rollout history deployment/dm01 --revision2#回滚到历史版本
kubectl rollout undo deployment/dm01 --to-revision2
五、deployment的升级策略 什么是升级策略就是升级时过程的控制策略 设置升级的策略类型类型有两种 第一种Recreate先停止所有pod再批量创建新的pod生产环境不建议使用因为用户在此时会访问不到服务第二种RollingUpdate滚动更新即实现部分更新逐渐替换掉原有的pod也就是默认的策略 [rootk8s1 deploy]# cat deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: dm01
spec:#声明设置升级策略strategy:#设置升级的策略类型类型有两种#第一种Recreate先停止所有pod再批量创建新的pod生产环境不建议使用因为用户在此时会访问不到服务#第二种RollingUpdate滚动更新即实现部分更新逐渐替换掉原有的pod也就是默认的策略type: RollingUpdate#如果设置了滚动更新RollingUpdate类型还需要设置更新的策略rollingUpdate:#在原有pod副本数量的基础上多启动pod的数量也就是说更新过程中同时可以存在2副本数个pod新旧版本一起maxSurge: 2#在升级的过程中最大不可访问的pod的数量也就是说pod副本数-1的数量可以被访问maxUnavailable: 1replicas: 7selector:matchLabels:k8s: osleetemplate:metadata:name: pod01labels:k8s: osleespec:containers:- name: c1image: harbor.oslee.com/oslee-private/my-nginx:v1ports:- containerPort: 80[rootk8s1 deploy]# kubectl apply -f deploy.yaml
deployment.apps/dm01 created# 监听变化
[rootk8s1 ~]# watch -n 2 kubectl get all六、蓝绿发布
1.概念 蓝绿发布就是准备两套代码不需要停止老版本不影响上一个版本的用户访问而是在另一套环境中部署新版本然后进行测试测试通过后将用户流量切换到新的版本。 优点业务没有终端升级风险相对较小缺点消耗i资源 实现方式 部署当前版本代码部署svc资源部署新版本使用新的deployment名称新的标签切换svc标签到新的pod中实现业务切换 2.准备“蓝环境”版本v1
[rootk8s1 deploy]# cat lan.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: dm01
spec:#控制pod的副本数量replicas: 3#指定标签选择器基于标签匹配podselector:#声明基于标签匹配podmatchLabels:k8s: oslee-lan#pod的编写定义pod模板template:metadata:name: pod01labels:k8s: oslee-lanspec:containers:- name: c1image: harbor.oslee.com/oslee-private/my-nginx:v1ports:- containerPort: 80[rootk8s1 deploy]# kubectl apply -f lan.yaml
deployment.apps/dm01 created
3.编辑svc资源
[rootk8s1 deploy]# cat svc.yaml
apiVersion: v1
kind: Service
metadata:name: svc01
spec:type: NodePortselector:k8s: oslee-lanclusterIP: 10.200.200.200ports:- port: 99targetPort: 80nodePort: 31000[rootk8s1 deploy]# kubectl apply -f svc.yaml
service/svc01 created
4.蓝环境v1准备完毕访问测试 5.准备“绿环境”v2
[rootk8s1 deploy]# cat lv.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: dm02
spec:#控制pod的副本数量replicas: 3#指定标签选择器基于标签匹配podselector:#声明基于标签匹配podmatchLabels:k8s: oslee-lv#pod的编写定义pod模板template:metadata:name: pod01labels:k8s: oslee-lvspec:containers:- name: c1image: harbor.oslee.com/oslee-private/my-nginx:v2ports:- containerPort: 80[rootk8s1 deploy]# kubectl apply -f lv.yaml
deployment.apps/dm02 created 6.切换svc资源的标签让其指向新版本
[rootk8s1 deploy]# cat svc.yaml
apiVersion: v1
kind: Service
metadata:name: svc01
spec:type: NodePortselector:# 将lan修改为lvk8s: oslee-lvclusterIP: 10.200.200.200ports:- port: 99targetPort: 80nodePort: 31000[rootk8s1 deploy]# kubectl apply -f svc.yaml
service/svc01 configured7.访问测试 七、灰度发布金丝雀发布 灰度发布就是让新旧版本一起上线旧版本和新版本让用户随机访问到然后没有业务问题之后逐渐调高新版本副本数量逐渐调低旧版本副本数量从而达到灰度发布 实现的机制 部署老版本使用多副本模拟正式环境部署svc匹配标签部署新版本标签与老版本标签一致让svc能够访问到副本从0开始灰度版本测试没有问题将恢复版本的副本数量逐渐调高增加为生产数量将旧版本逐渐调低至0此时流量全部跑到了新版本上 至此已成艺术