1095 字
5 分钟
K8S部署
教程
/
手顺 /
部署 📋 前置准备:系统、网络与主机规划
OS:Ubuntu 24.04
| 节点 | 主机名 | IP 地址 |
|---|---|---|
| Master | k8s-master | 192.168.56.52 |
| Node | k8s-node1 | 192.168.56.53 |
🔧 第一阶段:所有节点共同执行
1. 更新系统并安装基础依赖
1sudo apt update && sudo apt upgrade -y2sudo apt install -y apt-transport-https ca-certificates curl gpg2. 禁用 Swap
Kubernetes 要求必须关闭 Swap:
1sudo swapoff -a2sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab3sudo sed -i '/swap.img/ s/^/#/' /etc/fstab验证:
1free -h若 Swap 行的值均为 0,说明已关闭
3. 加载内核模块并设置 sysctl 参数
1# 立即加载内核模块2sudo modprobe overlay3sudo modprobe br_netfilter4
5# 设置开机自动加载6cat <<EOF | sudo tee /etc/modules-load.d/kubernetes.conf7overlay8br_netfilter9EOF10
11# 设置网络转发参数12sudo tee /etc/sysctl.d/kubernetes.conf <<EOF13net.bridge.bridge-nf-call-ip6tables = 114net.bridge.bridge-nf-call-iptables = 115net.ipv4.ip_forward = 116EOF17
18# 生效19sudo sysctl --system4. 安装并配置 containerd
Kubernetes 1.33 要求使用 CRI 兼容的容器运行时,不能使用 Docker,推荐使用 containerd
1# 安装 containerd2sudo apt install -y containerd3
4# 生成默认配置5sudo mkdir -p /etc/containerd6containerd config default | sudo tee /etc/containerd/config.toml > /dev/null7
8# 启用 systemd cgroup 驱动(Ubuntu 24.04 默认使用 cgroup v2,必须使用 systemd 驱动)9sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml10
11# 设置 pause 镜像版本12sudo sed -i 's|sandbox_image = ".*"|sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.10.1"|' /etc/containerd/config.toml验证 cgroup 驱动已正确修改:
1grep 'SystemdCgroup' /etc/containerd/config.toml应输出 SystemdCgroup = true
1# 重启并设置开机自启2sudo systemctl daemon-reload3sudo systemctl enable --now containerd4sudo systemctl restart containerd5. 添加 Kubernetes 1.33 APT 仓库
1sudo mkdir -p /etc/apt/keyrings2curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | \3 sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg4
5echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] \6 https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /" | \7 sudo tee /etc/apt/sources.list.d/kubernetes.list8
9sudo apt update6. 安装 kubelet、kubeadm、kubectl
1sudo apt install -y kubelet kubeadm kubectl2
3# 锁定版本,防止自动更新导致版本不一致4sudo apt-mark hold kubelet kubeadm kubectl5
6# 设置 kubelet 开机自启7sudo systemctl enable --now kubelet验证版本:
1kubeadm version🚀 第二阶段:Master 节点初始化
以下所有命令仅在 Master 节点(k8s-master)上执行
7. 初始化控制平面
1# apiserver的 ip 替换为 master节点的 ip2sudo kubeadm init \3 --apiserver-advertise-address=192.168.56.52 \4 --pod-network-cidr=10.244.0.0/16 \5 --service-cidr=10.96.0.0/12 \6 --image-repository=registry.aliyuncs.com/google_containers⚠️ 重要:
--pod-network-cidr必须与后续安装的 网络插件配置一致这里使用
10.244.0.0/16,对应下面 Flannel 的默认配置
成功后终端会输出一段指令,后续需要使用,输出示例:
1To start using your cluster, you need to run the following as a regular user:2 mkdir -p $HOME/.kube3 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config4 sudo chown $(id -u):$(id -g) $HOME/.kube/config5Alternatively, if you are the root user, you can run:6 export KUBECONFIG=/etc/kubernetes/admin.conf7You should now deploy a pod network to the cluster.8Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:9 https://kubernetes.io/docs/concepts/cluster-administration/addons/10Then you can join any number of worker nodes by running the following on each as root:11kubeadm join 192.168.56.52:6443 --token xxx \12 --discovery-token-ca-cert-hash sha256:xxx8. 配置 kubectl 的 kubeconfig
执行上方 mkdir 那段
9. 安装 Flannel 网络插件
在 k8s-master 上执行:
1kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml如果网络不稳定先下载再执行
1# 验证 网络配置, 确认 Flannel Pod 已在两个节点上都运行2kubectl get pods -A -o wide | grep flannel🖥️ 第三阶段:Node 节点加入集群
以下命令仅在 Node 节点(k8s-node1)上执行
10. 执行 kubeadm join 命令
使用在第 7 步中保存的 kubeadm join 命令,格式如下(请替换为实际获取的命令):
1kubeadm join 192.168.56.52:6443 --token xxx \2 --discovery-token-ca-cert-hash sha256:xxx✅ 第四阶段:在 Master节点上验证
11. 检查集群状态
1# 查看节点列表,两个节点都应为 Ready2kubectl get nodes -o wide3
4# 查看所有命名空间的 Pod5kubectl get pods -A6
7# 查看集群信息8kubectl cluster-info预期输出示例:
1NAME STATUS ROLES AGE VERSION2k8s-master Ready control-plane 176m v1.33.133k8s-node1 Ready <none> 175m v1.33.13⚠️ 常见问题排查
| 问题 | 原因与解决方法 |
|---|---|
kubeadm init 失败,提示端口被占用 | 检查 6443、10250 等端口是否被其他服务占用:sudo ss -tlnp | grep 6443 |
Node 加入后一直 NotReady | 检查 Flannel Pod 是否 Running:kubectl get pods -n calico-system;检查 Node 节点上 journalctl -u kubelet -f 日志 |
kubectl get nodes 显示 NotReady 且 Calico Pod 报错 | 确认 calico.yaml 中的 CALICO_IPV4POOL_CIDR 与 kubeadm init 的 --pod-network-cidr 一致 |
| containerd 启动失败 | 检查 /etc/containerd/config.toml 是否语法正确;确认 SystemdCgroup = true 已设置 |
| kubelet 报 cgroup 驱动不匹配 | Ubuntu 24.04 使用 cgroup v2,必须确保 containerd 的 SystemdCgroup = true |
重置命令
配置错误使用如下命令重置:
1# Master 上的重置命令2sudo kubeadm reset -f3sudo rm -rf /etc/kubernetes/ $HOME/.kube/4sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F5sudo systemctl restart containerd kubelet错误举例
1E1006 12:30:44.939923 12285 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp 127.0.0.1:8080: connect: connection refused"这个错误说明 kubectl 没有找到 kubeconfig 配置文件,所以它回退到默认地址 localhost:8080(这是 kubectl 的旧版默认行为)
编辑于 2026-10-06
部分信息可能已经过时