CentOS 7.9 安装 KubeSphere v3.4.0 和 Kubernetes v1.26 实战

转载: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 ,用于 ContainerdKubernetes 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 软件源

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 小节中的 hostsroleGroups 等信息,修改说明如下。

  • 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 发布后评估测试完再做决定。

相关推荐
传而习乎2 分钟前
Linux:CentOS 7 解压 7zip 压缩的文件
linux·运维·centos
我们的五年12 分钟前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
IT果果日记34 分钟前
ubuntu 安装 conda
linux·ubuntu·conda
Python私教36 分钟前
ubuntu搭建k8s环境详细教程
linux·ubuntu·kubernetes
羑悻的小杀马特1 小时前
环境变量简介
linux
小陈phd1 小时前
Vscode LinuxC++环境配置
linux·c++·vscode
是阿建吖!1 小时前
【Linux】进程状态
linux·运维
明明跟你说过2 小时前
Linux中的【tcpdump】:深入介绍与实战使用
linux·运维·测试工具·tcpdump
O&REO2 小时前
单机部署kubernetes环境下Overleaf-基于MicroK8s的Overleaf应用部署指南
云原生·容器·kubernetes
politeboy2 小时前
k8s启动springboot容器的时候,显示找不到application.yml文件
java·spring boot·kubernetes