利用sealos+kuboard搭建中文化带web管理的k8s集群
教程视频来源:

K8s部署丨Sealos工具丨kuboard工具丨秒级部署丨快速部署丨kubernetes部署丨离线部署丨02_哔哩哔哩_bilibili​www.bilibili.com/video/BV1qN411A7dQ/?spm_id_from=333.999.0.0

视频和笔记资料领取:微信CSmas0222

sealos作者:

中本呆:sealos 作者创业心路历程16 赞同 · 0 评论文章

其他关于sealos直接搭建集群的文章:

【工具】使用 sealos 部署 k8s 集群​blog.csdn.net/xiaoliizi/article/details/126998976

sealos 离线部署 k8s 高可用集群​www.cnblogs.com/lfl17718347843/p/16074745.html

Rainbond:开源云原生平台对比 KubeSphere vs Rainbond15 赞同 · 1 评论文章

kuboard的小缺点:不给钱只能看当天一天的操作日志审计~~~

不过,如果能每天定时发到elk的话,应该也能实现白嫖所有日志

kuboard,saelos,rancher都是基于kubeadm的,理论上直接用kubeadm也可以,这个算进阶内容了

一、主机准备(所有节点必须执行!!)

所有节点同步执行的办法:

1.1 配置主机名

# hostnamectl set-hostname xxx
<p>k8s-master01
k8s-master02
k8s-master03
k8s-worker01

PS.master节点如果挂掉两台,仍然可用

为什么这里不给worker节点做高可用?

1.2 设置静态IP地址

序号

主机名

主机IP

1

k8s-master01

192.168.10.142

2

k8s-master02

192.168.10.143

3

k8s-master03

192.168.10.144

4

k8s-worker01

192.168.10.145

# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="ec87533a-8151-4aa0-9d0f-1e970affcdc6"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.10.xxx"
PREFIX="24"
GATEWAY="192.168.10.2"
DNS1="119.29.29.29"

1.3 配置主机名与IP地址解析

下面解析是管理员添加,sealos在运行过程中,也会自动添加主机名与IP地址解析关系。

# /etc/hosts
192.168.10.142 k8s-master01
192.168.10.143 k8s-master02
192.168.10.144 k8s-master03
192.168.10.145 k8s-worker01

1.4 升级内核

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org</p>
<p>yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm</p>
<p>yum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64</p>
<p>awk -F ' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg</p>
<p>grub2-set-default "CentOS Linux (5.4.204-1.el7.elrepo.x86_64) 7 (Core)"</p>
<p>reboot

二、sealos准备(只需要在一个master节点执行)

下面有sealos官方给的安装办法,如果发现安装有问题可以去官方查看最新的安装办法

sealos 安装 | sealos​www.sealyun.com/zh-Hans/docs/getting-started/installation

wget https://github.com/labring/sealos/releases/download/v4.2.0/sealos_4.2.0_linux_amd64.tar.gz <br />
&& tar zxvf sealos_4.2.0_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin</p>
<h1 id="sealos version">sealos version</h1>
<p>{"gitVersion":"4.0.0","gitCommit":"7146cfe","buildDate":"2022-06-30T14:24:31Z","goVersion":"go1.17.11","compiler":"gc","platform":"linux/amd64"}sealos 安装 | sealos</p>
<h1 id="sealos version">sealos version</h1>
<p>{"gitVersion":"4.0.0","gitCommit":"7146cfe","buildDate":"2022-06-30T14:24:31Z","goVersion":"go1.17.11","compiler":"gc","platform":"linux/amd64"}

三、使用sealos部署kubernetes集群(只需要在一个master节点执行)

kubernetes集群默认使用containerd

sealos run labring/kubernetes:v1.24.0 labring/calico:v3.22.1     --masters 192.168.10.142,192.168.10.143,192.168.10.144     --nodes 192.168.10.145     --passwd centos</p>
<h1 id="kubectl get nodes">kubectl get nodes</h1>
<p>NAME           STATUS   ROLES           AGE   VERSION
k8s-master01   Ready    control-plane   16h   v1.24.0
k8s-master02   Ready    control-plane   16h   v1.24.0
k8s-master03   Ready    control-plane   16h   v1.24.0
k8s-worker01   Ready    <none>          16h   v1.24.0</p>
<h1 id="kubectl get pods -n kube-system">kubectl get pods -n kube-system</h1>
<p>NAME                                   READY   STATUS    RESTARTS      AGE
coredns-6d4b75cb6d-59ph5               1/1     Running   1 (15h ago)   16h
coredns-6d4b75cb6d-wz6tx               1/1     Running   1 (15h ago)   16h
etcd-k8s-master01                      1/1     Running   1 (15h ago)   16h
etcd-k8s-master02                      1/1     Running   1 (15h ago)   16h
etcd-k8s-master03                      1/1     Running   1 (15h ago)   16h
kube-apiserver-k8s-master01            1/1     Running   3 (15h ago)   16h
kube-apiserver-k8s-master02            1/1     Running   1 (15h ago)   16h
kube-apiserver-k8s-master03            1/1     Running   1 (15h ago)   16h
kube-controller-manager-k8s-master01   1/1     Running   3 (15h ago)   16h
kube-controller-manager-k8s-master02   1/1     Running   1 (15h ago)   16h
kube-controller-manager-k8s-master03   1/1     Running   1 (15h ago)   16h
kube-proxy-5l26r                       1/1     Running   1 (15h ago)   16h
kube-proxy-cfbkh                       1/1     Running   1 (15h ago)   16h
kube-proxy-g92fs                       1/1     Running   1 (15h ago)   16h
kube-proxy-zsjxv                       1/1     Running   1 (15h ago)   16h
kube-scheduler-k8s-master01            1/1     Running   3 (15h ago)   16h
kube-scheduler-k8s-master02            1/1     Running   1 (15h ago)   16h
kube-scheduler-k8s-master03            1/1     Running   1 (15h ago)   16h
kube-sealyun-lvscare-k8s-worker01      1/1     Running   1 (15h ago)   16h

四、使用kuboard实现k8s集群托管

序号

主机名

主机IP

1

kuboard-server

192.168.10.146

PS.这里要用不在k8s集群中的一台主机来做kuboard!!!!!

4.1 kuboard部署及访问(必须在k8s集群以外的一台机器执行!!)

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl enable --now docker
#下面docker的命令注意!!!,这个ip也必须根据集群中实际的电脑ip来写!!!否则web里面看到的agent下载ip也是不对的
docker run -d   --restart=unless-stopped   --name=kuboard   -p 80:80/tcp   -p 10081:10081/tcp   -e KUBOARD_ENDPOINT="http://192.168.10.146:80"   -e KUBOARD_AGENT_SERVER_TCP_PORT="10081"   -v /root/kuboard-data:/data   eipwork/kuboard:v3

之后注意!! 必须/etc/sysctl.conf加一个路由

echo "net.ipv4.ip_forward=1 " >> /etc/sysctl.conf #增加一行net.ipv4.ip_forward=1

sysctl -p #让内核修改生效

在浏览器打开地址http://这台机器的IP,输入用户名admin,默认密码Kuboard123,即可登录 Kuboard-Spray 界面

4.2 kuboard添加k8s集群

[root@k8s-master01 ~]# kubectl apply -f kuboard-agent.yaml</p>
<p>namespace/kuboard created
serviceaccount/kuboard-admin created
clusterrolebinding.rbac.authorization.k8s.io/kuboard-admin-crb created
serviceaccount/kuboard-viewer created
clusterrolebinding.rbac.authorization.k8s.io/kuboard-viewer-crb created
deployment.apps/kuboard-agent-du7gv7 created
deployment.apps/kuboard-agent-du7gv7-2 created
[root@k8s-master01 ~]# kubectl get pods -n kuboard
NAME                                      READY   STATUS    RESTARTS   AGE
kuboard-agent-du7gv7-2-84f65f77b8-rcb4x   1/1     Running   0          54s
kuboard-agent-du7gv7-56c7cb9564-m78qx     1/1     Running   0          54s

选择管理的身份!!!,必须选择kuboard-admin,这个是权限最大的账户!!

五. 用kuboard面板添加nfs存储

5.1 nfs服务器搭建

找一台电脑安装nfs

yum install -y nfs-utils rpcbind

假设这台电脑的sdb硬盘要用作nfs,那么配置好了先挂挂载给/data目录

# 对sdb进行分区,单分区占全盘
parted /dev/sdb mklabel gpt
parted -s /dev/sdb mklabel gpt mkpart primary ext4 0% 100%</p>
<h1 id="等待sdb1分区创建">等待sdb1分区创建</h1>
<p>sleep 10</p>
<h1 id="格式化sdb1分区">格式化sdb1分区</h1>
<p>mkfs.ext4 /dev/sdb1</p>
<h1 id="创建挂载点并挂载">创建挂载点并挂载</h1>
<p>mkdir -p /data
mount /dev/sdb1 /data</p>
<h1 id="开机自动挂载sdb1分区">开机自动挂载sdb1分区</h1>
<p>echo "/dev/sdb1  /data  ext4  defaults  0 0" | sudo tee -a /etc/fstab
*************************************************************

然后nfs-server服务设为开机自启动,并现在启动

systemctl enable --now nfs-server

之后去面板上创建存储类,把nfs的/data目录做成存储

一秒钟就干完了~~~

[root@k8s-master01 ~]# kubectl get sc
NAME          PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
kubemsb-nfs   nfs-kubemsb-nfs   Delete          WaitForFirstConsumer   false                  46s

能看到存储类已经在集群里面了

六.firewalld防火墙的处理

6.1 官方的端口说明

关于端口的官方说明可见地址:

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

假设k8s部署情况如下:

主机名

主机IP

k8s-master

172.17.185.91

k8s-node01

172.17.185.92

k8s-node02

172.17.185.93

k8s-node03

172.17.185.94

所有机器上执行如下命令:

 # 确保开启防火墙服务
systemctl restart firewalld</p>
<h1 id="将集群内所有的节点IP配置到防火墙可信区中">将集群内所有的节点IP配置到防火墙可信区中</h1>
<p>firewall-cmd --permanent --zone=trusted --add-source=172.17.185.91
firewall-cmd --permanent --zone=trusted --add-source=172.17.185.92
firewall-cmd --permanent --zone=trusted --add-source=172.17.185.93
firewall-cmd --permanent --zone=trusted --add-source=172.17.185.94</p>
<h1 id="增加防火墙规则">增加防火墙规则</h1>
<p>firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -j ACCEPT -m comment --comment "kube-proxy redirects"
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 1  -j ACCEPT -m comment --comment "docker subnet"</p>
<h1 id="设置防火墙伪装ip, 打开NAT,默认是关闭状态">设置防火墙伪装ip, 打开NAT,默认是关闭状态</h1>
<p>firewall-cmd --add-masquerade --permanent</p>
<h1 id="所有k8s的NodePort端口添加到例外">所有k8s的NodePort端口添加到例外</h1>
<p>firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp</p>
<h1 id="重新加载配置">重新加载配置</h1>
<p>firewall-cmd --reload

编辑于 2023-05-21 10:49・IP 属地上海