安装和使用K8S
本文详细介绍了Kubernetes集群的安装配置流程,主要包括:1)基础环境准备(Ubuntu系统配置、关闭swap、内核参数设置);2)容器运行时containerd的安装与systemd cgroups配置;3)Kubernetes组件(kubeadm/kubelet/kubectl)的安装;4)Master节点初始化过程中的常见问题解决方案(镜像拉取、pause版本不一致等);5)网络插件F
一、安装前准备(所有节点都要做)
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

更多推荐



所有评论(0)