标签和选择器(Label和 Selector)
在 K8S 中,标签(Labels)和选择器(Selectors)是两个不同但相关的概念,它们用于管理和操作资源,但具有不同的功能和作用。因此,区别在于标签是资源的元数据,而选择器是用于根据标签选择资源的规则。标签提供了一种灵活的方式来对资源进行分类和标识,而选择器允许根据这些标签对资源进行过滤和选择,以执行特定的操作。Service 选择了所有具有标签 app: nginx 和 environm
·
介绍
在 K8S 中,标签(Labels)和选择器(Selectors)是两个不同但相关的概念,它们用于管理和操作资源,但具有不同的功能和作用。
标签(Labels):
- 标签是键值对,附加到 Kubernetes 资源(如 Pod、Service、Deployment 等)的元数据。
标签提供了一种灵活的方式来对资源进行分类、分组和识别,例如,您可以使用标签来指定资源所属的环境、应用程序、版本号等。
标签是资源的一部分,它们可以随时添加、修改或删除,而不影响资源的运行状态。
选择器(Selectors):
- 选择器是一种用于根据标签选择资源的机制。
选择器定义了一组标签匹配规则,它们指定了资源的哪些标签必须匹配才能被选中。
选择器可以根据标签的相等性、不相等性、存在性等进行匹配。
选择器通常用于创建服务发现规则、路由流量、设置自动缩放策略等,以便根据特定标签的资源进行操作。
因此,区别在于标签是资源的元数据,而选择器是用于根据标签选择资源的规则。标签提供了一种灵活的方式来对资源进行分类和标识,而选择器允许根据这些标签对资源进行过滤和选择,以执行特定的操作。
例如,以下是一个标签选择器的示例,它选择了具有指定标签的所有 Pod:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels: # 定义的下面两个标签
app: nginx
environment: production
spec:
containers:
- name: nginx
image: nginx:latest
选择器用于匹配这样的标签,例如:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector: # Service 回选择这两个标签的pod
app: nginx
environment: production
ports:
- port: 80
targetPort: 80
Service 选择了所有具有标签 app: nginx 和 environment: production 的 Pod。
具体应用
添加标签
# 可以给所有的资源对象添加标签 更换资源对象即可
kubectl label node node02 disk=ssd
查看刚刚添加的标签
kubectl get nodes node02 --show-labels
[root@master01 ~]# kubectl get nodes node02 --show-labels
NAME STATUS ROLES AGE VERSION LABELS
node02 Ready node 23d v1.26.14 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node02,kubernetes.io/os=linux,kubernetes.io/role=node,node.kubernetes.io/node=,disk=ssd
删除标签
kubectl label node node02 disk-
修改标签
kubectl label node node02 disk=name --overwrite
根据标签匹配Pod
基于等值或基于不等值的需求允许按标签键和值进行过滤。 匹配对象必须满足所有指定的标签约束,尽管它们也可能具有其他标签。 可接受的运算符有 =、== 和 != 三种。 前两个表示相等(并且是同义词),而后者表示不相等。例如:
environment = production
tier != frontend
举例:
按照下面查询出来的举例
[root@master01 ~]# kubectl get po -n kube-system --show-labels
NAME READY STATUS RESTARTS AGE LABELS
calico-kube-controllers-54cbfb689f-stf9f 1/1 Running 0 19d k8s-app=calico-kube-controllers,pod-template-hash=54cbfb689f
calico-node-2v2pk 1/1 Running 0 19d controller-revision-hash=66bb6bf796,k8s-app=calico-node,pod-template-generation=2
calico-node-djvsw 1/1 Running 0 19d controller-revision-hash=66bb6bf796,k8s-app=calico-node,pod-template-generation=2
calico-node-gfjw9 1/1 Running 0 19d controller-revision-hash=66bb6bf796,k8s-app=calico-node,pod-template-generation=2
calico-node-hhsnx 1/1 Running 0 19d controller-revision-hash=66bb6bf796,k8s-app=calico-node,pod-template-generation=2
calico-node-z9mrv 1/1 Running 0 19d controller-revision-hash=66bb6bf796,k8s-app=calico-node,pod-template-generation=2
coredns-65599ffb58-jx78h 1/1 Running 0 19d k8s-app=kube-dns,pod-template-hash=65599ffb58
metrics-server-6b7745d9f-dfk7f 1/1 Running 0 19d k8s-app=metrics-server,pod-template-hash=6b7745d9f
比如查询 lable 是这个的 “k8s-app=kube-dns” pod
[root@master01 ~]# kubectl get po -n kube-system -l k8s-app=kube-dns
NAME READY STATUS RESTARTS AGE
coredns-65599ffb58-jx78h 1/1 Running 0 19d
查询 lable 不是”k8s-app=kube-dns“ 这个的pod
[root@master01 ~]# kubectl get po -n kube-system -l k8s-app!=kube-dns
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-54cbfb689f-stf9f 1/1 Running 0 19d
calico-node-2v2pk 1/1 Running 0 19d
calico-node-djvsw 1/1 Running 0 19d
calico-node-gfjw9 1/1 Running 0 19d
calico-node-hhsnx 1/1 Running 0 19d
calico-node-z9mrv 1/1 Running 0 19d
metrics-server-6b7745d9f-dfk7f 1/1 Running 0 19d
多个查询条件
查询 lable 中包含 k8s-app 等于 kube-dns 或者 metrics-server 的所有Pod
[root@master01 ~]# kubectl get po -n kube-system --show-labels -l 'k8s-app in (kube-dns,metrics-server)'
NAME READY STATUS RESTARTS AGE LABELS
coredns-65599ffb58-jx78h 1/1 Running 0 19d k8s-app=kube-dns,pod-template-hash=65599ffb58
metrics-server-6b7745d9f-dfk7f 1/1 Running 0 19d k8s-app=metrics-server,pod-template-hash=6b7745d9f
查询 lable 中不包含 k8s-app 等于 kube-dns 或者 metrics-server 的所有Pod
[root@master01 ~]# kubectl get po -n kube-system -l 'k8s-app notin (kube-dns,metrics-server)'
NAME READY STATUS RESTARTS AGE LABELS
calico-kube-controllers-54cbfb689f-stf9f 1/1 Running 0 19d k8s-app=calico-kube-controllers,pod-template-hash=54cbfb689f
calico-node-2v2pk 1/1 Running 0 19d controller-revision-hash=66bb6bf796,k8s-app=calico-node,pod-template-generation=2
calico-node-djvsw 1/1 Running 0 19d controller-revision-hash=66bb6bf796,k8s-app=calico-node,pod-template-generation=2
calico-node-gfjw9 1/1 Running 0 19d controller-revision-hash=66bb6bf796,k8s-app=calico-node,pod-template-generation=2
calico-node-hhsnx 1/1 Running 0 19d controller-revision-hash=66bb6bf796,k8s-app=calico-node,pod-template-generation=2
calico-node-z9mrv 1/1 Running 0 19d controller-revision-hash=66bb6bf796,k8s-app=calico-node,pod-template-generation=2
查询所有包含 controller-revision-hash 的键 ,不管值是多少
[root@master01 ~]# kubectl get po -n kube-system -l controller-revision-hash
NAME READY STATUS RESTARTS AGE
calico-node-2v2pk 1/1 Running 0 19d
calico-node-djvsw 1/1 Running 0 19d
calico-node-gfjw9 1/1 Running 0 19d
calico-node-hhsnx 1/1 Running 0 19d
calico-node-z9mrv 1/1 Running 0 19d
查询所有不包含 controller-revision-hash 的键 ,不管值是多少
[root@master01 ~]# kubectl get po -n kube-system -l '!controller-revision-hash'
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-54cbfb689f-stf9f 1/1 Running 0 19d
coredns-65599ffb58-jx78h 1/1 Running 0 19d
metrics-server-6b7745d9f-dfk7f 1/1 Running 0 19d
同时满足 lable “k8s-app=metrics-server,pod-template-hash=6b7745d9f”
[root@master01 ~]# kubectl get pods -n kube-system -l k8s-app=metrics-server,pod-template-hash=6b7745d9f
NAME READY STATUS RESTARTS AGE
metrics-server-6b7745d9f-dfk7f 1/1 Running 0 19d
更多推荐
已为社区贡献19条内容
所有评论(0)