• Label && Selector


    	当Kubernetes对系统的任何API对象如Pod和节点进行“分组”时,会对其添加Label(key=value形式的“键-值对”)用以精准地选择对应的API对象。而Selector(标签选择器)则是针对匹配对象的查询方法。注:键-值对就是key-value pair。
    例如,常用的标签tier可用于区分容器的属性,如frontend、backend;或者一个release_track用于区分容器的环境,如canary、production等。
    

    一、如何定义Label

    应用案例:

    公司与xx银行有一条专属的高速光纤通道,此通道只能与192.168.7.0网段进行通信,因此只能将与xx银行通信的应用部署到192.168.7.0网段所在的节点上,此时可以对节点进行Label(即加标签):

    # 给k8s-node02节点打标签
    [root@k8s-master01 ~]# kubectl label node k8s-node02 region=subnet7
    node/k8s-node02 labeled
    
    # 查找刚刚打标签的节点,通过Selector对其筛选
    [root@k8s-master01 ~]# kubectl get no -l region=subnet7
    NAME         STATUS   ROLES    AGE   VERSION
    k8s-node02   Ready    <none>   44h   v1.20.0
    
    # 最后,在Deployment或其他控制器中指定将Pod部署到该节点 *****
    containers:
      ......
    dnsPolicy: ClusterFirst
    nodeSelector:
      region: subnet7              # 指定刚刚我们打的标签
    restartPolicy: Always
    ......
    
    
    # 可以用同样的方式对Service进行Label
    [root@k8s-master01 ~]# kubectl label svc canary-v1 -n canary-production env=canary version=v1
    service/canary-v1 labeled
    
    # 查看Labels:
    [root@k8s-master01 ~]# kubectl get svc -n canary-production --show-labels
    
    # 还可以查看所有Version为v1的svc
    kubectl get svc --all-namespaces -l version=v1
    
    # 其他资源的Label方式相同
    

    二、Selector条件匹配

    Selector主要用于资源的匹配,只有符合条件的资源才会被调用或使用,可以使用该方式对集群中的各类资源进行分配。
    # 假如对Selector进行条件匹配,目前已有的Label如下
    [root@k8s-master01 ~]# kubectl get no --show-labels 
    NAME           STATUS   ROLES    AGE   VERSION   LABELS
    k8s-master01   Ready    matser   44h   v1.20.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master01,kubernetes.io/os=linux,node-role.kubernetes.io/matser=,node.kubernetes.io/node=
    k8s-master02   Ready    <none>   44h   v1.20.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master02,kubernetes.io/os=linux,node.kubernetes.io/node=
    k8s-master03   Ready    <none>   44h   v1.20.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master03,kubernetes.io/os=linux,node.kubernetes.io/node=
    k8s-node01     Ready    <none>   44h   v1.20.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node01,kubernetes.io/os=linux,node.kubernetes.io/node=
    k8s-node02     Ready    <none>   44h   v1.20.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node02,kubernetes.io/os=linux,node.kubernetes.io/node=,region=subnet7
    
    # 选择app为reviews或者productpage的svc
    [root@k8s-master01 ~]# kubectl get svc -l  'app in (details, productpage)' --show-labels
    NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE     LABELS
    details       ClusterIP   10.99.9.178      <none>        9080/TCP   45h     app=details
    nginx         ClusterIP   10.106.194.137   <none>        80/TCP     2d21h   app=productpage,version=v1
    productpage   ClusterIP   10.105.229.52    <none>        9080/TCP   45h     app=productpage,tier=frontend
    
    # 选择app为productpage或reviews但不包括version=v1的svc
    [root@k8s-master01 ~]# kubectl get svc -l  version!=v1,'app in (details, productpage)' --show-labels
    NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE   LABELS
    details       ClusterIP   10.99.9.178     <none>        9080/TCP   45h   app=details
    productpage   ClusterIP   10.105.229.52   <none>        9080/TCP   45h   app=productpage,tier=frontend
    
    # 选择labelkey名为app的svc
    [root@k8s-master01 ~]# kubectl get svc -l app --show-labels
    NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE     LABELS
    details       ClusterIP   10.99.9.178      <none>        9080/TCP   45h     app=details
    nginx         ClusterIP   10.106.194.137   <none>        80/TCP     2d21h   app=productpage,version=v1
    productpage   ClusterIP   10.105.229.52    <none>        9080/TCP   45h     app=productpage,tier=frontend
    ratings       ClusterIP   10.96.104.95     <none>        9080/TCP   45h
    

    三、管理标签(Label)

    在实际使用中,Label的更改是经常发生的事情,可以使用overwrite参数修改标签。
    # 修改标签,比如将version=v1改为version=v2
    [root@k8s-master01 ~]# kubectl get svc -n canary-production --show-labels
    NAME        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE   LABELS
    canary-v1   ClusterIP   10.110.253.62   <none>        8080/TCP   26h   env=canary,version=v1
    [root@k8s-master01 canary]# kubectl label svc canary-v1 -n canary-production version=v2 --overwrite
    service/canary-v1 labeled
    [root@k8s-master01 canary]# kubectl get svc -n canary-production --show-labels
    NAME        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE   LABELS
    canary-v1   ClusterIP   10.110.253.62   <none>        8080/TCP   26h   env=canary,version=v2
    
    # 删除标签
    [root@k8s-master01 ~]# kubectl label svc canary-v1 -n canary-production version-
    service/canary-v1 labeled
    [root@k8s-master01 canary]# kubectl get svc -n canary-production --show-labels
    NAME        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE   LABELS
    canary-v1   ClusterIP   10.110.253.62   <none>        8080/TCP   26h   env=canary
    
  • 相关阅读:
    一个C++程序员学习C#语言
    C#入门教程笔记
    完全卸载mysql 停止服务、卸载相关程序、删除注册表
    C++结构简介
    babun,windows shell
    无限极设计以及随意移动节点(树结构)
    springboot 配置访问外部静态资源详解
    mysql8+keepalived 双主高可用搭建
    mysql 双主复制搭建
    mysql 主备搭建
  • 原文地址:https://www.cnblogs.com/hsyw/p/14174518.html
Copyright © 2020-2023  润新知