文章目录
记一次 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