问题分析
从你提供的信息来看,kubectl get nodes
命令显示 No resources found
,这通常意味着 Kubernetes 集群中没有任何节点注册。同时,你提到 Calico 控制器的 Pod 处于 Pending 状态,这可能是由于网络插件没有正确配置或启动导致的问题。
核心问题
- 节点未注册:Kubernetes 集群中没有节点注册。
- Calico Pod 处于 Pending 状态:可能是因为网络插件配置不正确或资源不足。
解决步骤
1. 检查 kubelet 服务状态
确保所有节点上的 kubelet
服务正在运行:
systemctl status kubelet
如果 kubelet
服务没有运行,请启动它:
systemctl start kubelet
systemctl enable kubelet
2. 检查节点注册
确保所有节点已经正确注册到 Kubernetes 集群。可以通过查看 /etc/kubernetes/kubelet.conf
文件中的配置来确认节点是否正确配置。
3. 检查 Calico Pod 的日志
获取 Calico 控制器 Pod 的详细日志,以了解具体的错误信息:
kubectl logs calico-kube-controllers-577f77cb5c-pbw5c -n kube-system
4. 检查 Calico 组件的状态
确保 Calico 组件(如 calico-node
)已经正确部署并运行:
kubectl get pods -n kube-system | grep calico
5. 检查网络配置
确保 Calico 的网络配置文件(通常是 calico.yaml
或类似的文件)正确无误,并且已经应用到集群中:
kubectl apply -f calico.yaml
示例代码
假设你的 calico.yaml
文件有问题,这里是一个示例配置文件:
apiVersion: v1
kind: ConfigMap
metadata:
name: calico-config
namespace: kube-system
data:
typha_service_name: "none"
felix_defaultEndpointToHostAction: "ACCEPT"
felix_ipipEnabled: "true"
felix_vxlanEnabled: "false"
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: calico-node
namespace: kube-system
spec:
selector:
matchLabels:
k8s-app: calico-node
template:
metadata:
labels:
k8s-app: calico-node
spec:
hostNetwork: true
nodeSelector:
kubernetes.io/os: linux
tolerations:
- effect: NoSchedule
operator: Exists
- key: CriticalAddonsOnly
operator: Exists
serviceAccountName: calico-node
containers:
- name: calico-node
image: calico/node:v3.19.0
env:
- name: DATASTORE_TYPE
value: "kubernetes"
- name: NODENAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: CALICO_NETWORKING_BACKEND
value: "bird"
- name: CLUSTER_TYPE
value: "k8s,bgp"
- name: IP
value: "autodetect"
- name: FELIX_DEFAULTENDPOINTTOHOSTACTION
value: "ACCEPT"
- name: FELIX_IPV6SUPPORT
value: "false"
- name: FELIX_IPINIPMTU
value: "1440"
- name: FELIX_HEALTHENABLED
value: "true"
securityContext:
privileged: true
volumeMounts:
- mountPath: /lib/modules
name: lib-modules
readOnly: true
- mountPath: /var/run/calico
name: var-run-calico
- mountPath: /var/lib/calico
name: var-lib-calico
- mountPath: /run/xtables.lock
name: xtables-lock
readOnly: false
volumes:
- name: lib-modules
hostPath:
path: /lib/modules
- name: var-run-calico
hostPath:
path: /var/run/calico
- name: var-lib-calico
hostPath:
path: /var/lib/calico
- name: xtables-lock
hostPath:
path: /run/xtables.lock
type: FileOrCreate
总结
- 确保
kubelet
服务在所有节点上正常运行。
- 检查节点是否已注册到 Kubernetes 集群。
- 查看 Calico Pod 的日志以获取更多信息。
- 确保 Calico 组件正确部署并运行。
- 检查并应用正确的 Calico 配置文件。
通过以上步骤,你应该能够解决 kubectl get nodes
显示 No resources found
和 Calico Pod 处于 Pending 状态的问题。