本文最后更新于 2024-09-03,文章内容距离上一次更新已经过去了很久啦,可能已经过时了,请谨慎参考喵。

前情提要

接上文:

https://blog.imbhj.com/archives/fnxcqjsz

上文写的有点太长了,重开一篇记录一下,整理一遍过程,同时继续折腾 kubesphere

三节点安装篇

其实就是上文的最后 kubesphere 重新开始3 部分,也是最后成功部署 kubesphere 三节点集群的一次过程

部署环境:

系统版本:Debian12.6;内核 版本:6.1.0;PVE平台:8.2.2;CPU型号:x86_64_v2_AES

  • k8s-master1;10.10.10.56;2C8G100G

  • k8s-node1;10.10.10.57;2C8G100G

  • k8s-node2;10.10.10.58;2C8G100G

这里的 k8s-master1/node1/node2 都是指这台机器的 hostname ,可以在 /etc/hosts 中进行修改,或者使用命令 hostnamectl set-hostname new_hostname 来修改,修改后重启生效。

首先配置普通用户使用 sudo 权限:(所有节点)

su    # 切换到 root 用户
vim /etc/sudoers

# 新增普通用户权限
debian ALL=(ALL:ALL) ALL

安装小工具和依赖:(所有节点)

sudo apt update
sudo apt install curl openssl tar socat conntrack ebtables ipset -y

切换到 root 用户,配置时间同步:(所有节点)

su
# 看一下三台节点的时间是否同步
timedatectl
# 切换时区到亚洲上海
timedatectl set-timezone Asia/Shanghai
# 查看一下是否设置成功
timedatectl
# 安装时间同步工具
apt install chrony -y
# 查看时间同步服务器列表
chronyc -n sources -v
# 查看时间同步状态
chronyc tracking
# 核查三个节点的时间是否一样
timedatectl status

登录到 master 节点,测试 ssh 是否可以正常连接:

ssh debian@10.10.10.57
ssh debian@10.10.10.58

配置环境变量:(所有节点)(如果是国外机器,可以不用设置)

su
vim /root/.bashrc
# 最下面加入这一行
export KKZONE=cn
# 保存退出
source /root/.bashrc
# 退出 root 用户
exit
# 普通用户
vim ~/.bashrc
# 最下面加入这一行
export KKZONE=cn
# 保存退出
source ~/.bashrc

继续在 master 节点:(普通用户,不用切换 root 用户)

mkdir k8s-kubesphere && cd k8s-kubesphere
# 下载 KubeKey
curl -sfL https://get-kk.kubesphere.io | VERSION=v3.1.5 sh -
# 下载完毕之后 ls 一下看看是否有 kk 这个文件
# 增加权限
chmod +x kk
# 生成配置文件
./kk create config --with-kubernetes v1.23.17 --with-kubesphere v3.4.1

注意这里的 kk 脚本版本 v3.1.5,k8s 版本 v1.23.17,kubesphere 版本 v3.4.1,我都改成了兼容的最新的版本(截止 20240901)。

编辑配置文件: vim ./config-sample.yaml (master 节点,普通用户)

spec:
  hosts:
  - {name: k8s-master1, address: 10.10.10.56, internalAddress: 10.10.10.56, user: debian, password: xxxxxx}
  - {name: k8s-node1, address: 10.10.10.57, internalAddress: 10.10.10.57, user: debian, password: xxxxxx}
  - {name: k8s-node2, address: 10.10.10.58, internalAddress: 10.10.10.58, user: debian, password: xxxxxx}
  roleGroups:
    etcd:
    - k8s-master1
    control-plane:
    - k8s-master1
    worker:
    - k8s-node1
    - k8s-node2

注意,这里是只修改这一部分内容即可,而不是删除的只剩下这部分。

其他配置项不用修改,默认最小安装。

安装集群和 kubesphere:(master 节点,普通用户)

./kk create cluster -f config-sample.yaml

20240831153805.jpg

等待代码跑完:

20240831162058.png

到这里可能会卡住,等待十几分钟或者半小时(根据网络情况),如果还没结束的话,不要手动结束,试试浏览器访问 10.10.10.56:30880 看看可不可以登陆上 kubesphere ,如果可以,说明安装成功了,如果不可以,说明还是网络原因导致一些镜像拉不下来,可以尝试给节点挂上全局代理(一定是全局代理,否则可能部分守护进程是不走普通代理的)再重新安装

我这里就是等待了十几分钟之后发现可以访问 kubesphere 控制台了,然后登录进去之后就发现这里已经显示安装成功了

20240831162234.png

输入初始账号和密码: admin/P@88w0rd 访问控制台。

20240831162502.png

然后终端就输出安装成功了:

20240831162656.png

按照提示,查看安装过程的日志:

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

20240831163010.png

查看集群的 pod 状态:

kubectl get pod --all-namespaces

20240831163302.png

所有的 pod 状态都在 running ,没毛病,安装成功!进入 web 控制台,查看集群和组件状态:

20240831163720.png

20240831164255.png

控制面板这里显示 master 节点有一个污点 pod,这是因为一般情况下,为了保证集群的稳定性,都不会让任务 pod 跑在 master 节点上的,查看系统组件,所有状态都是健康,部署成功。

增加节点

接上文,是用传统的三节点(1master2node)模式来安装的,这种模式一般只适用于测试环境,因为三节点模式并不是高可用状态,一旦 master 节点发生错误或者宕机,那么整个集群就会爆炸(bushi

所以我们来给上文的三节点集群再增加一个 master 节点,系统环境和其他三节点必须保持一致,我要增加的这个 master 节点配置还是一样的:

系统版本:Debian12.6;内核 版本:6.1.0;PVE平台:8.2.2;CPU型号:x86_64_v2_AES

  • k8s-master2;10.10.10.59;2C8G100G

首先还是要初始化这台机器,例如时间同步、依赖安装等:

su    # 切换到 root 用户
vim /etc/sudoers

# 新增普通用户权限
debian ALL=(ALL:ALL) ALL

# 安装依赖
sudo apt update
sudo apt install curl openssl tar socat conntrack ebtables ipset -y

# 配置时间同步
su
# 看一下节点的时间是否同步
timedatectl
# 切换时区到亚洲上海
timedatectl set-timezone Asia/Shanghai
# 查看一下是否设置成功
timedatectl
# 安装时间同步工具
apt install chrony -y
# 查看时间同步服务器列表
chronyc -n sources -v
# 查看时间同步状态
chronyc tracking
# 核查所有节点的时间是否一样
timedatectl status

登录到最初始的任务机,也就是 k8s-master1 节点,测试一下是否可以连接到新节点:

ssh debian@10.10.10.59

配置新节点 k8s-master2 环境变量:

su
vim /root/.bashrc
# 最下面加入这一行
export KKZONE=cn
# 保存退出
source /root/.bashrc
# 退出 root 用户
exit
# 普通用户
vim ~/.bashrc
# 最下面加入这一行
export KKZONE=cn
# 保存退出
source ~/.bashrc

返回任务机 k8s-master1 节点,修改配置文件 vim ./config-sample.yaml

spec:
  hosts:
  - {name: k8s-master1, address: 10.10.10.56, internalAddress: 10.10.10.56, user: debian, password: xxxxxx}
  - {name: k8s-node1, address: 10.10.10.57, internalAddress: 10.10.10.57, user: debian, password: xxxxxx}
  - {name: k8s-node2, address: 10.10.10.58, internalAddress: 10.10.10.58, user: debian, password: xxxxxx}
  - {name: k8s-master2, address: 10.10.10.59, internalAddress: 10.10.10.59, user: debian, password: xxxxxx}
  roleGroups:
    etcd:
    - k8s-master1
    - k8s-master2
    control-plane:
    - k8s-master1
    - k8s-master2
    worker:
    - k8s-node1
    - k8s-node2

配置负载均衡服务器,还是修改这个配置文件:

spec:
  controlPlaneEndpoint:
    internalLoadbalancer: haproxy
    domain: lb.kubesphere.local
    address: ""
    port: 6443

这是使用了 kubeKey 内置的 haproxy 高可用模式。

还是在 k8s-master1 这个节点上,使刚才修改的配置文件生效并增加新节点:(普通用户)

./kk add nodes -f config-sample.yaml

20240901195249.png

输入 yes,等待代码跑完。。。。。。

输入 kubectl get nodes 检查节点:

20240901201200.png

登录 web 控制台查看集群状态:

没什么问题,这样就完成集群的高可用配置和新增节点了喵。

单节点AllinOne

单节点我安装成功了,但是也没成功,因为给的内存太小了,导致监控组件的 pod 一直无法调度成功。

系统版本:Debian12.6;内核 版本:6.1.0;PVE平台:8.2.2;CPU型号:x86_64_v2_AES

配置:2C-8G-100G

需要注意的是,单系统安装也必须具有 SSH 服务,请务必提前配置好。

首先安装部分小工具:

sudo apt install curl openssl tar -y

安装相关依赖:

sudo apt install socat conntrack ebtables ipset -y

配置环境变量:(所有节点)(如果是国外机器,可以不用设置)

su
vim /root/.bashrc
# 最下面加入这一行
export KKZONE=cn
# 保存退出
source /root/.bashrc
# 退出 root 用户
exit
# 普通用户
vim ~/.bashrc
# 最下面加入这一行
export KKZONE=cn
# 保存退出
source ~/.bashrc

和多节点安装差不多,不过不用生成配置文件,直接安装即可:

mkdir k8s-kubesphere && cd k8s-kubesphere
# 下载 KubeKey
curl -sfL https://get-kk.kubesphere.io | VERSION=v3.1.5 sh -
# 下载完毕之后 ls 一下看看是否有 kk 这个文件
# 增加权限
chmod +x kk
# 切换 root 用户(多节点不用,单节点安装必须 root 用户)
su
# 直接安装 k8s 和 kubesphere
./kk create cluster --with-kubernetes v1.23.17 --with-kubesphere v3.4.1

20240903204310.png

等待代码跑完。。。。。。

20240903211723.png

还是卡在这里了,估计还是网络问题,等待了大概二十分钟左右,访问 web 页面已经可以进去了:

20240903212104.png

默认的帐户和密码 (admin/P@88w0rd) 通过 <NodeIP>:30880 访问控制台:

20240903212247.png

报错:

request to http://ks-apiserver/oauth/token failed, reason: connect ECONNREFUSED 10.233.59.160:80

手动 Ctrl+C 结束任务,用下列命令查看一下安装日志:

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

王德发?什么情况,安装成功?回到 web 控制台,刷新一下,登录,我靠,居然进去了:

赶紧看一下节点状态与组件状态:

发现是有四个监控组件异常,使用命令 kubectl get pod --all-namespaces 来查看所有 pod 状态:

如果有 pod 的状态是 ContainerCreating ,等待一会就好了(至少我是这样的)。

可以看到有四个 pod 状态是 Pending ,查阅了一下官方文档,尴尬的发现,原来是这台虚拟机的性能太弱了,导致资源无法调度。。。。。。

建议内存16G 起步,如果觉得不放心,可以重新执行一次安装集群的命令,就会直接跳安装成功,但是还是会无法调度(亲测),内存和 CPU 还是不够

20240903222611.png

事件中告警的原因其实是 CPU 不足,可以尝试一下 4C16G 的配置,官方演示视频中的配置为 8C16G,那么就先到这里啦,拜拜~