准备工作
在开始前,请确保你的环境满足以下基本条件:
第一步:所有节点的通用配置
*这部分操作需要在每一台机器(包括 master 和所有 worker)上执行
1.设置主机名并更新hosts文件
# 设置主机名(分别在对应节点上执行)
sudo hostnamectl set-hostname <your-hostname> # 例如:k8s-master, k8s-node1
# 编辑 /etc/hosts 文件,将所有节点的IP和主机名添加进去
sudo tee -a /etc/hosts <<EOF
<master-ip> k8s-master
<node1-ip> k8s-node1
EOF
2.禁用Swap分区
*Kubernetes要求禁用Swap以保证调度和资源管理的稳定性
#临时禁用
sudo swapoff -a
# 永久禁用:注释掉 /etc/fstab 中包含 'swap' 的行
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
3.加载内核模块并配置网络参数
*加载 overlay 和 br_netfilter 模块,并配置内核参数以允许iptables桥接IPv4/6流量
# 加载必要内核模块
sudo tee /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 配置系统参数
sudo tee /etc/sysctl.d/99-kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo sysctl --system
4.安装容器运行时(推荐 containerd)
*Kubernetes需要容器运行时来运行Pod。containerd 是当前最主流、性能最好的选择
# 安装 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 驱动,这是 Debian 等系统的标准
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
# 重启 containerd 服务
sudo systemctl restart containerd
sudo systemctl enable containerd
5.安装 kubeadm, kubelet, kubectl
*使用官方APT仓库安装这三个核心组件
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg
下载 Google Cloud 的公开签名密钥
# 如果有,删除可能配置错误的旧源列表文件
#rm -f /etc/apt/sources.list.d/kubernetes.list
# 如果存在旧版 apt-key 添加的密钥,删除它(可选)
#apt-key list | grep -i kubernetes && apt-key del <旧密钥ID>
创建必要的目录并添加正确的源和密钥
# 1. 创建 keyrings 目录(这步很重要,很多报错都源于此)
mkdir -p -m 755 /etc/apt/keyrings
# 2. 下载并添加官方 GPG 密钥(以 v1.28 版本为例)
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# 3. 添加 Kubernetes 软件源
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list
更新并安装
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
# 锁定版本,防止意外更新
sudo apt-mark hold kubelet kubeadm kubectl
第二步:初始化集群 (仅在控制平面节点执行)
1.初始化控制平面
*初始化,但为了加速,可以使用国内镜像仓库
kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
初始化成功后,你会在终端末尾看到类似这样的输出,请务必完整保存,这是让工作节点加入集群的命令。
##kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>##
你应该会看到类似这样的输出:
Your Kubernetes control-plane has been initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You can now join any number of worker nodes by running the following on each as root:
kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
2.配置kubectl
*为了让普通用户可以管理集群,执行以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.安装Pod网络插件
*网络插件是必须的,它负责Pod之间的网络通信。这里以 Flannel 为例,它简单易用
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
第三步:加入工作节点 (在每个工作节点执行)
登录到每一台工作节点。
运行你在 Master 节点初始化完成后保存的那条
kubeadm join命令
sudo kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
使用命令:kubectl get nodes查看节点状态

第四步:Kubernetes 组件开机自启配置
核心组件自启状态
安装后默认已启用自启的服务:
# 检查服务状态
systemctl is-enabled containerd # 应该显示 enabled
systemctl is-enabled kubelet # 应该显示 enabled
systemctl is-enabled docker # 如果安装了 docker
验证自启配置
# 查看所有 K8s 相关服务的自启状态
systemctl list-unit-files | grep -E "containerd|kubelet|docker" | grep enabled
如果某个服务未启用自启
# 启用 containerd 开机自启
systemctl enable containerd
# 启用 kubelet 开机自启
systemctl enable kubelet
# 启用 docker(如果使用)
systemctl enable docker
创建自定义自启脚本(可选)
# 创建自启脚本
cat > /etc/systemd/system/k8s-startup.service << 'EOF'
[Unit]
Description=Kubernetes Startup Tasks
After=network.target containerd.service kubelet.service
Wants=containerd.service kubelet.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/k8s-startup.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
# 创建启动脚本
cat > /usr/local/bin/k8s-startup.sh << 'EOF'
#!/bin/bash
# 等待 containerd 就绪
sleep 10
# 重启 kubelet 确保连接
systemctl restart kubelet
# 等待网络插件就绪
sleep 30
EOF
chmod +x /usr/local/bin/k8s-startup.sh
# 启用服务
systemctl daemon-reload
systemctl enable k8s-startup.service
验证自启配置
# 重启测试
reboot
# 重启后检查
systemctl status containerd kubelet
kubectl get nodes
第五步:一键检查脚本
#!/bin/bash
# k8s-health-check.sh - K8s 集群健康检查
echo "========================================="
echo "Kubernetes 集群健康检查"
echo "========================================="
echo -e "\n1. 服务自启状态:"
systemctl is-enabled containerd && echo "✓ containerd: enabled" || echo "✗ containerd: disabled"
systemctl is-enabled kubelet && echo "✓ kubelet: enabled" || echo "✗ kubelet: disabled"
echo -e "\n2. 服务运行状态:"
systemctl is-active containerd && echo "✓ containerd: running" || echo "✗ containerd: not running"
systemctl is-active kubelet && echo "✓ kubelet: running" || echo "✗ kubelet: not running"
echo -e "\n3. 集群节点状态:"
kubectl get nodes 2>/dev/null || echo "无法获取节点状态"
echo -e "\n4. Dashboard 状态:"
kubectl get pods -n kubernetes-dashboard 2>/dev/null | grep -v NAME | head -3
echo -e "\n5. Dashboard 访问信息:"
IP=$(hostname -I | awk '{print $1}')
PORT=$(kubectl get svc -n kubernetes-dashboard kubernetes-dashboard-kong-proxy -o jsonpath='{.spec.ports[0].nodePort}' 2>/dev/null)
if [ -n "$PORT" ]; then
echo "访问地址: https://${IP}:${PORT}"
else
echo "Dashboard 未配置 NodePort"
fi
echo -e "\n========================================="
echo "检查完成!"
echo "========================================="
第六步:日常维护命令速查
第七步:故障排查
K8s集群故障排查详细过程请点击下方跳转>>>> K8s集群故障排查
K8s拉取镜像故障排查详细过程请点击下方跳转>>>> K8s拉取镜像故障排查
K8sweb页面访问故障排查详细过程请点击下方跳转>>>> K8s页面访问故障排查