如何在 Ubuntu 22.04 上安装 KubeSphere
Kubesphere 是经过 CNCF 验证的免费开源 Kubernetes 平台和云原生应用程序管理。它是一个企业级 Kubernetes 容器平台,功能丰富,专为混合多云部署而定制。默认情况下,Kubesphere 包括全栈自动化 IT 操作,并通过 DevOps 工作流程进行简化。它可以部署到现有的 Kubernetes 集群或 Linux 发行版,或者您也可以通过 KubeKey 设置包含 Kubesphere 的 Kubernetes,KubeKey 是一个用于 Linux 的命令行工具,用于自动部署、更新和扩展 Kubernetes 集群。
Kubesphere 提供了直观的图形 Web UI 用于管理 Kubernetes 集群。它还配备了可插入的 CI/CD 工具,例如 jenkins,允许您自动设置 CI/CD 管道。它还提供了 Source-to-Image (S2I),用于从源代码自动构建可重现的容器映像,以及 Binary-to-Image (B2I),用于从二进制文件(Jar、War、二进制文件)构建可重现的容器映像。
本文将指导在 Ubuntu 22.04 服务器上部署 Kubernetes 和 Kubesphere。您将使用多个 Ubuntu 服务器进行此部署,并且将使用 Kubesphere 提供的 KubeKey 应用程序来自动部署 Kubernetes 集群和 Kubesphere。
先决条件
要遵循并完成本教程,您将需要满足以下要求:
- 三台运行 ubuntu 22.04 的 Linux 服务器 - 您将使用一台服务器作为 Kubernetes 控制平面,两台服务器作为工作节点。
- 具有 sudo/root 管理员权限的非 root 用户。
设置主机和用户
在安装 Kubernetes 和 Kubesphere 之前,您必须设置“/etc/hosts”文件并在所有服务器上使用 sudo 无密码创建一个新用户。因此,请务必在所有 Ubuntu 服务器上运行以下命令。
现在使用以下 nano 编辑器命令打开文件'/etc/hosts'。
sudo nano /etc/hosts
将服务器 IP 地址和主机名的详细信息添加到文件中。
192.168.5.35 master master
192.168.5.121 node1 node1
192.168.5.122 node2 node2
保存文件,完成后关闭编辑器。
接下来,输入以下命令创建一个名为“ubuntu”的新用户,并为新用户“ubuntu”设置密码。出现提示时,输入密码并重复。
sudo useradd -m -s /bin/bash ubuntu
sudo passwd ubuntu
最后,运行以下命令以允许“ubuntu”用户无需密码即可执行“sudo”。这里的“ubuntu”用户将用于安装软件包依赖项,因此您必须确保该用户无需密码即可成为root。
cat <<EOF | sudo tee /etc/sudoers.d/ubuntu
Defaults:ubuntu !fqdn
Defaults:ubuntu !requiretty
ubuntu ALL=(ALL) NOPASSWD: ALL
EOF
配置'/etc/hosts'文件并创建“ubuntu”用户后,接下来您将为用户“”设置无密码 SSH 身份验证ubuntu'。
设置基于 SSH 密钥的身份验证
在本部分中,您将为用户“ubuntu”设置无密码 SSH 身份验证。因此,安装 Kubernetes 和 Kubesphre 的场景来自“master”服务器。并且将自动完成对“node1”和“node2”的安装。
在“主”服务器上,输入以下命令以用户“ubuntu”身份登录。然后使用“ssh-keygen”命令生成新的 SSH 密钥对,如下所示。完成后,您的 SSH 公钥和私钥将存储在“~/.ssh”目录中。
su - ubuntu
ssh-keygen -t ed25519
接下来,将以下命令输入到从“主”服务器到将用于 Kubernetes 和 Kubesphre 安装的所有节点的 SSH 公钥。
ssh-copy-id ubuntu@master
ssh-copy-id ubuntu@node1
ssh-copy-id ubuntu@node2
输入“yes”接受服务器的 SSH 指纹,然后在出现提示时输入用户“ubuntu”的密码。添加 SSH 密钥后,您应该会得到一个输出,例如“添加的密钥数量:1”。
以下是将 SSH 公钥添加到“master”服务器的本地主机时的输出。
以下是将 SSH 公钥添加到“node1”服务器时的输出。
以下是将 SSH 公钥添加到“node2”服务器时的输出。
添加并上传 SSH 公钥后,您现在可以通过“ubuntu”用户连接到所有服务器,无需密码身份验证。
在下一部分中,您将验证并确保可以通过无密码“ubuntu”用户连接到所有节点/服务器,然后安装一些软件包依赖项。
安装依赖项
因此,您已将 SSH 公钥从“master”服务器上传到“node1”和“node2”服务器。现在,您将确保可以通过“ubuntu”用户使用 SSH 无密码身份验证连接到两台服务器,并安装 Kubernetes 和 Kubesphere 的基本依赖项。
在“master”服务器上,输入以下命令来更新和刷新您的 Ubuntu 软件包索引,并通过下面的“apt install”命令安装一些软件包依赖项。
sudo apt update
sudo apt install curl socat conntrack ebtables ipset
ssh-keyscan -H master >> ~/.ssh/known_hosts
出现提示时,输入 y 进行确认,然后按 ENTER 继续。
接下来,通过下面的“ssh”命令连接到“node1”服务器。执行命令后,您应该无需密码验证即可登录“node1”。
ssh ubuntu@node1
现在输入以下 apt 命令来更新和刷新您的 Ubuntu 软件包索引。然后,安装一些基本的包依赖项。出现提示时输入 y,然后按 ENTER 继续。
sudo apt update
sudo apt install curl socat conntrack ebtables ipset
最后,通过下面的“ssh”命令连接到“node2”服务器。
ssh ubuntu@node2
连接后,输入以下命令来更新存储库包索引。然后,通过“apt install”命令安装一些软件包依赖项。
sudo apt update
sudo apt install curl socat conntrack ebtables ipset
出现提示时输入 y,然后按 ENTER 继续。
此时,您已经为 Kubernetes 和 Kubesphre 安装配置了服务器。在下一节中,您将下载 KubeKey 的二进制文件,该文件将用于初始化 Kubernetes 集群并安装 Kubesphere。
在主节点上下载 KubeKey
在本部分中,您将把 KubeKey 二进制文件下载到“主”服务器。 KubeKey 是一个二进制文件,允许您部署 Kubernetes 集群和/或使用 KubeSphere 管理仪表板。它还支持云原生附加组件、多节点和HA(高可用性)。
输入以下命令将 KubeKey 的二进制文件下载到当前工作目录。该过程完成后,您应该在目录中看到文件“kk”。
curl -sfL https://get-kk.kubesphere.io | VERSION=v3.0.2 sh -
现在运行以下命令以使文件“kk”可执行。
chmod +x kk
然后,执行二进制文件“kk”来验证 KubeKey 上的当前版本和可用参数列表。
./kk version
./kk help
下面是一个类似的输出,它将打印在您的终端屏幕上。
下载 KubeKey 后,接下来将通过 KubeKey 开始配置 Kubernetes 和 Kubesphere 部署。
创建 Kubernetes 和 Kubesphere 部署配置
KubeKey 可用于部署仅 Kubernetes 的部署或与 KubeSphere 一起部署。它还支持单 Kubernetes 部署和多节点部署。
对于多节点 Kubernetes 和 Kubesphre 部署,您需要生成一个 YAML 脚本来定义服务器的配置。
执行以下“kk”命令生成新的 YAML 配置。在此示例中,您将生成一个新的 YAML 脚本“deployment-kubesphre.yml”,并将 Kubernetes 版本指定为 v1.24.2 和 Kubesphere v3.3.1。
./kk create config -f deployment-kubesphre.yml --with-kubernetes v1.24.2 --with-kubesphere v3.3.1
您应该看到诸如“成功生成 KubeKey 配置文件”之类的输出。
现在使用以下 nano 编辑器命令打开 YAML 文件“deployment-kubesphre.yml”。
nano deployment-kubesphre.yml
更改参数“metadata: testdeployment”中的集群名称,并更改详细主机的 IP 地址、用户和用于登录目标服务器的私钥。最后,在“roleGroup”上指定将用作控制平面和工作节点的主机。
apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
name: testdeployment
spec:
hosts:
- {name: master, address: 192.168.5.35, internalAddress: 192.168.5.35, user: ubuntu, privateKeyPath: "~/.ssh/id_ed25519"}
- {name: node1, address: 192.168.5.121, internalAddress: 192.168.5.121, user: ubuntu, privateKeyPath: "~/.ssh/id_ed25519"}
- {name: node2, address: 192.168.5.122, internalAddress: 192.168.5.122, user: ubuntu, privateKeyPath: "~/.ssh/id_ed25519"}
roleGroups:
etcd:
- master
control-plane:
- master
worker:
- node1
- node2
完成后保存文件并退出编辑器。
对于此示例,您将使用三个不同的 Ubuntu 服务器创建一个名为“testdeployment”的新 Kubernetes 集群。
- master 作为 etcd 和控制平面。
- node1 和 node2 将用作工作节点。
要将所有要求安装到目标服务器,您将使用 SSH 并使用私钥“~/.ssh/id_ed25519”作为用户“ubuntu”登录。该用户在 visudo 中配置为无密码。
生成并配置 YAML 文件并构建 Kubernetes 和 Kubesphre 部署后,请执行以下步骤以开始部署。
部署 Kubernetes 和 Kubesphere
在本部分中,您将通过 KubeKey 和 YAML 脚本“deployment-kubesphre.yml”部署具有多节点架构的 Kubernetes 和 Kubesphre。
执行下面的 Kubekey“kk”二进制文件,以使用 YAML 文件“deployment-kubesphre.yml”启动 Kubernetes 和 Kubesphere 部署。
./kk create cluster -f deployment-kubesphre.yml
首先,KubeKey 将检查 Kubernetes 安装的详细要求。成功后,系统将提示您确认安装。输入 yes 并按 ENTER 继续。
完成部署大约需要 5-10 分钟。完成后,您应该会在终端上看到与此类似的输出。此外,您还将获得可用于登录 Kubesphere 的默认管理员用户和密码。
现在打开您的网络浏览器并访问“主”服务器 IP 地址,然后访问端口“30880”(即:http://192.168.5.35:30880/)。您应该会看到 Kubepshre 登录页面。
键入用户“admin”和默认密码“P@88w0rd”,然后单击“登录”。
登录后,系统应该要求您更改 Kubepshre 用户“admin”的默认密码。输入您的新密码并单击“提交”。
完成后,您应该会看到 Kubesphere 管理仪表板。在仪表板页面上,您应该获得 Kubesphere v3.3.1 的当前版本,可用的 Kubernetes 集群为 1。
接下来,单击左上角的平台菜单,然后选择集群管理。
下面是您安装了多个 Ubuntu 服务器(服务器“master”、node1 和 node2)的 Kubernetes 集群的详细信息。
现在单击“节点”菜单即可获取有关 Kubernetes 集群上可用节点的详细信息。下面你可以看到 Kubernetes 集群上有三个不同的节点。 “主”服务器用作控制平面和工作节点。
现在,单击“系统组件”以获取 Kubernetes 和 Kubesphere 部署中已安装组件的详细信息。您可以看到不同类别的组件:Kubesphere、Kubernetes 和监控。
接下来,返回“主”服务器的终端会话并运行以下“kubectl”命令以获取 Kubernetes 集群上的可用节点列表。
kubectl get nodes
您应该收到与此类似的输出 - Kubernetes 集群上有三个可用节点,用作控制平面的主节点以及用作工作节点的节点 1 和节点 2。
输入以下命令以获取有关 Kubernetes 集群上每个节点的详细信息。
kubectl describe node
下面您可以看到“master”服务器上 Kubernetes 控制平面的详细信息。
以下是 node1 服务器上工作节点的详细信息。
以下是 node2 服务器上工作节点的详细信息。
最后,输入以下命令以获取 Kubernetes 集群上运行的 pod 列表。
kubectl get pods --all-namespaces
在以下输出中,您可以看到多个命名空间“kube-system”、“kubesphere-system”、“kubesphere-control-system”和“kubesphere-monitoring-system” >' 在您的 Kubernetes 集群上可用且所有 Pod 都在运行。
至此,您已经部署了具有多个 Ubuntu 服务器节点的 Kubernetes 集群和 Kubesphere。您还访问了 Kubesphere 管理仪表板并更改了默认管理员密码。
考虑到这一点,您现在可以将应用程序部署到 Kubernetes 和 Kubesphere。在下一步中,您将把简单的 Nginx Web 服务器部署到 Kubernetes,以确保 Kubernetes 和 Kubesphere 安装成功。
将 Pod 部署到 Kubernetes 和 Kubesphere
在此示例中,您将把 Nginx Pod 部署到 Kubernetes 集群和 Kubesphere。
运行以下命令为 Nginx Web 服务器创建新部署。在此示例中,我们将基于具有两个副本的映像“nginx:alpine”创建新的 Nginx Pod。
kubectl create deployment nginx --image=nginx:alpine --replicas=2
现在创建一个新的服务类型“NodePort”,它将使用以下 kubectl 命令公开 Nginx 部署。此命令将创建一个名为“nginx”、类型为“NodePort”的新 Kubernetes 服务,并为 Pod 公开端口“80”。
kubectl create service nodeport nginx --tcp=80:80
接下来,运行以下 kubectl 命令来检查 Kubernetes 集群上正在运行的 pod 列表。您应该看到两个 Nginx Pod 正在运行。
kubectl get pods
现在使用以下命令检查 Kubernetes 上的可用服务列表。您应该看到“nginx”服务类型 NodePort 在 Kubernetes 主机上公开了端口“80”和端口“32241”。服务 NodePort 将始终公开 Kubernetes 主机(工作节点)上 xxx-xxxx 范围内的端口。
kubectl get svc
运行下面的curl 命令来访问您的Nginx 部署。
curl 10.233.14.102
curl node1:32241
curl node2:32241
下面是在“master”服务器上公开的 Nginx pod index.html 页面的输出。
下面是“node1”的index.html源代码的输出。
下面是来自“node2”的index.html 代码。
现在回到 Kubesphere 管理仪表板。单击应用程序工作负载,然后单击工作负载。您将看到名为“nginx”的部署可用于运行两个 Pod。
单击“nginx”部署以获取有关部署的详细信息。您应该看到“nginx”部署带有两个副本,并且这两个 pod 的副本正在运行。
接下来,单击“服务”菜单以获取 Kubernetes 集群上可用的服务列表。您应该会在集群上看到名为“nginx”和“Kubernetes”的服务。
单击服务“nginx”以获取有关该服务的详细信息。下面是一个类似的页面,将显示在您的 Kubesphere 仪表板上。
至此,您已经完成了 Nginx Pod 到 Kubernetes 集群的部署,并从 kubesphere 管理仪表板验证了部署的详细信息。
结论
在本教程中,您现已在多个 Ubuntu 22.04 服务器上部署了 Kubernetes 集群和 Kubesphre。您已经使用 Kubesphere 开发的名为“KubeKey”的自动化工具部署了 Kubernetes。您还了解了用于 Kubernetes 部署的 Ubuntu 服务器的基本配置。
除此之外,您还成功安装了 Kubesphere 并将其配置为 Kubernetes Web 管理仪表板。您已经了解了 Kubesphere 的基本用法,用于查看 Kubernetes 集群以及部署、Pod 和服务。
要了解有关 Kubesphere 的更多信息,请访问 Kubesphere 官方文档。至于 Kubernetes,请访问 Kubernetes 官方文档。