【Centos7通过kubeadm方式部署kubernetes1.30版本【一主两从】】
Centos7通过kubeadm方式部署kubernetes1.30版本【一主两从】
总结遇到的“坑”
虚拟机使用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集群
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)