默认情况下,k8s master 管理节点有污点标签,默认是NoSchedule,即不会被调度。新创建的pod 会随机选择除了master管理节点的以外的node工作节点上创建。如果想要使某个新建pod在某个node节点创建,可以使用nodeName或者nodeSelector两种方式

nodeName

这种方式适合某个pod在某台主机上创建。以nginx为例

[root@matser-0001 test]# kubectl  apply  -f  nginx.pod.nodeName.example.yml

apiVersion: apps/v1                     #api版本,没什么可说的
kind: Deployment                        # 资源类型为Deployment
metadata:                              #元数据,即资源的描述
  name: nginx-deployment                #Deployment资源的名称, 可以自定义
  labels:                               #Deployment的标签定义
    app: nginx                          #Deployment的标签
spec:                                   #Deployment资源对象的核心信息
  replicas: 4                           #定义pod副本的数量为4
  selector:                             #定义标签选择器
    matchLabels:                        #定义匹配标签
      app: nginx                        #定义匹配的标签具体是谁
  template:                             #定义pod的模板
    metadata:                           #定义pod的元数据,即pod的描述信息
      labels:                           #定义pod的标签
        app: nginx                      #pod标签的具体值
    spec:                               #pod资源对象的核心信息
      containers:                      #定义容器资源
      - name: nginx                    #容器名
        image: nginx                 #容器使用的镜像
        imagePullPolicy: IfNotPresent    #镜像拉取策略,默认是Always
        ports:                           #容器端口定义
        - containerPort: 80              #暴露容器端口
      nodeName: node-0002                  # 选择在主机名为node-0002的主机上创建pod

结果显示在node-0002上创建了4个nginx pod

nodeSelector

这种方式适合给打上特定标签的node节点上创建pod。还是以nginx为例给node-0001标签app=nginx

[root@matser-0001 test]# kubectl label nodes node-0001 app=nginx

[root@matser-0001 test]# kubectl

apply -f nginx.pod.nodeSelector.example.yml

apiVersion: apps/v1                     #api版本,没什么可说的
kind: Deployment                        # 资源类型为Deployment
metadata:                               #元数据,即资源的描述
  name: nginx-deployment                #Deployment资源的名称, 可以自定义
  labels:                               #Deployment的标签定义
    app: nginx                          #Deployment的标签
spec:                                   #Deployment资源对象的核心信息
  replicas: 4                           #定义pod副本的数量为4
  selector:                             #定义标签选择器
    matchLabels:                        #定义匹配标签
      app: nginx                        #定义匹配的标签具体是谁
  template:                             #定义pod的模板
    metadata:                           #定义pod的元数据,即pod的描述信息
      labels:                           #定义pod的标签
        app: nginx                      #pod标签的具体值
    spec:                               #pod资源对象的核心信息
      containers:                      #定义容器资源
      - name: nginx                    #容器名
        image: nginx                 #容器使用的镜像
        imagePullPolicy: IfNotPresent    #镜像拉取策略,默认是Always
        ports:                           #容器端口定义
        - containerPort: 80              #暴露容器端口
      nodeSelector:                      #定义节点标签选择
        app: nginx                       # 选择在打了标签app=nginx的主机上创建pod

结果显示pod在点node-0001上创建

Logo

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

更多推荐