Labels

Labels 是一对 key/value,被关联到对象上,标签的使用我们倾向于能够标示对象的特殊特点,并且对用户而言是有意义的(就是一眼就看出了这个 Pod 是什么数据库),但是标签对内核系统是没有直接意义的。

标签可以用来划分特定组的对象(比如,所有 带把儿 的),标签可以在创建一个对象的时候直接给与,也可以在后期随时修改。

每一个对象可以拥有多个标签,但是,key 值必须是唯一的。

"labels":{
  "key1": "value1",
  "key2": "value2"
}

使用标签组织 pod

标签是一个功能强大的 k8s 特性,不仅可以组织 pod,也可以组织所有其他的 k8s 资源。

金丝雀发布(也叫灰度发布):是指在部署新版本时,先只让一小部分用户体验 新版本以观察新版本的表现,然后再向所有用户进行推广,这样可以防 止暴露有问题的版本给过多的用户。

例如在灰度测试的使用场景中:

apiVersion: v1
kind: Pod
metadata:
      name: kubeia-manual-v2
      labels:
         creation_method: manual  <-- 标签
         env: prod  <-- 第二个标签
...

常用命令

//为 pod 添加一个标签
kubectl label po pod_name label_name=label_value 
//更改 pod 标签的值
kubectl label po pod_name label_name=label_new_value 

//列出标记了 label_name:label_value 的 pod
kubectl label po -l label_name=label_value 
//列出包含 env 标签的所有 pod
kubectl label po -l env 
//列出没有 env 标签的 pod
kubectl label po -l '!env' 


//也可以将pod与以下标签选择器进行匹配
creation_method!=manual 选择带有creation_method 标签,并且值不等于 manual 的 pod
env in(prod,devel)选择带有 env 标签且值为 prod 或 devel 的 pod
env notin(prod,devel)选择带有 env 标签,但其值不是 prod 或 devel 的 pod


//使用多个条件
app=pc,rel=beta  // 用逗号分隔

使用标签分类 工作节点

pod 并不是唯一可以附加标签的 k8s 资源,标签可以附加在任何 k8s 对象上,包括节点。

//查看现有 node 及 label
kubectl get nodes --show-labels


//为节点添加 gpu:true 标签
kubectl label node node_name gpu=true

 
//筛选带某一标签的节点
kubectl get nodes -l gpu=true


//删除 label
kubectl label nodes <node-name> <label-key>-
//删除key为disktype的label
kubectl label nodes node01 disktype-


//修改 label 的值
kubectl label nodes <node-name> <label-key>=<label-value> --overwrite
kubectl label nodes node01 disktype=hdd --overwrite

将 pod 调度到特定节点

使用标签选择器可以将 pod 调度到特定节点:yaml 文件:

apiVersion: v1
kind: Pod
metadata:
      name: kubia-gpu
spec:
      nodeSelector:   <--节点选择器,将 pod 部署到包含 gpu=true 标签的节点上
          gpu: true
      containers:
      - image: lukas/kubia
         name: kubia

如果不存在带 gpu=true 标签的 node,那么该 pod 将无法被调度执行。

END

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐