Linux Kubernetes 基础部署与管理

1次阅读

用 kubectl cluster-info 和 kubectl auth can-i –list 可快速定位集群连接失败原因:网络不通、证书过期或 rbac 权限不足,并结合错误信息精准排查。

Linux Kubernetes 基础部署与管理

怎么快速验证 kubectl 能不能连上集群

连不上集群是部署阶段最常卡住的地方,不是配置错就是权限没通。先别急着查 YAML,用 kubectl cluster-infokubectl auth can-i --list 两步就能定位是网络问题、证书过期,还是 RBAC 权限不足。

常见错误现象:The connection to the server <ip> was refused</ip> —— 说明 API Server 没监听或防火墙挡了;x509: certificate has expired or is not yet valid —— /etc/kubernetes/pki/ 下的证书大概率过期了;Error: You must be logged in to the server —— kubeconfig 文件里 user 字段指向的凭据失效或缺失。

  • 检查 kubeconfig 路径是否正确:默认读 $HOME/.kube/config,非默认路径必须加 --kubeconfig=/path/to/config
  • 确认当前 context 是否指向目标集群:kubectl config current-context,切换用 kubectl config use-context <name></name>
  • API Server 地址必须能被节点直接访问,不要用 localhost 或 127.0.0.1(除非在 master 上且启用了 insecure-port)

init 初始化失败后怎么安全重试

kubeadm init 失败后不能直接再跑一遍,残留的 etcd 数据、证书、容器网络状态会冲突,大概率报 Port 6443 is in useetcd member already exists

使用场景:网络中断、镜像拉取失败、配置写错导致 init 半途退出。

  • 先清理:kubeadm reset -f(它会停容器、删数据目录、清 iptables 规则)
  • 手动删掉残留的 etcd 数据(如果 reset 没清干净):rm -rf /var/lib/etcd/member
  • 确认 docker/containerd 已启动且 CRI socket 可达:systemctl status dockercrictl ps
  • 如果之前指定了 --cri-socket,重试时必须保持一致,否则 kubeadm 找不到运行时

Pod 一直 Pending,怎么看是资源不够还是调度器卡住

不是所有 Pending 都是 CPU/Mem 不够,也可能是节点污点没处理、CNI 插件没装、或者调度器本身没起来。

执行 kubectl describe pod <pod-name></pod-name>,重点看 Events 区域和 Conditions:

  • 出现 0/3 nodes are available: 3 node(s) had taint {node-role.kubernetes.io/control-plane: } that the pod didn't tolerate —— Pod 没配 toleration,跑不到 control-plane 节点
  • 出现 0/3 nodes are available: 3 node(s) had untolerated taint {node.cloudprovider.kubernetes.io/uninitialized: true} —— CNI 没就绪,kubelet 等不到网络插件初始化完成
  • 没有 Events,且 Node-SelectorsAffinity 字段为空 —— 先检查 kubectl get componentstatuses(注意:1.19+ 默认不启用,改看 kubectl get pods -n kube-system | grep scheduler

Node NotReady 的真实原因怎么快速筛

NotReady 是表象,背后可能差着十万八千里:kubelet 挂了、cgroup 配置错、容器运行时连不上、甚至磁盘满了。

别只看 kubectl get nodes,得进节点查 kubelet 日志和系统状态:

  • 查 kubelet 是否存活:systemctl status kubelet,常见报错 failed to run Kubelet: failed to create kubeClient: invalid configuration: no configuration has been provided —— /etc/kubernetes/kubelet.conf 被删或权限不对
  • 查 cgroup 驱动是否匹配:docker info | grep "Cgroup Driver"cat /var/lib/kubelet/config.yaml | grep cgroupDriver 必须一致(cgroupfs 或 systemd)
  • 查磁盘和 inodes:df -hdf -i,/var/lib/docker 或 /var/lib/kubelet 满了会导致 kubelet 主动退服
  • 如果节点刚重启过,检查 /proc/sys/net/bridge/bridge-nf-call-iptables 是否为 1(CNI 依赖这个)

很多环境里,NotReady 看似是网络问题,结果是 kubelet 启动参数里漏了 --container-runtime-endpoint,尤其用 containerd 时容易忽略这个。

text=ZqhQzanResources