Kubernetes基本概念和术语之Deployment、Horizontal Pod Autoscaler和StatefulSet

1.Deployment

Deployment是为了更好的解决Pod的编排问题才引入的,可以把它看作是RC的一次升级,最大的升级是我么可以看到Pod部署的进度。

Deployment典型的使用场景如下:

  1. 创建一个Deployment对象来生成对应的Replica Set(相当于RC的进化版,kubernetes v1.2引入)并完成Pod副本的创建过程
  2. 检查Deployment的状态来看部署动作是否完成(Pod副本的数量是否达到预期值)
  3. 更新Deployment以创建新的Pod(如镜像升级)
  4. 若当前Deployment不稳定则回滚到早先Deployment版本
  5. 暂停Deployment以便修改多个PodTemplateSpec的配置项,之后再恢复Deployment,进行新发布
  6. 扩展Deployment以应对高负载
  7. 查看Deployment的状态,以此作为发布是否成功的指标
  8. 清理不在需要的旧版本ReplicaSets

创建Deployment的命令

kubectl create -f {deployment_fileName}.yaml

查看Deployment信息

kubectl get deployments

2.Horizontal Pod Autoscaler

Horizontal Pod Autoscaler简称HPA,意思是Pod横向自动扩容,与RC、Deployment都属于资源对象,通过追踪分析RC控制的所有目标Pod的负载变化情况,来确定是否需要针对性的调整目标Pod的副本数,这就是HPA的实现原理。

当前HPA有以下两种方式作为Pod负载的度量指标:

  1. CPUUtilizationPercentage
  2. 应用程序自定义的度量指标,比如服务在每秒内的相应的请求数(QPS或TPS)

CPUUtilizationPercentage是目标Pod所有副本自身的CPU利用率的平均值。一个Pod自身的CPU利用率=该Pod当前CPU的使用量÷Pod Request的值

CPUUtilizationPercentage计算过程中Pod的CPU使用量是1min内的平均值,可以通过Heapster组件(需要安装)来查,如果目标Pod没有定义Pod Request的值,则无法使用CPUUtilizationPercentage来实现Pod横向扩容的能力。除了使用CPUUtilizationPercentage,Kubernetes从v1.2开始尝试支持应用程序自定义的度量指标。

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: pho-apache
  namespace: default
spec:
  maxReplicas: 10
  minReplicas: 1
  scaleTargetRef:
    kind: Deployment
    name: php-apache
  targetCPUUtilizationPercentage: 90

如上定义,我们可以知晓HPA控制的对象为php-apache的Deployment里的Pod副本,当这些Pod副本的CPUUtilizationPercentage超过90%时会触发自动动态扩容,最大数量为10,最小为1,除了可以通过直接定义yaml文件并调用kubectl create命令来创建一个HPA的资源对象外,我们还可以直接命令行来创建,如下

kubectl autoscale deployment php-apache --cpu-percent=90 --min=1 --max=10

3.StatefulSet

在kubernetes中,RC、Deployment、Job、DaemonSet等都是面向无状态的服务,但现实中有很多服务是有状态的,例如mysql集群、zk集群等,这些服务有以下一些共同点

  1. 每个节点有固定的身份ID,通过这个ID,集群中的成员可以互相发现并通信
  2. 集群规模比较固定,不会随意改动
  3. 集群中的每个节点都是有状态的,通常会持久化数据到永久存储中
  4. 如果磁盘损坏,则集群里的某个节点无法正常运行,集群功能受损

如果用RC/Deployment控制Pod副本数的方式来实现上述有状态的集群,则我们会发现第一点就无法实现,因为Pod的名字是随机产生的,Pod的ip也是在运行期确定的且可能会变动,我们事先无法为每个Pod创建一个唯一的ID。。。为了解决以上问题,kubernetes从v1.5版本开始引入了StatefulSet,从本质上来它可以看做是RC/Deployment的一个特殊变种,它有如下一些特性:

  1. StatefulSet里的每个Pod都有稳定、唯一的网络标识,可以用来发现集群内的其他成员
  2. StatefulSet控制的Pod副本的启停顺序是受控的,操作第n个Pod时,前n-1个Pod已经是运行且准备好的状态
  3. StatefulSet里的Pod采用稳定的持久化存储卷,通过PV/PVC来实现,删除Pod时默认不会删除与StatefulSet相关的存储卷(为了数据安全)

StatefulSet除了要与PV卷捆绑使用已存储Pod的状态数据,还要与Headless Service配合使用,即在每个StatefulSet的定义中要声明它属于哪个Headless Service,Headless Service与普通Service的区别在于,它没有Cluster IP,如果解析Headless Service的域名,它返回的是该service对应的全部Pod的endpoint列表。StatefulSet在Headless Service的基础上又为StatefulSet控制的每个Pod实例创建了一个DNS域名,格式为:$(podname).$(headless service name),例如一个3节点的kafka的StatefulSet集群,对应的Headless Service的名字为kafka,StatefulSet的名字为kafka,则StatefulSet里边的3个Pod的DNS域名分别为kafka-0.kafka、kafka-1.kafka、kafka-2.kafka,这些DNS域名都可以直接在配置文件中固定下来

原文地址:https://www.cnblogs.com/lemon-dog/p/12423891.html

时间: 2024-11-05 20:35:36

Kubernetes基本概念和术语之Deployment、Horizontal Pod Autoscaler和StatefulSet的相关文章

kubernetes基本概念和术语

一. kubernetes是什么 kubernetes是一个全新得基于容器技术得分布式架构领先方案.是google Borg得一个开源版本.Borg是google得一个久负盛名得内部使用得大规模集群管理系统,它基于容器技术,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化. 二. kubernetes 术语 kubernetes中的大部分概念如Node,Pod,Replication Controller,service等都可以看作一种"资源对象".几乎所有的资源对象

Kubernetes 基本概念和术语

Kubernetes 基本概念和术语 Kubernetes 中大部分概念如 Node.Pod.Replication Controller. Service 等都可以看做一种 "资源对象",几乎所有的资源对象都可以通过 Kubernetes提供的 kubectl 工具(或者API远程调用)执行增.删.查.改等操作并将其保存在etcd中持久化存储.从这个角度来看,Kubernetes其实是一个高度自动化的资源控制系统,它通过追踪对比etcd库里保存的"资源期望状态"与

Kubernetes -- Horizontal Pod Autoscaler

前言 在kubernetes中,我们使用pod对外提供服务.这时候,我们需要以下两种情形需要关注: pod因为不明原因挂掉,导致服务不可用 Pod在高负荷的情况下,不能支撑我们的服务 如果我们人工监控pods,人工进行调整副本那么这个工作量无疑是巨大的,但kubernetes已经有了相应的机制来应对了. 那么今天就来介绍一下在k8s 1.6中的弹性伸缩的实施 k8s是kubernetes的官方简称HPA全称Horizontal Pod Autoscaler HPA的原理 Kubernetes有一

Horizontal Pod Autoscaler(Pod水平自动伸缩)

Horizontal Pod Autoscaler 根据观察到的CPU利用率(或在支持自定义指标的情况下,根据其他一些应用程序提供的指标)自动伸缩 replication controller, deployment, replica set, stateful set 中的pod数量.注意,Horizontal Pod Autoscaling不适用于无法伸缩的对象,例如DaemonSets. Horizontal Pod Autoscaler 被实现作为Kubernetes API资源和控制器

Kubernetes基本概念和术语之Lable和Replication Controller

1.Kubernetes之Lable标签 Lable是kubernetes中的一个核心概念,一个lable是一个key=value的键值对,key与value由用户自己指定,lable可以附加到各种资源对象上,例如Node.Pod.Service.RC等,一个资源对象可以定义任意数量的Lable,同一个Lable也可以被添加到任意数量的资源对象上去,Lable通常在资源对象定义时确定,也可以在对象创建后动态添加或者删除. 可以通过给一个资源对象绑定一个或多个不同的Lable来实现多维度的资源分组

Kubernetes基本概念和术语之《Master和Node》

Kubernetes中的大部分概念如Node.Pod.Replication Controller.Service等都可以看作一种“资源对象”,几乎所有的资源对象都可以通过Kubernetes提供的kubectl工具(或者API编程调用)执行增.删.改.查等操作并将其保存在etcd中持久化存储.从这个角度来看,Kubernetes其实是一个高度自动化的资源控制系统,它通过跟踪比对etcd库里保存的“资源期望状态”与当前环境中的“实际资源状态”的差异来实现自动控制和自动纠错的高级功能. Maste

Kubernetes基本概念和术语之Master和Node

kubernetes中的大部分概念,如Node.Pod.Replication Controller.Service等都可以看做是一种 “资源对象”,几乎所有的资源对象都可以通过kubectl工具(或者API接口)来实现增.删.改.查等操作,并将其保存在etcd中进行持久化存储,从这个角度来看,kubernetes其实是一个高度自动化的资源控制系统,它通过对比etcd库里保存的 “资源期望状态”与当前环境中的“实际资源状态”的差异来实现自动控制和自动纠错. 在介绍资源对象之前,我们先了解一下ku

Kubernetes 入门之Kubernetes 的基本概念和术语

Kubernetes是什么? 他是一个全新的基于容器技术分布式架构领先方案: 他也是一个开放的开发平台: 他也是一个完备的分布式系统支撑平台: Kubernetes的基本慨念和术语 Master Kubernetes 里的Master 指的是集群控制节点,每个Kubernetes 集群里需要有一个 Master 节点负责整个集群的管理和控制,基本上Kuberneter所有的控制命令都发给它,他来负责具体的执行过程,我们后面所执行的所有命令基本上都是在Master节点上运行的.Masteer通常会

Kubernetes核心概念总结(摘选)

1.基础架构 1.1 Master Master节点上面主要由四个模块组成:APIServer.scheduler.controller manager.etcd. APIServer.APIServer负责对外提供RESTful的Kubernetes API服务,它是系统管理指令的统一入口,任何对资源进行增删改查的操作都要交给APIServer处理后再提交给etcd.如架构图中所示,kubectl(Kubernetes提供的客户端工具,该工具内部就是对Kubernetes API的调用)是直接