• Kubernetes基本概念之Label


    系列目录

    在为对象定义好Label后,其他对象就可以通过Label来对对象进行引用。Label的最常见的用法便是通过spec.selector来引用对象。

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: nginx
    spec:
      replicas: 3
      selector:
        app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80
    
    

    关于Label的用法重点在于这两步:

    • 通过template.metadata.labels字段为即将新建的Pod附加Label。在上面的例子中,新建了一个名称为nginx的Pod,它拥有一个键值对为app:nginx的Label。

    • 通过spec.selector字段来指定这个RC管理哪些Pod。在上面的例子中,新建的RC会管理所有拥有app:nginxLabel的Pod。这样的spec.selector在Kubernetes中被称作Label Selector

    1.1. Label的定义

    我们通常使用metadata.labels字段,来为对象添加Label。Label可以为多个。一个简单的例子如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        app: nginx
        release: stable
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
    
    

    上面的描述文件为名为nginx的Pod添加了两个Label,分别为app: nginx和release: stable。

    注: label为任意键值对,只要selector在选择的时候匹配即可

    1.1.1. 常见的Label

    一般来说,我们会给一个Pod(或其他对象)定义多个Label,以便于配置,部署等管理工作。例如:部署不同版本的应用到不同的环境中;或者监控和分析应用(日志记录,监控,报警等)。通过多个Label的设置,我们就可以多维度的Pod或其他对象进行精细化管理。一些常用的Label示例如下:

    relase: stable
    release: canary
    environment: dev
    environemnt: qa
    environment: production
    tier: frontend
    tier: backend
    tier: middleware
    ......
    
    

    上面说过,Label是自定义的一些key/value对,你可以随心所欲的设置,但是强烈建议按照一定的惯例或者组织内部规则,以便维护管理

    1.2. Label Selector

    带有Label的对象创建好之后,我们就可以通过Label Selector来引用这些对象。
    通常我们通过描述文件中的spec.selector字段来指定Label,从而Kubernetes寻找到所有包含你指定Label的对象,进行管理。
    Kubernetes目前支持两种类型的Label Selector:

    • 基于等式的Selector(Equality-based)
    • 基于集合的Selector(Set-based)

    RC只支持基于等式的Selector,而RS两种Selector都支持。而RC是很早版本就建议弃用的特征,因此实际项目中强烈建议使用Deployment来代替Repliation Controller (RC)

    1.2.1. 基于等式的Selector

    上文中创建RC的例子中的使用的就是基于等式的Selector。基于等式的Selector通过等式类的表达式来进行筛选。例如:

    • app=nginx 选择所有Label中key为app,value为nginx的对象。
    • env!=dev 选择所有Label中key为env,value不等于dev的对象。

    1.2.2. 基于集合的Selector

    基于集合的Selector通过集合操作的表达式来进行筛选。例如

    • name in (redis-master, redis-slave) 选择所有Label中key为name,并且value为redis-master或redis-slave的对象。

    • env not in (dev) 选择所有Label中key为env,并且value不为dev的对象。

    使用Label可以给对象创建一组或多组标签,Service,ReplicationController ReplicaSet,Deployment等组件则通过Label Selector来定位需要管理的对象,Label和Label Selector共同构成了Kubernetes系统中最核心的应用模型,使得对象能够精细分组,同时实现了集群的高可用性。

  • 相关阅读:
    前后端分离实践 — 如何解决跨域问题
    bower 和 npm 的区别详细介绍
    yeoman-bower-grunt之间的关系
    软件开发环境-开发环境、测试环境、生产环境的区别
    Tomcat下配置JNDI的三种方式
    SSE
    Java动态代理
    Css之Relative
    多线程之——死锁
    JVM
  • 原文地址:https://www.cnblogs.com/tylerzhou/p/11020761.html
Copyright © 2020-2023  润新知