kubeSphere v3.3.0+kubernetes v1.22.10 集群部署
概述
KubeSphere 是 GitHub 上的一个开源项目,是成千上万名社区用户的聚集地。很多用户都在使用 KubeSphere 运行工作负载。对于在 Linux 上的安装,KubeSphere 既可以部署在云端,也可以部署在本地环境中,例如 AWS EC2、Azure VM 和裸机等。
KubeSphere 为用户提供轻量级安装程序 KubeKey(该程序支持安装 Kubernetes、KubeSphere 及相关插件),安装过程简单而友好。KubeKey 不仅能帮助用户在线创建集群,还能作为离线安装解决方案。
-
Control plane node:主节点,通常托管控制平面,控制和管理整个系统。
-
Worker node:工作节点,运行部署在工作节点上的实际应用程序。
KubeKey(由 Go 语言开发)是一种全新的安装工具,替代了以前使用的基于 ansible 的安装程序。KubeKey 为您提供灵活的安装选择,您可以仅安装 Kubernetes,也可以同时安装 Kubernetes 和 KubeSphere。
KubeKey 的几种使用场景:
- 仅安装 Kubernetes;
- 使用一个命令同时安装 Kubernetes 和 KubeSphere;
- 扩缩集群;
- 升级集群;
- 安装 Kubernetes 相关的插件(Chart 或 YAML)。
-
为什么选择 KubeKey
- 以前基于 ansible 的安装程序依赖于许多软件,例如 Python。KubeKey 由 Go 语言开发,可以消除在多种环境中出现的问题,确保成功安装。
- KubeKey 支持多种安装选项,例如 All-in-One、多节点安装以及离线安装。
- KubeKey 使用 Kubeadm 在节点上尽可能多地并行安装 Kubernetes 集群,使安装更简便,提高效率。与旧版的安装程序相比,它极大地节省了安装时间。
- KubeKey 提供内置高可用模式,支持一键安装高可用 Kubernetes 集群。
- KubeKey 旨在将集群作为对象来进行安装,即 CaaO。
资源要求:
最小化安装:仅安装 KubeSphere 所需的最少系统组件。以下是最低资源要求:
- 2 个 CPU
- 4 GB 运行内存
- 40 GB 存储空间
步骤 1:准备 Linux 主机
系统要求
系统 | 最低要求(每个节点) |
---|---|
Ubuntu 16.04,18.04,20.04, 22.04 | CPU:2 核,内存:4 G,硬盘:40 G |
Debian Buster,Stretch | CPU:2 核,内存:4 G,硬盘:40 G |
CentOS 7.x | CPU:2 核,内存:4 G,硬盘:40 G |
Red Hat Enterprise Linux 7 | CPU:2 核,内存:4 G,硬盘:40 G |
SUSE Linux Enterprise Server 15 /openSUSE Leap 15.2 | CPU:2 核,内存:4 G,硬盘:40 G |
备注
-
/var/lib/docker
路径主要用于存储容器数据,在使用和操作过程中数据量会逐渐增加。因此,在生产环境中,建议为/var/lib/docker
单独挂载一个硬盘。 -
CPU 必须为 x86_64,暂时不支持 Arm 架构的 CPU。
节点要求
- 所有节点必须都能通过
SSH
访问。 - 所有节点时间同步。
- 所有节点都应使用
sudo
/curl
/openssl
/tar
。
容器运行时
您的集群必须有一个可用的容器运行时。如果您使用 KubeKey 搭建集群,KubeKey 会默认安装最新版本的 Docker。或者,您也可以在创建集群前手动安装 Docker 或其他容器运行时。
支持的容器运行时 | 版本 |
---|---|
Docker | 19.3.8+ |
containerd | 最新版 |
CRI-O(试验版,未经充分测试) | 最新版 |
iSula(试验版,未经充分测试) | 最新版 |
依赖项要求
KubeKey 可以一同安装 Kubernetes 和 KubeSphere。根据要安装的 Kubernetes 版本,需要安装的依赖项可能会不同。您可以参考下表,查看是否需要提前在节点上安装相关依赖项。
依赖项 | Kubernetes 版本 ≥ 1.18 | Kubernetes 版本 < 1.18 |
---|---|---|
socat |
必须 | 可选,但建议安装 |
conntrack |
必须 | 可选,但建议安装 |
ebtables |
可选,但建议安装 | 可选,但建议安装 |
ipset |
可选,但建议安装 | 可选,但建议安装 |
网络和 DNS 要求
- 请确保
/etc/resolv.conf
中的 DNS 地址可用,否则,可能会导致集群中的 DNS 出现问题。 - 如果您的网络配置使用防火墙规则或安全组,请务必确保基础设施组件可以通过特定端口相互通信。建议您关闭防火墙。有关更多信息,请参见端口要求。
- 支持的 CNI 插件:Calico 和 Flannel。其他插件也适用(例如 Cilium 和 Kube-OVN 等),但请注意它们未经充分测试。
提示
- 建议您使用干净的操作系统(即不安装任何其他软件)。否则,可能会产生冲突。
- 如果您从
dockerhub.io
下载镜像时遇到问题,建议提前准备仓库的镜像地址(即加速器)。请参见为安装配置加速器或为 Docker Daemon 配置仓库镜像。
本示例包括以下三台主机,其中主节点充当任务机。
主机 IP | 主机名 | 角色 |
---|---|---|
192.168.0.2 | control plane | control plane, etcd |
192.168.0.3 | node1 | worker |
192.168.0.4 | node2 | worker |
一.安装系统后操作(所有主机执行)
1.修改时间
1 | yang@master:~$ tzselect |
在这里我们选择亚洲 Asia,确认之后选择中国(China),最后选择北京(Beijing),选择1
2.复制文件到/etc目录下
root@ubuntu:/# sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3.查看时间,是否正确,是否为+0800时区
date -R
Wed, 26 Oct 2022 10:29:22 +0800
二.安装容器引擎及系统设置(所有主机执行)
1.安装docker
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Install Docker Engine on Ubuntu sudo apt- get remove docker docker-engine docker.io containerd runc sudo apt- get update sudo apt- get install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release curl -fsSL https: //download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed- by =/usr/share/keyrings/docker-archive-keyring.gpg] https: //download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/ null sudo apt- get update sudo apt- get install docker-ce docker-ce-cli containerd.io |
2.ubuntu设置普通用户也能执行docker命令
通过将用户添加到docker用户组可以将sudo去掉,命令如下:
1 2 3 4 5 | sudo groupadd docker #添加docker用户组 sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中 newgrp docker #更新用户组 |
3.设置开机挂载nas(根据自己需求,看是否需要挂载)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | sudo touch /etc/rc.local sudo nano rc.local #!/bin/bash mount -t cifs -o username=admin,password=HNT8Oqub,iocharset=utf8 //192.168.1.2/server1 /nas/ exit 0 sudo chmod +x /etc/rc.local sudo reboot # 进入挂载的/nas 目录下查看,是否挂载成功 sudo apt update sudo apt upgrade -y sudo apt install nfs-common sudo mkdir /nas sudo systemctl enable rc-local.service ## 设置开机启动rc.local服务 sudo systemctl start rc-local.service sudo systemctl status rc-local.service |
4.关闭Swapoff分区
4.1 临时关闭
1 | swapoff -a |
4.2 永久关闭
1 2 3 4 5 | yang@master:~$ sudo vim /etc/fstab # /etc/fstab: static file system information. # #/swap.img none swap sw 0 0 |
4.3 查看
1 2 3 4 | yang@master:~$ free -h total used free shared buff/cache available Mem: 3.8Gi 2.1Gi 163Mi 4.0Mi 1.6Gi 1.5Gi Swap: 0B 0B 0B |
说明:---Swap一行全部为0则为关闭状态
5.更换镜像源
5.1 首先备份系统自带的源,以防修改错误!
命令:
1 | sudo cp /etc/apt/sources.list /etc/apt/sources.list.back |
5.2 修改系统镜像源
文件目录:/etc/apt/sources.list
修改sources.list文件,将http://.*archive.ubuntu.com和http://.*security.ubuntu.com或者阿里云源(http://mirreors.aliyun.com)替换成http://repo.huaweicloud.com,可以参考如下命令:
1 2 3 | sudo sed -i "s@http://mirrors.aliyun.com/@http://repo.huaweicloud.com/@g" /etc/apt/sources.list sudo sed -i "s@http://.*archive.ubuntu.com/@http://repo.huaweicloud.com/@g" /etc/apt/sources.list sudo sed -i "s@http://.*security.ubuntu.com/@http://repo.huaweicloud.com/@g" /etc/apt/sources.list |
5.3 更新镜像源列表索引
1 | sudo apt- get update |
5.4 更新更换源后的软件版本
1 | sudo apt- get upgrade |
6.修改主机名
1 2 | yang@master:~$ hostnamectl set -hostname master yang@node:~$ hostnamectl set -hostname node |
步骤 2:下载 KubeKey (master执行)
1.先执行以下命令以确保您从正确的区域下载 KubeKey。
1 | export KKZONE=cn |
2.执行以下命令下载 KubeKey:
1 | curl -sfL https: //get-kk.kubesphere.io | VERSION=v2.2.2 sh - |
备注:1.下载 KubeKey 后,如果您将其传输至访问 Googleapis 同样受限的新机器,请您在执行以下步骤之前 务必再次执行 export KKZONE=cn
命令。
kk
添加可执行权限:1 | chmod +x kk |
步骤 3:开始安装(master执行)
支持矩阵
1.若需使用 KubeKey 来安装 Kubernetes 和 KubeSphere 3.3.0,请参见下表以查看所有受支持的 Kubernetes 版本。
KubeSphere 版本 | 受支持的 Kubernetes 版本 |
---|---|
v3.3.0 | v1.19.x、v1.20.x、v1.21.x、v1.22.x、v1.23.x(实验性支持) |
2.在本快速入门教程中,您只需执行一个命令即可进行安装,其模板如下所示:
1 | sudo ./kk create cluster [--with-kubernetes version] [--with-kubesphere version] |
3.若要同时安装 Kubernetes 和 KubeSphere,可参考以下示例命令:
1 | sudo ./kk create cluster --with-kubernetes v1.22.10 --with-kubesphere v3.3.0 |
备注
-
安装 KubeSphere 3.3.0 的建议 Kubernetes 版本:1.19.x、1.20.x、1.21.x、v1.22.x 和 v1.23.x(实验性支持)。如果不指定 Kubernetes 版本,KubeKey 将默认安装 Kubernetes v1.23.7。有关受支持的 Kubernetes 版本的更多信息,请参见支持矩阵。
4.执行该命令后,KubeKey 将检查您的安装环境,结果显示在一张表格中。有关详细信息,请参见节点要求和依赖项要求。输入 yes
继续安装流程。
5.如果未安装socat和conntrack,执行以下命令:
1 | sudo apt install -y socat conntrack |
说明:
socat:特点就是在两个数据流之间建立通道
conntrack:跟踪并且记录连接状态
步骤 4:验证安装结果
1.输入以下命令以检查安装结果。
1 | 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 |
2.输出信息会显示 Web 控制台的 IP 地址和端口号,默认的 NodePort 是 30880
。现在,您可以使用默认的帐户和密码 (admin/P@88w0rd
) 通过 <NodeIP>:30880
访问控制台。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ##################################################### ### 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 "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 ##################################################### |
3.登录至控制台后,您可以在系统组件中查看各个组件的状态。如果要使用相关服务,您可能需要等待部分组件启动并运行。您也可以使用 kubectl get pod --all-namespaces
来检查 KubeSphere 相关组件的运行状况。
4.执行kubenetes集群安装后必要程序
1 2 3 | mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config |
说明:
1 2 3 4 | 负责报错,各个服务器之间无法通信,导致连不上 error: Pipeline[AddNodesPipeline] execute failed: Module[KubernetesStatusModule] exec failed: failed: [master] [GetClusterStatus] exec failed after 3 retires: get kubernetes cluster info failed: Failed to exec command: sudo -E /bin/bash -c "/usr/local/bin/kubectl --no-headers=true get nodes -o custom-columns=:metadata.name,:status.nodeInfo.kubeletVersion,:status.addresses" The connection to the server localhost:8080 was refused - did you specify the right host or port?: Process exited with status 1 |
5. 使普通用户可以使用kubectl命令
1 2 3 | sudo mkdir -p /home/yang/.kube/conf/ sudo cp /etc/kubernetes/admin.conf /home/yang/.kube/conf/ sudo chown yang.yang/home/yang/.kube/conf/admin.conf |
5.1 添加环境变量
1 2 | sudo cat /home/yang/.bashrc export KUBECONFIG=/home/yang/.kube/conf/admin.conf |
1 | sudo source /home/yang/.bashrc |
5.3修改sudoers 文件中的权限
1 | sudo nano /etc/sudoers |
步骤5:增加工作节点
KubeSphere 使用一段时间之后,由于工作负载不断增加,您可能需要水平扩展集群。自 KubeSphere v3.0.0 起,您可以使用全新的安装程序 KubeKey 将新节点添加到集群。从根本上说,该操作是基于 Kubelet 的注册机制。换言之,新节点将自动加入现有的 Kubernetes 集群。KubeSphere 支持混合环境,这意味着新添加的主机操作系统可以是 CentOS 或者 Ubuntu。
1.在master上使用 KubeKey 检索集群信息。以下命令会创建配置文件 (sample.yaml
)。
1 | ./kk create config -- from -cluster |
备注:
2.在配置文件中,将新节点的信息放在 hosts
和 roleGroups
之下。该示例添加了两个新节点(即 node1
和 node2
)。这里的 master1
是现有节点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ··· spec: hosts: - {name: master1, address: 192.168.0.3, internalAddress: 192.168.0.3, user: root, password: Qcloud@123} - {name: node1, address: 192.168.0.4, internalAddress: 192.168.0.4, user: root, password: Qcloud@123} - {name: node2, address: 192.168.0.5, internalAddress: 192.168.0.5, user: root, password: Qcloud@123} roleGroups: etcd: - master1 control-plane: - master1 worker: - node1 - node2 ··· |
备注:
-
添加新节点时,请勿修改现有节点的主机名。
-
用自己的主机名替换示例中的主机名。
3.node 安装依赖项(node 主机上执行)
1 | sudo apt install socat conntrack -y |
4.master 执行以下命令
1 | ./kk add nodes -f sample.yaml |
1 | systemctl daemon-reload && systemctl restart kubelet && systemctl restart docker |
6.安装完成后,您将能够在 KubeSphere 的控制台上查看新节点及其信息。在集群管理页面,选择左侧菜单节点下的集群节点,或者执行命令 kubectl get node
以检查更改。
1 2 3 4 | yang@master:~$ kubectl get node NAME STATUS ROLES AGE VERSION master Ready control-plane,master,worker 17h v1.22.10 node Ready worker 16h v1.22.10 |
5.KubeSphere控制面板查看
以下是使用的常用命令:
1 | sudo kubectl taint nodes master node-role.kubernetes.io/master= true :NoSchedule |
1 | kubectl taint nodes master node-role.kubernetes.io/master- |
1 | kubectl taint nodes master node-role.kubernetes.io/master=:NoSchedule |
4.查看master表示不运行pod
1 2 | yang@master:~$ kubectl describe node master |grep Taints Taints: node-role.kubernetes.io/master= true :NoSchedule |
5.查看master表示运行pod
1 2 | yang@master:~$ kubectl describe node master |grep Taints Taints: <none> |
1 | kubectl describe node node1 |
1 2 3 4 5 6 7 8 9 10 | yang@master:~$ kubectl get node NAME STATUS ROLES AGE VERSION master Ready control-plane,master,worker 2d22h v1.22.10 node Ready worker 2d21h v1.22.10 yang@master:~$ sudo kubectl label node master node-role.kubernetes.io/worker- node/master labeled yang@master:~$ kubectl get node NAME STATUS ROLES AGE VERSION master Ready control-plane,master 2d22h v1.22.10 node Ready worker 2d21h v1.22.10 |
1 | sudo kubectl -n kubesphere-system get svc |
1 | sudo kubectl -n kubesphere-system patch service ks-apiserver -p '{"spec":{"type":"NodePort"}}' |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)