本教程提供了在 Ubuntu 系统上部署 Kubernetes 集群的详细步骤,包括环境准备、containerd 配置、集群初始化以及网络插件部署,并附带完整的命令参考。
Kubernetes 集群部署指南 (Ubuntu)
环境要求
- Ubuntu 20.04 或更高版本
- 最少 2 CPU、2GB 内存
- 所有节点网络互通
- 每个节点唯一的 MAC/产品 UUID
1️⃣ 所有节点初始化
系统更新
# 更新系统包
sudo apt update && sudo apt upgrade -y
关闭 swap
# 临时关闭
sudo swapoff -a
# 永久关闭(编辑 /etc/fstab)
sudo sed -i '/ swap / s/^/#/' /etc/fstab
配置内核模块
# 加载必要模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
# 立即加载
sudo modprobe overlay
sudo modprobe br_netfilter
设置内核参数
# 配置 sysctl
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 应用配置
sudo sysctl --system
2️⃣ 安装容器运行时
安装 containerd
# 安装 containerd
sudo apt install -y containerd
# 创建默认配置
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
# 启用 SystemdCgroup
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 重启服务
sudo systemctl restart containerd
sudo systemctl enable containerd
3️⃣ 安装 Kubernetes 组件
添加 apt 源
# 安装依赖
sudo apt install -y apt-transport-https ca-certificates curl gpg
# 添加 K8s 源密钥
sudo curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | \
sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# 添加 apt 源
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] \
https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /" | \
sudo tee /etc/apt/sources.list.d/kubernetes.list
安装必要组件
# 安装 kubeadm、kubelet、kubectl
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
// …existing code…
4️⃣ 初始化主节点
准备初始化配置
# 创建 kubeadm 配置文件
cat <<EOF > kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
nodeRegistration:
criSocket: "unix:///var/run/containerd/containerd.sock"
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
networking:
podSubnet: "10.244.0.0/16" # Flannel 默认网段
EOF
执行初始化
# 初始化集群
sudo kubeadm init --config kubeadm-config.yaml
# 配置 kubectl(对于当前用户)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5️⃣ 部署网络插件
安装 Flannel
# 下载并应用 Flannel 配置
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
# 等待 Flannel pods 就绪
kubectl wait --namespace kube-system \
--for=condition=ready pod \
--selector=app=flannel \
--timeout=90s
6️⃣ 添加工作节点
在其他节点执行 kubeadm join 命令(从主节点初始化输出中获取):
# 示例(请使用实际的 token 和 hash)
sudo kubeadm join 192.168.1.10:6443 \
--token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash \
sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
🔍 验证集群状态
# 查看节点状态
kubectl get nodes -o wide
# 检查系统组件
kubectl get pods -n kube-system
# 验证 DNS
kubectl run test-nginx --image=nginx
kubectl get pods -o wide
📝 常见问题处理
1. 重置集群
# 在所有节点执行
sudo kubeadm reset
sudo rm -rf $HOME/.kube
sudo rm -rf /etc/kubernetes /var/lib/kubelet /var/lib/etcd
2. 重新生成 join 令牌
# 在主节点执行
kubeadm token create --print-join-command
3. Pod 网络故障排查
# 检查 CNI 配置
ls /etc/cni/net.d/
# 查看 Flannel 日志
kubectl logs -n kube-system -l app=flannel
🔧 实用命令参考
| 用途 | 命令 |
|---|---|
| 查看节点详情 | kubectl describe node <node-name> |
| 驱逐节点上的 Pod | kubectl drain <node-name> --ignore-daemonsets |
| 设置节点不可调度 | kubectl cordon <node-name> |
| 恢复节点可调度 | kubectl uncordon <node-name> |
⚠️ 注意事项
- 确保所有节点时间同步
- 检查防火墙是否允许必要端口
- 6443: API Server
- 2379-2380: etcd
- 10250: Kubelet
- 8472: Flannel VXLAN
- 生产环境建议使用高可用配置
- 定期备份 etcd 数据
更多资源:
关于我
全平台同名”汪多多是只猫”,专注分享实用开源工具,让你的数字生活更自由!
关注我,发现更多旧物改造的乐趣与技巧!