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標籤.