总结遇到的“坑”

虚拟机使用Centos7.9镜像部署kubernetes1.30稳定版本,发现有几个坑,导致无法继续下去,(坑已全部踩完,并完美解决)现记录以下3个难点问题:
1、CentOS7默认yum只有libseccomp-2.3.1,要安装2.5(推荐2.5.1稳定版),不安装高版本的libseccomp无法往下操作,网上找的通过华为、阿里源等方式无法下载安装,最后采用源码编译方式才成功下载安装;
2、下载部署containerd会无法拉起,导致无法部署,需要启用systemd cgroup驱动,替换pause镜像为阿里源(解决拉取失败)
3、下载kubectl1.30、kubelet1.30、kubeadm1.30,通过一般的方式无法拉取,通过添加 Kubernetes 1.30 专用YUM源(国内阿里云,下载快),不会超时报错;
4、初始化kubernetes集群失败,由于容器运行时(containerd)的 cgroup 驱动配置与 kubelet 不匹配,导致控制平面组件(apiserver 等)启动超时,后面我又重置集群环境;
5、CNI网络插件安装也是部署中常遇到的问题,无法拉起或无法部署成功,本次部署采用Flannel网络插件;

一、虚拟机环境配置(所有节点执行)

1.1 虚拟机规格要求

本次部署,我是先开一台虚拟机,将所有配置安装部署至初始化kubernetes时,然后克隆两台虚拟机,然后修改IP地址,用于负责工作节点,也可以同时开三台服务器,使用Ansible方式批量部署重复操作:

  • 控制节点:2核CPU、4GB内存、30GB硬盘、CentOS7 Minimal(7.9)
  • 工作节点(两台):2核CPU、2GB内存、20GB硬盘、CentOS7 Minimal(7.9)
  • 网络:NAT模式,3台互通、固定IP(示例IP):
  • master: 192.168.200.200 主机名:k8s-master
  • worker1:192.168.200.201 主机名:k8s-worker1
  • worker2:192.168.200.202 主机名:k8s-worker2

1.2 初始化配置

# 1. 设置主机名(分别执行)
# Master
hostnamectl set-hostname k8s-master
# Worker1
hostnamectl set-hostname k8s-worker1
# Worker2
hostnamectl set-hostname k8s-worker2

# 2. 配置hosts(所有节点)
cat >> /etc/hosts <<EOF
192.168.200.200 k8s-master
192.168.200.201 k8s-worker1
192.168.200.202 k8s-worker2
EOF

# 3. 关闭防火墙、selinux、swap(k8s强制要求)
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab

1.3 配置内核参数

# 1. 加载必需内核模块
modprobe overlay
modprobe br_netfilter

# 2. 写入网络参数
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

# 3. 生效参数
sysctl --system

# 4. 安装依赖工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

1.4 安装libseccomp

# 查看当前版本
rpm -qa | grep libseccomp
# 卸载旧版(含devel,避免冲突)
sudo rpm -e --nodeps libseccomp libseccomp-devel
 
#通过源码编译方式安装
1. 安装编译依赖
sudo yum install -y gcc make automake autoconf libtool
2. 下载2.5.1源码(官方GitHub)
wget https://github.com/seccomp/libseccomp/releases/download/v2.5.1/libseccomp-2.5.1.tar.gz
tar -zxvf libseccomp-2.5.1.tar.gz
cd libseccomp-2.5.1
3. 编译+安装(指定系统库路径,避免找不到)
./configure --prefix=/usr --libdir=/usr/lib64
make -j$(nproc)
sudo make install
sudo ldconfig  # 刷新动态库缓存
4. 验证
libseccomp_version
# 输出libseccomp version: 2.5.1 即成功

1.5 配置 containerd

# 1. 生成默认配置文件
containerd config default > /etc/containerd/config.toml

# 2. 启用systemd cgroup驱动(必改)
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

# 3. 替换pause镜像为国内源(解决拉取失败)
sed -i 's|registry.k8s.io/pause|registry.cn-hangzhou.aliyuncs.com/google_containers/pause|g' /etc/containerd/config.toml

# 4. 重启containerd生效配置
systemctl daemon-reload
systemctl restart containerd
systemctl enable containerd
systemctl status containerd

# 5. 重启节点(确保所有配置生效)
reboot

在这里插入图片描述

二、k8s组件下载

2.1 下载kubernetes 1.30相关组件 (所有节点执行)

#添加 Kubernetes 1.30 专用YUM源(国内阿里云,下载快)
# 1. 写入k8s 1.30稳定阿里源
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl
EOF

# 2. 清理缓存、重建元数据
sudo yum clean all
sudo yum makecache fast
 
# 3. 安装1.30.0版本
sudo yum install -y kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 --disableexcludes=kubernetes

# 4. 锁定版本,防止yum update自动升级(执行失败就跳过)
sudo yum versionlock add kubelet kubeadm kubectl

# 5. 添加Kubernetes 1.30 专用YUM源(国内阿里云,下载快)

# 6. 设置开机自启+立即启动
sudo systemctl enable --now kubelet
sudo systemctl status kubelet

# 7. 验证版本(三个都显示v1.30.x即成功)
kubelet --version
kubeadm version
kubectl version --client

以上操作在所有节点上执行

三、克隆两台虚拟机

3.1 创建两台工作节点虚拟机

将master节点主机关机,克隆两台虚拟机,修改虚拟机的IP地址,并重启网络

# 1. 修改网络配置文件,修改IPADDR
vim /etc/sysconfig/network-scripts/ifcfg-ens33

# 2. 重启网络,确保配置生效
systemctl restart network

# 3. 查看虚拟机的IP地址
ip a

四、部署kubernetes集群

4.1 初始化kubernetes集群 (Master 节点执行)

# 1. 预拉取镜像(加速)
kubeadm config images pull --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version v1.30.0

# 2. 初始化(替换为你的Master IP)
kubeadm init \
  --apiserver-advertise-address=192.168.200.200 \
  --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
  --kubernetes-version v1.30.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --cri-socket=unix:///var/run/containerd/containerd.sock

在这里插入图片描述

kubernetes控制节点初始化成功后,页面会显示“successfully!”,并显示配置kubelet的操作命令,末尾显示工作节点加入的命令
在这里插入图片描述

4.2 配置kubectl (Master 节点执行)

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

4.3 安装网络插件Flannel (Master 节点执行)

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

在这里插入图片描述

4.4 工作节点加入(Worker1、2节点执行)

复制kubernetes初始化输出的命令:

kubeadm join 192.168.200.200:6443 --token xxxxxx.xxxxxxxxxxxxxxxx \
  --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

在这里插入图片描述

4.5 验证集群状态(Master节点查看)

# 1. 查看节点状态(全部Ready)
kubectl get nodes

# 2. 查看控制平面Pod(全部Running)
kubectl get pods -n kube-system

在这里插入图片描述

五、测试k8s集群业务服务

5.1 部署kuboard服务

# 1. 查看节点状态(全部Ready)
wget  https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml

# 2. 查看控制平面Pod(全部Running)
kubectl apply -f kuboard-v3-swr.yaml

# 3. 查看pod是否启动成功
kubectl get pods -n kuboard

发现kuboard-v3…为0/1,无法启动成功
在这里插入图片描述

5.2 修复pod未启动问题

pod未成功,表示kuboard主服务异常:容器未就绪、频繁重启,原因可能是etcd依赖异常、健康检查异常、配置错误等,通过以下方式进行修复,保证etcd部署在指定的master节点

# 1. 确认节点名称
kubectl get nodes

# 2. 给名为 k8s-master 的 Kubernetes 节点打上标签,用于指定 etcd 组件的部署节点("k8s-master"写你的master节点的name)
kubectl label nodes k8s-master k8s.kuboard.cn/role=etcd

# 3. 给正确的节点打 etcd 标签(修正名称+支持覆盖)(可选)
kubectl label nodes k8s-master k8s.kuboard.cn/role=etcd --overwrite

# 4. 验证标签是否生效
kubectl get nodes --show-labels | grep etcd
//输出会包含  k8s.kuboard.cn/role=etcd  字段表示成功

# 5. 重启 Kuboard etcd Pod 使调度生效(可选)
kubectl rollout restart statefulset kuboard-etcd -n kuboard

# 6. 查看pod是否全部启动成功
kubectl get pods -n kuboard

在这里插入图片描述
在这里插入图片描述

5.3 访问web服务

在浏览器打开链接http://节点IP:30080

输入初始用户名和密码,并登录

用户名: admin
密码: Kuboard123
在这里插入图片描述
进入web界面,显示k8s集群
在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐