Skip to content

在 kubesphere 上搭建 cube studio

栾鹏 edited this page Dec 19, 2023 · 8 revisions

步骤 1:环境初始化

修改主机名
hostnamectl set-hostname [新主机名]

1 检查操作系统的版本

# 此方式下安装kubernetes集群要求Centos版本要在7.5或之上
[root@master ~]# cat /etc/redhat-release
Centos Linux 7.5.1804 (Core)

#检查网络
ping www.baidu.com

ping 202.108.22.5

2 主机名解析

为了方便集群节点间的直接调用,在这个配置一下主机名解析,企业中推荐使用内部DNS服务器

如果使用KubeSphere可以不用使用该项

# 主机名成解析 编辑三台服务器的/etc/hosts文件,添加下面内容
vim /etc/hosts
---
192.168.180.110 node110
192.168.180.101 node101
192.168.180.102 node102

3 时间同步

kubernetes要求集群中的节点时间必须精确一直,这里使用chronyd服务从网络同步时间

企业中建议配置内部的会见同步服务器

# 启动chronyd服务
yum -y install chrony
systemctl start chronyd
systemctl enable chronyd
#手动同步一下
timedatectl set-ntp true
chronyc -a makestep
date

4 禁用iptable和firewalld服务

kubernetes和docker 在运行的中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则

# 1 关闭firewalld服务
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld

systemctl stop firewalld
systemctl disable firewalld

# 2 关闭iptables服务
[root@master ~]# systemctl stop iptables
[root@master ~]# systemctl disable iptables

5 禁用selinux

selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题

# 编辑 /etc/selinux/config 文件,修改SELINUX的值为disable
# 注意修改完毕之后需要重启linux服务
vim /etc/selinux/config
SELINUX=disabled

6 禁用swap分区

swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明

# 编辑分区配置文件/etc/fstab,注释掉swap分区一行
# 注意修改完毕之后需要重启linux服务
vim /etc/fstab
注释掉 /dev/mapper/centos-swap swap
# /dev/mapper/centos-swap swap

#检查
free -m
#如果swap全部是0,则代表配置完成

#临时关闭swap分区
sudo swapoff -a

7 修改linux的内核参数

# 修改linux的内核采纳数,添加网桥过滤和地址转发功能
vim /etc/sysctl.d/kubernetes.conf
# 编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

# 重新加载配置
[root@master ~]# sysctl -p
# 加载网桥过滤模块
[root@master ~]# modprobe br_netfilter
# 查看网桥过滤模块是否加载成功
[root@master ~]# lsmod | grep br_netfilter

8 配置ipvs功能

在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs的两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块

# 1.安装ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadm -y
# 2.添加需要加载的模块写入脚本文件
[root@master ~]# cat <<EOF> /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
# 3.为脚本添加执行权限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
# 4.执行脚本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules

如果出现modprobe: FATAL: Module nf_conntrack_ipv4 not found.
更换为下面的代码块

# 5.查看对应的模块是否加载成功
[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4

9 重启检查

getenforce & free -m

出现modprobe: FATAL: Module nf_conntrack_ipv4 not found.的原因:

在网上找到教程安装K8S需要配置ipvs功能,但是在进行配置时会报错modprobe: FATAL: Module nf_conntrack_ipv4 not found. 这是因为使用了高内核,较如博主就是使用了5.2的内核,一般教程都是3.2的内核。在高版本内核已经把nf_conntrack_ipv4替换为nf_conntrack了。所以正确配置应该如下

# 1.安装ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadmin -y
# 2.添加需要加载的模块写入脚本文件
[root@master ~]# cat <<EOF> /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
# 3.为脚本添加执行权限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
# 4.执行脚本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules
# 5.查看对应的模块是否加载成功
[root@master ~]# lsmod | grep -e -ip_vs -e nf_conntrack
nf_conntrack_netlink    49152  0 
nfnetlink              20480  3 nf_conntrack_netlink,ip_set
nf_conntrack          155648  5 xt_conntrack,nf_nat,nf_conntrack_netlink,xt_MASQUERADE,ip_vs
nf_defrag_ipv6         24576  2 nf_conntrack,ip_vs
nf_defrag_ipv4         16384  1 nf_conntrack
libcrc32c              16384  4 nf_conntrack,nf_nat,xfs,ip_vs

步骤 2:下载 KubeKey

请按照以下步骤下载 KubeKey

先执行以下命令以确保您从正确的区域下载 KubeKey。

export KKZONE=cn

执行以下命令下载 KubeKey:

curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.7 sh -

备注

下载 KubeKey 后,如果您将其传输至访问 Googleapis 同样受限的新机器,请您在执行以下步骤之前务必再次执行 export KKZONE=cn 命令。

备注

执行以上命令会下载最新版 KubeKey,您可以修改命令中的版本号下载指定版本。

kk 添加可执行权限:

chmod +x kk

步骤 3:创建集群

对于多节点安装,您需要通过指定配置文件来创建集群。

1. 创建示例配置文件

命令如下:

./kk create config [--with-kubernetes version] [--with-kubesphere version] [(-f | --file) path]

备注

  • 安装 KubeSphere 3.3 的建议 Kubernetes 版本:v1.20.x、v1.21.x、* v1.22.x、* v1.23.x 和 * v1.24.x。带星号的版本可能出现边缘节点部分功能不可用的情况。因此,如需使用边缘节点,推荐安装 v1.21.x。如果不指定 Kubernetes 版本,KubeKey 将默认安装 Kubernetes v1.23.10。有关受支持的 Kubernetes 版本的更多信息,请参见支持矩阵
  • 如果您在此步骤的命令中不添加标志 --with-kubesphere,则不会部署 KubeSphere,只能使用配置文件中的 addons 字段安装,或者在您后续使用 ./kk create cluster 命令时再次添加这个标志。
  • 如果您添加标志 --with-kubesphere 时不指定 KubeSphere 版本,则会安装最新版本的 KubeSphere。

以下是一些示例,供您参考:

  • 您可以使用默认配置创建示例配置文件,也可以为该文件指定其他文件名或其他文件夹。

    ./kk create config [-f ~/myfolder/abc.yaml]
    
  • 您可以指定要安装的 KubeSphere 版本(例如 --with-kubesphere v3.3.2)。

    ./kk create config --with-kubesphere [version]
    

2. 编辑配置文件

如果您不更改名称,那么将创建默认文件 config-sample.yaml。编辑文件,以下是多节点集群(具有一个主节点)配置文件的示例。

备注

若要自定义 Kubernetes 相关参数,请参考 Kubernetes 集群配置

spec:
  hosts:
  - {name: master, address: 192.168.0.2, internalAddress: 192.168.0.2, user: ubuntu, password: Testing123}
  - {name: node1, address: 192.168.0.3, internalAddress: 192.168.0.3, user: ubuntu, password: Testing123}
  - {name: node2, address: 192.168.0.4, internalAddress: 192.168.0.4, user: ubuntu, password: Testing123}
  roleGroups:
    etcd:
    - master
    control-plane:
    - master
    worker:
    - node1
    - node2
  controlPlaneEndpoint:
    domain: lb.kubesphere.local
    address: ""
    port: 6443

主机

请参照上方示例在 hosts 下列出您的所有机器并添加详细信息。

name:实例的主机名。

address:任务机和其他实例通过 SSH 相互连接所使用的 IP 地址。根据您的环境,可以是公有 IP 地址或私有 IP 地址。例如,一些云平台为每个实例提供一个公有 IP 地址,用于通过 SSH 访问。在这种情况下,您可以在该字段填入这个公有 IP 地址。

internalAddress:实例的私有 IP 地址。

此外,您必须提供用于连接至每台实例的登录信息,以下示例供您参考:

  • 使用密码登录示例:

    hosts:
      - {name: master, address: 192.168.0.2, internalAddress: 192.168.0.2, port: 8022, user: ubuntu, password: Testing123}
    

    备注

    在本教程中,端口 22 是 SSH 的默认端口,因此您无需将它添加至该 YAML 文件中。否则,您需要在 IP 地址后添加对应端口号,如上所示。

  • 默认 root 用户示例:

    hosts:
      - {name: master, address: 192.168.0.2, internalAddress: 192.168.0.2, password: Testing123}
    
  • 使用 SSH 密钥的无密码登录示例:

    hosts:
      - {name: master, address: 192.168.0.2, internalAddress: 192.168.0.2, privateKeyPath: "~/.ssh/id_rsa"}
    

提示

  • 在安装 KubeSphere 之前,您可以使用 hosts 下提供的信息(例如 IP 地址和密码)通过 SSH 的方式测试任务机和其他实例之间的网络连接。
  • 在安装前,请确保端口 6443 没有被其他服务占用,否则在安装时会产生冲突(6443 为 API 服务器的默认端口)。

roleGroups

  • etcd:etcd 节点名称
  • control-plane:主节点名称
  • worker:工作节点名称

controlPlaneEndpoint(仅适用于高可用安装)

您需要在 controlPlaneEndpoint 部分为高可用集群提供外部负载均衡器信息。当且仅当您安装多个主节点时,才需要准备和配置外部负载均衡器。请注意,config-sample.yaml 中的地址和端口应缩进两个空格,address 应为您的负载均衡器地址。有关详细信息,请参见高可用配置

addons

您可以在 config-sample.yamladdons 字段下指定存储,从而自定义持久化存储插件,例如 NFS 客户端、Ceph RBD、GlusterFS 等。有关更多信息,请参见持久化存储配置

KubeSphere 会默认安装 OpenEBS,为开发和测试环境配置 LocalPV,方便新用户使用。在本多节点安装示例中,使用了默认存储类型(本地存储卷)。对于生产环境,您可以使用 Ceph/GlusterFS/CSI 或者商业存储产品作为持久化存储解决方案。

提示

  • 您可以编辑配置文件,启用多集群功能。有关更多信息,请参见多集群管理
  • 您也可以选择要安装的组件。有关更多信息,请参见启用可插拔组件。有关完整的 config-sample.yaml 文件的示例,请参见此文件

完成编辑后,请保存文件。

3. 使用配置文件创建集群

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

备注

如果使用其他名称,则需要将上面的 config-sample.yaml 更改为您自己的文件。

整个安装过程可能需要 10 到 20 分钟,具体取决于您的计算机和网络环境。

4. 验证安装

安装完成后,您会看到如下内容:

#####################################################
###              Welcome to KubeSphere!           ###
#####################################################

Console: http://192.168.0.2:30880
Account: admin
Password: P@88w0rd

NOTES:
  1. After you log into the console, please check the
     monitoring status of service components in
     the "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             20xx-xx-xx xx:xx:xx
#####################################################

现在,您可以通过 <NodeIP:30880 使用默认帐户和密码 (admin/P@88w0rd) 访问 KubeSphere 的 Web 控制台。

备注

若要访问控制台,您可能需要根据您的环境配置端口转发规则。还请确保在您的安全组中打开了端口 30880

启用 kubectl 自动补全

KubeKey 不会启用 kubectl 自动补全功能,请参见以下内容并将其打开:

备注

请确保已安装 bash-autocompletion 并可以正常工作。

# Install bash-completion
apt-get install bash-completion

# Source the completion script in your ~/.bashrc file
echo 'source <(kubectl completion bash)' >>~/.bashrc

# Add the completion script to the /etc/bash_completion.d directory
kubectl completion bash >/etc/bash_completion.d/kubectl

详细信息见此

./kk create config [--with-kubernetes version] [--with-kubesphere version] [(-f | --file) path]

步骤 4:部署CubeStudio

1. 下载 cube-studio 源码

可选:NFS安装

#服务器 
yum -y install rpcbind nfs-utils
systemctl start rpcbind
systemctl enable rpcbind
systemctl start nfs-server
systemctl enable nfs-server
echo "/data/k8s *(rw,no_root_squash)" >> /etc/exports
exportfs -rv


#链接机器
yum -y install nfs-utils
mount -t nfs 192.168.31.110:/data/k8s/ /data/k8s
echo "192.168.31.110:/data/k8s /data/k8s nfs noatime,nodiratime 0 0" >>/etc/fstab

[nfs-sc.yaml](C:\Users\tanwe\Documents\WeChat Files\wxid_fwlyq5ni2ftn22\FileStorage\File\2023-06\nfs-sc.yaml)

kubectl apply -f nfs-sc.yaml
vim /etc/kubernetes/manifests/kube-apiserver .yam]
#添加 
--feature-gates=RemoveSelfLink=false

*一定关闭KubeSphere默认存储类

*建议直接KubeSphere安装Istio网关

下载源码

git clone https://github.com/tencentmusic/cube-studio.git

2. 复制config

将k8s集群的 kubeconfig 文件复制到 install/kubernetes/config 文件中,

cp $HOME/.kube/config install/kubernetes/config

然后在worker执行如下命令,其中xx.xx.xx.xx为机器内网的ip,提供了新的start脚本,因为KubeSphere安装了Istio Prometheus等组件,这里选择不安装

这里将有关istio和Prometheus的都注释掉 也可以主动label一下

kubectl label node node112 train=true cpu=true notebook=true service=true org=public istio=true kubeflow=true kubeflow-dashboard=true mysql=true redis=true monitoring=true logging=true --overwrite

注意istio中两个配置gateway和virtualservice 注意增加name 并且添加nodeport之类的映射即可 也可以改kubesphere的nodeport范围将其映射到80端口即可,不采用externalIP指定的方式

建议手动确定下范围。增加修改istiogateway的映射端口

vi /etc/kubernetes/manifests/kube-apiserver.yaml
加入--service-node-port-range=1-40000


line=$(cat /etc/kubernetes/manifests/kube-apiserver.yaml|grep -n '\- kube-apiserver'|awk -F ":" '{print $1}' )
sed -i "$line a\ \ \ \ -\ --service-node-port-range=1-40000" /etc/kubernetes/manifests/kube-apiserver.yaml

*注意Kubeproxy为IPVS模式下,使用原来的start.sh 脚本 ,这里的不要用本机ip,会导致集群崩溃,

修改集群转发模式,KubeSphere默认转发模式是IPVS,如果需要可以将其修改为iptables

记一次K8S网络问题排查过程,kube-proxy的ipvs模式转发失败,修改iptables模式_安逸的程序猿的博客-CSDN博客

k8s IPVS模式下externalIP导致节点故障浅析_external-ip_旺仔_牛奶的博客-CSDN博客

kubectl edit cm kube-proxy -n kube-system

/mode
修改mode从 ipvs 为 ""

已有的集群删除网址,

ip addr del 192.168.31.110/32 dev kube-ipvs0
# 删除虚拟网卡
ip link del kube-ipvs0

分布式文件系统

KubeSphere没有自带分布式文件系统,官网推荐Ceph安装或是的juicefs

执行

cd install/kubernetes/juicefs/ && sh start_juicefs.sh

执行前请阅读

install/kubernetes/juicefs/README.md,

并记得修改install/kubernetes/juicefs/.envJUICEFS_HOST_IP为本节点的ip,保证/data目录有足够的空间

优化系统

  • 更新系统。

    yum update
    
  • 添加所需的内核引导参数。

    sudo /sbin/grubby --update-kernel=ALL --args='cgroup_enable=memory cgroup.memory=nokmem swapaccount=1'
    
  • 启用 overlay2 内核模块。

    echo "overlay2" | sudo tee -a /etc/modules-load.d/overlay.conf
    
  • 刷新动态生成的 grub2 配置。

    sudo grub2-set-default 0
    
  • 调整内核参数并使修改生效。

    cat <<EOF | sudo tee -a /etc/sysctl.conf
    vm.max_map_count = 262144
    fs.may_detach_mounts = 1
    net.ipv4.ip_forward = 1
    vm.swappiness=1
    kernel.pid_max =1000000
    fs.inotify.max_user_instances=524288
    EOF
    sudo sysctl -p
    
  • 调整系统限制。

    vim /etc/security/limits.conf
    *                soft    nofile         1024000
    *                hard    nofile         1024000
    *                soft    memlock        unlimited
    *                hard    memlock        unlimited
    root             soft    nofile         1024000
    root             hard    nofile         1024000
    root             soft    memlock        unlimited
    
  • 删除旧的限制配置。

    sudo rm /etc/security/limits.d/20-nproc.conf
    
  • 重启系统。

    reboot
    

开源体验地址:

http://39.96.177.55:8888/

学习、部署、体验、咨询

Clone this wiki locally