Kubernetes技术与架构-9

1     前言

2     Kubernetes定义

3     Kubernetes架构

4     Kubernetes技术

4.1   容器化技术

4.1.1 cgroups技术

4.1.2 Docker容器运行环境

4.1.3 containerd容器运行环境

4.1.4 Pod的基本概念

4.1.5 Pod的调度策略

4.1.6 Pod的资源编排

4.1.6.1Deployments

4.1.6.2ReplicaSet

ReplicaSet简要说明

ReplicaSet是一个副本集合,集合中包括资源相同的Pod实例,这些Pod实例能在给定的时间范围之内持续不断地稳定运行,而且,这些Pod实例对外提供的服务具有幂等性,因此,ReplicaSet的资源编排策略符合系统设计的高可用性。

ReplicaSet如何运作

ReplicaSet是以域声明的方式定义,例如,定义Pod副本数量域用于扩展,定义Pod选择器域用于识别与获取对应副本集合,定义Pod模板域用于规定所依赖的数据或者资源,当需要创建新的Pod副本时,则使用Pod模板域创建新的副本。关键域的描述如下所示:

.spec.template

用于定义Pod模板域   

.spec.selector

用于定义Pod选择器域

.spec.replicas

用于定义Pod副本数量域,默认值1

ReplicaSet何时使用

ReplicaSet仅用于定义指定数量的Pod副本集合,在实际的使用场景中主要是在Deployment中定义ReplicaSet,Deployment具有更高层次的声明、以及提供更多的可配置特性。因此,建议用户使用Deployment直接替代ReplicaSet,这样可以实现更加灵活、以及更加多样化的声明式资源编排。

ReplicaSet使用示例

Kubernetes技术与架构-9_第1张图片

运行该Pod文件(frontend.yaml)之后,使用命令行

kubectl get pods,输出如下所示:

Kubernetes技术与架构-9_第2张图片

使用命令行

kubectl get pods

frontend-b2zdv

-o yaml

输出副本frontend-b2zdv的元数据信息如下所示:

Kubernetes技术与架构-9_第3张图片

Pod标签冲突的场景

在相同的kubernetes集群中,如果存在相同标签的Pod与ReplicaSet,则会发生相同Pod副本冲突的情况,也就是,在集群中标签选择器认为相同的标签是相同的Pod资源编排。如下所示:

Kubernetes技术与架构-9_第4张图片

运行该Pod文件(pod-rs. yaml)新增两个Pod实例之后,使用命令行

kubectl get pods

输出如下所示:

Kubernetes技术与架构-9_第5张图片

上图显示新增的具有相同标签的Pod实例,发生冲突,受数量(3个副本)的限制,pod-rs.yaml多余的实例无法运行。

如果先运行pod.rs.yaml的Pod文件,再运行frontend.yaml文件,使用命令行

kubectl get pods

输出如下所示:

Kubernetes技术与架构-9_第6张图片

上图显示新增的具有相同标签的Pod实例,发生冲突,受数量(3个副本)的限制,frontend.yaml多余的实例无法运行。

删除ReplicaSet以及其Pods

在命令行控制台可以使用命令行kubectl delete删除ReplicaSet以及其Pods,其形式如下所示:

Kubernetes技术与架构-9_第7张图片

如上图所示,该方式删除ReplicaSet以及相关依赖的Pods。

Kubernetes技术与架构-9_第8张图片

如上图所示,该方式只删除ReplicaSet,而相关依赖的Pods不受影响,当重新创建ReplicaSet时自动绑定旧的Pods。

从ReplicaSet中剥离Pod

用户可以修改ReplicaSet中Pod实例的标签,从而将修改标签后的Pod从ReplicaSet中剥离,被剥离出来的Pod可以用于服务调试或者数据恢复,当ReplicaSet中的旧Pod被剥离后,控制器会自动建立新Pod并扩展到指定的Pod副本数。

扩展ReplicaSet

ReplicaSet通过设置.spec.replicas的值实现集群规模的扩展或者收缩,当副本数更新设置,控制器会自动更新与之对应相等数量的Pod实例。当集群规模收缩时,控制器通过排序的策略优先删除对应的Pod实例,这些规则如下所示:

  • pending状态或者unschedulable状态的Pod优先删除

  • 根据controller.kubernetes.io/pod-deletion-cost设置,低值的Pod优先删除

  • Pod实例数多的节点的Pod优先删除

  • 最新创建的Pod优先删除

假如以上的条件都符合,则控制器随机选择的Pod优先删除

Pod删除成本核算

当ReplicaSet集群规模需要收缩的时候,用户使用controller.kubernetes.io/pod-deletion-cost注解设置优先级,优先删除的Pod实例。该值的范围是[-2147483647, 2147483647],控制器会优先删除低设置值的Pod。

ReplicaSet自动水平扩展器

HPA是ReplicaSet自动水平扩展器,根据资源利用率实现集群规模自动伸缩,其设置如下所示:

Kubernetes技术与架构-9_第9张图片

运行该Pod文件(hpa-rs.yaml),控制器会根据CPU的利用率(50%)自动伸缩集群的副本数量,最小副本数是3,最大副本数是10。用户也可以使用命令行实现相同的功能,如下所示:

kubectl autoscale rs

frontend

--max=10

--min=3

--cpu-percent=50

(未完待续)

你可能感兴趣的:(Kubernetes技术与架构,kubernetes,架构,docker)