LOADING...

加载中请稍等...

loading

本教程提供了在 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>

⚠️ 注意事项

  1. 确保所有节点时间同步
  2. 检查防火墙是否允许必要端口
    • 6443: API Server
    • 2379-2380: etcd
    • 10250: Kubelet
    • 8472: Flannel VXLAN
  3. 生产环境建议使用高可用配置
  4. 定期备份 etcd 数据

更多资源:

关于我

全平台同名”汪多多是只猫”,专注分享实用开源工具,让你的数字生活更自由!

关注我,发现更多旧物改造的乐趣与技巧!


头像
汪多多是只猫
失业的运维工程师
热爱开源与分享
微信公众号