K8s动态实现服务数量的扩缩容(HPA)、升级回滚

Pod 每个Pod中都包含一个或者多个容器,这些容器可以分为两类:① 用户程序所在…

Pod

  • 每个Pod中都包含一个或者多个容器,这些容器可以分为两类:① 用户程序所在的容器,数量可多可少。② Pause容器,这是每个Pod都会有的一个根容器,它的作用有两个:

  • 可以以它为依据,评估整个Pod的健康状况。
  • 可以在根容器上设置IP地址,其它容器都共享此IP(Pod的IP),以实现Pod内部的网络通信

ReplicaSet

ReplicaSet的主要作用是保证一定数量的Pod能够正常运行,它会持续监听这些Pod的运行状态,一旦Pod发生故障,就会重启或重建。同时它还支持对Pod数量的扩缩容

ReplicaSet的资源清单文件:

replicas:指定副本数量,其实就是当然rs创建出来的Pod的数量,默认为1

selector:选择器,它的作用是建立Pod控制器和Pod之间的关联关系,采用了Label Selector机制(在Pod模块上定义Label,在控制器上定义选择器,就可以表明当前控制器能管理哪些Pod了)。

template:模板,就是当前控制器创建Pod所使用的模板,里面其实就是前面学过的Pod的定义

创建rs

扩缩容 编辑rs的副本数量,修改spec:replicas:6即可

删除

Deployment

Deployment控制器并不直接管理Pod,而是通过管理ReplicaSet来间接管理Pod,即:Deployment管理ReplicaSet,ReplicaSet管理Pod。所以Deployment的功能比ReplicaSet强大

主要功能:

创建pc-deployment.yaml文件

创建Deployment

Deployment支持两种镜像更新的策略:重建更新滚动更新(默认),可以通过strategy选项进行配置

编辑pc-deployment.yaml文件,在spec节点下添加更新策略

镜像升级

版本回退

查看当前升级版本的状态

删除Deployment,其下的ReplicaSet和Pod也会一起被删除:

Horizontal Pod Autoscaler(HPA)

  • 动执行kubectl scale命令实现Pod的扩缩容,但是这显然不符合kubernetes的定位目标–自动化和智能化。kubernetes期望可以通过监测Pod的使用情况,实现Pod数量的自动调整,于是就产生了HPA这种控制器。

  • HPA可以获取每个Pod的利用率,然后和HPA中定义的指标进行对比,同时计算出需要伸缩的具体值,最后实现Pod的数量的调整。其实HPA和之前的Deployment一样,也属于一种kubernetes资源对象,它通过追踪分析目标Pod的负载变化情况,来确定是否需要针对性的调整目标Pod的副本数。

安装metrics-server

安装metrics-server(v0.3.6)

安装metrics-server(v0.4.1)

修改components.yaml

安装metrics-server

准备Deployment和Service

  • 创建Deployment:创建nginx.yaml文件,内容如下

创建Deployment

查看Deployment和Pod

创建Service

部署HPA

创建pc-hpa.yaml文件,内容如下

创建hpa

StatefulSet(有状态)

无状态应用:

认为Pod都是一样的,没有顺序要求,不用考虑在哪个Node节点上运行,随意进行伸缩和扩展

有状态应用:

有顺序的要求,认为每个Pod都是不一样的,需要考虑在哪个Node节点上运行,需要按照顺序进行伸缩和扩展,让每个Pod都是独立的,保持Pod启动顺序和唯一性。

StatefulSet是Kubernetes提供的管理有状态应用的负载管理控制器,部署需要HeadLinessService(无头服务)

  • 在用Deployment时,每一个Pod名称是没有顺序的,是随机字符串,因此是Pod名称是无序的,但是在StatefulSet中要求必须是有序 ,每一个Pod不能被随意取代,Pod重建后pod名称还是一样的。

  • 而Pod IP是变化的,所以是以Pod名称来识别。Pod名称是Pod唯一性的标识符,必须持久稳定有效。这时候要用到无头服务,它可以给每个Pod一个唯一的名称 。

创建pc-stateful.yaml文件

创建StatefulSet

Deployment和StatefulSet的区别

  • Deployment和StatefulSet的区别:Deployment没有唯一标识而StatefulSet有唯一标识。

  • StatefulSet的唯一标识是根据主机名+一定规则生成的。

  • StatefulSet的唯一标识是主机名.无头Service名称.命名空间.svc.cluster.local

StatefulSet支持两种更新策略:OnDelete和RollingUpdate(默认),其中OnDelete表示删除之后才更新,RollingUpdate表示滚动更新

Pod的资源清单

本文来自网络,不代表软粉网立场,转载请注明出处:https://www.rfff.net/p/4950.html

作者: HUI

发表评论

您的电子邮箱地址不会被公开。

返回顶部