Kubernetes default-scheduler 0/2 nodes are available: 2 node(s
问题
这个问题其实很简单,因为deployment(或其他控制器)或Pod的yaml文件中使用了nodeSelector,例如:下面的这个yaml文件:
apiVersion: apps/v1 kind: Deployment metadata: labels: app.kubernetes.io/name: kube-state-metrics app.kubernetes.io/version: v1.8.0 name: kube-state-metrics namespace: monitoring spec: replicas: 1 selector: matchLabels: app.kubernetes.io/name: kube-state-metrics template: metadata: labels: app.kubernetes.io/name: kube-state-metrics app.kubernetes.io/version: v1.8.0 spec: containers: - image: quay.io/coreos/kube-state-metrics:v1.8.0 livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 5 timeoutSeconds: 5 name: kube-state-metrics ports: - containerPort: 8080 name: http-metrics - containerPort: 8081 name: telemetry readinessProbe: httpGet: path: / port: 8081 initialDelaySeconds: 5 timeoutSeconds: 5 nodeSelector: kubernetes.io/os: linux serviceAccountName: kube-state-metrics
倒数第三行指定了nodeSelector,如果当前集群中没有一个node的label符合这个nodeSelector,则在describepod资源时显示:
Warning FailedScheduling 18s (x2 over 18s) default-scheduler 0/2 nodes are available: 2 node(s) didnt match node selector
解决问题
- 给需要调度的node加上对应标签
# 相对上面这个Yaml文件的例子 kubectl label nodes node_name kubernetes.io/os=linux
- 删除Yaml文件中的nodeSelector,如果对节点没有要求的话,直接删除节点选择器即可
上一篇:
IDEA上Java项目控制台中文乱码