我的 kubernetes (K3S) 集群有问题:
0/4 nodes are available: 2 node(s) didn't match Pod's node affinity/selector, 2 node(s) had taint {k3s-controlplane: true}, that the pod didn't tolerate.
为了描述这是如何发生的,我有 4 个 K3S 服务器,带有 3 个控制平面和 1 个工作线程。
没有节点有污点,因此每个 Pod 都可以在任何节点上进行调度。
我想改变这一点并污染我的主节点,所以我添加了: 污点:k3s-controlplane=true:2 个节点上没有Schedule
为了测试它,我重新启动了一个部署,但现在该 Pod 无法安排。
据我了解,默认情况下它应该调度在无污染的节点上,但似乎情况并非如此。
对于新部署,效果很好。
所以我想,我的部署中有历史记录导致了这个问题。部署有点简单:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 1
selector:
matchLabels:
app: test
strategy:
type: Recreate
template:
metadata:
labels:
app: test
spec:
nodeSelector:
type: "slow"
containers:
- env:
- name: PUID
value: "1000"
- name: GUID
value: "1000"
- name: TZ
value: Europe/Paris
- name: AUTO_UPDATE
value: "true"
image: test/test
imagePullPolicy: Always
name: test
volumeMounts:
- mountPath: /config
name: vol0
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "500m"
volumes:
- name: vol0
persistentVolumeClaim:
claimName: test-config-lh
嗯,这个特定的部署有一个选择器:“慢”,这是这两个节点的标签....
如果我使用这个命令:
kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
baal-01 Ready control-plane,etcd,master 276d v1.22.5+k3s1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=k3s,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=baal-01,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=true,node-role.kubernetes.io/etcd=true,node-role.kubernetes.io/master=true,node.kubernetes.io/instance-type=k3s,type=slow
baal-02 Ready control-plane,etcd,master 276d v1.22.5+k3s1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=k3s,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=baal-02,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=true,node-role.kubernetes.io/etcd=true,node-role.kubernetes.io/master=true,node.kubernetes.io/instance-type=k3s,type=slow
lamia01 Ready control-plane,etcd,master 187d v1.22.5+k3s1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=k3s,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=lamia01,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=true,node-role.kubernetes.io/etcd=true,node-role.kubernetes.io/master=true,node.kubernetes.io/instance-type=k3s,type=fast
lamia03 Ready <none> 186d v1.22.5+k3s1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=k3s,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=lamia03,kubernetes.io/os=linux,node.kubernetes.io/instance-type=k3s,ram=full,type=fast
您可以注意到两个节点“baal-01”和“baal-02”上的标签“type=slow”,并且这两个节点没有调度污点。
因此,部署尝试在带有“type=slow”标签的节点上调度 pod,但所有可调度节点都没有此标签。
抱歉,我错过了..
所以没有问题...