k8s滚动更新

本文展示了如何编写一个Kubernetes的yaml文件来创建nginxDeployment,包括设置replicas、minReadySeconds、maxSurge和maxUnavailable等参数。接着,通过kubectl命令进行滚动更新,监控更新状态,并介绍了如何使用rollout命令管理更新历史、暂停、恢复更新以及回滚到特定版本。

1.编写一个yaml文件

vi deployment-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata: 
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  replicas: 3
  progressDeadlineSeconds: 600  #表示在这个时间段内,如果 Deployment 的 Pod 没有完成更新,则认为更新失败。默认值为 600 秒。这个参数主要用于控制 Deployment 更新的超时时间,避免更新过程中出现问题导致一直处于更新中的状态
  minReadySeconds: 10     #表示 Deployment 的 Pod 至少需要在这个时间段内处于 Ready 状态,才会被认为是更新成功。默认值为 0 秒。这个参数主要用于控制 Deployment 更新的稳定性。在更新过程中,如果 Pod 的状态不稳定,可能会导致服务不可用。通过设置 minReadySeconds,可以确保更新后的 Pod 状态稳定后再将其纳入服务
  strategy:
    rollingUpdate:
      maxSurge: 1   #参数定义了在滚动更新过程中,允许同时处于正在部署状态的Pod数量与原有多少Pod数量的比例。例如,如果maxSurge设置为50%,则在进行滚动更新时,可以同时部署50%的新版本Pod,剩余的50%仍为旧版本Pod。默认值为25%,也可以使用准确的个数
      maxUnavailable: 0  #参数定义了在滚动更新过程中,允许同时处于不可用状态的Pod数量与原有多少Pod数量的比例。例如,如果maxUnavailable设置为25%,则在进行滚动更新时,最多允许25%的Pod处于不可用状态。这个参数可以用来控制滚动更新时对应用程序可用性的影响。默认值为25%,最安全的滚动更新是设置此项为0,maxSurge设置为1,即生成一个新版本的pod之后,再删除一个老版本的pod,所以在更新过程中会存在4个pod,但是这个配置的更新速度是最慢的
    type: RollingUpdate  #更新模式的配置,一共有两种更新模式,分别是RollingUpdate、Recreate,前者采用滚动更新的方式更新pod,后者则是直接删除所有旧版本的pod,再重建新版本的pod
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec: 
      containers:
      - name: nginx
        image: nginx:1.17
        imagePullPolicy: IfNotPresent  #拉取镜像的策略,表示本地有这个镜像时,直接使用本地镜像,没有时才从镜像源拉取
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: 50Mi
            cpu: 0.5
          limits:
            memory: 100Mi
            cpu: 1

2.使用yaml文件

kubectl create -f  deployment-nginx.yaml --record

 --record表示记录此版本到deployment的history中,回滚时可以使用

查看一下deployment和pod

kubectl get deployment -o wide -n default

kubectl get pod -n default

现在我们来更新一下nginx的镜像版本,做一个滚动升级,并且查看一下pod和deployment

kubectl set image deployment nginx nginx=nginx:1.18 --record

kubectl get deployment -o wide -n default

kubectl get pod -n default -l app=nginx

可以看到在滚动更新的过程中pod的个数变成了4个,当更新完成后pod的数量恢复成了3个

 再来查看一下deployment使用的镜像版本

kubectl get deployment nginx -o wide

 接下来介绍一下有关滚动更新的rollout命令

kubectl rollout history deployment nginx -n default

查看历史版本,可以通过历史版本中的revision恢复成指定的版本

 

 kubectl rollout pause deployment nginx -n default

暂停滚动更新

kubectl rollout resume deployment nginx -n default

恢复滚动更新

kubectl rollout status deployment nginx -n default

查看滚动更新的状态

 

kubectl rollout undo deployment nginx -n defaulre --to-revision=1

恢复到指定的版本

 

也可以使用以下命令查看

kubectl rollout --help

 

 

### Kubernetes 滚动更新机制及其实现方式 Kubernetes 中的滚动更新是一种平滑升级应用程序实例的方法,通过逐步替换旧版本的应用程序 Pod 来实现零停机时间的更新。以下是关于滚动更新的核心概念及其具体实现方法: #### 1. Deployment 控制器与滚动更新 Deployment 是 Kubernetes 提供的一种高级抽象资源对象,用于管理无状态应用的工作负载。它支持滚动更新功能,允许用户定义期望的状态并自动调整实际状态以匹配该目标。 当执行滚动更新时,Deployment 控制器会依次创建新的 ReplicaSet 和对应的 Pods,并逐渐减少旧 ReplicaSet 的副本数直到完全移除[^3]。这一过程中,Pods 被逐批替换,从而确保服务始终可用。 #### 2. 更新策略配置 在 YAML 文件中可以通过 `strategy` 字段指定滚动更新的行为参数。常见的字段包括: - **maxUnavailable**: 定义每次更新期间不可用的最大 Pod 数量比例。 - **maxSurge**: 设置额外启动的新 Pod 数量相对于当前规模的比例。 下面是一个典型的 Deployment 配置示例,展示了如何启用滚动更新: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: example-deployment spec: replicas: 3 strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 1 selector: matchLabels: app: example template: metadata: labels: app: example spec: containers: - name: example-container image: nginx:latest ``` 上述配置表示,在更新过程中最多有一个 Pod 不可用 (`maxUnavailable`) 并且可以超出原有数量一个新 Pod (`maxSurge`)[^4]。 #### 3. 执行滚动更新命令 要手动触发滚动更新操作,可使用以下 kubectl 命令来修改镜像或其他属性: ```bash kubectl set image deployment/example-deployment example-container=nginx:newversion --record=true ``` 其中 `--record=true` 参数记录此次变更历史以便后续回滚操作。 验证滚动更新进度可通过如下指令完成: ```bash kubectl rollout status deployment/example-deployment ``` #### 4. 版本管理和回滚 每当成功部署一次更改后,Kubernetes 将保存其修订版信息至内部存储中。如果遇到问题,则能够轻松恢复到之前的稳定版本。例如: ```bash kubectl rollout undo deployment/example-deployment ``` 这一步骤利用了之前提到过的 Deployment 对象内置的历史追踪能力。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值