本次计划安装k8s v1.28.15,它需要的系统内核必须 >= 5.4,所以要先升有centos的内核。
由于ElRepo在线源已经停止服务,所以不能通过在线仓库升级内核,需要通过下载离线包的方式升级内核。
【下载离线 RPM 包安装(在线源彻底不通时)】
centeos7安装6.9内核,逐条执行下面这 3 条wget令 (5.4与6.9内核安装期中一个即可)
#国内高速Coreix镜像,6.9.x主线
wget --no-check-certificate https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-ml-6.9.7-1.el7.elrepo.x86_64.rpm
wget --no-check-certificate https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-ml-devel-6.9.7-1.el7.elrepo.x86_64.rpm
wget --no-check-certificate https://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-ml-headers-6.9.7-1.el7.elrepo.x86_64.rpm
# 2. 下载完直接安装,先删除旧headers
rpm -e --nodeps kernel-headers
yum localinstall -y *.rpm
# 3. 安装完设置默认启动 + 重启
#设置序号0为默认内核
grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
# 查看内核
uname -a
查看默认内核
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
【安装k8s前期准备】
准备三台centos服务器,每台服务器做好准备工作,每台执行以下命令:
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld# 关闭 selinux
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config# 关闭虚拟内存
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab# 重启生效
# systemctl reboot# 查看虚拟内存,swap那一行全部为0表示虚所内存已关闭
free -h# 给k8s的每个节点设置主机名,最好配三台电脑,每台电脑分别命名为:
hostnamectl set-hostname k8s-master-01
hostnamectl set-hostname k8s-worker-01
hostnamectl set-hostname k8s-worker-02# 刷新bash环境
exec bash# 查看主机名
hostname
设置时间同步
# 设置时区(东八区) timedatectl set-timezone Asia/Shanghai# 启动 chrony 时间同步 systemctl enable --now chronyd# 立即同步一次 chronyc -a makestep# 开启系统 NTP 自动同步 timedatectl set-ntp true# 关闭 VMware 时间同步(避免冲突),非虚拟机不需要设置 vmware-toolbox-cmd timesync disable 2>/dev/null
查看时间同步状态
# 查看时间 date hwclock#查看chrony是否运行 systemctl status chronyd #查看时间同步状态 timedatectl # 或查看同步状态 timedatectl status # 看 chrony 状态 chronyc sources
********** 不要用下面老旧的方法设置时间同步 **********
yum install ntpdate -y
ntpdate time.windows.com
添加hosts
# 添加hosts,ip需要修改成你自己机器的内网ip(在终端里执行命令,有几个k8s节点就添加几个,每个k8s节点做同样的设置)
# 如果只有k8s-master-01节点,就只添加一个cat >> /etc/hosts << EOF
172.29.132.65 k8s-master-01
172.29.132.66 k8s-worker-01
172.29.132.67 k8s-worker-02
EOF# 查看hosts
cat /etc/hosts
允许 iptables 检查桥接流量,每个k8s节点都要配置。
# 这是 K8s 必须配置的内核网络参数,目的是:
# 让 Linux 内核能正确转发、过滤容器之间的网络流量
# 不配置 → K8s 集群无法通信、Pod 不通、Service 失效。
cat << EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
#开启ip转发
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# 让上面的内核参数立即生效
sudo sysctl --system
# 让ip转发强制生效(CentOS7 专用)
echo 1 > /proc/sys/net/ipv4/ip_forward
【软件准备(所有节点)】
| 软件名称 | 是否安装 |
| socat | 必须安装 |
| conntrack | 必须安装 |
|
conntrack-tools |
必须安装 |
| ebtables | 可选,但推荐安装 |
| ipset | 可选,但推荐安装 |
| ipvsadm | 可选,但推荐安装 |
# 每台节点都要安装
yum -y install socat conntrack conntrack-tools ebtables ipset ipvsadm
【安装kubekey 4.0】
方案1,在线安装:
# 建目录 mkdir -p /srv/kubekey cd /srv/kubekey# 国内加速下载 kk(默认最新版,当前 v4.0.5) export KKZONE=cn curl -sfL https://get-kk.kubesphere.io | sh - # 加执行权限 chmod +x kk
查看kubekey是否有安装成功,有版本输出说明安装成功
/srv/kubekey/kk version
将kk复制到/usr/local/kk,可以在任意目录使用 kk
cd /srv/kubekey cp kk /usr/local/bin/ chmod +x /usr/local/bin/kk
验证kubekey版本
cd /
kk version
安装kubekey方案2:下载离线包
mkdir -p /srv/kubekey wget -P /srv/kubekey https://kubernetes.pek3b.qingstor.com/kubekey/releases/download/v4.0.5/kubekey-v4.0.5-linux-amd64.tar.gz tar -zxvf /srv/kubekey/kubekey-v4.0.5-linux-amd64.tar.gz -C /srv/kubekey/ chmod +x /srv/kubey/kk
cp /srv/kubekey/kk /usr/local/bin/ kk version
查看支持的版本(kubekey 4.0.x 已经不支持这条命令了)
./kk version --show-supported-k8s
如果是kybekey 4.0.x及以上,写个脚本查看支持的版本
#!/bin/bash VERSIONS=(1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.30 1.31 1.32 1.33 1.34 1.35 1.36) for v in "${VERSIONS[@]}"; do/usr/local/bin/kk create config --with-kubernetes v$v.0 -o /tmp >/dev/null 2>&1if [ $? -eq 0 ]; thenecho "✅ v$v.x 支持"elseecho "❌ v$v.x 不支持"firm -f /tmp/config-sample.yaml done

创建两个yaml文件:【集群组件配置文件】 和 【节点清单配置文件】
mkdir -p /data/kubekey cd /data/kubekey # 指定k8s版本创建组件配置文件 kk create config --with-kubernetes v1.34.1 -o k8s-config.yaml # 用最新版本创建组件配置文件 # kk create config -o k8s-config.yaml # 创建节点清单配置文件 kk create inventory -o k8s-inventory.yaml
提醒:kubekey 3.x.x,用这条命令生成配置文件: kk create config -f kk-k8s.yaml 。
修改 k8s-inventory.yaml 文件,增加节点清单。
inventory.yaml 配置样板(3个master节点,2个工作节点):
apiVersion: kubekey.kubesphere.io/v1 kind: Inventory metadata:name: prod-k8s-cluster 这个名字可以改,遵守命名规范即可 spec:hosts:# Master 01k8s-master-01: #主机名称connector:type: sshhost: 172.29.132.65 #内网ipport: 22user: rootpassword: "你的服务器root密码"internal_ipv4: 172.29.132.65 #内网ip# Master 02k8s-master-02:connector:type: sshhost: 172.29.132.66port: 22user: rootpassword: "你的服务器root密码"internal_ipv4: 172.29.132.66# Master 03k8s-master-03:connector:type: sshhost: 172.29.132.67port: 22user: rootpassword: "你的服务器root密码"internal_ipv4: 172.29.132.67# Worker 01k8s-worker-01:connector:type: sshhost: 172.29.132.68port: 22user: rootpassword: "你的服务器root密码"internal_ipv4: 172.29.132.68# Worker 02k8s-worker-02:connector:type: sshhost: 172.29.132.69port: 22user: rootpassword: "你的服务器root密码"internal_ipv4: 172.29.132.69groups:k8s_cluster:groups:- kube_control_plane- kube_worker# 三台控制平面节点kube_control_plane:hosts:- k8s-master-01- k8s-master-02- k8s-master-03# 所有可运行业务Pod节点(3个master节点可以兼做工作节点,也可以不兼做工作节点)kube_worker:hosts:#- k8s-master-01#- k8s-master-02#- k8s-master-03- k8s-worker-01- k8s-worker-02# etcd 高可用,3台master复用etcd:hosts:- k8s-master-01- k8s-master-02- k8s-master-03
先预检环境
kk init os -c k8s-config.yaml -i k8s-inventory.yaml
安装k8s集群,预检没有报错就可以安装k8s
kk create cluster -c k8s-config.yaml -i k8s-inventory.yaml
经测试,kubekey 4.x必须要centos 8及以上才能安装k8s,kube4在centos7上安装k8s失败,centos7只能用kubekey 3.x安装。