【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集群

相关推荐
杨浦老苏5 小时前
开源宠物健康护理追踪器EinVault
docker·群晖·宠物·健康管理
@土豆5 小时前
基于Docker部署Squid正向代理文档
运维·docker·容器
林润庚5 小时前
win 安装openclaw (docker镜像模式),解决18789访问失败问题
docker·openclaw·龙虾
Cyber4K5 小时前
【Kubernetes专项】K8s 包工具- Helm 入门到企业实战
云原生·容器·kubernetes
正经教主7 小时前
【docker基础】Ubuntu 安装 Docker 超详细小白教程
ubuntu·docker·eureka
Chuncheng's blog8 小时前
K8S二进制部署exec unable to upgrade connection: Unauthorized异常解决方案
云原生·容器·kubernetes
FJW0208148 小时前
HAProxy+Keepalived实现Kubernetes高可用集群部署
云原生·容器·kubernetes
小江的记录本8 小时前
【Swagger】Swagger系统性知识体系全方位结构化总结
java·前端·后端·python·mysql·spring·docker
正经教主8 小时前
【docker基础】第二课:安装、配置与基础命令
docker·容器·eureka