温馨提示×

Debian系统上Kubernetes集群的搭建技巧

小樊
42
2025-11-23 10:23:00
栏目: 智能运维

Debian系统上Kubernetes集群搭建技巧

一 环境与前置检查

  • 使用Debian 12(Bookworm),建议至少2核CPU、4GB内存、20GB磁盘,并保证节点间互通网络稳定互联网
  • 设置主机名并在**/etc/hosts**中写入节点IP与主机名映射,便于解析。
  • 关闭swap:执行swapoff -a并注释/etc/fstab中的swap行,避免kubelet异常。
  • 放行关键端口或临时关闭防火墙:API Server 6443;etcd 2379-2380;kubelet 10250;Controller Manager 10251;Scheduler 10252;NodePort 范围30000-32767。如使用UFW,可放行:sudo ufw allow 6443,2379:2380,10250,10251,10252,30000:32767/tcp && sudo ufw reload
  • 确保各节点MAC地址product_uuid唯一,避免克隆环境导致冲突。

二 容器运行时与内核参数

  • 推荐容器运行时:containerd(与kubelet集成更简洁)。安装并启用:
    • sudo apt update && sudo apt install -y containerd
    • 生成默认配置:sudo containerd config default | sudo tee /etc/containerd/config.toml
    • 启用并启动:sudo systemctl enable --now containerd
  • 加载内核模块并设置桥接与转发:
    • sudo modprobe overlay && sudo modprobe br_netfilter
    • 写入模块加载:echo -e "overlay\nbr_netfilter" | sudo tee /etc/modules-load.d/containerd.conf
    • 开启桥接与转发:echo -e "net.bridge.bridge-nf-call-iptables = 1\nnet.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf && sudo sysctl --system
  • 如使用Docker,同样需确保内核参数与转发已开启,并启动服务:sudo systemctl enable --now docker

三 使用 kubeadm 快速初始化

  • 安装工具链:
    • sudo apt update && sudo apt install -y apt-transport-https curl
    • 添加Kubernetes 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 kubeadm kubectl && sudo apt-mark hold kubelet kubeadm kubectl
  • 初始化控制平面(示例):
    • sudo kubeadm init --apiserver-advertise-address=<MASTER_IP> --pod-network-cidr=10.244.0.0/16 --service-cidr=10.100.0.0/16
    • 国内镜像加速(可选):--image-repository=registry.aliyuncs.com/google_containers
  • 配置 kubectl:
    • mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 安装网络插件(二选一):
    • Flannel:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    • Calico:kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
  • 加入工作节点:使用kubeadm init输出中的kubeadm join ...命令在各Worker节点执行。

四 高可用与控制平面增强

  • 多控制平面思路:准备奇数个控制平面节点(如3台),部署etcd集群(Raft),并通过外部负载均衡器(如HAProxy/Keepalived或云LB)暴露API Server VIP:6443
  • 组件高可用:kube-controller-managerkube-scheduler默认开启leader election,多实例即可自动选主。
  • 初始化命令示例(带控制平面端点):
    • sudo kubeadm init --control-plane-endpoint <VIP>:6443 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.100.0.0/16
  • 建议将/etc/hosts或DNS中写入VIP与**api.**的解析,便于组件与用户访问。

五 常见问题与优化建议

  • 镜像拉取慢或失败:使用国内镜像仓库(如registry.aliyuncs.com/google_containers),或在/etc/containerd/config.toml中配置[plugins."io.containerd.grpc.v1.cri".registry.mirrors]加速。
  • Pod 无法跨节点通信:确认已安装CNI(Flannel/Calico),且Pod CIDR与CNI配置一致;检查节点iptables/nftables与云安全组策略。
  • 节点 NotReady:查看kubectl describe node <node>,常见原因为CNI未就绪kubelet未启动、或容器运行时异常
  • 安全加固:遵循最小权限原则,启用RBACPod Security Standards,限制NodePort范围,定期更新kubelet/kubeadm/kubectl与节点补丁。
  • 资源与可观测性:为控制平面与工作节点预留资源,部署监控(如 Prometheus)日志(如 Loki/EFK),并设置备份/恢复流程。

0