K8s -- Label

作者: 沉沦2014 | 来源:发表于2018-12-04 19:31 被阅读147次

    转:https://www.jianshu.com/p/cd6b4b4caaab

    Label是Kubernetes系统中的一个核心概念。Label以key/value键值对的形式附加到任何对象上,如Pod,Service,Node,RC(ReplicationController)/RS(ReplicaSet)等。Label可以在创建对象时就附加到对象上,也可以在对象创建后通过API进行额外添加或修改。

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

    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. 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: nginxrelease: stable

    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对,你可以随心所欲的设置。

    2. Label Selector

    带有Label的对象创建好之后,我们就可以通过Label Selector来引用这些对象。

    通常我们通过描述文件中的spec.selector字段来指定Label,从而Kubernetes寻找到所有包含你指定Label的对象,进行管理。

    Kubernetes目前支持两种类型的Label Selector:

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

    RC只支持基于等式的Selector,而RS两种Selector都支持。

    2.1 基于等式的Selector

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

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

    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,RC/RS等组件则通过Label Selector来定位需要管理的对象,Label和Label Selector共同构成了Kubernetes系统中最核心的应用模型,使得对象能够精细分组,同时实现了集群的高可用性。

    相关文章

      网友评论

        本文标题:K8s -- Label

        本文链接:https://www.haomeiwen.com/subject/wyvvcqtx.html