转载:CentOS 7.9 安装 KubeSphere v3.4.0 和 Kubernetes v1.26 实战
知识点
-
定级:入门级
-
KubeKey 安装部署 KubeSphere 和 Kubernetes
-
KubeKey 定制化部署集群
-
KubeSphere v3.4.0 功能概览
-
Kubernetes 基本操作
-
CentOS 系统内核升级
实战服务器配置 (架构 1:1 复刻小规模生产环境,配置略有不同)
主机名 | IP | CPU | 内存 | 系统盘 | 数据盘 | 用途 |
---|---|---|---|---|---|---|
ks-master-1 | 192.168.9.91 | 4 | 16 | 40 | 100 | KubeSphere/k8s-master |
ks-master-2 | 192.168.9.92 | 4 | 16 | 40 | 100 | KubeSphere/k8s-master |
ks-master-3 | 192.168.9.93 | 4 | 16 | 40 | 100 | KubeSphere/k8s-master |
ks-worker-1 | 192.168.9.95 | 4 | 16 | 40 | 100 | k8s-worker/CI |
ks-worker-2 | 192.168.9.96 | 4 | 16 | 40 | 100 | k8s-worker |
ks-worker-3 | 192.168.9.97 | 4 | 16 | 40 | 100 | k8s-worker |
ks-storage-1 | 192.168.9.81 | 4 | 16 | 40 | 100/100/100/100/100 | ElasticSearch/GlusterFS/Ceph-Rook/Longhorn/NFS/ |
ks-storage-2 | 192.168.9.82 | 4 | 16 | 40 | 100/100/100/100 | ElasticSearch/GlusterFS/Ceph-Rook/Longhorn/ |
ks-storage-3 | 192.168.9.83 | 4 | 16 | 40 | 100/100/100/100 | ElasticSearch/GlusterFS/Ceph-Rook/Longhorn/ |
registry | 192.168.9.80 | 4 | 8 | 40 | 100 | Sonatype Nexus 3 |
合计 | 10 | 40 | 152 | 400 | 2000 |
实战环境涉及软件版本信息
-
操作系统:CentOS 7.9 x86_64
-
KubeSphere:v3.4.0
-
Kubernetes:v1.26.5
-
Containerd:1.6.4
-
KubeKey: v3.0.10
1. 本文简介
本文基于操作系统 CentOS 7.9 ,使用 KubeSphere 开发的 KubeKey v3.0.10 工具,模拟真实的小规模生产环境在 6 台服务器上采用高可用模式部署 Kubernetes v1.26 集群和 KubeSphere v3.4.0。
2. 操作系统基础配置
本实战文档,为了贴近生产,选用了 3 Master 和 3 Worker 的部署架构,后面为了实战模拟集群新增节点,因此,初始化部署时,仅使用 3 Master 和 1 Worker。在实际使用中,请根据实际情况修改。
请注意,以下操作无特殊说明时需在所有 K8S 集群节点上执行。本文只选取 Master-1 节点作为演示,并假定其余服务器都已按照相同的方式进行配置和设置。
2.1 配置主机名
# 更改主机名
hostnamectl set-hostname ks-master-1
# 切入新的终端会话,验证主机名修改成功
bash
注意: worker 节点的主机名前缀是 ks-worker-
2.2 配置 DNS
echo "nameserver 114.114.114.114" > /etc/resolv.conf
2.3 配置服务器时区
配置服务器时区为 Asia/Shanghai。
timedatectl set-timezone Asia/Shanghai
验证服务器时区,正确配置如下。
[root@ks-master-1 ~]# timedatectl
Local time: Tue 2023-08-22 10:26:43 CST
Universal time: Tue 2023-08-22 02:26:43 UTC
RTC time: Tue 2023-08-22 02:26:43
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
2.4 配置时间同步
安装 chrony 作为时间同步软件。
yum install chrony -y
修改配置文件 /etc/chrony.conf,修改 ntp 服务器配置。
vi /etc/chrony.conf
# 删除所有的 server 配置
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
# 增加国内的 ntp 服务器,或是指定其他常用的时间服务器
pool cn.pool.ntp.org iburst
# 可以使用 sed 自动替换生成
sed -i '/centos.pool.ntp.org/d' /etc/chrony.conf
sed -i "2a pool cn.pool.ntp.org iburst" /etc/chrony.conf
重启并设置 chrony 服务开机自启动。
systemctl enable chronyd --now
验证 chrony 同步状态。
# 执行查看命令
chronyc sourcestats -v
# 正常的输出结果如下
[root@ks-master-1 ~]# chronyc sourcestats -v
210 Number of sources = 4
.- Number of sample points in measurement set.
/ .- Number of residual runs with same sign.
| / .- Length of measurement set (time).
| | / .- Est. clock freq error (ppm).
| | | / .- Est. error in freq.
| | | | / .- Est. offset.
| | | | | | On the -.
| | | | | | samples. \
| | | | | | |
Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev
==============================================================================
81.16.177.123 20 14 1112 -3.725 6.515 -29ms 2697us
stratum2-1.ntp.mow01.ru.> 14 7 1114 +3.609 7.109 +3339us 2338us
ntp7.flashdance.cx 20 11 1112 -4.561 35.072 +12ms 13ms
tick.ntp.infomaniak.ch 15 7 1040 +0.974 10.424 +6383us 3162us
2.5 关闭系统防火墙
systemctl stop firewalld && systemctl disable firewalld
2.6 禁用 SELinux
# 使用 sed 修改配置文件,实现彻底的禁用
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 使用命令,实现临时禁用,这一步其实不做也行,KubeKey 会自动配置
setenforce 0
2.7 安装系统依赖
在所有节点上,以 root 用户登陆系统,执行下面的命令为 Kubernetes 安装系统基本依赖包。
# 安装 Kubernetes 系统依赖包
yum install curl socat conntrack ebtables ipset ipvsadm -y
2.8 基础配置自动化 Shell 脚本
除配置主机名之外,上述 2-7 步骤的所有操作,都可以整理成自动化配置脚本。
echo "nameserver 114.114.114.114" > /etc/resolv.conf
timedatectl set-timezone Asia/Shanghai
yum install chrony -y
sed -i '/centos.pool.ntp.org/d' /etc/chrony.conf
sed -i "2a pool cn.pool.ntp.org iburst" /etc/chrony.conf
systemctl enable chronyd --now
chronyc sourcestats -v
systemctl stop firewalld && systemctl disable firewalld
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
yum install curl socat conntrack ebtables ipset ipvsadm -y
2.9 配置基于 SSH 密钥的身份验证
KubeKey 支持在自动化部署 KubeSphere 和 Kubernetes 服务时,利用密码和密钥作为远程服务器的连接验证方式。本文会演示同时使用密码和密钥的配置方式,因此,需要为部署用户 root 配置免密码 SSH 身份验证。
注意: 本小节为可选配置项,如果你使用纯密码的方式作为服务器远程连接认证方式,可以忽略本节内容。
本文将 master-1 节点作为部署节点,下面的操作仅需 在 master-1 节点操作。
以 root 用户登陆系统,然后使用 ssh-keygen 命令生成一个新的 SSH 密钥对,命令完成后,SSH 公钥和私钥将存储在 /root/.ssh 目录中。
ssh-keygen -t ed25519 -C "KubeKey Install SSH Key"
命令执行效果如下:
[root@ks-master-1 ~]# ssh-keygen -t ed25519 -C "KubeKey Install SSH Key"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_ed25519.
Your public key has been saved in /root/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:iYTRp8zLunA3fnlT+eff124F1fUcKW6ccZ8hGL1PdEQ KubeKey Install SSH Key
The key's randomart image is:
+--[ED25519 256]--+
| .. .+ +E|
| o. . . = **|
| .o.o o O.B|
| .+. . *.o.|
| ...S ..o. |
| o o ..|
| . ..o . . . o|
| o.o .o o . *|
| .... . . =B|
+----[SHA256]-----+
接下来,输入以下命令将 SSH 公钥从 master-1 节点发送到其他节点。命令执行时输入 yes ,以接受服务器的 SSH 指纹,然后在出现提示时输入 root 用户的密码。
ssh-copy-id root@192.168.9.91
ssh-copy-id root@192.168.9.92
ssh-copy-id root@192.168.9.93
ssh-copy-id root@192.168.9.95
注意: 这里使用的 IP 地址的形式,并没有使用主机名。
下面是密钥复制时,正确的输出结果。
[root@ks-master-1 ~]# ssh-copy-id root@192.168.9.91
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_ed25519.pub"
The authenticity of host '192.168.9.91 (192.168.9.91)' can't be established.
ECDSA key fingerprint is SHA256:9MGqUOKVgz5ECHwcDa9y2XIvkRPBf1oikF9SoYYKxMg.
ECDSA key fingerprint is MD5:db:21:d8:5a:03:82:5a:45:5e:6f:e9:27:14:1b:76:a5.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.9.91's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.168.9.91'"
and check to make sure that only the key(s) you wanted were added.
添加并上传 SSH 公钥后,您现在可以执行下面的命令验证,通过 root 用户连接到所有服务器,无需密码验证。
[root@ks-master-1 ~]# ssh root@192.168.9.91
# 登陆输出结果 略
3. 操作系统磁盘配置
服务器新增一块数据盘 /dev/sdb ,用于 Containerd 和 Kubernetes Pod 的持久化存储。
本小节的配置比较简单,因此,下面的内容为无废话实操版。
请注意,以下操作无特殊说明时需在集群所有节点上执行。本文只选取 Master-1 节点作为演示,并假定其余服务器都已按照相同的方式进行配置和设置。
3.1 使用 LVM 配置磁盘
为了满足部分用户希望在生产上线后,磁盘容量不足时可以实现动态扩容。本文采用了 LVM 的方式配置磁盘(实际上,本人维护的生产环境,几乎不用 LVM)。
-
创建 PV
pvcreate /dev/sdb
-
创建 VG
vgcreate data /dev/sdb
-
创建 LV
使用所有空间,VG 名字为 data,LV 名字为 lvdata
lvcreate -l 100%VG data -n lvdata
3.2 格式化磁盘
mkfs.xfs /dev/mapper/data-lvdata
3.3 磁盘挂载
-
手工挂载
mkdir /data
mount /dev/mapper/data-lvdata /data/ -
开机自动挂载
tail -1 /etc/mtab >> /etc/fstab
3.4 创建数据目录
-
创建 OpenEBS 本地数据根目录
mkdir -p /data/openebs/local
-
创建 Containerd 数据目录
mkdir -p /data/containerd
-
创建 Containerd 数据目录软连接
ln -s /data/containerd /var/lib/containerd
说明: KubeKey 到 v3.0.10 版为止,一直不支持在部署的时候更改 Containerd 的数据目录,只能用这种目录软链接到变通方式来增加存储空间(也可以提前手工安装 Containerd,建议)。
3.5 磁盘配置自动化 Shell 脚本
上述所有操作,都可以整理成自动化配置脚本。
pvcreate /dev/sdb
vgcreate data /dev/sdb
lvcreate -l 100%VG data -n lvdata
mkfs.xfs /dev/mapper/data-lvdata
mkdir /data
mount /dev/mapper/data-lvdata /data/
tail -1 /etc/mtab >> /etc/fstab
mkdir -p /data/openebs/local
mkdir -p /data/containerd
ln -s /data/containerd /var/lib/containerd
4. 操作系统高级配置
本小节就一个主题,升级 CentOS 7.9 操作系统内核 。(可选项,但是建议执行)
CentOS 7.9 的默认内核 N 宗罪 (这么形容是不是有点过分)?
-
CentOS 7.9 的默认内核版本为 3.10.0-1160.71.1,与其他操作系统内核版本动辄 5.x、6.x 相比,着实低了。
-
某些公司 3.x 的内核已经不符合安全规范要求,必须强制升级。
-
更重点的是新版本的 Kubernetes 及相关组件的某些功能,也是依赖于高版本内核的。具体有哪些、有多少我也不知道,曾经见过但没记录。
-
xxx,应该还有很多需要升级的理由。就算没有也强制给自己找一个升级内核的必然理由吧。
综上所述,我们选择升级 CentOS 7.9 的内核。
升级方式选择广泛使用的 ELRepo 提供的软件源,直接在线安装新版本内核。
具体内核版本的选择上,建议选择长期支持版 。长期支持版以 kernel-lt 命名,最新主线稳定版以 kernel-ml 命名。
接下来我们开始执行具体的升级内核的操作。
请注意,以下操作无特殊说明时需在集群所有节点上执行。本文只选取 Master-1 节点作为演示,并假定其余服务器都已按照相同的方式进行配置和设置。
4.1 查看当前系统内核版本
# uname -r
3.10.0-1160.71.1.el7.x86_64
4.2 查询当前系统与 Kernel 相关的软件包
查询当前系统安装了哪些跟 Kernel 有关的软件包,升级内核的时候,一定要把已安装的相关 kernel 包一起升级。
# rpm -qa | grep kernel
kernel-3.10.0-1160.71.1.el7.x86_64
kernel-tools-3.10.0-1160.71.1.el7.x86_64
kernel-tools-libs-3.10.0-1160.71.1.el7.x86_64
4.3 增加 ELRepo 软件源
-
导入 RPM GPG public key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
-
安装 ELRepo
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
4.4 查询可用的内核软件包
启用新增加的 ELRepo 软件仓库,查询可用的内核软件包。
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
命令执行成功,结果如下 :
[root@ks-master-1 ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* elrepo-kernel: mirrors.tuna.tsinghua.edu.cn
Available Packages
kernel-lt.x86_64 5.4.254-1.el7.elrepo elrepo-kernel
kernel-lt-devel.x86_64 5.4.254-1.el7.elrepo elrepo-kernel
kernel-lt-doc.noarch 5.4.254-1.el7.elrepo elrepo-kernel
kernel-lt-headers.x86_64 5.4.254-1.el7.elrepo elrepo-kernel
kernel-lt-tools.x86_64 5.4.254-1.el7.elrepo elrepo-kernel
kernel-lt-tools-libs.x86_64 5.4.254-1.el7.elrepo elrepo-kernel
kernel-lt-tools-libs-devel.x86_64 5.4.254-1.el7.elrepo elrepo-kernel
kernel-ml.x86_64 6.4.11-1.el7.elrepo elrepo-kernel
kernel-ml-devel.x86_64 6.4.11-1.el7.elrepo elrepo-kernel
kernel-ml-doc.noarch 6.4.11-1.el7.elrepo elrepo-kernel
kernel-ml-headers.x86_64 6.4.11-1.el7.elrepo elrepo-kernel
kernel-ml-tools.x86_64 6.4.11-1.el7.elrepo elrepo-kernel
kernel-ml-tools-libs.x86_64 6.4.11-1.el7.elrepo elrepo-kernel
kernel-ml-tools-libs-devel.x86_64 6.4.11-1.el7.elrepo elrepo-kernel
perf.x86_64 5.4.254-1.el7.elrepo elrepo-kernel
python-perf.x86_64 5.4.254-1.el7.elrepo elrepo-kernel
说明: 当前最新 lt 版内核为 5.4.254-1 ,ml 版内核为 6.4.11-1 。我们按规划选择安装 5.4.254-1 版本的内核。
4.5 安装新版本内核
yum --enablerepo=elrepo-kernel install kernel-lt
注意: 这里我们只安装内核,同时安装其他包,会有包 conflicts 的报错。
4.6 配置新内核引导系统
执行内核升级的命令,正确执行后,系统内核还是默认的版本,如果此时直接执行 reboot
命令,重启后使用的内核版本还是默认的 3.10 ,不会使用新的 5.4.254 的内核。
-
查看已经安装的 kernel 信息:
grubby --info=ALL | grep ^kernel
命令执行成功,结果如下
[root@ks-master-1 ~]# grubby --info=ALL | grep ^kernel
kernel=/boot/vmlinuz-5.4.254-1.el7.elrepo.x86_64
kernel=/boot/vmlinuz-3.10.0-1160.71.1.el7.x86_64
kernel=/boot/vmlinuz-0-rescue-f4fe4dbe1120462db74b653fb50a78ed
-
查看当前系统默认内核
grubby --default-kernel
命令执行成功,可以看到当前默认内核依旧为 3.10.0-1160.71.1
[root@ks-master-1 ~]# grubby --default-kernel
/boot/vmlinuz-3.10.0-1160.71.1.el7.x86_64
-
修改系统默认内核为新内核
grubby --set-default "/boot/vmlinuz-5.4.254-1.el7.elrepo.x86_64"
注意:命令成功执行,无任何输出。
- 查看系统默认内核
通过命令查看,系统默认内核配置已经更新。
[root@ks-master-1 ~]# grubby --default-kernel
/boot/vmlinuz-5.4.254-1.el7.elrepo.x86_64
4.7 重启系统验证新内核并安装其他 Kernel 相关软件包
-
重启系统,使用新内核引导系统
reboot
系统引导画面,新内核已经变成第一位引导选项。
-
查看内核版本信息
[root@ks-master-1 ~]# uname -rs
Linux 5.4.254-1.el7.elrepo.x86_64 -
查看已经安装的内核相关软件
[root@ks-master-1 ~]# rpm -qa | grep kernel
kernel-lt-5.4.254-1.el7.elrepo.x86_64
kernel-3.10.0-1160.71.1.el7.x86_64
kernel-tools-3.10.0-1160.71.1.el7.x86_64
kernel-tools-libs-3.10.0-1160.71.1.el7.x86_64 -
安装其他 Kernel 相关软件包
在使用新内核引导系统后,安装其他 Kernel 相关软件包,解决之前出现的依赖冲突问题。
# 卸载旧版本的 kernel-tools 相关软件包,保留 kernel,避免新内核异常无法进入系统
yum remove kernel-tools-3.10.0-1160.71.1.el7.x86_64 kernel-tools-libs-3.10.0-1160.71.1.el7.x86_64
# 安装新版本的 kernel-tools 相关软件包
yum --enablerepo=elrepo-kernel install kernel-lt-tools kernel-lt-tools-libs
注意: 这一步操作仅适用于新安装的系统,已经运行其他应用的服务器请仔细评估、谨慎执行。
4.8 高级配置自动化 Shell 脚本
除重启验证流程之外,上述 1-6 步骤的核心操作,可以整理成自动化配置脚本。
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y
yum --enablerepo=elrepo-kernel install kernel-lt -y
grubby --set-default "/boot/vmlinuz-5.4.254-1.el7.elrepo.x86_64"
5. 安装部署 KubeSphere 和 Kubernetes
5.1 下载 KubeKey
本文将 Master-1 节点作为部署节点,把 KubeKey (下文简称 KK)最新版(v3.0.10)二进制文件下载到该服务器。具体 KK 版本号可以在 KubeKey 发行页面 查看。
-
下载最新版的 KubeKey
cd ~
mkdir kubekey
cd kubekey/选择中文区下载(访问 GitHub 受限时使用)
export KKZONE=cn
curl -sfL https://get-kk.kubesphere.io | sh -也可以使用下面的命令指定具体版本
curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.9 sh -
正确的执行效果如下
[root@ks-master-1 ~]# cd ~
[root@ks-master-1 ~]# mkdir kubekey
[root@ks-master-1 ~]# cd kubekey/
[root@ks-master-1 kubekey]# export KKZONE=cn
[root@ks-master-1 kubekey]# curl -sfL https://get-kk.kubesphere.io | sh -Downloading kubekey v3.0.10 from https://kubernetes.pek3b.qingstor.com/kubekey/releases/download/v3.0.10/kubekey-v3.0.10-linux-amd64.tar.gz ...
Kubekey v3.0.10 Download Complete!
[root@ks-master-1 kubekey]# ls -lh
total 110M
-rwxr-xr-x 1 root root 76M Jul 28 14:11 kk
-rw-r--r-- 1 root root 35M Aug 22 11:24 kubekey-v3.0.10-linux-amd64.tar.gz -
查看 KubeKey v3.0.10 支持的 Kubernetes 版本列表
./kk version --show-supported-k8s
[root@ks-master-1 kubekey]# ./kk version --show-supported-k8s
v1.19.0
v1.19.8
v1.19.9
v1.19.15
v1.20.4
v1.20.6
v1.20.10
v1.21.0
v1.21.1
v1.21.2
v1.21.3
v1.21.4
v1.21.5
v1.21.6
v1.21.7
v1.21.8
v1.21.9
v1.21.10
v1.21.11
v1.21.12
v1.21.13
v1.21.14
v1.22.0
v1.22.1
v1.22.2
v1.22.3
v1.22.4
v1.22.5
v1.22.6
v1.22.7
v1.22.8
v1.22.9
v1.22.10
v1.22.11
v1.22.12
v1.22.13
v1.22.14
v1.22.15
v1.22.16
v1.22.17
v1.23.0
v1.23.1
v1.23.2
v1.23.3
v1.23.4
v1.23.5
v1.23.6
v1.23.7
v1.23.8
v1.23.9
v1.23.10
v1.23.11
v1.23.12
v1.23.13
v1.23.14
v1.23.15
v1.23.16
v1.23.17
v1.24.0
v1.24.1
v1.24.2
v1.24.3
v1.24.4
v1.24.5
v1.24.6
v1.24.7
v1.24.8
v1.24.9
v1.24.10
v1.24.11
v1.24.12
v1.24.13
v1.24.14
v1.25.0
v1.25.1
v1.25.2
v1.25.3
v1.25.4
v1.25.5
v1.25.6
v1.25.7
v1.25.8
v1.25.9
v1.25.10
v1.26.0
v1.26.1
v1.26.2
v1.26.3
v1.26.4
v1.26.5
v1.27.0
v1.27.1
v1.27.2
注意: 输出结果为 KK 支持的结果,但不代表 KubeSphere 和其他 Kubernetes 也能完美支持。实际测试中发现 KK v3.0.10 不支持 v1.27.2 ,所以我们选择 v1.26.5,生产环境建议选择 v1.24 或是 v1.26。
5.2 创建 Kubernetes 和 KubeSphere 部署配置文件
创建集群配置文件,本示例中,选择 KubeSphere v3.4.0 和 Kubernetes v1.26.5,同时,指定配置文件名称为 kubesphere-v340-v1265.yaml ,如果不指定,默认的文件名为 config-sample.yaml。
./kk create config -f kubesphere-v340-v1265.yaml --with-kubernetes v1.26.5 --with-kubesphere v3.4.0
命令执行成功后,在当前目录会生成文件名为 kubesphere-v340-v1265.yaml 的配置文件。
[root@ks-master-1 kubekey]# ./kk create config -f kubesphere-v340-v1265.yaml --with-kubernetes v1.26.5 --with-kubesphere v3.4.0
Generate KubeKey config file successfully
[root@ks-master-1 kubekey]# ls -lh
total 110M
-rwxr-xr-x 1 root root 76M Jul 28 14:11 kk
-rw-r--r-- 1 root root 35M Aug 22 11:24 kubekey-v3.0.10-linux-amd64.tar.gz
-rw-r--r-- 1 root root 5.2K Aug 22 11:27 kubesphere-v340-v1265.yaml
注意: 生成的默认配置文件内容较多,这里就不做过多展示了,更多详细的配置参数请参考 KubeKey 配置示例。
本文示例采用 3 个节点同时作为 control-plane 和 etcd 节点,启用规划中的 1 个 worker 节点,最小化部署 Kubernetes 集群,不启用任何额外的 KubeSphere 插件。
编辑配置文件 kubesphere-v340-v1265.yaml,主要修改 kind: Cluster 小节中的 hosts 和 roleGroups 等信息,修改说明如下。
-
hosts:指定节点的 IP、ssh 用户、ssh 密码、ssh 密钥,示例演示了同时使用密码和密钥的配置方法,同时也演示了 ssh 端口号的配置方法
-
roleGroups:指定 3 个 Master 节点作为 etcd、control-plane 节点,指定 1 个 worker 节点
-
internalLoadbalancer:启用内置的 HAProxy 负载均衡器
-
domain:自定义了一个域名 opsman.top
-
containerManager:使用 containerd
-
storage:新增配置项 ,修改 openebs.basePath 本地存储的默认路径,将默认值 /var/openebs/local 修改为 /data/openebs/local
修改后的示例如下:
apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
name: sample
spec:
hosts:
- {name: ks-master-1, address: 192.168.9.91, internalAddress: 192.168.9.91, port: 22, user: root, password: "P@88w0rd"}
- {name: ks-master-2, address: 192.168.9.92, internalAddress: 192.168.9.92, user: root, privateKeyPath: "~/.ssh/id_ed25519"}
- {name: ks-master-3, address: 192.168.9.93, internalAddress: 192.168.9.93, user: root, privateKeyPath: "~/.ssh/id_ed25519"}
- {name: ks-worker-1, address: 192.168.9.95, internalAddress: 192.168.9.95, user: root, privateKeyPath: "~/.ssh/id_ed25519"}
roleGroups:
etcd:
- ks-master-1
- ks-master-2
- ks-master-3
control-plane:
- ks-master-1
- ks-master-2
- ks-master-3
worker:
- ks-worker-1
controlPlaneEndpoint:
## Internal loadbalancer for apiservers
internalLoadbalancer: haproxy
domain: lb.opsman.top
address: ""
port: 6443
kubernetes:
version: v1.26.5
clusterName: opsman.top
autoRenewCerts: true
containerManager: containerd
etcd:
type: kubekey
network:
plugin: calico
kubePodsCIDR: 10.233.64.0/18
kubeServiceCIDR: 10.233.0.0/18
## multus support. https://github.com/k8snetworkplumbingwg/multus-cni
multusCNI:
enabled: false
storage:
openebs:
basePath: /data/openebs/local
registry:
privateRegistry: ""
namespaceOverride: ""
registryMirrors: []
insecureRegistries: []
addons: []
5.3 部署 KubeSphere 和 Kubernetes
接下来我们执行下面的命令,使用上面生成的配置文件部署 KubeSphere 和 Kubernetes。
export KKZONE=cn
./kk create cluster -f kubesphere-v340-v1265.yaml
上面的命令执行后,首先 kk 会检查部署 Kubernetes 的依赖及其他详细要求。检查合格后,系统将提示您确认安装。输入 yes 并按 ENTER 继续部署。
[root@ks-master-1 kubekey]# export KKZONE=cn
[root@ks-master-1 kubekey]# ./kk create cluster -f kubesphere-v340-v1265.yaml
_ __ _ _ __
| | / / | | | | / /
| |/ / _ _| |__ ___| |/ / ___ _ _
| \| | | | '_ \ / _ \ \ / _ \ | | |
| |\ \ |_| | |_) | __/ |\ \ __/ |_| |
\_| \_/\__,_|_.__/ \___\_| \_/\___|\__, |
__/ |
|___/
08:51:53 CST [GreetingsModule] Greetings
08:51:53 CST message: [ks-worker-1]
Greetings, KubeKey!
08:51:53 CST message: [ks-master-2]
Greetings, KubeKey!
08:51:53 CST message: [ks-master-1]
Greetings, KubeKey!
08:51:54 CST message: [ks-master-3]
Greetings, KubeKey!
08:51:54 CST success: [ks-worker-1]
08:51:54 CST success: [ks-master-2]
08:51:54 CST success: [ks-master-1]
08:51:54 CST success: [ks-master-3]
08:51:54 CST [NodePreCheckModule] A pre-check on nodes
08:51:54 CST success: [ks-master-3]
08:51:54 CST success: [ks-worker-1]
08:51:54 CST success: [ks-master-2]
08:51:54 CST success: [ks-master-1]
08:51:54 CST [ConfirmModule] Display confirmation form
+-------------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------+------------+-------------+------------------+--------------+
| name | sudo | curl | openssl | ebtables | socat | ipset | ipvsadm | conntrack | chrony | docker | containerd | nfs client | ceph client | glusterfs client | time |
+-------------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------+------------+-------------+------------------+--------------+
| ks-master-1 | y | y | y | y | y | y | y | y | y | | | | | | CST 08:51:54 |
| ks-master-2 | y | y | y | y | y | y | y | y | y | | | | | | CST 08:51:54 |
| ks-master-3 | y | y | y | y | y | y | y | y | y | | | | | | CST 08:51:54 |
| ks-worker-1 | y | y | y | y | y | y | y | y | y | | | | | | CST 08:51:54 |
+-------------+------+------+---------+----------+-------+-------+---------+-----------+--------+--------+------------+------------+-------------+------------------+--------------+
This is a simple check of your environment.
Before installation, ensure that your machines meet all requirements specified at
https://github.com/kubesphere/kubekey#requirements-and-recommendations
Continue this installation? [yes/no]:
注意: 检查结果中我们可以看到 nfs client、ceph client、glusterfs client 3 个与存储有关的 client 显示没有安装,这个问题文本可以忽略。
安装过程日志输出比较多,为了节省篇幅这里就不展示了。
部署完成需要大约 10-30 分钟左右,具体看网速、机器配置、启用多少插件等,本次部署完成耗时 22 分钟。
部署完成后,您应该会在终端上看到类似于下面的输出。提示部署完成的同时,输出中还会显示用户登陆 KubeSphere 的默认管理员用户和密码。
clusterconfiguration.installer.kubesphere.io/ks-installer created
09:05:23 CST skipped: [ks-master-3]
09:05:23 CST skipped: [ks-master-2]
09:05:23 CST success: [ks-master-1]
#####################################################
### Welcome to KubeSphere! ###
#####################################################
Console: http://192.168.9.91:30880
Account: admin
Password: P@88w0rd
NOTES:
1. After you log into the console, please check the
monitoring status of service components in
"Cluster Management". If any service is not
ready, please wait patiently until all components
are up and running.
2. Please change the default password after login.
#####################################################
https://kubesphere.io 2023-08-23 09:13:32
#####################################################
09:13:34 CST skipped: [ks-master-3]
09:13:34 CST skipped: [ks-master-2]
09:13:34 CST success: [ks-master-1]
09:13:34 CST Pipeline[CreateClusterPipeline] execute successfully
Installation is complete.
Please check the result using the command:
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
6. 部署验证
6.1 KubeSphere 管理控制台验证集群状态
打开浏览器访问 master-1 节点的 IP 地址和端口 30880 ,可以看到熟悉的 KubeSphere 管理控制台的登录页面。
输入默认用户 admin 和默认密码 P@88w0rd ,然后点击「登录」。登陆后请立即按提示修改密码。
之前写过太多次的图形化部署验证了,所以本文省略了控制台验证截图。
6.2 Kubectl 命令行验证集群状态
本小节只是简单的看了一下基本状态,并不全面,更多的细节大家自己体验探索吧
- 查看集群节点信息
在 master-1 节点运行 kubectl 命令获取 Kubernetes 集群上的可用节点列表。
kubectl get nodes -o wide
在输出结果中可以看到,当前的 Kubernetes 集群内的可用节点、节点的内部 IP、节点角色、节点的 Kubernetes 版本号、容器运行时及版本号、操作系统类型及内核版本等信息。
[root@ks-master-1 kubekey]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
ks-master-1 Ready control-plane 13m v1.26.5 192.168.9.91 <none> CentOS Linux 7 (Core) 5.4.254-1.el7.elrepo.x86_64 containerd://1.6.4
ks-master-2 Ready control-plane 12m v1.26.5 192.168.9.92 <none> CentOS Linux 7 (Core) 5.4.254-1.el7.elrepo.x86_64 containerd://1.6.4
ks-master-3 Ready control-plane 12m v1.26.5 192.168.9.93 <none> CentOS Linux 7 (Core) 5.4.254-1.el7.elrepo.x86_64 containerd://1.6.4
ks-worker-1 Ready worker 12m v1.26.5 192.168.9.95 <none> CentOS Linux 7 (Core) 5.4.254-1.el7.elrepo.x86_64 containerd://1.6.4
-
输入以下命令获取在 Kubernetes 集群上运行的 Pod 列表,按工作负载在 NODE 上的分布排序。
kubectl get pods -o wide -A | sort -k 8
注意: 输出结果太多,且不好排版,这里就不展示了,请确保所有的 Pod 状态 为 Running。
- 查看 Image 列表
输入以下命令获取在 Kubernetes 集群节点上已经下载的 Image 列表。
crictl images ls
在 Master 和 Worker 节点分别执行,输出结果如下:
# Master 节点
[root@ks-master-1 kubekey]# crictl images ls
IMAGE TAG IMAGE ID SIZE
registry.cn-beijing.aliyuncs.com/kubesphereio/cni v3.23.2 a87d3f6f1b8fd 111MB
registry.cn-beijing.aliyuncs.com/kubesphereio/coredns 1.9.3 5185b96f0becf 14.8MB
registry.cn-beijing.aliyuncs.com/kubesphereio/k8s-dns-node-cache 1.15.12 5340ba194ec91 42.1MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-apiserver v1.26.5 25c2ecde661fc 35.5MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-controller-manager v1.26.5 a7403c147a516 32.4MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-controllers v3.23.2 ec95788d0f725 56.4MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-proxy v1.26.5 08440588500d7 21.5MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-rbac-proxy v0.11.0 29589495df8d9 19.2MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-scheduler v1.26.5 200132c1d91ab 17.7MB
registry.cn-beijing.aliyuncs.com/kubesphereio/node-exporter v1.3.1 1dbe0e9319764 10.3MB
registry.cn-beijing.aliyuncs.com/kubesphereio/node v3.23.2 a3447b26d32c7 77.8MB
registry.cn-beijing.aliyuncs.com/kubesphereio/pause 3.8 4873874c08efc 310kB
registry.cn-beijing.aliyuncs.com/kubesphereio/pause 3.9 e6f1816883972 321kB
registry.cn-beijing.aliyuncs.com/kubesphereio/pod2daemon-flexvol v3.23.2 b21e2d7408a79 8.67MB
# Worker 节点
[root@ks-worker-1 ~]# crictl images ls
IMAGE TAG IMAGE ID SIZE
registry.cn-beijing.aliyuncs.com/kubesphereio/alertmanager v0.23.0 ba2b418f427c0 26.5MB
registry.cn-beijing.aliyuncs.com/kubesphereio/cni v3.23.2 a87d3f6f1b8fd 111MB
registry.cn-beijing.aliyuncs.com/kubesphereio/coredns 1.9.3 5185b96f0becf 14.8MB
registry.cn-beijing.aliyuncs.com/kubesphereio/defaultbackend-amd64 1.4 846921f0fe0e5 1.82MB
registry.cn-beijing.aliyuncs.com/kubesphereio/haproxy 2.3 0ea9253dad7c0 38.5MB
registry.cn-beijing.aliyuncs.com/kubesphereio/k8s-dns-node-cache 1.15.12 5340ba194ec91 42.1MB
registry.cn-beijing.aliyuncs.com/kubesphereio/ks-apiserver v3.4.0 e3ea630cb8056 65.8MB
registry.cn-beijing.aliyuncs.com/kubesphereio/ks-console v3.4.0 2928b06e49872 38.9MB
registry.cn-beijing.aliyuncs.com/kubesphereio/ks-controller-manager v3.4.0 0999c21fe5ee2 50.3MB
registry.cn-beijing.aliyuncs.com/kubesphereio/ks-installer v3.4.0 f937bbac7393d 158MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-controllers v3.23.2 ec95788d0f725 56.4MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-proxy v1.26.5 08440588500d7 21.5MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-rbac-proxy v0.11.0 29589495df8d9 19.2MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kube-state-metrics v2.6.0 ec6e2d871c544 12MB
registry.cn-beijing.aliyuncs.com/kubesphereio/kubectl v1.22.0 30c7baa8e18c0 26.6MB
registry.cn-beijing.aliyuncs.com/kubesphereio/linux-utils 3.3.0 e88cfb3a763b9 26.9MB
registry.cn-beijing.aliyuncs.com/kubesphereio/node-exporter v1.3.1 1dbe0e9319764 10.3MB
registry.cn-beijing.aliyuncs.com/kubesphereio/node v3.23.2 a3447b26d32c7 77.8MB
registry.cn-beijing.aliyuncs.com/kubesphereio/notification-manager-operator v2.3.0 7ffe334bf3772 19.3MB
registry.cn-beijing.aliyuncs.com/kubesphereio/notification-manager v2.3.0 2c35ec9a2c185 21.6MB
registry.cn-beijing.aliyuncs.com/kubesphereio/notification-tenant-sidecar v3.2.0 4b47c43ec6ab6 14.7MB
registry.cn-beijing.aliyuncs.com/kubesphereio/pause 3.8 4873874c08efc 310kB
registry.cn-beijing.aliyuncs.com/kubesphereio/pod2daemon-flexvol v3.23.2 b21e2d7408a79 8.67MB
registry.cn-beijing.aliyuncs.com/kubesphereio/prometheus-config-reloader v0.55.1 7c63de88523a9 4.84MB
registry.cn-beijing.aliyuncs.com/kubesphereio/prometheus-operator v0.55.1 b30c215b787f5 14.3MB
registry.cn-beijing.aliyuncs.com/kubesphereio/prometheus v2.39.1 6b9895947e9e4 88.5MB
registry.cn-beijing.aliyuncs.com/kubesphereio/provisioner-localpv 3.3.0 739e82fed8b2c 28.8MB
registry.cn-beijing.aliyuncs.com/kubesphereio/snapshot-controller v4.0.0 f1d8a00ae690f 19MB
**注意:**Worker 节点的 Image 较多,因为目前集群只有一个 Worker 节点,该节点运行了除 K8S 核心服务之外的其他服务,包括 KubeSphere、 Prometheus 等服务。
- 查看 Containerd 数据目录
查看验证 Containerd 数据目录的软连接是否生效。
[root@ks-master-1 kubekey]# ls /data/containerd/
io.containerd.content.v1.content io.containerd.runtime.v1.linux io.containerd.snapshotter.v1.native
io.containerd.grpc.v1.cri io.containerd.runtime.v2.task io.containerd.snapshotter.v1.overlayfs
io.containerd.metadata.v1.bolt io.containerd.snapshotter.v1.btrfs tmpmounts
至此,我们已经部署完成了具有 3 个 Master 节点和 1 个 Worker 节点的高可用的 Kubernetes 集群和 KubeSphere。
7. 总结
本文主要部署演示了在 Linux 服务器操作系统 CentOS 7.9 上,利用 KubeKey v3.0.10 自动化部署最小化 KubeSphere v3.4.0 和 Kubernetes v1.26.5 高可用集群的详细过程。
概括总结全文主要涉及以下内容
-
操作系统基础配置
-
操作系统数据盘 LVM 配置、磁盘挂载、数据目录创建
-
操作系统内核升级
-
KubeKey 下载及创建集群配置文件
-
利用 KubeKey 自动化部署 KubeSphere 和 Kubernetes 集群
-
部署完成后的验证过程
本文介绍的内容可直接用于研发、测试环境,对于生产环境有一定的参考意义。
但是,不建议各位在生产环境使用 v3.4.0 ,毕竟刚发布,必然会有许多未知 Bug。还是,耐心等待下一个版本 v3.4.1 发布后评估测试完再做决定。