温馨提示×

如何在Debian上定制Kubernetes安装流程

小樊
44
2025-12-26 20:57:26
栏目: 智能运维

在 Debian 上定制 Kubernetes 安装流程

一 规划与准备

  • 节点与硬件:至少准备 1 台 Master + 1 台 Worker,推荐 Debian 12(Bookworm);每节点至少 2 核 CPU、2 GB RAM、20 GB 磁盘,并确保节点间网络互通。
  • 唯一性校验:避免克隆导致的冲突,检查 MAC 地址product_uuid 唯一(例如:cat /sys/class/dmi/id/product_uuid)。
  • 主机名与解析:为各节点设置唯一 hostname,并在需要时完善 /etc/hosts 解析。
  • 时间同步:安装并启用 NTP/chrony,避免时间漂移引发证书与组件异常。
  • 防火墙策略:测试环境可临时关闭防火墙;生产环境仅放行必要端口(如 6443、10250、10251、10252、8472/udp 等)。

二 系统初始化与内核参数

  • 更新与基础工具:sudo apt update && sudo apt upgrade -y;安装 apt-transport-https、ca-certificates、curl、gnupg、lsb-release
  • 禁用 Swap:sudo swapoff -a;并注释 /etc/fstab 中的 swap 行,确保 kubelet 正常启动。
  • 内核模块与网络参数:加载 overlay、br_netfilter 并开启桥接与转发。
  • containerd 可选优化:如使用 containerd,建议启用 SystemdCgroup = true(/etc/containerd/config.toml),并重启 containerd。
    示例:
sudo modprobe overlay
sudo modprobe br_netfilter
echo -e "overlay\nbr_netfilter" | sudo tee /etc/modules-load.d/containerd.conf

cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
EOF
sudo sysctl --system
  • 时间同步:sudo apt install -y ntp && sudo systemctl enable --now ntp

三 容器运行时选择与安装

  • 方案 A Docker(上手友好):安装 docker-ce、docker-ce-cli、containerd.io,并启用服务。
  • 方案 B containerd(更贴近 K8s 原生,生产常用):安装 containerd 并启用服务。
    示例(Docker):
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 docker-ce docker-ce-cli containerd.io
sudo systemctl enable --now docker

示例(containerd):

sudo apt update
sudo apt install -y containerd
sudo systemctl enable --now containerd
# 如需 SystemdCgroup,生成默认配置后编辑 /etc/containerd/config.toml
# sudo containerd config default | sudo tee /etc/containerd/config.toml
# 修改 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 下 SystemdCgroup = true
# sudo systemctl restart containerd
  • 镜像加速(可选,提升拉取速度):如使用国内镜像仓库,可在 kubeadm 初始化时指定 –image-repository(如 registry.aliyuncs.com/google_containers)。

四 安装 kubeadm kubelet kubectl 与版本锁定

  • 添加 Kubernetes APT 源(推荐 signed-by 方式):
sudo apt update
sudo apt install -y apt-transport-https curl
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor | sudo tee /usr/share/keyrings/kubernetes-archive-keyring.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] 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 systemctl enable --now kubelet
  • 版本固定:使用 apt-mark hold 锁定组件版本,避免与集群其他组件产生不兼容升级。

五 定制控制平面初始化与网络插件

  • 初始化 Master(可按需定制参数):
    • 指定 Pod CIDR(与网络插件一致,如 Flannel 使用 10.244.0.0/16)。
    • 指定 Service CIDR(如 10.96.0.0/12)。
    • 指定 镜像仓库(如 registry.aliyuncs.com/google_containers)。
    • 指定 API 地址/控制平面端点(如 –apiserver-advertise-address–control-plane-endpoint)。
    • 指定 Kubernetes 版本(如 –kubernetes-version v1.28.0)。
    • 生成长期 Token(如 –token-ttl=0)。
      示例:
sudo kubeadm init \
  --apiserver-advertise-address=<MASTER_IP> \
  --control-plane-endpoint=<MASTER_IP>:6443 \
  --image-repository=registry.aliyuncs.com/google_containers \
  --kubernetes-version=v1.28.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --token-ttl=0
  • 配置 kubectl:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 安装网络插件(与 Pod CIDR 保持一致):
    • 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
  • 加入 Worker 节点:使用 kubeadm init 输出或重新生成的 kubeadm join 命令(包含 TokenCA 证书哈希)。若 Token 过期,可在 Master 上重新生成后再执行加入。

六 验证与常见排错

  • 基础验证:
    • 查看节点状态:kubectl get nodes(所有节点应为 Ready)。
    • 查看集群信息:kubectl cluster-info。
    • 部署测试应用:kubectl create deployment nginx --image=nginx --replicas=2;kubectl expose deployment nginx --type=NodePort --port=80;访问 http://<节点IP>:
  • 常见排错:
    • kubelet 未就绪:检查 /var/log/syslog、crictl 日志,确认容器运行时、内核参数与 cgroup 配置是否正确。
    • 镜像拉取慢或失败:使用 –image-repository 指定国内镜像仓库;或提前在节点上 docker pull/ctr 拉取所需镜像。
    • 端口未放行:确保节点间放通 6443、10250、10251、10252、8472/udp 等必要端口(生产环境按需最小化放行)。

0