zoukankan      html  css  js  c++  java
  • Deployment.spec.selector.matchLables实验解释

    原文: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标签.

  • 相关阅读:
    Java学习之路(一)——JDK的下载与安装
    无法将“add-migration”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。解决方案
    VS2019只能提示选中首选项的快捷键切换
    Visual Studio空格变成点的快捷键切换
    Visual Studio 2019 打开即时窗口
    完全卸载node.js
    安装node.js和vue
    在后台启动Redis
    mysql的数据库优化方案
    hadoop
  • 原文地址:https://www.cnblogs.com/robinunix/p/11155860.html
Copyright © 2011-2022 走看看