Kubernetes(十八)名称、命名空间、标签和选择器、注解、字段选择器

在部署和管理pod中,只有先理解这些概念,才能更好的去进行控制器的学习和管理。
 
  • 名称
    • kubernetes rest api所有的对象都是由名称和UID组成。
    • 名称
      • kubernetes名称最大长度为253个字符。
        apiVersion: v1
        kind: Pod
        metadata:
          name: nginx-demo #Pod的名称
        spec:
          containers:
          - name: nginx #容器的名称
            image: nginx:1.7.9
            ports:
            - containerPort: 80     
    • UIDs
      • kubernetes系统自动生成的字符串唯一标识对象。     
  • 命名空间
    • 介绍 
      • kubernetes支持多个虚拟集群,他们底层依赖于一个物理集群。这些虚拟机群称为命名空间。
    • 何时使用命名空间
      • 命名空间适用于很多库团队、跨项目的用户场景。对于只有几个到几十个用户的集群,根本不需要创建命名空间。
      • 不要使用命名空间来做轻微的资源隔离,例如软件的不同版本,请使用lables来区分。   
    • 使用命名空间     
      • 查看命名空间 kubectl get namespace     
        • default 没有指名使用其他命名空间的对象,会默认使用default
        • kube-system kubernetes系统创建对象所使用的命名空间
        • kube-public 这个命名空间是自动创建的,所有用户都可以读取他。主要用于集群使用。
      • 为请求设置命名空间  kubectl run nginx --image=nginx --namespace= 命名空间   
      • 查看指定命名空间的pod  kubectl get pods  --namespace=命名空间
    • 设置系统默认命名空间       
      • 设置默认命名空间 kubectl config set-context --current --namespace=命名空间
      • 查看系统默认命名空间 kubectl config view | grep namespace:
    • 命名空间和DNS
      • 当您创建一个service时,kubernetes会创建一个相应的DNS条目
      • 这对于跨多个命名空间如开发、分级和生产)使用相同的配置非常有用。
    • 并非所有的对象都在命名空间中
      • 查看在命名空间中的对象 kubectl api-resources --namespaced=true    
      • 查看不在命名空间中的对象 kubectl api-resources --namespaced=false    
    • 命名空间的创建、删除等
  • 标签和选择器
  • 官网链接 https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/labels/ 
    • 标签
      • 标签是附加到kubernetes对象(例如:pod)上的键值对,用于对对象进行标识。标签可以在创建时候附加到对象上,也可以随时添加和修改。每个键值对象必须是唯一的。
        "metadata": {
          "labels": {
            "key1" : "value1",
            "key2" : "value2"
          }
        }
    •  选择器 
      • 通常一个对象携带多个标签,通过标签选择器来找到对象组。
      • 标签过滤-运算符
        • 相等性 运算符=、==
        • 不相等性 !=
      • 标签过滤-指定一个集合 
        • in 示例:environment in (production,qa)
        • notin 示例:environment notin(frontend,backend)
        • exists
          • 示例一:partition #所有包含partition标签的资源
          • 示例二:!partition #所有不包含partition标签的资源
    • API
      • 查找指定标签的pod kubectl get pods -l app=useridentity,app=useridentity  #同时指定多个标签
      • 查找指定标签的pod kubectl get pods -l 'app in (useridentity)' #集合方式查找
    • 在API对象上设置引用 
      • 在一些kubernetes对象,例如:Pod,ReplicationController     等也使用标签选择器指定了其他的资源集合;
      • 并且这些对象只支持相等性的方式设置;
         
      • 设置格式一:
        "selector": {
            "component" : "redis",
        }
      • 设置格式二:
        selector:
            component: redis

      • 目前job、deployment、Replica Set、Daemon Set支持集合的方式;
        selector:
          matchLabels:
            component: redis
          matchExpressions:
            - {key: tier, operator: In, values: [cache]}
            - {key: environment, operator: NotIn, values: [dev]}

  • 注解
  • 字段选择器
  • 推荐使用的标签
    • 官方链接 https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/common-labels/
    • 推荐标签是为了让程序管理变得更容易。共享标签和注解都使用同一个前缀app.kubernetes.io。没有前缀的标签是用户私有的。
    • 我们应该在每个资源上都使用他们。
      • app.kubernetes.io/name
        应用程序的名称
        mysql
        字符串
        app.kubernetes.io/instance
        用于唯一确定应用实例的名称
        wordpress-abcxzy 字符串     
        app.kubernetes.io/version
        应用程序的当前版本(例如,语义版本,修订版哈希等
        5.7.21 字符串
        app.kubernetes.io/component 架构中的组件 database 字符串
        app.kubernetes.io/part-of 此级别的更高级别应用程序的名称 wordpress 字符串
        app.kubernetes.io/managed-by 用于管理应用程序的工具 helm 字符串
      • 自定义常用标签
        release 版本 stable(稳定版)、canary(金丝雀版)  
        environment 环境 dev(开发版本)、qa()、production(生成版)  
        tier
        frontend(前端)、backend(后端)、middleware(中间件)、
        cache(缓存层)
         
         
        track   daily(每日)、weekly(每周)  
        partition 分区 customerA、customerB  
      •  使用示例
        apiVersion: apps/v1
        kind: StatefulSet
        metadata:
          labels:
            app.kubernetes.io/name: mysql
            app.kubernetes.io/instance: wordpress-abcxzy
            app.kubernetes.io/version: "5.7.21"
            app.kubernetes.io/component: database
            app.kubernetes.io/part-of: wordpress
            app.kubernetes.io/managed-by: helm
    • 理解kubernetes对象
      • 官方链接 https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/kubernetes-objects/
      • 主要是说明kuberneter对象在kubernetes api和.yaml文件中是如何表示的。
      • 理解kubernetes对象
        • 在kubernetes系统中,kubernetes对象是持久化的实体。kubernets使用这些实体去表示整个集群的状态。主要描述以下信息:
          • 哪些容器化应用在运行(以及运行在哪个node上)
          • 可以被应用使用的资源
          • 关于应用运行时的表现策略,比如重启、升级、容错等策略。
        • deployment.yaml示例
        • apiVersion: apps/v1 # 所使用的kubernetes api版本
          kind: Deployment #想要创建的对象类型
          metadata: #帮助识别对象唯一性的数据。包括name、UID和可选的namespace
            name: nginx-deployment
          spec:
            selector:
              matchLabels:
                app: nginx
            replicas: 2 # tells deployment to run 2 pods matching the template
            template:
              metadata:
                labels:
                  app: nginx
              spec:
                containers:
                - name: nginx
                  image: nginx:1.7.9
                  ports:
                  - containerPort: 80
原文地址:https://www.cnblogs.com/TSir/p/12257088.html