> 文章列表 > k8s 滚动部署学习总结

k8s 滚动部署学习总结

k8s 滚动部署学习总结

k8s 滚动部署学习总结

滚动发布

滚动发布配置总结

定义:
滚动升级(Rolling update) 就是指每次更新部分Pod,而不是在同一时刻将该Service下面的所有Pod shutdown,然后去更新逐个更新可以避免将业务中断

使用Deployments实现系统部署

主要配置:

minReadySeconds: 30
strategy:rollingUpdate:maxSurge: 1maxUnavailable: 0type: RollingUpdate

strategy.type

指定部署策略可以是"Recreate"或者是 “RollingUpdate”。"RollingUpdate"是默认值。

  • Recreate: 重建式更新,在创建新 Pod 之前,所有现有的 Pod 会被杀死
  • RollingUpdate:滚动更新,简单定义 更新期间pod最多有几个等。可以指定maxUnavailable 和 maxSurge 来控制 rolling update 进程
Recreate会导致站点的停机,Recreate策略适合:不面向用户,可接受少了停机时间
RollingUpdate 可以让服务在接受用户流量的情况下,部署新的版本不出现停机

minReadySeconds

minReadySeconds是一个可选字段,用于指定新创建的 Pod 在没有任意容器崩溃情况下的最小就绪时间, 只有超出这个时间 Pod 才被视为可用。(如果没有设置该值,Kubernetes会假设该容器启动起来后就提供服务了)默认值为 0

例如
minReadySeconds: 30 Pod就绪30秒后视为可用

可以结合readinessProbe 就绪探针一起使用,就绪探针可参考《k8s-故障转移 livenessProbe & readinessProbe 学习总结》

strategy.rollingUpdate.maxSurge

滚动升级过程中最多可以比原始Deployments中的replicas设置多出的POD数量(注意maxSurge值不能为0 默认值为 25%

例如:
maxSurage=1,replicas=2,则表示Kubernetes会先启动1一个新的Pod后才删掉一个旧的POD,
整个升级过程中最多会有2+1个POD。也可以使用百分比例如:10%

strategy.rollingUpdate.maxUnavaible

用来指定滚动升级过程中最多有多少个POD处于无法提供服务的状态,该值可以是绝对数字(例如,5),也可以是所需 Pod 的百分比(例如,10%)(注意maxUnavaible值不能为0 默认值为 25%

例如:maxUnavaible=1,则表示Kubernetes整个升级过程中最多会有1个POD处于无法服务的状态,
可以保证有足够的pod(或者认为是足够的性能)提供服务。

滚动发布实例

Deployment 配置文件如下

apiVersion: apps/v1
kind: Deployment
metadata:name: order-service-deploymentspec:replicas: 2selector:matchLabels: #定义匹配的标签,必须要设置 只能配置一个(template.metadata.labels 中的一个)app: order-service #匹配的目标标签,strategy:rollingUpdate:maxSurge: 1 #整个升级过程中最多会有2+1个POD replicas=2maxUnavailable: 1 #最多只能有一个Pod不能使用type: RollingUpdate     #指定策略为滚动升级template:metadata:labels:app: order-service version: "2ffff22"  #注意version 可以实现apply -f 镜像latest#定义pod信息 spec:imagePullSecrets:- name: myaliyunsecret     containers:- name: order-service-runtime #容器名称(自定义)image: registry.cn-hangzhou.aliyuncs.com/jimliu/order-service:latest# 就绪探测  控制Pod是否就绪 Service是否能够使用PodreadinessProbe:# 会访问localhost:5555/startok 这个http请求httpGet: #scheme: http https 默认httppath: /startokport: 5555# 可以自定义请求头httpHeaders:- name: Custom-Headervalue: AwesomeinitialDelaySeconds: 5 #延迟探测时间timeoutSeconds: 1periodSeconds: 5 #访问频率failureThreshold: 3

注意给template添加一个version自定义label,这样可以使用helm或者其他模板方式更新此字段 否则如果镜像是latest apply -f 会提示 unchanged

在这里插入图片描述

开始部署前

在这里插入图片描述

当前版本
在这里插入图片描述

重新创建镜像并推送

docker build -t order-service .
docker tag order-service registry.cn-hangzhou.aliyuncs.com/jimliu/order-service
docker push registry.cn-hangzhou.aliyuncs.com/jimliu/order-service:latest

开始滚动部署

可以看到此时已经停掉了一个pod 并正在创建两个新的pod

  • 满足maxSurage=1,replicas=2整个升级过程中最多会有2+1=3个POD
  • 满足maxUnavaible=1 最多只能有1个POD不可用

在这里插入图片描述

访问 http://192.168.0.160:5555/version 系统整体还是可以访问,并未中断服务

在这里插入图片描述

使用 kubectl rollout status deployment order-service-deployment 可以看到滚动部署的状态

在这里插入图片描述

部署完成后可以看到原来的pod已经被替换为新的pod
在这里插入图片描述

访问 http://192.168.0.160:5555/version 版本已经更新

在这里插入图片描述