K8S扩缩容及滚动更新和回滚

目录:

1、滚动更新

在Kubernetes中,滚动更新(Rolling Update)是一种常用的部署策略,它允许你逐步将应用的旧版本替换为新版本,而不是一次性替换所有实例。这有助于减少服务中断的风险,并允许你在更新期间监控应用的健康状况。

1、定义Deployment配置

首先,你需要有一个Deployment配置文件(通常是YAML格式),其中定义了你的应用镜像和所需的副本数。例如:

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1       # 最大额外可以存在的副本数,可以为数字或百分比
      maxUnavailable: 1 # 最大不可用副本数,可以为数字或百分比
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: myapp:v1

2、应用更新

使用kubectl命令行工具来更新你的Deployment。例如,如果你想将镜像版本从myapp:v1更新到myapp:v2,你可以使用以下命令:

yaml 复制代码
kubectl set image deployment/myapp-deployment myapp-container=myapp:v2 --record

或者,你也可以通过修改原始的YAML文件,然后使用kubectl apply命令:

yaml 复制代码
spec:
  containers:
  - name: myapp-container
    image: myapp:v2

然后应用这个更改:

yaml 复制代码
kubectl apply -f deployment.yaml

2、版本回滚

1. 使用kubectl rollout undo命令

这是最直接的方法来触发回滚。你可以通过指定回滚到上一个版本或者指定一个特定的历史版本。

回滚到上一个版本:

yaml 复制代码
kubectl rollout undo deployment <deployment-name>

回滚到特定的历史版本:

首先,你可以使用kubectl rollout history命令查看所有的发布历史:

yaml 复制代码
kubectl rollout history deployment <deployment-name>

然后,根据显示的版本号回滚到特定版本:

yaml 复制代码
kubectl rollout undo deployment <deployment-name> --to-revision=<revision-number>

3、更新暂停与恢复

假设你有一个名为my-app的Deployment,并且你希望在更新镜像之前先暂停更新:

1、暂停更新

yaml 复制代码
kubectl rollout pause deployment/my-app

2、更新镜像(例如,使用kubectl set image命令)

yaml 复制代码
kubectl set image deployment/my-app my-app-container=new-image:tag

3、恢复更新

yaml 复制代码
kubectl rollout resume deployment/my-app

4、弹性扩缩容

1、扩容命令

yaml 复制代码
kubectl scale deployment <deployment-name> --replicas=5

2、缩容命令

yaml 复制代码
kubectl scale deployment <deployment-name> --replicas=3

两者修改replicas的副本数即可。

3、自动扩缩容

如果使用的是自动缩放(Horizontal Pod Autoscaler, HPA),则 Kubernetes 会根据设置的指标自动调整 Pod 的数量,而不是手动设置副本数。你可以通过设置 HPA 来实现自动扩容和缩容。例如:

yaml 复制代码
kubectl autoscale deployment <deployment-name> --cpu-percent=50 --min=1 --max=10

这将基于 CPU 使用率自动调整副本数,最小为1,最大为10。

相关推荐
艾伦_耶格宇11 分钟前
【DOCKER容器实战】-5 Docker容器镜像的构建
运维·docker·容器
分布式存储与RustFS1 小时前
RustFS 该跟 stable 还是 nightly?两条版本线的分工、风险与回退,一张表说清
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
ggaofeng3 小时前
k8s中的dns
云原生·容器·kubernetes
我不会起名字32214 小时前
K8s Ingress 返回 502 但后端日志正常:4 类上游断连与排查链
kubernetes·k8s·ingress·502·keepalive
姜鱼问生16 小时前
每次开机手动检查 6 样东西?我写了个 2 秒自检脚本
运维·网络·nginx·docker·容器
wangqiaowq17 小时前
PostgresSQL server Docker 安装部署
运维·docker·容器
程序员阿明17 小时前
docker搭建视频流服务go2rtc,webRTC
docker·容器·webrtc
JavaPub-rodert18 小时前
Docker 容器为什么 stop 半天停不下来?讲透 PID 1、SIGTERM、SIGKILL、僵尸进程与 tini
运维·docker·容器
我不会起名字32219 小时前
Pod 一直 Pending:调度器 5 类失败原因与 kubectl describe 的正确读法
云原生·kubernetes·调度·排查
我不会起名字32221 小时前
K8s 服务 DNS 解析偶发 5 秒超时:conntrack 与 ndots 的 3 个坑
kubernetes·k8s·dns·conntrack·coredns