当前位置: 首页 > article >正文

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


http://www.kler.cn/a/466795.html

相关文章:

  • 云架构:考量与框架
  • AWS DMS基础知识
  • 如何利用人工智能算法优化知识分类和标签?
  • 【软考网工笔记】计算机基础理论与安全——网络规划与设计
  • Rust中的Option枚举快速入门
  • Flink CDC 自定义函数处理 SQLServer XML类型数据 映射 doris json字段方案
  • 使用 apply 方法将其他列的值传入 DataFrame 或 Series 的函数,来进行更灵活的计算或操作
  • Debian 系统中解决中文日志乱码问题
  • 【ShuQiHere】算法的开枝散叶:从机器学习到深度学习的模型总结
  • Qt 状态机使用说明
  • MT8788安卓核心板_MTK8788核心板参数_联发科模块定制开发
  • HTML——64. 数字输入框和活动条
  • 单片机通信
  • 交换机关于环路、接口绑定、链路聚合的相关知识
  • 游戏引擎学习第72天
  • [paddle] 非线性拟合问题的训练
  • React 性能优化
  • 数仓建模(二) 从关系型数据库到数据仓库的演变
  • 淘宝商品详情API返回值说明:Python爬虫代码示例
  • perf:对hutool的BeanUtil工具类做补充
  • 【51单片机零基础-chapter3:按键:独立按键|||附带常见C语句.逻辑运算符】
  • 中国科技产业化促进会深入深圳企业调研
  • gesp(C++一级)(17)洛谷:B4062:[GESP202412 一级] 温度转换
  • 在Linux系统中使用字符图案和VNC运行Qt Widgets程序
  • IDEA Plugins中搜索不到插件解决办法
  • 自动化测试常考的面试题+答案汇总(持续更新)