- nginx-deployment.yaml 内容
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx-deploy
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: http-web-svc
问题
- 使用命令查看pod描述信息
kubectl describe pod <pod-name>
- 错误分析:
该错误提示表示 Pod 调度失败,原因是集群中没有可用的节点(我用的是单节点,可能是因为没有工作节点的原因)。
唯一的节点存在一个不可容忍的污点(taint):node-role.kubernetes.io/control-plane:。
污点阻止 Pod 被调度到该节点,而抢占(preemption)也无法解决问题。
- 方式一:修改nginx-deployment.yaml 内容 容忍该污点
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx-deploy
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: http-web-svc
tolerations:
- key: "node-role.kubernetes.io/control-plane"
operator: "Exists"
effect: "NoSchedule"
- 方式二:永久删除node污点
查看node污点
kubectl describe node <node-name>
删除污点,注意末尾的减号
kubectl taint nodes izbp1eqy8fywwhfmnty25vz node-role.kubernetes.io/control-plane-
再次查看污点已经删除