centos7.9 + kubekey4.0.5安装k8s及kubesphere
本次计划安装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
SSH 免密登录(仅部署节点执行,多节点集群必须)
# 生成密钥
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
# 批量推送至所有节点(替换为你的节点IP)
ssh-copy-id root@172.29.132.66
ssh-copy-id root@172.29.132.67
ssh-copy-id root@172.29.132.68
# 测试连通
ssh root@192.168.1.101 hostname
【软件准备(所有节点)】
| 软件名称 | 是否安装 |
| 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>&1 if [ $? -eq 0 ]; then echo "✅ v$v.x 支持" else echo "❌ v$v.x 不支持" fi rm -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 01 k8s-master-01: #主机名称 connector: type: ssh host: 172.29.132.65 #内网ip port: 22 user: root password: "你的服务器root密码" internal_ipv4: 172.29.132.65 #内网ip # Master 02 k8s-master-02: connector: type: ssh host: 172.29.132.66 port: 22 user: root password: "你的服务器root密码" internal_ipv4: 172.29.132.66 # Master 03 k8s-master-03: connector: type: ssh host: 172.29.132.67 port: 22 user: root password: "你的服务器root密码" internal_ipv4: 172.29.132.67 # Worker 01 k8s-worker-01: connector: type: ssh host: 172.29.132.68 port: 22 user: root password: "你的服务器root密码" internal_ipv4: 172.29.132.68 # Worker 02 k8s-worker-02: connector: type: ssh host: 172.29.132.69 port: 22 user: root password: "你的服务器root密码" internal_ipv4: 172.29.132.69 groups: 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
#权安装k8s
kk create cluster -c k8s-config.yaml -i k8s-inventory.yaml
#娄装k8s和kubesphere(推荐)
kk create cluster -c k8s-config.yaml -i k8s-inventory.yaml --with-kubesphere v4.2.3
经测试,kubekey 4.x必须要centos 8及以上才能安装k8s,kube4在centos7上安装k8s失败,centos7只能用kubekey 3.x安装。
验证集群
kubectl get nodes kubectl get pods -A #验证能否访问kubesphere curl -I http://172.29.132.65:30880 curl -I http://172.29.132.66:30880 curl -I http://172.29.132.67:30880
已有 K8s 集群后追加 KS(不用重装集群)
export KKZONE=cn kk addons install -c k8s-config.yaml --with-kubesphere v4.2.3

浙公网安备 33010602011771号