k8s–基础–12.5–pod–名称空间,标签,节点名称
1、名称空间(namespace)
- 可以把k8s集群划分成多个名称空间,然后对不同的名称空间的资源做隔离
- 可以将不同命名空间,当成不同的虚拟主机
- 可以控制各个名称空间的入栈,出栈策略
- 是一种在多个用户之间划分群集资源的方法
1.1、查看k8s集群当前有哪些名称空间
kubectl get namespace
2、pod标签(pod label)
- 是多对 key/value
- key值必须是唯一的
- 作用:
- 可以用来划分特定组的对象(比如版本,服务类型等)
- 告诉我们这个Pod是干什么的
- 标签可以在创建一个对象的时候直接给与,也可以在后期随时修改
- 每一个对象可以拥有多个标签
2.1、查看所有pod资源对象的标签
kubectl get pods --show-labels
2.2、查看拥有web1这个标签的资源对象,并且把标签显示出来
kubectl get pods -l web1 --show-labels
2.3、修改资源的标签
# 给web资源新增标签 K1=V1
kubectl label pods web K1=V1
# 查看
kubectl get pods --show-labels
2.4、k8s的标签选择器
- 通过标签选择器,客户端/用户能方便辨识出一组对象。
- 目前支持两种标签选择器:
- 基于等值的标签选择器
- 基于集合的标签选择器
- 一个label选择器可以由多个条件组成,由逗号分隔。而逗号起着AND逻辑运算符的作用。
- 一个空的label选择器(即有0个必须条件的选择器)会选择集合中的每一个对象。
- 一个null型label选择器(仅对于可选的选择器字段才可能)不会返回任何对象。
2.4.1、基于等值关系的标签选择器
- 基于相等性或者不相等性的条件允许用label的键或者值进行过滤。
- 支持三种运算符
- “=” :代表相等性
- “==”:代表相等性
- “!=”:代表非相等性
案例1
k1=v1 k2!=v2
- 第1个选择所有键等于k1,值为v1的资源。
- 第2个选择所有键等于k2,值不等于v2的资源,和那些没有键为k2的label的资源。
案例2
k1=v1,k2!=v2
所有键等于k1,值为v1,且键等于k2,值不等于v2的资源
2.4.2、基于集合的标签选择器:
- 允许用一组值来过滤键。
- 支持三种操作符
- in
- notin
- exists(仅针对于key符号)
案例1
k1 in (v1, v2)
选择所有键等于k1 ,且值等于v1或者v2的资源。
案例2
k1 notin (v1, v2)
选择所有键等于k1且值是除了v1, v2之外的资源,和那些没有label的键是 k1 的资源。
3、node标签(node label)
3.1、查看nodes节点的标签
kubectl get nodes --show-labels
3.2、给node1节点打标签
kubectl label nodes node1 k1=v1
kubectl get nodes --show-labels
3.3、节点标签选择器(nodeSelector)
- 可以限制pod运行在哪个节点上
3.3.1、查看定义
kubectl explain pods.spec.nodeSelector
内容
KIND: Pod
VERSION: v1
FIELD: nodeSelector <map[string]string>
DESCRIPTION:
NodeSelector is a selector which must be true for the pod to fit on a node.
Selector which must match a node's labels for the pod to be scheduled on
that node. More info:
https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
3.3.2、修改web资源的节点
kubectl get pods -o wide
可以看到web运行在node1上,如果我们想要让它运行在master上,就需要用到节点选择器
修改配置pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: web
namespace: default
labels:
web1: tomcat
spec:
containers:
- name: tomcat1
image: tomcat:8.5-jre8-alpine
imagePullPolicy: IfNotPresent
nodeSelector:
k1: v1
重新生成资源
kubectl delete -f /root/k8s/test/pod.yaml
kubectl apply -f /root/k8s/test/pod.yaml
kubectl get pods -o wide
显示pod运行在node1上
如果node1和node2都有k1这个标签,那么nodeSelector则根据调度策略调度pod到相应节点上
4、节点名称(nodeName)
- 指定pod节点运行在哪个具体node上
- 不存在调度说法
4.1、定义
kubectl explain pods.spec.nodeName