Debian 与 Kubernetes 集成实用技巧
一 基础环境加固与内核调优
- 选择稳定系统版本:优先使用 Debian 12,内核建议 ≥ 5.10,以获得更好的容器与网络栈兼容性与稳定性。
- 关闭 Swap:Kubernetes 要求禁用 Swap,避免 kubelet 与网络插件异常。
命令示例:
sudo swapoff -a
sudo sed -i ‘/ swap / s/^/#/’ /etc/fstab
- 加载内核模块与转发:
echo “overlay\nbr_netfilter” | sudo tee /etc/modules-load.d/containerd.conf
sudo modprobe overlay && sudo modprobe br_netfilter
echo -e “net.bridge.bridge-nf-call-iptables = 1\nnet.ipv4.ip_forward = 1” | sudo tee /etc/sysctl.d/99-kubernetes.conf
sudo sysctl --system
- 时间同步:安装并启用 systemd-timesyncd,避免证书校验、调度等因时间漂移引发的问题。
sudo apt install -y systemd-timesyncd
sudo systemctl enable --now systemd-timesyncd
- 资源基线:至少 2 核 CPU / 2GB 内存 / 20GB 磁盘;生产建议 4 核 / 4GB+,并优先使用 SSD。
二 容器运行时与网络插件配置
- 使用 containerd(Kubernetes 自 v1.24 起默认不再内置 Docker,推荐 containerd 作为 CRI 运行时):
sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
echo “deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update && sudo apt install -y containerd.io
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i ‘s/SystemdCgroup = false/SystemdCgroup = true/’ /etc/containerd/config.toml
sudo systemctl restart containerd && sudo systemctl enable containerd
- 选择 Pod 网络插件:
- Flannel(轻量、易部署):kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- Calico(策略丰富、性能佳):kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yaml && kubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
- 端口与连通性:确保节点间 6443(API Server)、10250(kubelet) 等端口放通;如使用云厂商安全组,需同步放行。
三 kubeadm 初始化与节点加入
- 添加 Kubernetes APT 源并安装组件:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
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 kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl # 避免组件被自动升级破坏集群稳定性
- 初始化控制平面(示例):
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.0.0.0/16
说明:Pod CIDR 需与所选网络插件兼容(如 Flannel 默认 10.244.0.0/16)。
- 配置 kubectl:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 加入工作节点:使用 kubeadm init 输出中的 kubeadm join 命令(包含 Token 与 CA 证书哈希)在 Worker 节点执行。
- 快速验证:
kubectl get nodes
kubectl create deployment nginx --image=nginx --replicas=2
kubectl expose deployment nginx --type=NodePort --port=80
kubectl get svc nginx # 获取 NodePort(如 30080),访问 : 验证
四 安全与运维最佳实践
- 版本与升级:保持 Debian 与 Kubernetes 版本匹配,跨版本升级遵循官方支持路径;组件使用 apt-mark hold 固定版本,变更通过测试环境验证后再上线。
- 安全加固:启用 RBAC 最小权限;为 API Server、kubelet 等启用 TLS;按需配置 网络策略(NetworkPolicy);定期更新系统与组件补丁。
- 备份与恢复:定期备份 etcd(如 etcdctl snapshot save),并演练恢复流程,确保灾难时可快速恢复。
- 监控与日志:部署 Prometheus + Grafana 监控集群与应用指标,使用 EFK/ELK 聚合与分析日志,设置告警规则。
- 自动化运维:使用 Ansible 批量配置节点、证书与组件;通过 Jenkins/GitLab CI 实现 GitOps/CI-CD;编写健康检查与巡检脚本,降低人工干预。
五 常见问题快速排查
- 节点 NotReady:优先检查容器运行时(containerd)是否运行、kubelet 是否健康;查看 kubelet 日志:journalctl -u kubelet -f;确认网络插件 Pod 均为 Running。
- Pod 无法跨节点通信:核对 Pod CIDR 与网络插件配置是否一致;检查节点间 6443/10250 等端口连通性;确认 net.bridge.bridge-nf-call-iptables=1 与 ip_forward=1 已生效。
- 镜像拉取失败:确认节点可访问镜像仓库(含私有仓库的 imagePullSecrets);必要时配置 containerd 镜像加速。
- 时间漂移导致证书错误:确认 systemd-timesyncd 已启用并同步成功(timedatectl status)。