学习Debian如何解决Kubernetes难题,能否快速应对哪些特定Kubernetes挑战?
- 内容介绍
- 文章标签
- 相关推荐
说到快速上手,在 Debian 上解决 Kubernetes 常见难题
痛点一:环境准备不足导致安装中途报错;痛点二:节点无法加入集群或被标记为不可调度;痛点三:Pod 启动失败、网络插件失效、CoreDNS 解析异常。
1️⃣ 基础环境检查——先把根本问题消灭掉
- 硬件最低要求2 核 CPU、2 GB RAM、20 GB 可用磁盘。
-
程序更新
sudo apt update && sudo apt upgrade -y -
关闭 Swap
sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab # 永久关闭 -
容器运行时推荐 Docker,也可以使用 containerd。Docker 安装示例:
# 添加 Docker 官方 GPG 密钥 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 设置仓库 echo "deb \ 再看https。//download.docker.com/linux/debian $ stable" | \ sudo tee /etc/apt/sources.list.d/docker.list> /dev/null # 安装 Docker sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io # 启动并开机自启 sudo systemctl enable --now docker -
Kubernetes 仓库 & 组件安装
# 导入 GPG 密钥 curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - # 添加 APT 源 echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | \ sudo tee /etc/apt/sources.list.d/kubernetes.list # 安装并锁定版本 sudo apt update && sudo apt install -y kubelet=1.32.* kubeadm=1.32.* kubectl=1.32.* sudo apt-mark hold kubelet kubeadm kubectl
2️⃣ 常见 Kubernetes 挑战及对应方法
🔧 2.1 节点无法加入集群
使用者痛点:“我的节点一直卡在 NotReady,甚至被标记为 DiskPressure,导致 Pod 没法调度”。
-
检查网络连通性:
ping -
确认防火墙端口已放行:
# API Server sudo ufw allow 6443/tcp # etcd 集群通信 sudo ufw allow 2379/tcp && sudo ufw allow 2380/tcp # kube‑proxy / flannel 等常用端口 sudo ufw allow 10250/tcp # kubelet healthz sudo ufw reload -
Taint 排查:
# 查看节点污点 kubectl describe node| grep Taints # 若确定硬盘空间足够。可手动移除污点: kubectl taint nodes node.kubernetes.io/disk-pressure- -
Kubelet 配置检查:
# 查看服务状态与日志 systemctl status kubelet journalctl -u kubelet -n 50 --no-pager
🔧 2.2 Pod 无法启动或 CrashLoopBackOff
使用者痛点:“镜像总是拉取失败,或者容器瞬间退出”。
-
查看详细错误信息:
kubectl describe pod -
手动拉取镜像验证网络:
docker pull -
资源请求/限制不合理导致调度失败:
# 示例资源块 resources: requests: 至于memory,"128Mi" 从cpu来看,"250m" limits这方面,memory: "256Mi" 说到cpu。"500m" -
Liveness / Readiness 探针配置错误也会触发重启:
# 简单健康检查示例 livenessProbe: httpGet: path这方面,/healthz port这方面,8080 initialDelaySeconds: 15 periodSeconds: 20
🔧 2.3 网络插件失效
使用者痛点:“Pod 间互相 ping 不通,Service IP 无法访问”。
-
确认插件已正确部署:
kubectl get pods -n kube-system | grep -E 'flannel|calico' - CNI 配置文件缺失或权限错误:。
-
CNI 与内核参数不匹配:
# 开启桥接转发 IPv4/IPv6 包过滤 cat -
重新部署插件示例:
KUBERNETES_VERSION=$ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml?老实说,${KUBERNETES_VERSION}
🔧 2.4 CoreDNS 无法解析 Service 名称
User Pain Point:"svc.cluster.local 的 DNS 查询一直超时服务间调用失败".
-
* 检查 CoreDNS Pod 状态 *:
KUBECTL get pods -n kube-system | grep coredns. -
* 看日志获取线索 *:
KUBECTL logs -n kube-system. - * 确认 /etc/resolv.conf * 中 DNS 指向了集群内部 IP。说起来,若指向外部,请编辑 /etc/kubernetes/kubelet.conf * 并重启 Kubelet。
-
* 如使用自定义 DNS 插件,请检查 ConfigMap*:
KUBECTL -n kube-system get cm coredns -o yaml | less # 常见错误:upstream DNS 地址不可达或写成了 “8 .8 .8 .8”。 -
* 检查程序日志 *
sudo systemctl status kubelet journalctl –u kubelet –f -
* 常见配置错误 *
cat /var/lib/kubelet/config.yaml # 确保 clusterDomain、clusterDNS 正确 - * 磁盘、内存压力 * 使用 `top`、`df –h` 检查资源是否被耗尽。必要时增大节点规格或清理无用文件。
- **程序日志**:`journalctl -u kube-apiserver –n 100` 、`journalctl -u etcd –n100`。
-
**Pod 日志**:`kubectl logs –previous
`。 -
**进入容器内部**: `kubectl exec -it
-- sh` 或使用 `kubectl debug` 创建临时 debug 容器。说起来, -
**网络连通性**: `kubectl exec
-- ping -c3 google.com` 验证外网;`curl http://10.96.010:80` 验证 Service IP。 - **资源监控**: `kubectl top nodes` 、 `kubectl top pods --all-namespaces` 快速定位 CPU/MEM 高占用。
- **官方兼容矩阵**:始终参考 Kubernetes 官方文档中的 “Supported Platforms” 表格,确保 Debian 主版本 与所选 K8s 主版本匹配。
- **网络插件对应关系**:如 Calico v3.27+ 要求 kernel ≥ 5.10;Flannel v0.22 对 iptables/nftables 有特定要求。根据实际 kernel 决定插件版本。
-
**安全补丁**:每月执行一次 APT 安全升级:
保持 `kubeadm upgrade plan` 与 `kubeadm upgrade apply vX.Y.Z` 步骤同步升级控制面和工作节点。sudo apt update && sudo apt upgrade -y && sudo reboot
🔧 2.5 kubelet 服务异常
使用者痛点 : “kubelet 报错 ‘failed to run Kubelet …按理说,节点不断掉线”由’ 导致。 按理说,
3️⃣ 通用调试技巧
4️⃣ 版本兼容性与安全升级
在生产环境中务必先在测试集群进行验证。再将变更推广至正式集群,以免因误操作造成业务中断。
说到快速上手,在 Debian 上解决 Kubernetes 常见难题
痛点一:环境准备不足导致安装中途报错;痛点二:节点无法加入集群或被标记为不可调度;痛点三:Pod 启动失败、网络插件失效、CoreDNS 解析异常。
1️⃣ 基础环境检查——先把根本问题消灭掉
- 硬件最低要求2 核 CPU、2 GB RAM、20 GB 可用磁盘。
-
程序更新
sudo apt update && sudo apt upgrade -y -
关闭 Swap
sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab # 永久关闭 -
容器运行时推荐 Docker,也可以使用 containerd。Docker 安装示例:
# 添加 Docker 官方 GPG 密钥 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 设置仓库 echo "deb \ 再看https。//download.docker.com/linux/debian $ stable" | \ sudo tee /etc/apt/sources.list.d/docker.list> /dev/null # 安装 Docker sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io # 启动并开机自启 sudo systemctl enable --now docker -
Kubernetes 仓库 & 组件安装
# 导入 GPG 密钥 curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - # 添加 APT 源 echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | \ sudo tee /etc/apt/sources.list.d/kubernetes.list # 安装并锁定版本 sudo apt update && sudo apt install -y kubelet=1.32.* kubeadm=1.32.* kubectl=1.32.* sudo apt-mark hold kubelet kubeadm kubectl
2️⃣ 常见 Kubernetes 挑战及对应方法
🔧 2.1 节点无法加入集群
使用者痛点:“我的节点一直卡在 NotReady,甚至被标记为 DiskPressure,导致 Pod 没法调度”。
-
检查网络连通性:
ping -
确认防火墙端口已放行:
# API Server sudo ufw allow 6443/tcp # etcd 集群通信 sudo ufw allow 2379/tcp && sudo ufw allow 2380/tcp # kube‑proxy / flannel 等常用端口 sudo ufw allow 10250/tcp # kubelet healthz sudo ufw reload -
Taint 排查:
# 查看节点污点 kubectl describe node| grep Taints # 若确定硬盘空间足够。可手动移除污点: kubectl taint nodes node.kubernetes.io/disk-pressure- -
Kubelet 配置检查:
# 查看服务状态与日志 systemctl status kubelet journalctl -u kubelet -n 50 --no-pager
🔧 2.2 Pod 无法启动或 CrashLoopBackOff
使用者痛点:“镜像总是拉取失败,或者容器瞬间退出”。
-
查看详细错误信息:
kubectl describe pod -
手动拉取镜像验证网络:
docker pull -
资源请求/限制不合理导致调度失败:
# 示例资源块 resources: requests: 至于memory,"128Mi" 从cpu来看,"250m" limits这方面,memory: "256Mi" 说到cpu。"500m" -
Liveness / Readiness 探针配置错误也会触发重启:
# 简单健康检查示例 livenessProbe: httpGet: path这方面,/healthz port这方面,8080 initialDelaySeconds: 15 periodSeconds: 20
🔧 2.3 网络插件失效
使用者痛点:“Pod 间互相 ping 不通,Service IP 无法访问”。
-
确认插件已正确部署:
kubectl get pods -n kube-system | grep -E 'flannel|calico' - CNI 配置文件缺失或权限错误:。
-
CNI 与内核参数不匹配:
# 开启桥接转发 IPv4/IPv6 包过滤 cat -
重新部署插件示例:
KUBERNETES_VERSION=$ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml?老实说,${KUBERNETES_VERSION}
🔧 2.4 CoreDNS 无法解析 Service 名称
User Pain Point:"svc.cluster.local 的 DNS 查询一直超时服务间调用失败".
-
* 检查 CoreDNS Pod 状态 *:
KUBECTL get pods -n kube-system | grep coredns. -
* 看日志获取线索 *:
KUBECTL logs -n kube-system. - * 确认 /etc/resolv.conf * 中 DNS 指向了集群内部 IP。说起来,若指向外部,请编辑 /etc/kubernetes/kubelet.conf * 并重启 Kubelet。
-
* 如使用自定义 DNS 插件,请检查 ConfigMap*:
KUBECTL -n kube-system get cm coredns -o yaml | less # 常见错误:upstream DNS 地址不可达或写成了 “8 .8 .8 .8”。 -
* 检查程序日志 *
sudo systemctl status kubelet journalctl –u kubelet –f -
* 常见配置错误 *
cat /var/lib/kubelet/config.yaml # 确保 clusterDomain、clusterDNS 正确 - * 磁盘、内存压力 * 使用 `top`、`df –h` 检查资源是否被耗尽。必要时增大节点规格或清理无用文件。
- **程序日志**:`journalctl -u kube-apiserver –n 100` 、`journalctl -u etcd –n100`。
-
**Pod 日志**:`kubectl logs –previous
`。 -
**进入容器内部**: `kubectl exec -it
-- sh` 或使用 `kubectl debug` 创建临时 debug 容器。说起来, -
**网络连通性**: `kubectl exec
-- ping -c3 google.com` 验证外网;`curl http://10.96.010:80` 验证 Service IP。 - **资源监控**: `kubectl top nodes` 、 `kubectl top pods --all-namespaces` 快速定位 CPU/MEM 高占用。
- **官方兼容矩阵**:始终参考 Kubernetes 官方文档中的 “Supported Platforms” 表格,确保 Debian 主版本 与所选 K8s 主版本匹配。
- **网络插件对应关系**:如 Calico v3.27+ 要求 kernel ≥ 5.10;Flannel v0.22 对 iptables/nftables 有特定要求。根据实际 kernel 决定插件版本。
-
**安全补丁**:每月执行一次 APT 安全升级:
保持 `kubeadm upgrade plan` 与 `kubeadm upgrade apply vX.Y.Z` 步骤同步升级控制面和工作节点。sudo apt update && sudo apt upgrade -y && sudo reboot
🔧 2.5 kubelet 服务异常
使用者痛点 : “kubelet 报错 ‘failed to run Kubelet …按理说,节点不断掉线”由’ 导致。 按理说,
3️⃣ 通用调试技巧
4️⃣ 版本兼容性与安全升级
在生产环境中务必先在测试集群进行验证。再将变更推广至正式集群,以免因误操作造成业务中断。

