【Centos7通过kubeadm方式部署kubernetes1.30版本【一主两从】】

Centos7通过kubeadm方式部署kubernetes1.30版本【一主两从】

  • 总结遇到的"坑"
    • 一、虚拟机环境配置(所有节点执行)
      • [1.1 虚拟机规格要求](#1.1 虚拟机规格要求)
      • [1.2 初始化配置](#1.2 初始化配置)
      • [1.3 配置内核参数](#1.3 配置内核参数)
      • [1.4 安装libseccomp](#1.4 安装libseccomp)
      • [1.5 配置 containerd](#1.5 配置 containerd)
    • 二、k8s组件下载
      • [2.1 下载kubernetes 1.30相关组件 (所有节点执行)](#2.1 下载kubernetes 1.30相关组件 (所有节点执行))
    • 三、克隆两台虚拟机
      • [3.1 创建两台工作节点虚拟机](#3.1 创建两台工作节点虚拟机)
    • 四、部署kubernetes集群
      • [4.1 初始化kubernetes集群 (Master 节点执行)](#4.1 初始化kubernetes集群 (Master 节点执行))
      • [4.2 配置kubectl (Master 节点执行)](#4.2 配置kubectl (Master 节点执行))
      • [4.3 安装网络插件Flannel (Master 节点执行)](#4.3 安装网络插件Flannel (Master 节点执行))
      • [4.4 工作节点加入(Worker1、2节点执行)](#4.4 工作节点加入(Worker1、2节点执行))
      • [4.5 验证集群状态(Master节点查看)](#4.5 验证集群状态(Master节点查看))
    • 五、测试k8s集群业务服务
      • [5.1 部署kuboard服务](#5.1 部署kuboard服务)
      • [5.2 修复pod未启动问题](#5.2 修复pod未启动问题)
      • [5.3 访问web服务](#5.3 访问web服务)

总结遇到的"坑"

虚拟机使用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 初始化配置

javascript 复制代码
# 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 配置内核参数

javascript 复制代码
# 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

javascript 复制代码
# 查看当前版本
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

javascript 复制代码
# 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相关组件 (所有节点执行)

javascript 复制代码
#添加 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地址,并重启网络

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

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

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

四、部署kubernetes集群

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

javascript 复制代码
# 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 节点执行)

javascript 复制代码
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 节点执行)

javascript 复制代码
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

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

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

javascript 复制代码
kubeadm join 192.168.200.200:6443 --token xxxxxx.xxxxxxxxxxxxxxxx \
  --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

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

javascript 复制代码
# 1. 查看节点状态(全部Ready)
kubectl get nodes

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

五、测试k8s集群业务服务

5.1 部署kuboard服务

javascript 复制代码
# 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节点

javascript 复制代码
# 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集群

相关推荐
BullSmall33 分钟前
Sonarqube9.9 docker 镜像启动后 conf 下的配置文件没有了
docker·容器·eureka
ruofu3339 分钟前
wsl端是py312,但是项目是py311, 如何下载py311的依赖包(wheels)
python·docker
spider_xcxc2 小时前
Docker 实战:容器化多服务应用,Dockerfile 与 Compose 配置全解析
docker·云原生·eureka·虚拟化·容器化
hay_lee2 小时前
Kubernetes StatefulSet:OrderedReady 极简指南
云原生·容器·kubernetes
晚风吹长发2 小时前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
ShiXZ2133 小时前
Docker Compose 安装与配置指南
运维·docker·容器
BullSmall4 小时前
Anolis OS 8.10 Docker 部署 SonarQube 9.9 完整教程
运维·docker·容器
成为你的宁宁4 小时前
【K8s HPA 水平扩缩容】
kubernetes·hpa
欢醉5 小时前
k8s调度容器失败The node had condition: [DiskPressure]
kubernetes·springcloud
java_logo7 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris