容器填写标签调度到指定节点失败,状态为MatchNodeSelector

文章目录

记一次 k8s 调度问题,以免忘记

一个服务想要调度到 node7节点,直接添加了nodeName: node7,结构启动直接报错MatchNodeSelector

修改 yml 文件配置 nodeNmae到指定节点报错

    spec:
      containers:
      - image: 172.18.12.182:8081/testns/frontend:V2023120513
        imagePullPolicy: Always
        name: frontend
        resources:
          limits:
            cpu: "1"
            memory: 512Mi
          requests:
            cpu: 100m
            memory: 100Mi
        terminationMessagePath: /dev/log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      nodeName: node7 #指定调度节点为node7     <--------加了这一句
      imagePullSecrets:
      - name: harbor-default
      nodeSelector:
        physical.group: devtest
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30

容器填写标签调度失败,状态为MatchNodeSelector

[root@node1 ~]# kubectl get pods -n produce-others 
NAME                          READY     STATUS              RESTARTS   AGE
moc-manage-668955858d-2cxqc   0/1       MatchNodeSelector   0          1m
moc-manage-668955858d-498rh   0/1       MatchNodeSelector   0          1m
moc-manage-668955858d-7vp9c   0/1       MatchNodeSelector   0          1m
moc-manage-668955858d-9kwd8   0/1       MatchNodeSelector   0          1m
moc-manage-668955858d-9xm87   0/1       MatchNodeSelector   0          1m
moc-manage-668955858d-b95rz   0/1       MatchNodeSelector   0          1m
moc-manage-668955858d-bjwrr   0/1       MatchNodeSelector   0          1m
moc-manage-668955858d-dkgbv   0/1       MatchNodeSelector   0          1m
moc-manage-668955858d-dvllc   0/1       MatchNodeSelector   0          1m
moc-manage-668955858d-gm7cd   0/1       MatchNodeSelector   0          1m
moc-manage-668955858d-grvt2   0/1       MatchNodeSelector   0          1m
moc-manage-668955858d-hqq95   0/1       MatchNodeSelector   0          1m
moc-manage-668955858d-n7npq   0/1       MatchNodeSelector   0          1m

因为Pod.spec.nodeName用于强制约束将Pod调度到指定的Node节点上,这里说是“调度”,但其实指定了nodeName的Pod会直接跳过Scheduler的调度逻辑,直接写入PodList列表,该匹配规则是强制匹配,所以导致服务启动冲突了。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: tomcat-deploy
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: tomcat-app
    spec:
      nodeName: k8s.node1 #指定调度节点为k8s.node1
      containers:
      - name: tomcat
        image: tomcat:8.0
        ports:
        - containerPort: 8080

既然是冲突了,而且我只需要把这个容器调度到 node7,那就先注释掉Scheduler的调度,编辑deploy的 yml 文件

kubectl edit deploy -n produce-others moc-manage

查看nodeSelector,注释掉Scheduler的调度

    spec:
      containers:
      - image: 172.18.12.182:8081/testns/frontend:V2023120513
        imagePullPolicy: Always
        name: frontend
        resources:
          limits:
            cpu: "1"
            memory: 512Mi
          requests:
            cpu: 100m
            memory: 100Mi
        terminationMessagePath: /dev/log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      nodeName: node7 #指定调度节点为node7     <--------加了这一句
      imagePullSecrets:
      - name: harbor-default
      # nodeSelector:
      #   physical.group: devtest
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30

此时服务启动正常调度的 node7节点了

[root@node1 ~]# kubectl get pods -n produce-others -o wide
NAME                          READY     STATUS    RESTARTS   AGE       IP            NODE
moc-manage-66cf499cdf-nkjx7   1/1       Running   0          1m        10.244.3.53   node7

参考资料:
深入kubernetes调度之NodeSelector

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值