• kubernetes之标签label


    标签(Labels)是附加到 Kubernetes 对象(比如 Pod)上的键值对。标签使用户能够以松散耦合的方式将他们自己的组织结构映射到系统对象,而无需客户端存储这些映射。

    定义标签

    1. [root@k8s-master1 ~]# kubectl label node k8s-node1 test-label=node-test-label #给node打标签
    2. 输出:
    3. node/k8s-node1 labeled

    对标签进行筛选

    1. [root@k8s-master1 ~]# kubectl get no -l test-label=node-test-label
    2. 输出结果:
    3. NAME STATUS ROLES AGE VERSION
    4. k8s-node1 Ready <none> 185d v1.20.0

    给节点打的标签,可以用于pod部署到指定node上,使用nodeSelector。

    给service打标签

    1. [root@k8s-master1 ~]# kubectl label svc my-nginx test-label=service-my-nginx-label -n default
    2. service/my-nginx labeled

    查看该service的标签

    1. [root@k8s-master1 ~]# kubectl get svc my-nginx -n default --show-labels
    2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS
    3. my-nginx NodePort 10.107.145.148 <none> 80:30474/TCP 185d app=my-nginx,test-label=service-my-nginx-label

    查看所有service有test-label标签

    1. [root@k8s-master1 ~]# kubectl get svc -A -l test-label
    2. NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    3. default my-nginx NodePort 10.107.145.148 <none> 80:30474/TCP 185d
    4. [root@k8s-master1 ~]# kubectl get svc -A -l test-label --show-labels
    5. NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS
    6. default my-nginx NodePort 10.107.145.148 <none> 80:30474/TCP 185d app=my-nginx,test-label=service-my-nginx-label

    修改标签

    在实际的生产环境中,资源标签的修改是经常发生的事情,使用overwrite参数修改标签

    比如把上面的service my-nginx的test-label的标签值修改为test-test,如果不在overwrite参数,修改会报标签已经存在的错误

    1. [root@k8s-master1 ~]# kubectl label svc my-nginx -n default test-label=test-test
    2. error: 'test-label' already has a value (service-my-nginx-label), and --overwrite is false
    3. [root@k8s-master1 ~]# kubectl label svc my-nginx -n default test-label=test-test --overwrite
    4. service/my-nginx labeled
    5. #确认标签值已经修改
    6. [root@k8s-master1 ~]# kubectl get svc -A -l test-label --show-labels
    7. NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS
    8. default my-nginx NodePort 10.107.145.148 <none> 80:30474/TCP 185d app=my-nginx,test-label=test-test

    删除标签

    删除资源标签,只需要再label的key名后面加一个减号(-)即可,比如删除上面的service my-nginx的test-label标签

    1. [root@k8s-master1 ~]# kubectl get svc -A -l test-label --show-labels
    2. NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS
    3. default my-nginx NodePort 10.107.145.148 <none> 80:30474/TCP 185d app=my-nginx,test-label=test-test
    4. [root@k8s-master1 ~]# kubectl label service my-nginx -n default test-label-
    5. service/my-nginx labeled
    6. [root@k8s-master1 ~]# kubectl get svc my-nginx -n default --show-labels
    7. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS
    8. my-nginx NodePort 10.107.145.148 <none> 80:30474/TCP 185d app=my-nginx

    标签选择器

    Selector主要用于资源的匹配,只有符合条件的资源才会被调用或使用,可以使用该方式对集群中的各类资源进行分配。

    1. #查看目前已有的标签
    2. [root@k8s-master1 ~]# kubectl get svc --show-labels
    3. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS
    4. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 186d component=apiserver,provider=kubernetes
    5. my-nginx NodePort 10.107.145.148 <none> 80:30474/TCP 185d app=my-nginx
    6. my-nginx-new ClusterIP 10.106.218.117 <none> 80/TCP 144d app=my-nginx
    7. #选择匹配app为my-nginx的标签,in (my-nginx,xxx)可以写多个值
    8. [root@k8s-master1 ~]# kubectl get svc -l 'app in (my-nginx)' --show-labels
    9. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS
    10. my-nginx NodePort 10.107.145.148 <none> 80:30474/TCP 185d app=my-nginx
    11. my-nginx-new ClusterIP 10.106.218.117 <none> 80/TCP 144d app=my-nginx
    12. #匹配选择app不包括my-nginx的对象
    13. [root@k8s-master1 ~]# kubectl get svc -l app!=my-nginx,component=apiserver --show-labels
    14. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS
    15. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 186d component=apiserver,provider=kubernetes
    16. [root@k8s-master1 ~]# kubectl get svc -l app!=my-nginx,'component in (apiserver)' --show-labels
    17. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS
    18. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 186d component=apiserver,provider=kubernetes
    19. #选择匹配key为app的service
    20. [root@k8s-master1 ~]# kubectl get svc -l app!=my-nginx,component=apiserver --show-labels
    21. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS
    22. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 186d component=apiserver,provider=kubernetes
    23. [root@k8s-master1 ~]# kubectl get svc -l app!=my-nginx,'component in (apiserver)' --show-labels
    24. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS
    25. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 186d component=apiserver,provider=kubernetes

    如果是二进制安装的kubernetes,默认的master节点的role字段是空的,通过添加label,添加mater标识

    1. #未打标签之前
    2. [root@k8s-master1 ~]# kubectl get node
    3. NAME STATUS ROLES AGE VERSION
    4. k8s-master1 Ready <none> 185d v1.20.0
    5. k8s-master2 Ready <none> 185d v1.20.0
    6. k8s-master3 Ready <none> 185d v1.20.0
    7. k8s-node1 Ready <none> 185d v1.20.0
    8. k8s-node2 Ready <none> 185d v1.20.0
    9. #打标签
    10. [root@k8s-master1 ~]# kubectl label node k8s-master1 node-role.kubernetes.io/master=master
    11. node/k8s-master1 labeled
    12. #打标签之后,观察ROLES,从原来的<none>变成master
    13. [root@k8s-master1 ~]# kubectl get node
    14. NAME STATUS ROLES AGE VERSION
    15. k8s-master1 Ready master 185d v1.20.0
    16. k8s-master2 Ready <none> 185d v1.20.0
    17. k8s-master3 Ready <none> 185d v1.20.0
    18. k8s-node1 Ready <none> 185d v1.20.0
    19. k8s-node2 Ready <none> 185d v1.20.0

    master的污点

    master的节点的污点,kubeadm安装的集群,默认会在master节点污点k8s-master1 node-role.kubernetes.io/master:NoSchedule,不允许部署非系统pod。二进制安装的默认不会添加,需要手工添加,实现如下

    1. #默认不带污点
    2. [root@k8s-master1 ~]# kubectl describe node -l node-role.kubernetes.io/master | grep -B 3 Taints
    3. node.alpha.kubernetes.io/ttl: 0
    4. volumes.kubernetes.io/controller-managed-attach-detach: true
    5. CreationTimestamp: Fri, 04 Mar 2022 10:52:39 +0800
    6. Taints: <none>
    7. --
    8. node.alpha.kubernetes.io/ttl: 0
    9. volumes.kubernetes.io/controller-managed-attach-detach: true
    10. CreationTimestamp: Fri, 04 Mar 2022 10:52:39 +0800
    11. Taints: <none>
    12. --
    13. node.alpha.kubernetes.io/ttl: 0
    14. volumes.kubernetes.io/controller-managed-attach-detach: true
    15. CreationTimestamp: Fri, 04 Mar 2022 10:52:39 +0800
    16. Taints: <none>
    17. #添加污点
    18. [root@k8s-master1 ~]# kubectl taint node -l node-role.kubernetes.io/master node-role.kubernetes.io/master:NoSchedule
    19. node/k8s-master1 tainted
    20. node/k8s-master2 tainted
    21. node/k8s-master3 tainted
    22. #查看添加结果
    23. [root@k8s-master1 ~]# kubectl describe node -l node-role.kubernetes.io/master | grep -B 3 Taints
    24. node.alpha.kubernetes.io/ttl: 0
    25. volumes.kubernetes.io/controller-managed-attach-detach: true
    26. CreationTimestamp: Fri, 04 Mar 2022 10:52:39 +0800
    27. Taints: node-role.kubernetes.io/master:NoSchedule
    28. --
    29. node.alpha.kubernetes.io/ttl: 0
    30. volumes.kubernetes.io/controller-managed-attach-detach: true
    31. CreationTimestamp: Fri, 04 Mar 2022 10:52:39 +0800
    32. Taints: node-role.kubernetes.io/master:NoSchedule
    33. --
    34. node.alpha.kubernetes.io/ttl: 0
    35. volumes.kubernetes.io/controller-managed-attach-detach: true
    36. CreationTimestamp: Fri, 04 Mar 2022 10:52:39 +0800
    37. Taints: node-role.kubernetes.io/master:NoSchedule
    38. 删除污点
    39. [root@k8s-master1 ~]# kubectl taint node -l node-role.kubernetes.io/master node-role.kubernetes.io/master:NoSchedule-
    40. node/k8s-master1 untainted
    41. node/k8s-master2 untainted
    42. node/k8s-master3 untainted
    43. #查看删除结果
    44. [root@k8s-master1 ~]# kubectl describe node -l node-role.kubernetes.io/master | grep -B 3 Taints
    45. node.alpha.kubernetes.io/ttl: 0
    46. volumes.kubernetes.io/controller-managed-attach-detach: true
    47. CreationTimestamp: Fri, 04 Mar 2022 10:52:39 +0800
    48. Taints: <none>
    49. --
    50. node.alpha.kubernetes.io/ttl: 0
    51. volumes.kubernetes.io/controller-managed-attach-detach: true
    52. CreationTimestamp: Fri, 04 Mar 2022 10:52:39 +0800
    53. Taints: <none>
    54. --
    55. node.alpha.kubernetes.io/ttl: 0
    56. volumes.kubernetes.io/controller-managed-attach-detach: true
    57. CreationTimestamp: Fri, 04 Mar 2022 10:52:39 +0800
    58. Taints: <none>
    59. #单个节点添加污点
    60. kubectl taint node k8s-master1 node-role.kubernetes.io/master:NoSchedule
    61. #单个节点删除污点
    62. kubectl taint node k8s-master1 node-role.kubernetes.io/master:NoSchedule-

  • 相关阅读:
    JVM思维导图
    更新.gitmodules的子模块仓库地址,但是没有生效,需要运行命令
    复杂网络 | 利用复杂网络预测城市空间流量
    【PTA】《数据结构与算法》线性结构复习题
    在 Amazon 搭建无代码可视化的数据分析和建模平台
    监听和获取LayerUI中的switch值
    如何理解es6的迭代器?
    前端字体压缩(免费简单易上手)
    Java 基础语法
    vue2中使用quill编辑器+表格功能
  • 原文地址:https://blog.csdn.net/rendongxingzhe/article/details/126720338