Kubernetes – 标签和选择器
一个名为Kubernetes的开源容器管理平台可自动执行容器的部署、扩展、降级和负载平衡(也称为容器编排工具)。它由 Google 使用 Golang 创建,因此拥有一个相当大的社区。Google 最终将其捐赠给了 CNCF(云原生计算基金会)。本质上,部署是 pod 上方的一层抽象。它类似于 pod 的设计计划。
标签和选择器
在 Kubernetes 中,部署和服务的配置文件中提到了标签和选择器。它们用于将Kubernetes 服务与Kubernetes Pod 连接起来。
标签是用于标识该 Pod 的任何键值对。Pod 通过部署获取其标签,部署就像是创建 Pod 之前的 Pod 蓝图。选择器与标签匹配。标签和选择器是必需的,以便在部署、Pod 和服务之间建立连接。
部署被赋予以下格式的标签:
"metadata": { "labels": { "key1" : "value1", "key2" : "value2" } }
该服务使用以下格式的选择器来识别 pod 和部署:
"selector": { "key" : "value" }
要查看标签,我们可以使用该命令。
$ kubectl get pods --show-labels
我们可以在创建 pod 期间附加标签,获取标签,附加标签,甚至在创建 pod 之后添加标签。
$ kubectl label pod <pod_name>
label:label_name
语法和字符集
在 kubernetes 中,标签和选择器在组织集群对象(它们相互依赖)方面起着重要作用。如果您想要识别 pod 或与 kubernetes 中的任何服务进行互连,则需要使用标签和选择器。
根据您所使用的类型,创建标签和选择器时需要遵循一定的规则和语法。
1. 标签语法
标签是键:值对,它由键和一个值组成,通常是字符串,如下所示。
labels:
Key: Value
app: nginx
键和值区分大小写,最大长度为 63 个字符。
2. 选择器语法
选择器主要分为两种。
- 基于平等的选择器。
- 基于集合的选择器。
- 组合选择器(可选)。
1.基于相等性的选择器
名称本身表明基于平等,其中使用的运算符是=、==以及不等式!=。
例子:
“app = myapp” where app key set to myapp value
2.基于集合的选择器。
根据“in”、“notin”、“exists”和“does not exist”等运算符,它将使用给定的键组输入值,例如
例子:
“ app in (web,api) ”它将知道与键为 app 且值为“web 或 api”的对象匹配
3. 组合选择器(可选)
您将使用 AND 或 OR 来组合多个选择器。
例子:
“app = newapp” AND “app = firstapp” 这里将有一个键和两个值来表示键值对。
有效使用标签
标签在 Kubernetes 集群中起着重要作用,用于连接容器、pod 和服务。以下是在创建标签时需要遵循的一些最佳实践。
- 选择有意义的标签:标签应该由有意义的名称组成,当将它们分配给任何对象时,它们应该代表您正在创建的对象的用途,并且您不应该在 kubernets 中对标签使用键或保留字。标签示例,您可以使用myapp:prod-environment,就像它代表这个 pod 属于生产环境一样。
- 保持一致性:您在 kubernets 集群中创建的标签确保它们在整个集群中保持一致。这将帮助您轻松管理资源。
- 唯一标签:标签彼此之间必须非常唯一,否则会在服务、pod 和节点之间产生冲突。
- 使用标签进行扩展:将同一服务下的某组 pod 分组,并使用标签一次扩展所有 pod,而不是单独管理它们。
- 使用标签进行组织:标签可用于对具有相同功能的 pod 进行分组。
更新标签
一开始,你创建了一组带有特定标签的 pod,一段时间后,由于业务需求,你想更改 pod 的标签,那么你可以使用 CLI 命令来修改,而不是直接在 YAML 文件中进行修改,这是比编辑源文件更好的做法。要更新 pod 的标签,请使用以下命令。
kubectl label pods -l Existing-Key: Existing-value New-Key: New-value