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

1.Kubernetes之Lable标签

Lable是kubernetes中的一个核心概念,一个lable是一个key=value的键值对,key与value由用户自己指定,lable可以附加到各种资源对象上,例如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Lable,同一个Lable也可以被添加到任意数量的资源对象上去,Lable通常在资源对象定义时确定,也可以在对象创建后动态添加或者删除。

可以通过给一个资源对象绑定一个或多个不同的Lable来实现多维度的资源分组管理,例如,部署不同版本的应用到不同的环境中;或者监控和分析应用(日志记录、监控、告警)等。一些常用的标签示例如下:

  1. 版本标签   “release”:“stable”,“release”:“canary”。。。。。
  2. 环境标签    “environment”:"dev","environment":"production"
  3. 架构标签   "tier":"frontend","tier":"backend","tier":"middleware"
  4. 分区标签   "partition":"customerA"....
  5. 质量管控标签  "track":"daily","track":"weekly"

给资源对象定义一个Lable就相当于给他打了一个标签,随后可以通过Lable Selector(标签选择器)来查询和筛选拥有某些Lable的资源对象,kubernetes通过这种方式实现了类似SQL的对象查询机制。Lable Selector相当于SQL中的where查询条件,当前有两种Lable Selector的表达式:基于等式(equality-based)的和基于集合(set-based)的。

前者采用“等式类”的表达式匹配标签,如下示例:

  1. name = redis-slave:匹配所有具有标签name=redis-slave的资源对象
  2. env != production:匹配所有不具有标签env=production的资源对象

后者使用集合操作的表达式匹配标签,如下示例:

  1. name in (redis-master,redis-slave):匹配所有具有标签name=redis-master或者name=redis-slave的资源对象
  2. name not in (mysql-backend):匹配所有不具有标签name=mysql-backend的资源对象

可以通过多个lable selector表达式的组合实现复杂的条件选择,多个表达式之间用逗号","进行分隔即可,几个条件之间是“AND”的关系,即同时满足多个条件,如下示例:

  1. name=redis-master,env!=production
  2. name in (redis-master,redis-slave),env!=production

通常,我们给一个Pod定义一个lable,如下:

apiVersion: v1

kind: pod

metadata:

name:  myweb

lables:

app:  myweb

管理对象RC和Service在spec中定义Selector与Pod进行关联:

apiVersion: v1

kind:   ReplicationController

metadata:

name:  myweb

spec:

replicas:  1

selector:

app:  myweb

apiVersion: v1

kind:   Service

metadata:

name:  myweb

spec:

selector:

app:  myweb

ports:

- port:  8080

新出现的管理对象如Deployment、ReplicaSet、DaemonSet何Job则可以在selector中使用基于集合的筛选条件定义,如下:

selector:

matchLables:

app: myweb

matchExpressions:

-  {key: tier,operator: In,values: [frontend]}

matchLables用于定义一组Lable,与直接写在Selector中作用相同,matchExpressions用于定义一组基于集合的筛选条件,可用的条件运算符包括:In,NotIn,Exists,DoesNotExist

如果同时设置了matchLables和matchExpressions,则两组条件为“AND”关系,需要同时满足才能完成selector的筛选。

Lable selector在kubernetes中的重要使用场景有以下几处:

  1. kube-controller进程通过资源对象RC上定义的Lable Selector来筛选要监控的Pod副本的数量,从而实现Pod副本的数量始终符合预期设定的全自动控制流程
  2. kube-proxy进程通过Service的Lable Selector来选择对应的Pod,自动建立起每个Service到对应Pod的请求转发路由表,从而实现Service的智能负载均衡机制
  3. 通过对某些Node定义特定的Lable,并且在Pod定义文件中使用NodeSelector这种标签调度策略,kube-scheduler进程可以实现Pod “定向调度”的特性

2.Kubernetes之Replication Controller

Replication Controller在kubernetes中简称RC,它其实是定义了一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个预期值,包括以下几个值:

  1. Pod期待的副本数(replicas)
  2. 用于筛选目标Pod的Lable Selector
  3. 当Pod的副本数量小于预期数量时,用于创建新Pod的模板(template)

当我们定义了一个RC并提交到kubernetes后,Master节点上的Controller Manager组件就得到通知,定期巡检系统中当前存活的目标Pod,并确保目标Pod实例的数量刚好等于replicas的值,如果多于这个值,系统就会停掉一些Pod,少之则会创建一些Pod。可以说,通过RC,kubernetes实现了用户应用集群的高可用性,减少了许多手工的运维操作

通过RC,我们可以动态的进行Pod实例数的缩放,kubectl scale命令为我们提供了这一功能

kubectl scale rc redis-slave --replicas=3

需要注意的是,删除RC并不会影响通过该RC已经创建好的Pod,为了删除所有Pod,可以通过设置replicas的值为0,然后更新该RC。另外kubectl提供了stop和delete命令来一次性删除RC和RC控制的所有Pod

RC也提供用户应用平滑升级的功能,比如当前系统中有10个旧版本的Pod需要更新到新版,最好的方式是每次停止一个旧版本的Pod,就创建一个新版本的Pod,几分钟后当所有的Pod都是新版本时升级完成,用户不会感受到业务有任何影响,这种在kubernetes中被称作 “滚动升级”。

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

时间: 2024-10-30 15:47:50

Kubernetes基本概念和术语之Lable和Replication Controller的相关文章

Kubernetes 基本概念和术语

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

kubernetes基本概念和术语

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

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基本概念和术语之Deployment、Horizontal Pod Autoscaler和StatefulSet

1.Deployment Deployment是为了更好的解决Pod的编排问题才引入的,可以把它看作是RC的一次升级,最大的升级是我么可以看到Pod部署的进度. Deployment典型的使用场景如下: 创建一个Deployment对象来生成对应的Replica Set(相当于RC的进化版,kubernetes v1.2引入)并完成Pod副本的创建过程 检查Deployment的状态来看部署动作是否完成(Pod副本的数量是否达到预期值) 更新Deployment以创建新的Pod(如镜像升级) 若

k8s上的基础概念和术语

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

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的调用)是直接

十分钟带你理解Kubernetes核心概念

本文将会简单介绍Kubernetes的核心概念.因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍.相反,我们会使用一些图表(其中一些是动画)和示例来解释这些概念.我们发现一些概念(比如Service)如果没有图表的辅助就很难全面地理解.在合适的地方我们也会提供Kubernetes文档的链接以便读者深入学习.这就开始吧. 什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾