k8s label标签


k8s label标签

1.1 简介

在部署实际应用时,每个人创建的pod越来越多,把他们分类到子集的需求开始明显,我们需要一种能基于任意标准,将上述pod组织成更小群体的方式,标签满足了上述需求,不仅可以组织pod,也可以组织k8s的其他资源,确切来说,标签就是附着在资源上的键值对,一个资源可以有多个标签,就像一件商品上打了多个标签,标签1:牛肉,标签2:产地中国
app:指定pod属于那个应用,组件或者微服务
rel:它显示在pod中运行的程序版本是stable,beta还是canary

2.1 创建pod时指定标签

我们可以将pod调度到某个确定的节点,由于每个节点都有一个 唯 一标签 , 其中键为kuberne七es.io/hostname, 值为该 节点的实际主机名,因此我们也可以将pod调度到某个确定的节点。但如果节点处于离线状态,pod就没法调度,环境起不来了,所以不能指定固定机器。

apiVersion: v1
kind: Pod
metadata:
  name: cotainer1
  labels:
    aaa:3a  #两个标签被附加到pod上
    bbb:3b
spec:
  nodeSelector:
    productline: "ecs2" #指定lable,把pod迁移到带productline=ecs2的节点上
  containers:
  - image: ...
...

2.1.1 根据标签查询资源

列出pod的标签
rancher kubectl get pods --show-labels --namespace=liuyinghui22041901

根据两个标签得到key筛选pod
rancher kubectl get pods -L app,pod-template-hash --namespace=liuyinghui22041901

给pod添加一个标签
rancher kubectl label pod redis-6fbf8768c8-jpqjt type=redis --namespace=liuyinghui22041901
给pod修改一个标签

如果修改已经存在的一个标签,在添加标签的基础上加个 --overwrite就可以了

rancher kubectl label pod redis-6fbf8768c8-jpqjt type=redis --overwrite --namespace=liuyinghui22041901
获取指定标签的pod

注意这里的l是小写

rancher kubectl get pods -l app=redis --namespace=liuyinghui22041901
筛选排除不带type标签的pod
rancher kubectl get pods -l  '!type' --namespace=liuyinghui22041901
给node添加标签

前面说到可以给k8s的各个资源添加标签,给node加标签后可以控制pod部署在哪台node上

kubectl label node slave01  productline=ecs2