Kubernetes-匹配标签、选择器的范围

Kubernetes-匹配标签、选择器的范围,kubernetes,Kubernetes,我进行了以下部署 apiVersion: apps/v1 kind: Deployment metadata: name: hello-deploy spec: replicas: 10 selector: matchLabels: app: hello-world minReadySeconds: 10 strategy: type: RollingUpdate rollingUpdate: maxUnavailabl

我进行了以下部署

    apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-deploy
spec:
  replicas: 10
  selector:
    matchLabels:
      app: hello-world
  minReadySeconds: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
      - name: hello-pod
        image: nginx:latest
        ports:
        - containerPort: 80
此选择器是否仅适用于部署管理的吊舱或具有相同标签的任何吊舱-我试图了解选择器的范围

此处选择标签为app:hello world的吊舱,该吊舱也由部署管理

总的来说,我引用官方文件:

注意:必须指定适当的选择器和Pod模板标签 在本例中的部署中,app:hello world。不要重叠标签或标签 带有其他控制器的选择器,包括其他部署和 州集。Kubernetes不会阻止你重叠,如果 多个控制器与这些控制器具有重叠的选择器 可能会发生冲突和意外行为

这里选择标签为app:hello world的吊舱,该吊舱也由您的部署管理

总的来说,我引用官方文件:

注意:必须指定适当的选择器和Pod模板标签 在本例中的部署中,app:hello world。不要重叠标签或标签 带有其他控制器的选择器,包括其他部署和 州集。Kubernetes不会阻止你重叠,如果 多个控制器与这些控制器具有重叠的选择器 可能会发生冲突和意外行为

第一个注意事项:部署控制器将pod模板哈希标签添加到部署创建或采用的每个复制集

此标签确保部署的子副本集不重叠。它是通过对ReplicaSet的PodTemplate进行散列,并将生成的散列用作添加到ReplicaSet选择器、Pod template labels和ReplicaSet可能拥有的任何现有Pod中的标签值而生成的

所以现在您可以测试选择器在部署中的工作方式,如下所示

首先创建一个带有标签的nginx吊舱,如下所示

$ kubectl run nginx-1 --image=nginx --restart=Never --labels=run=nginx
$ kubectl get pods -o wide --show-labels
NAME                         READY   STATUS              RESTARTS   AGE   IP               NODE         NOMINATED NODE   READINESS GATES   LABELS
pod/nginx-1                  1/1     Running             0          11m   192.168.58.198   k8s-node02   <none>           <none>            run=nginx
因此,现在我们将有4个吊舱的部署和一个名为nginx-1的吊舱正在运行

因此,现在如果我们编辑第一个POD以包含相同的POD模板哈希,您将看到副本集将立即缩小POD的数量,以匹配副本集的数量4

我们编辑nginx-1pod并添加pod散列模板

因此,您将看到部署已经移除了自己的一个pod,以将replicaset编号正确地保持在4

希望这个例子能帮助您理解标签和选择器是如何工作的,以及它们的作用域

第一个注意事项:部署控制器将pod模板哈希标签添加到部署创建或采用的每个复制集

此标签确保部署的子副本集不重叠。它是通过对ReplicaSet的PodTemplate进行散列,并将生成的散列用作添加到ReplicaSet选择器、Pod template labels和ReplicaSet可能拥有的任何现有Pod中的标签值而生成的

所以现在您可以测试选择器在部署中的工作方式,如下所示

首先创建一个带有标签的nginx吊舱,如下所示

$ kubectl run nginx-1 --image=nginx --restart=Never --labels=run=nginx
$ kubectl get pods -o wide --show-labels
NAME                         READY   STATUS              RESTARTS   AGE   IP               NODE         NOMINATED NODE   READINESS GATES   LABELS
pod/nginx-1                  1/1     Running             0          11m   192.168.58.198   k8s-node02   <none>           <none>            run=nginx
因此,现在我们将有4个吊舱的部署和一个名为nginx-1的吊舱正在运行

因此,现在如果我们编辑第一个POD以包含相同的POD模板哈希,您将看到副本集将立即缩小POD的数量,以匹配副本集的数量4

我们编辑nginx-1pod并添加pod散列模板

因此,您将看到部署已经移除了自己的一个pod,以将replicaset编号正确地保持在4

希望这个例子能帮助您理解标签和选择器是如何工作的,以及它们的作用域

$ kubectl edit pod nginx-1
pod/nginx-1 edited

$ kubectl get all -o wide --show-labels
NAME                         READY   STATUS        RESTARTS   AGE     IP               NODE         NOMINATED NODE   READINESS GATES   LABELS
pod/nginx-1                  1/1     Running       0          21m     192.168.58.198   k8s-node02   <none>           <none>            pod-template-hash=6db489d4b7,run=nginx
pod/nginx-6db489d4b7-kx6xr   1/1     Running       0          9m31s   192.168.85.200   k8s-node01   <none>           <none>            pod-template-hash=6db489d4b7,run=nginx
pod/nginx-6db489d4b7-s47n7   1/1     Running       0          9m31s   192.168.85.199   k8s-node01   <none>           <none>            pod-template-hash=6db489d4b7,run=nginx
pod/nginx-6db489d4b7-vv2t4   0/1     Terminating   0          9m31s   192.168.58.204   k8s-node02   <none>           <none>            pod-template-hash=6db489d4b7,run=nginx
pod/nginx-6db489d4b7-xmqns   1/1     Running       0          9m31s   192.168.58.203   k8s-node02   <none>           <none>            pod-template-hash=6db489d4b7,run=nginx

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE    SELECTOR   LABELS
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   7d3h   <none>     component=apiserver,provider=kubernetes

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES   SELECTOR    LABELS
deployment.apps/nginx   4/4     4            4           9m31s   nginx        nginx    run=nginx   run=nginx

NAME                               DESIRED   CURRENT   READY   AGE     CONTAINERS   IMAGES   SELECTOR                                 LABELS
replicaset.apps/nginx-6db489d4b7   4         4         4       9m31s   nginx        nginx    pod-template-hash=6db489d4b7,run=nginx   pod-template-hash=6db489d4b7,run=nginx
$ kubectl get all -o wide --show-labels
NAME                         READY   STATUS    RESTARTS   AGE   IP               NODE         NOMINATED NODE   READINESS GATES   LABELS
pod/nginx-1                  1/1     Running   0          27m   192.168.58.198   k8s-node02   <none>           <none>            pod-template-hash=6db489d4b7,run=nginx
pod/nginx-6db489d4b7-kx6xr   1/1     Running   0          16m   192.168.85.200   k8s-node01   <none>           <none>            pod-template-hash=6db489d4b7,run=nginx
pod/nginx-6db489d4b7-s47n7   1/1     Running   0          16m   192.168.85.199   k8s-node01   <none>           <none>            pod-template-hash=6db489d4b7,run=nginx
pod/nginx-6db489d4b7-xmqns   1/1     Running   0          16m   192.168.58.203   k8s-node02   <none>           <none>            pod-template-hash=6db489d4b7,run=nginx

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE    SELECTOR   LABELS
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   7d3h   <none>     component=apiserver,provider=kubernetes

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES   SELECTOR    LABELS
deployment.apps/nginx   4/4     4            4           16m   nginx        nginx    run=nginx   run=nginx

NAME                               DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES   SELECTOR                                 LABELS
replicaset.apps/nginx-6db489d4b7   4         4         4       16m   nginx        nginx    pod-template-hash=6db489d4b7,run=nginx   pod-template-hash=6db489d4b7,run=nginx