原文:https://cloud.tencent.com/developer/article/1394657
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標簽.