首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nodeSelector与目标节点不匹配

nodeSelector与目标节点不匹配
EN

Stack Overflow用户
提问于 2022-08-03 13:15:37
回答 2查看 214关注 0票数 0

我想在我的主节点上部署一个简单的nginx。

基本上,如果我使用由tolerations组合而成的nodeName,那么一切都很好:

代码语言:javascript
运行
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: myapp
  name: myapp-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - image: nginx
        name: myapp-container
      tolerations:
        - effect: NoExecute
          operator: Exists
      nodeName: master

结果:

代码语言:javascript
运行
复制
NAME                               READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
myapp-deployment-56d5887b9-fw5mj   1/1     Running   0          50s   100.32.0.4   master   <none>           <none>

但是问题是,当我向我的节点添加一个type=master标签,而不是使用nodeName,使用nodeselector,部署保持在Pending状态!

以下是我的步骤:

将标签添加到我的节点:k label node master type=master

  • Check节点标签:

代码语言:javascript
运行
复制
$ k get no --show-labels

NAME     STATUS   ROLES           AGE   VERSION   LABELS
master   Ready    control-plane   65d   v1.24.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=,type=master

  1. 应用我的新yaml文件:

代码语言:javascript
运行
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: myapp
  name: myapp-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - image: nginx
        name: myapp-container
      tolerations:
        - effect: NoExecute
          operator: Exists
      nodeSelector:
        type: master

  1. 检查状态:

代码语言:javascript
运行
复制
$ k get po

NAME                                READY   STATUS    RESTARTS   AGE
myapp-deployment-544784ff98-2qf7z   0/1     Pending   0          3s

  1. 描述它:

代码语言:javascript
运行
复制
Name:           myapp-deployment-544784ff98-2qf7z
Namespace:      default
Priority:       0
Node:           <none>
Labels:         app=myapp
                pod-template-hash=544784ff98
Annotations:    <none>
Status:         Pending
IP:             
IPs:            <none>
Controlled By:  ReplicaSet/myapp-deployment-544784ff98
Containers:
  myapp-container:
    Image:        nginx
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-lbtsv (ro)
Conditions:
  Type           Status
  PodScheduled   False 
Volumes:
  kube-api-access-lbtsv:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              type=master
Tolerations:                 :NoExecute op=Exists
Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  111s  default-scheduler  0/1 nodes are available: 1 node(s) had untolerated taint {node-role.kubernetes.io/master: }. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling.

我哪里错了?我的问题是什么?

P.S: kubernetes版本:

代码语言:javascript
运行
复制
Client Version: v1.24.1
Kustomize Version: v4.5.4
Server Version: v1.24.1
EN

Stack Overflow用户

回答已采纳

发布于 2022-08-06 06:13:16

好吧,多亏了@Harsh,我终于找到了答案:

首先,在我的主节点上获得Taint

代码语言:javascript
运行
复制
$ kubectl describe node master | grep Taint

  Taints:             node-role.kubernetes.io/control-plane:NoSchedule

如您所见,这里Taint的值是NoSchedule,而不是我以前使用过的NoExecute

因此,配置如下:

代码语言:javascript
运行
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: myapp
  name: myapp-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - image: nginx
        name: myapp-container
      tolerations:
        - effect: "NoSchedule" # just change this
          operator: "Exists"
      nodeSelector:
        type: master

现在你可以看到一切都很好!

代码语言:javascript
运行
复制
NAME                                READY   STATUS    RESTARTS   AGE
myapp-deployment-79676c54d4-grm94   1/1     Running   0          7s
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73222421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档