Deployment.spec.selector.matchLables實驗解釋

Deployment.spec.selector.matchLables實驗解釋

作者: 張首富
時間: 2019-02-23
個人博客: www.zhangshoufu.com
QQ羣: 895291458

正確的Deployment,讓matchLabels 和template.metadata.lables完全比配不報錯

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      app: my-nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80

pod創建成功

[root@rke test_yaml]# kubectl get pods
NAME                      READY   STATUS    RESTARTS   AGE
my-nginx-9b44d8f5-d6n8z   1/1     Running   0          3s
my-nginx-9b44d8f5-zzv52   1/1     Running   0          3s

直接不寫spec.mathlabels創建直接報錯缺少缺少必要字段selector

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  replicas: 2
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80

運行報錯結果如下:

[root@rke test_yaml]# kubectl create -f test_pod_svc.yaml
error: error validating "test_pod_svc.yaml": error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec; if you choose to ignore these errors, turn validation off with --validate=false

#當把matchLables匹配的和下面pod模板不相對應,也會直接報錯,選擇的和模板標籤不匹配

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      app: my-nginx-add
  replicas: 2
  template:
    metadata:
      labels:
        app: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx:1.14
        ports:
        - containerPort: 80

運行報錯結果如下:

The Deployment "my-nginx" is invalid: spec.template.metadata.labels: Invalid value: map[string]string{"app":"my-nginx"}: `selector` does not match template `labels`

查看幫助手冊

 kubectl explain Deployment.spec

    selector  <Object>
     Label selector for pods. Existing ReplicaSets whose pods are selected by
     this will be the ones affected by this deployment.

     pod的標籤選擇器。 由此選擇其pod的現有ReplicaSet(副本集)將受此部署影響的副本。

#總結:
1,在Deployment中必須寫matchLables,
2,在定義模板的時候必須定義labels,因爲Deployment.spec.selector是必須字段,而他又必須和template.labels對應,
3,template裏面定義的內容會應用到下面所有的副本集裏面,在template.spec.containers裏面不能定義labels標籤.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章