一、安装前准备(所有节点都要做)

1. 基础环境要求

# 系统

Ubuntu 20.04 / 22.04(推荐)

# 关闭 swap(必须)

sudo swapoff -a

sudo sed -i '/ swap / s/^/#/' /etc/fstab

内核参数与网络转发

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf

br_netfilter

EOF

sudo modprobe br_netfilter

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

net.bridge.bridge-nf-call-ip6tables = 1

EOF

sudo sysctl --system

二、安装容器运行时(推荐 containerd)

sudo apt update

sudo apt install -y containerd

sudo mkdir -p /etc/containerd

containerd config default | sudo tee /etc/containerd/config.toml

# 关键:启用 systemd cgroup

sudo nano /etc/containerd/config.toml

·  Ctrl + W

·  ·  搜索:

·  ·  SystemdCgroup

找到这一段(位置在文件中后部):

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]

  SystemdCgroup = false

改为:

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]

  SystemdCgroup = true

保存退出:

Ctrl + O → 回车

Ctrl + X

三、安装 Kubernetes 组件(kubeadm 方式)

1. 添加官方源

sudo apt update

sudo apt install -y apt-transport-https ca-certificates curl

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key \

| sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] \

https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' \

| sudo tee /etc/apt/sources.list.d/kubernetes.list

2.安装 kubeadm / kubelet / kubectl

sudo apt update

sudo apt install -y kubelet kubeadm kubectl

sudo apt-mark hold kubelet kubeadm kubectl

deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /

四、初始化集群(Master / Control Plane)

1. 初始化

sudo kubeadm init \

  --pod-network-cidr=10.244.0.0/16

成功后会看到 kubeadm join ...,这是工作节点加入用的。

出现这个问题 是 网络镜像问题

方案:提前拉镜像 + 使用国内镜像源

Step 1️⃣ 先重置失败状态(必须做)

sudo kubeadm reset -f

Step 2️⃣ 使用国内镜像源拉镜像(关键一步)

sudo kubeadm config images pull \

  --image-repository registry.aliyuncs.com/google_containers \

  --kubernetes-version v1.29.15

Step 3️⃣ 确认镜像都在本地了

sudo ctr -n k8s.io images ls | grep kube

你应该能看到类似:

registry.aliyuncs.com/google_containers/kube-apiserver:v1.29.15

registry.aliyuncs.com/google_containers/kube-controller-manager:v1.29.15

registry.aliyuncs.com/google_containers/kube-scheduler:v1.29.15

Step 4️⃣ 再次 init

sudo kubeadm init \

  --pod-network-cidr=10.244.0.0/16 \

  --image-repository registry.aliyuncs.com/google_containers

还有错误的地方

使用swapon --show

查看没有任何输出

使用systemctl status kubelet --no-pager

kubelet 是正常运行的(Active: running),所以这次 kubeadm init 失败并不是 kubelet 启不来。

根因:pause 镜像不一致,导致 PodSandbox 创建异常

之前的日志里有这一条(这是“关键信号”):

detected that the sandbox image "registry.k8s.io/pause:3.8"is inconsistent with that used by kubeadm.

It is recommended that using"registry.aliyuncs.com/google_containers/pause:3.9"as the CRI sandbox image.

containerd 里默认是 pause:3.8

kubeadm / v1.29 期望的是 pause:3.9

方案:

Step 1️⃣ 重置当前失败状态(必须)

sudo kubeadm reset -f

Step 2️⃣ 明确拉取正确的 pause 镜像

sudo ctr -n k8s.io images pull \

  registry.aliyuncs.com/google_containers/pause:3.9

验证一下:

sudo ctr -n k8s.io images ls | grep pause

Step 3️⃣ 告诉 containerd:以后就用这个 pause 镜像(关键)

编辑 containerd 配置:

sudo nano /etc/containerd/config.toml

找到(或确认存在)这一段:

[plugins."io.containerd.grpc.v1.cri"]

  sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"

如果原来是 pause:3.8,改成 3.9

如果没有这一行,手动加上(放在该 section 下即可)。

改为:

sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"

Ctrl + O
→ 底部会出现:File Name to Write: /etc/containerd/config.toml

直接按 Enter

 Ctrl + X
→ 退出 nano,回到命令行

Step 4️⃣ 重启 containerd 和 kubelet

sudo systemctl restart containerd

sudo systemctl restart kubelet

确认 kubelet 仍然正常:

systemctl status kubelet --no-pager

kubelet 当前是“启动失败并在自动重试”的状态

方案:

Step 1️⃣ 彻底 reset 当前失败状态(必须)

sudo kubeadm reset -f

Step 2️⃣ 确认 containerd 的 pause 配置是刚才改过的

grep sandbox_image /etc/containerd/config.toml

必须看到:

sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"

Step 3️⃣ 重启 containerd(让 pause 生效)

sudo systemctl restart containerd

Step 4️⃣ 不要手动管 kubelet(关键点)

⚠️ 这一点非常重要:

不要 systemctl restart kubelet

不要纠结它现在是 running 还是 failed

 kubelet 会在 kubeadm init 成功后自动稳定。

再次 init

sudo kubeadm init \

  --pod-network-cidr=10.244.0.0/16 \

  --image-repository registry.aliyuncs.com/google_containers

成功后会看到 kubeadm join ...,这是工作节点加入用的。

2. 配置 kubectl

mkdir -p $HOME/.kube

sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

验证:

kubectl get nodes

五、安装 Pod 网络插件(以 Flannel 为例)

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

kubectl get pods -n kube-system

等待,直到所有 Pod 为 Running。

六、Kubernetes 常用核心操作

1.Pod / Deployment

kubectl create deployment nginx --image=nginx

kubectl get pods

kubectl describe pod <pod-name>

我的pod-name是nginx-7854ff8877-jlw79

2.Service 暴露

kubectl expose deployment nginx \

  --type=NodePort --port=80

kubectl get svc

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐