ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
标签通常与标签选择器结合在一起使用,标签选择器可以选择标记有特定标签的 Pod 子集,并对这些 Pod 执行操作。 标签选择器对于标签的使用一般有如下 3 种方式: * 包含或是不包含使用特定键的标签 * 包含具有特定键和值的标签 * 包含有特定键,值可以为任意值的标签 想要筛选出所有手动创建的 Pod: ~~~bash $ kubectl get pod -l creation_method=manual NAME READY STATUS RESTARTS AGE nginx-manual 1/1 Running 0 18m nginx-manual-v2 1/1 Running 0 4m ~~~ 列出含有 rel 标签的所有 Pod: ~~~bash $ kubectl get pod -l rel NAME READY STATUS RESTARTS AGE nginx-manual-v2 1/1 Running 0 4m ~~~ 列出不含有 rel 标签的所有 Pod: ~~~bash $ kubectl get pod -l '!rel' NAME READY STATUS RESTARTS AGE nginx-manual 1/1 Running 0 7m ~~~ 还有一些其它的使用方式: ~~~bash # 列出含有 creation_method 标签,但是其值不能为 manual 的 Pod kubectl get pod -l 'creation_method!=manual' # 列出含有 rel 标签,且其值为 beta 或是 stable 的 Pod kubectl get pod -l 'rel in (beta,stable)' # 列出含有 rel 标签,且其值不为 beta 和 stable 的 Pod kubectl get pod -l 'rel notin (beta,stable)' # 列出含有标签 creation_method=manual 和 rel=stable 的 Pod kubectl get pod -l creation_method=manual,rel=stable ~~~ #### 约束 Pod 调度 在 Kubernetes 中,Pod 通常都是随机调度到工作节点上的,这也是 Kubernetes 集群中正确的工作方式。但是在某些特定的情况下,我们会指定 Pod 的调度,这种需求不太常见,这里大家仅作为了解即可。 有的时候一个集群中的硬件基础设施会不一样,比如机器学习的环境中,有的使用 CPU 环境,有的是 GPU 环境,这两种环境的硬件不一样,会导致对应的计算速度也不同。如果想要将 Pod 调度到 GPU 的工作节点上,可以对相应的节点打上标签,然后在编写 yaml 文件时使用 nodeSelector 指定对应的节点标签。 首先查看环境中有几个节点: ~~~bash $ kubectl get nodes NAME STATUS ROLES AGE VERSION kube-master Ready master 8d v1.15.0 kube-node-1 Ready <none> 8d v1.15.0 kube-node-2 Ready <none> 8d v1.15.0 ~~~ 任意选择一个节点打上标签: ~~~bash $ kubectl label node kube-node-1 gpu=true node/kube-node-1 labeled ~~~ 现在查看是否打上标签: ~~~bash $ kubectl get nodes -l gpu=true NAME STATUS ROLES AGE VERSION kube-node-1 Ready <none> 8d v1.15.0 ~~~ 新建一个名为 nginx-gpu 的 Pod,在`/home/shiyanlou`目录下新建`nginx-gpu.yaml`文件,并向其中写入如下代码: ~~~yaml apiVersion: v1 kind: Pod metadata: name: nginx-gpu spec: nodeSelector: gpu: 'true' containers: - image: registry.cn-hangzhou.aliyuncs.com/chenshi-kubernetes/nginx:1.9.1 name: nginx ports: - containerPort: 80 protocol: TCP ~~~ 其中的`nodeSelector`字段表示在创建 Pod 时调度器只在包含 gpu=true 的工作节点中选择。 然后执行创建: ~~~bash $ kubectl create -f nginx-gpu.yaml pod/nginx-gpu created ~~~