欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > K8S的伸缩应用程序-扩缩容,版本回滚

K8S的伸缩应用程序-扩缩容,版本回滚

2025/6/8 12:57:31 来源:https://blog.csdn.net/m0_66011019/article/details/144914377  浏览:    关键词:K8S的伸缩应用程序-扩缩容,版本回滚

应用程序探索

 概述

  • 创建 Deployment 之后,Kubernetes 会创建一个 Pod(容器组)来放置应用程序实例(container 容器)。

 Pod

  • Pod(容器组)是一个 Kubernetes 中的一个抽象概念,用于存放一组 Container(可以包含一个或多个 Container 容器,如:上图中的小正方体)以及这些 Container(容器)的一些共享资源。这些资源包括:
  • 共享存储,称为卷(Volume),如:上图中的紫色圆柱体。
  • 网络,每个 Pod(容器组)在集群中有一个唯一的 IP,Pod(容器组)中的 Container(容器)共享该 IP 地址。
  • Container(容器)的基本新,如:容器的镜像版本、对外暴露的端口等。
  • Pod(容器组)是 Kubernetes 集群上的最基本的单元。当我们在 Kubernetes 集群上创建 Deployment 的时候,会在 Kubernetes  集群上创建包含容器的 Pod (而不是直接创建容器)。每个 Pod 都和运行它的 Node 节点绑定,并保持在哪里直到终止或被删除。如果 Node 节点发生了故障,则会在集群中的其他可用的 Node 节点上运行相同的 Pod(从同样的镜像创建 Container,使用同样的配置,IP 地址不同,Pod 名称不同)。

温馨提示:

  • Pod 是一组容器(可包含一个或多个应用程序容器),以及共享存储(卷 Volumes)、IP 地址和有关如何运行容器的信息。
  • 如果多个容器紧密耦合并且需要共享磁盘等资源,则他们应该被部署在同一个Pod(容器组)中。

Node

  • Pod(容器组)总是在 Node(节点)上运行。Node(节点)是 Kubernetes 集群中的计算机,可以是虚拟机或物理机。每个 Node(节点)都由 Master 管理。一个 Node(节点)可以有多个Pod(容器组),kubernetes 的 Master 会根据每个 Node(节点)上可用资源的情况,自动调度 Pod(容器组)到最佳的 Node(节点)上。
  • 每个 Kubernetes 的 Node(节点)至少运行:
  • Kubelet,负责 Master节点和 Node 节点之间通信的进程;管理 Pod(容器组)和 Pod(容器组)内运行的 Container(容器)。
  • kube-proxy,负责进行流量转发。
  • 容器运行环境(如:Docker)负责下载镜像、创建和运行容器等。

 扩缩容

  • 当创建了一个 Deployment,然通过 Service 提供访问 Pod 的方式,但是当流量增加的时候,需要对应用程序进行伸缩操作以满足系统性能的需求。

  • 命令:
kubectl scale --replicas=3 deployment nginx
kubectl edit deployment  nginx-deploy

执行滚动升级

  • 滚动升级允许通过使用新的示例逐步更新 Pod 实例,从而实现 Deployment 更新,0 停机。
  • 与应用程序扩展类似,如果暴露了 Deployment,服务(Service)将在更新期间仅对可用的 pod 进行负载均衡,可用 Pod 是应用程序可用的实例。

 滚动更新允许以下操作:
① 将应用程序从一个环境提升到另一个环境(通过容器镜像更新)。
② 回滚到以前的版本。
③ 持续集成和持续交付应用程序,无需停机。
● 命令:

# 镜像升级 nginx:1.17 到 nginx:latest 
# --record 表示记录变更
kubectl set image deployment 应用部署名称 Pod中容器的名称=容器的镜像 --record# 查看历史记录
kubectl rollout history deployment 应用部署名称# 默认回滚到上一个版本
kubectl rollout undo deployment 应用部署名称# 默认回滚到第一个版本
kubectl rollout undo deployment 应用部署名称 --to-revision=1

示例:

创建nginx控制器,副本数为3,当前nginx版本为1.17.1

[root@k8s-master ~]# kubectl create deployment nginx-deploy --image=nginx:1.17.1 --replicas=3
deployment.apps/nginx-deploy created
[root@k8s-master ~]# kubectl get pods 
NAME                           READY   STATUS              RESTARTS   AGE
nginx-deploy-fcd74c97b-852wr   0/1     ContainerCreating   0          11s
nginx-deploy-fcd74c97b-jzffw   0/1     ContainerCreating   0          11s
nginx-deploy-fcd74c97b-mppmj   0/1     ContainerCreating   0          11s
[root@k8s-master ~]# kubectl get pods  -w
NAME                           READY   STATUS              RESTARTS   AGE
nginx-deploy-fcd74c97b-852wr   0/1     ContainerCreating   0          15s
nginx-deploy-fcd74c97b-jzffw   0/1     ContainerCreating   0          15s
nginx-deploy-fcd74c97b-mppmj   0/1     ContainerCreating   0          15s
nginx-deploy-fcd74c97b-mppmj   1/1     Running             0          61s
nginx-deploy-fcd74c97b-jzffw   1/1     Running             0          62s
nginx-deploy-fcd74c97b-852wr   1/1     Running             0          66s
^C[root@k8s-master ~]# kubectl get pods 
NAME                           READY   STATUS    RESTARTS   AGE
nginx-deploy-fcd74c97b-852wr   1/1     Running   0          70s
nginx-deploy-fcd74c97b-jzffw   1/1     Running   0          70s
nginx-deploy-fcd74c97b-mppmj   1/1     Running   0          70s

一个deploy对应一个rs,一个rs对应三个pod

[root@k8s-master ~]# kubectl  get rs 
NAME                      DESIRED   CURRENT   READY   AGE
nginx-deploy-7c6f569b4b   0         0         0       37m
nginx-deploy-fb74b55d4    0         0         0       40m
nginx-deploy-fcd74c97b    3         3         3       42m
[root@k8s-master ~]# kubectl  get deploy
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deploy   3/3     3            3           42m
[root@k8s-master ~]# kubectl get pods 
NAME                           READY   STATUS    RESTARTS   AGE
nginx-deploy-fcd74c97b-4qfjh   1/1     Running   0          34m
nginx-deploy-fcd74c97b-tqnrf   1/1     Running   0          34m
nginx-deploy-fcd74c97b-v7s6b   1/1     Running   0          34m

将nginx版本升级为1.19,执行如下命令

[root@k8s-master ~]# kubectl set image deployment nginx-deploy nginx=nginx:1.19 --record
deployment.apps/nginx-deploy image updated
[root@k8s-master ~]# kubectl  get deploy -o wide
NAME           READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES       SELECTOR
nginx-deploy   3/3     3            3           57m   nginx        nginx:1.19   app=nginx-deploy

将nginx升级为latest

[root@k8s-master ~]# kubectl set image deployment nginx-deploy nginx=nginx --record
deployment.apps/nginx-deploy image updated
[root@k8s-master ~]# kubectl  get deploy -o wide
NAME           READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES   SELECTOR
nginx-deploy   3/3     3            3           59m   nginx        nginx    app=nginx-deploy

查看历史记录

[root@k8s-master ~]# kubectl rollout history deployment nginx-deploy
deployment.apps/nginx-deploy 
REVISION  CHANGE-CAUSE
4         <none>
5         kubectl set image deployment nginx-deploy nginx=nginx:1.18 --record=true
6         kubectl set image deployment nginx-deploy nginx=nginx:1.19 --record=true
7         kubectl set image deployment nginx-deploy nginx=nginx --record=true

将nginx版本回滚到1.18

root@k8s-master ~]# kubectl rollout undo deployment nginx-deploy --to-revision=5
deployment.apps/nginx-deploy rolled back
[root@k8s-master ~]# kubectl  get deploy -o wide
NAME           READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES       SELECTOR
nginx-deploy   3/3     3            3           60m   nginx        nginx:1.18   app=nginx-deploy

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词