如何自定义Debian上的K8s安装
导读:在 Debian 上自定义安装 Kubernetes 的实操指南 一 环境与规划 节点与网络 至少准备 2 核 CPU、2GB 内存、20GB 磁盘 的节点若干,建议使用 Debian 12(Bookworm)。 为各节点配置 静态 I...
在 Debian 上自定义安装 Kubernetes 的实操指南
一 环境与规划
- 节点与网络
- 至少准备 2 核 CPU、2GB 内存、20GB 磁盘 的节点若干,建议使用 Debian 12(Bookworm)。
- 为各节点配置 静态 IP,设置 主机名,并在所有节点的 /etc/hosts 中互指,保证节点名可解析。
- 开启 NTP/chrony 时间同步,避免证书与组件通信异常。
- 组件与版本
- 容器运行时:优先使用 containerd(生产更通用);也可选 Docker(需额外配置 CRI 对接)。
- 工具链:kubeadm / kubelet / kubectl,建议固定版本以避免升级漂移。
- 网络规划
- Pod 网段与 Service 网段需提前规划且不冲突,例如:Pod 使用 10.244.0.0/16,Service 使用 10.100.0.0/16。
- 如使用 Calico,需放行 BGP 179/TCP;如使用 Flannel VXLAN,需放行 UDP 4789。
- 防火墙与安全组
- 控制面端口:6443/TCP(API)、2379–2380/TCP(etcd)、10250/TCP(kubelet)、10251/TCP(kube-scheduler)、10252/TCP(kube-controller-manager)。
- 节点端口:30000–32767/TCP(NodePort);按需开放 10255/TCP(kubelet 只读)。
二 系统准备与容器运行时
- 基础准备
- 更新系统并安装常用工具:
sudo apt update & & sudo apt upgrade -y - 关闭 Swap:
sudo swapoff -a & & sudo sed -i '/ swap / s/^/#/g' /etc/fstab - 加载内核模块与网络参数:
sudo modprobe overlay & & sudo modprobe br_netfilterecho -e "overlay\nbr_netfilter" | sudo tee /etc/modules-load.d/containerd.confecho -e "net.bridge.bridge-nf-call-iptables=1\nnet.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-kubernetes.conf & & sudo sysctl --system
- 更新系统并安装常用工具:
- 使用 containerd(推荐)
- 安装与启用:
sudo apt install -y containerd.io & & sudo systemctl enable --now containerd - 配置 SystemdCgroup:
sudo mkdir -p /etc/containerd & & 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
- 安装与启用:
- 使用 Docker(可选)
- 安装:
sudo apt install -y docker.io & & sudo systemctl enable --now docker - 注意:Docker 默认使用 cgroups v1,若主机启用 cgroups v2,需按发行版指引调整或优先使用 containerd。
- 安装:
三 安装 kubeadm kubelet kubectl 与初始化控制面
- 安装工具链
- 添加仓库并安装:
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
- 高可用或指定镜像源/版本(示例):
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.100.0.0/16 \ --pod-network-cidr=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
- 安装网络插件
- 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
- Flannel:
- 加入工作节点
- 使用
kubeadm init输出中的kubeadm join ...命令在各 Worker 上执行。
- 使用
四 自定义与常用场景
- 自定义镜像仓库与版本
- 通过
--image-repository指定国内镜像源(如 registry.aliyuncs.com/google_containers),通过--kubernetes-version固定版本(如 v1.28.0)。
- 通过
- Pod 与 Service CIDR 自定义
- 初始化时分别用
--pod-network-cidr与--service-cidr指定,确保与现有网络不冲突;不同网络插件对 Pod CIDR 有默认要求(如 Flannel 常用 10.244.0.0/16)。
- 初始化时分别用
- 高可用控制面
- 采用
--control-plane-endpoint指向 VIP/负载均衡,并按需准备多台控制面节点与 etcd 集群(kubeadm 提供 HA 引导流程)。
- 采用
- 运行时与 cgroups
- 生产推荐 containerd + SystemdCgroup=true;如使用 Docker,需确认 cgroups 驱动一致,避免 kubelet 异常。
- 防火墙与端口
- UFW 示例:
- 控制面:
sudo ufw allow 6443,2379:2380,10250,10251,10252/tcp - 工作节点:
sudo ufw allow 10250/tcp & & sudo ufw allow 30000:32767/tcp - 按需放行 Calico BGP 179/TCP 或 Flannel VXLAN 4789/UDP。
- 控制面:
- UFW 示例:
- 自动化与批量部署
- 使用 KubeKey:
curl -sfL https://get-kk.kubesphere.io | sh -,随后./kk create cluster --with-local-storage --with-kubernetes v1.31.0 --container-manager containerd -y - 使用 Ansible:编写 Playbook 批量执行系统准备、容器运行时、kubeadm 初始化与加入等步骤。
- 使用 KubeKey:
五 验证与常见问题
- 验证集群
kubectl cluster-info、kubectl get nodes -o wide、kubectl get pods -A- 部署测试应用:
kubectl create deployment nginx --image=nginx:1.25 --replicas=2 - 暴露服务:
kubectl expose deployment nginx --type=NodePort --port=80,访问http://< NODE_IP> :< NodePort>
- 常见问题排查
- 节点 NotReady:检查 CNI 插件是否就绪、
/var/log/syslog中 kubelet 日志、crictl ps -a容器状态。 - Pod 无法跨节点通信:核对 Pod CIDR 与网络插件配置、节点间 UDP/TCP 放行、云厂商 安全组规则。
- 镜像拉取失败:确认 image-repository 可达,或手动
crictl pull < 镜像>验证。 - kubelet 启动失败:确认 Swap 已关闭、SystemdCgroup 配置正确、容器运行时健康。
- 节点 NotReady:检查 CNI 插件是否就绪、
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何自定义Debian上的K8s安装
本文地址: https://pptw.com/jishu/753755.html
