一. 前言
在传统的部署方式中,当需要升级集群中的某个服务时,需要停止该服务相关的Pod,pull最新的docker镜像,然后重新启动。 如果一下把所有Pod都停止,服务在升级的时间内会不可用。因此,Kubernetes提供了滚动升级的功能,一次只更新一小部分副本,成功后,再更新更多的副本,最终完成所有副本的更新,最大好处是零停机,整个更新过程始终有副本在运行,从而保证了业务的连续性。
二. 环境准备
1.首先准备4个不同版本的镜像,用于测试(不同版本服务的接口返回对应的版本号)
2. 原始的创建pod的docker-project.yaml文件
apiVersion: apps/v1 #当前格式的版本
kind: Deployment #当前创建资源的类型, 当前类型是Deployment
metadata: #当前资源的元数据
name: docker-project #当前资源的名字 是元数据必须的项
spec:
selector:
matchLabels:
app: web_server #是当前Deployment的规格说明
replicas: 1 #指当前创建的副本数量 默认不填 默认值就为‘1’
template: #定义pod的模板
metadata: #当前pod的元数据
labels: #至少顶一个labels标签,可任意创建一个 key:value
app: web_server
spec: #当前pod的规格说明
containers: #容器
- name: my-docker-project #是容器的名字容器名字是必须填写的
image: 192.168.214.128:5000/docker-project:v1 #镜像 镜像的名字和版本
imagePullPolicy: Always #拉取策略: Always--总是拉取 IfNotPresent--默认值,本地有则使用本地镜像,不拉取 Never--只使用本地镜像,从不拉取
ports:
- containerPort: 8080
livenessProbe: --存活探针:健康检查
httpGet:
path: api/heathy
port: 8080
---
kind: Service
apiVersion: v1
metadata:
name: docker-project-service
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 31000
selector:
app: web_server
3.使用命令发布服务
kubectl create -f docker-project.yaml
4.查看服务
kubectl get services;
5.在页面上访问:
三. 滚动升级的三种方式
方式一. 通过修改配置文件方式
1. 修改配置文件(docker-project:v1修改为docker-project:v2)
apiVersion: apps/v1 #当前格式的版本
kind: Deployment #当前创建资源的类型, 当前类型是Deployment
metadata: #当前资源的元数据
name: docker-project #当前资源的名字 是元数据必须的项
spec:
selector:
matchLabels:
app: web_server #是当前Deployment的规格说明
replicas: 1 #指当前创建的副本数量 默认不填 默认值就为‘1’
template: #定义pod的模板
metadata: #当前pod的元数据
labels: #至少顶一个labels标签,可任意创建一个 key:value
app: web_server
spec: #当前pod的规格说明
containers: #容器
- name: my-docker-project #是容器的名字容器名字是必须填写的
image: 192.168.214.128:5000/docker-project:v2 #镜像 镜像的名字和版本
imagePullPolicy: Always #拉取策略: Always--总是拉取 IfNotPresent--默认值,本地有则使用本地镜像,不拉取 Never--只使用本地镜像,从不拉取
ports:
- containerPort: 8080
livenessProbe:
httpGet:
path: api/heathy
port: 8080
---
kind: Service
apiVersion: v1
metadata:
name: docker-project-service
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 31000
selector:
app: web_server
2. 命令发布服务
kubectl apply -f docker-project.yaml
3. 页面查看结果
方式二: 使用patch命令
1. 查看deployment
2. 通过patch升级
kubectl patch deployment docker-project --patch '{"spec": {"template": {"spec": {"containers": [{"name": "my-docker-project","image":"192.168.214.128:5000/docker-project:v3"}]}}}}'
3. 查看页面
方式三: 使用set image命令
1. 通过set image命令升级
kubectl set image deploy docker-project *=192.168.214.128:5000/docker-project:v4
2. 查看页面
备注:业务量突然增加,我们需要增加副本
kubectl scale deployment/docker-project --replicas=2