zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Spring Boot 配置文件 bootstrap vs application 到底有什么区别?
    一份完整的 Java 成神路线图,值得收藏!
    12 岁开始学编程,17 岁总结了 7 个重要教训!
    想成为顶尖 Java 程序员?先过了下面这些问题!
    Dubbo面试20问!这些题你都遇到过吗?
    yum安装出现No package crontabs available解决办法
    表结构设计方法
    后端token认证模板
    vue 用户登录 路由拦截 vuex cookie
    pyharm无法安装包的问题
  • 原文地址:https://www.cnblogs.com/TSir/p/12257088.html
Copyright © 2011-2022 走看看