k8s之pods

Label(标签)是Kubernetes系统中另一个核心概念。一个Label是 一个key=value的键值对,其中key与value由用户本身指定。Label能够被 附加到各类资源对象上,例如Node、Pod、Service、RC等,一个资源对 象能够定义任意数量的Label,同一个Label也能够被添加到任意数量的 资源对象上。Label一般在资源对象定义时肯定,也能够在对象建立后 动态添加或者删除。php

咱们能够经过给指定的资源对象捆绑一个或多个不一样的Label来实 现多维度的资源分组管理功能,以便灵活、方便地进行资源分配、调 度、配置、部署等管理工做。例如,部署不一样版本的应用到不一样的环境 中;监控和分析应用(日志记录、监控、告警)等。一些经常使用的Label 示例以下。html

◎ 版本标签:"release":"stable"、"release":"canary"。web

◎ 环境标 签:"environment":"dev"、"environment":"qa"、"environment":"production"。redis

◎ 架构标 签:"tier":"frontend"、"tier":"backend"、"tier":"middleware"。架构

◎ 分区标签:"partition":"customerA"、"partition":"customerB"。负载均衡

◎ 质量管控标签:"track":"daily"、"track":"weekly"。frontend

Label至关于咱们熟悉的“标签”。给某个资源对象定义一个Label, 就至关于给它打了一个标签,随后能够经过Label Selector(标签选择 器)查询和筛选拥有某些Label的资源对象,Kubernetes经过这种方式实 现了相似SQL的简单又通用的对象查询机制。ide

Label Selector能够被类比为SQL语句中的where查询条件,例如, name=redis-slave这个Label Selector做用于Pod时,能够被类比为select * from pod where pod’s name =‘redis-slave’这样的语句。当前有两种Label Selector表达式:基于等式的(Equality-based)和基于集合的(Set- based),前者采用等式类表达式匹配标签,下面是一些具体的例子。3d

◎ name=redis-slave:匹配全部具备标签name=redis-slave的资源对 象。日志

◎ env!=production:匹配全部不具备标签env=production的资源对 象,好比env=test就是知足此条件的标签之一。

后者则使用集合操做类表达式匹配标签,下面是一些具体的例子。 ◎ name in(redis-master, redis-slave):匹配全部具备标签

name=redis-master或者name=redis-slave的资源对象。
◎ name not in(php-frontend):匹配全部不具备标签name=php-

frontend的资源对象。

能够经过多个Label Selector表达式的组合实现复杂的条件选择,多 个表达式之间用“,”进行分隔便可,几个条件之间是“AND”的关系,即 同时知足多个条件,好比下面的例子:

以myweb Pod为例,Label被定义在其metadata中:

管理对象RC和Service则经过Selector字段设置须要关联Pod的 Label:

其余管理对象如Deployment、ReplicaSet、DaemonSet和Job则能够

在Selector中使用基于集合的筛选条件定义,例如:

matchLabels用于定义一组Label,与直接写在Selector中的做用相 同;matchExpressions用于定义一组基于集合的筛选条件,可用的条件 运算符包括In、NotIn、Exists和DoesNotExist。

若是同时设置了matchLabels和matchExpressions,则两组条件为 AND关系,即须要同时知足全部条件才能完成Selector的筛选。

Label Selector在Kubernetes中的重要使用场景以下。

◎ kube-controller进程经过在资源对象RC上定义的Label Selector 来筛选要监控的Pod副本数量,使Pod副本数量始终符合预期设定的全自 动控制流程。

◎ kube-proxy进程经过Service的Label Selector来选择对应的Pod, 自动创建每一个Service到对应Pod的请求转发路由表,从而实现Service的 智能负载均衡机制。

◎ 经过对某些Node定义特定的Label,而且在Pod定义文件中使用 NodeSelector这种标签调度策略,kube-scheduler进程能够实现Pod定向调 度的特性。

在前面的留言板例子中,咱们只使用了一个name=XXX的Label Selector。看一个更复杂的例子:假设为Pod定义了3个Label:release、 env和role,不一样的Pod定义了不一样的Label值,如图1.7所示,若是设 置“role=frontend”的Label Selector,则会选取到Node 1和Node 2上的

Pod。
若是设置“release=beta”的Label Selector,则会选取到Node 2和Node

3上的Pod,如图1.8所示。

总之,使用Label能够给对象建立多组标签,Label和Label Selector 共同构成了Kubernetes系统中核心的应用模型,使得被管理对象可以被 精细地分组管理,同时实现了整个集群的高可用性。

图1.7 Label Selector的做用范围1

k8s之pods
k8s之pods

来源于:k8s 权威指南
博客园:https://www.cnblogs.com/sseban/p/13065177.html
语雀:https://www.yuque.com/songyifei

相关文章
相关标签/搜索