本页内容

  • 准备工作
  • 配置主机与用户
  • 配置基于 SSH 密钥的认证
  • 安装依赖项
  • 在主节点下载 KubeKey
  • 创建 Kubernetes 与 KubeSphere 部署配置
  • 部署 Kubernetes 与 KubeSphere
  • 向 Kubernetes 与 KubeSphere 部署 Pod
  • 总结

KubeSphere 是一个经过 CNCF 认证的免费开源 Kubernetes 平台与云原生应用管理平台。它是一个企业级的 Kubernetes 容器平台,功能丰富,专为混合多云部署量身定制。默认情况下,KubeSphere 包含全栈自动化 IT 运维,并与 DevOps 工作流无缝集成。它可以部署到现有的 Kubernetes 集群或 Linux 发行版上;你也可以通过 KubeKey(一个用于在 Linux 上自动部署、更新和扩缩 Kubernetes 集群的命令行工具)来搭建包含 KubeSphere 的 Kubernetes 环境。

KubeSphere 提供了一个直观的图形化 Web UI 用于管理 Kubernetes 集群。它还自带可插拔的 CI/CD 工具(如 Jenkins),让你可以自动搭建 CI/CD 流水线。此外,它还提供 Source-to-Image(S2I),用于从源代码自动构建可复现的容器镜像;以及 Binary-to-Image(B2I),用于从二进制文件(Jar、War、Binary 文件)构建可复现的容器镜像。

本文将指导你在 Ubuntu 22.04 服务器上部署 Kubernetes 与 KubeSphere。本次部署你将使用多台 Ubuntu 服务器,并采用 KubeSphere 提供的 KubeKey 工具来自动部署 Kubernetes 集群与 KubeSphere。

准备工作

要跟随并完成本教程,你需要满足以下要求:

  • 三台运行 Ubuntu 22.04 的 Linux 服务器——其中一台作为 Kubernetes 控制平面(control-plane),另外两台作为工作节点(worker nodes)。
  • 一个具有 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' 用户之后,接下来你需要为 'ubuntu' 用户配置免密码 SSH 认证。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

配置基于 SSH 密钥的认证

在本节中,你将为用户 'ubuntu' 配置免密码 SSH 认证。因此,安装 Kubernetes 和 KubeSphere 的场景是从 'master' 服务器发起的,而对 'node1' 和 'node2' 的安装将自动完成。

在 'master' 服务器上,执行以下命令以 'ubuntu' 用户身份登录。然后使用下面的 'ssh-keygen' 命令生成一个新的 SSH 密钥对。完成后,你的 SSH 公钥和私钥将保存在 '~/.ssh' 目录中。

su - ubuntu
ssh-keygen -t ed25519

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

接下来,执行以下命令,将 'master' 服务器上的 SSH 公钥分发到所有将用于安装 Kubernetes 和 KubeSphere 的节点。

ssh-copy-id ubuntu@master
ssh-copy-id ubuntu@node1
ssh-copy-id ubuntu@node2

输入 'yes' 以接受服务器的 SSH 指纹,然后在提示时输入 'ubuntu' 用户的密码。SSH 密钥添加成功后,你应该会看到类似 'Number of key(s) added: 1' 的输出。

下面是将 SSH 公钥添加到 'master' 服务器本机(localhost)时的输出。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

下面是将 SSH 公钥添加到 'node1' 服务器时的输出。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

下面是将 SSH 公钥添加到 'node2' 服务器时的输出。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

SSH 公钥添加并上传之后,你现在可以通过 'ubuntu' 用户免密码连接所有服务器。

在下一节中,你将验证并确保可以通过免密码的 'ubuntu' 用户连接到所有节点/服务器,然后安装一些软件包依赖。

安装依赖项

至此,你已经将 'master' 服务器上的 SSH 公钥上传到了 '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 继续。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

接下来,通过下面的 'ssh' 命令连接到 'node1' 服务器。命令执行后,你应当可以免密码登录到 'node1'。

ssh ubuntu@node1

现在执行以下 apt 命令更新并刷新你的 Ubuntu 软件包索引,然后安装一些基础软件包依赖。当提示时输入 y 并按下 ENTER 继续。

sudo apt update
sudo apt install curl socat conntrack ebtables ipset

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

最后,通过下面的 'ssh' 命令连接到 'node2' 服务器。

ssh ubuntu@node2

连接成功后,执行以下命令更新软件仓库的包索引,然后通过 'apt install' 命令安装一些软件包依赖。

sudo apt update
sudo apt install curl socat conntrack ebtables ipset

当提示时输入 y 并按下 ENTER 继续。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

至此,你已为安装 Kubernetes 和 KubeSphere 配置好了服务器。在下一节中,你将下载 KubeKey 的二进制文件,它将用于初始化 Kubernetes 集群并安装 KubeSphere。

在主节点下载 KubeKey

在本节中,你将把 KubeKey 二进制文件下载到 'master' 服务器。KubeKey 是一个单一的二进制文件,可让你部署 Kubernetes 集群,以及(或)包含 KubeSphere 管理面板。它还支持云原生插件、多节点以及 HA(高可用)。

执行以下命令将 KubeKey 的二进制文件下载到当前工作目录。过程完成后,你应当会在目录中看到 'kk' 文件。

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

现在执行以下命令,使 'kk' 文件可执行。

chmod +x kk

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

然后,执行 'kk' 二进制文件以查看当前版本以及 KubeKey 可用的参数列表。

./kk version
./kk help

下面是将在你的终端屏幕上打印输出的类似内容。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

下载 KubeKey 之后,接下来你将通过 KubeKey 开始配置 Kubernetes 与 KubeSphere 的部署。

创建 Kubernetes 与 KubeSphere 部署配置

KubeKey 可用于仅部署 Kubernetes,或与 KubeSphere 一同部署。它还支持单节点 Kubernetes 部署和多节点部署。

对于多节点的 Kubernetes 和 KubeSphere 部署,你需要生成一个用于定义服务器配置的 YAML 脚本。

执行以下 'kk' 命令来生成一个新的 YAML 配置。在本示例中,你将生成一个名为 'deployment-kubesphre.yml' 的新 YAML 脚本,并指定 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

你应当会看到类似 'Generate KubeKey config file successfully' 的输出。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

现在使用下面的 nano 编辑器命令打开 YAML 文件 'deployment-kubesphre.yml'。

nano deployment-kubesphre.yml

修改参数 'metadata: testdeployment' 中的集群名称,并修改用于登录目标服务器的主机 IP 地址、用户和私钥。最后,在 'roleGroup' 中指定哪些主机用作控制平面(control plane)和工作节点(worker nodes)。

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 22.04 上安装并配置 KubeSphere 容器平台

在本示例中,你将使用三台不同的 Ubuntu 服务器创建一个名为 'testdeployment' 的新 Kubernetes 集群。

  • master 作为 etcd 与控制平面(control plane)。
  • node1 和 node2 将用作工作节点(worker nodes)。

要向目标服务器安装所有依赖,你将使用 SSH 并以 'ubuntu' 用户身份、通过私钥 '~/.ssh/id_ed25519' 登录。该用户已在 visudo 中配置为免密码。

在生成并配置好 YAML 文件、构建好 Kubernetes 和 KubeSphere 部署之后,进入后续步骤以开始部署。

部署 Kubernetes 与 KubeSphere

在本节中,你将通过 KubeKey 以及 YAML 脚本 'deployment-kubesphre.yml',以多节点架构部署 Kubernetes 和 KubeSphere。

执行下面的 KubeKey 'kk' 二进制文件,使用 YAML 文件 'deployment-kubesphre.yml' 开始 Kubernetes 与 KubeSphere 的部署。

./kk create cluster -f deployment-kubesphre.yml

首先,KubeKey 会检查 Kubernetes 安装所需的各项条件。检查通过后,会提示你确认安装。输入 yes 并按下 ENTER 继续。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

部署完成大约需要 5–10 分钟。完成后,你应当会在终端上看到类似的输出。此外,你还会获得可用于登录 KubeSphere 的默认管理员用户名和密码。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

现在打开你的网页浏览器,访问 'master' 服务器的 IP 地址加端口 '30880'(例如:http://192.168.5.35:30880/)。你应当会看到 KubeSphere 登录页面。

输入用户名 'admin' 和默认密码 'P@88w0rd',然后点击 Log In(登录)。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

登录后,系统会要求你修改 KubeSphere 用户 'admin' 的默认密码。输入你的新密码并点击 Submit(提交)。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

完成后,你应当会看到 KubeSphere 管理面板。在面板页面上,你可以看到当前 KubeSphere 版本为 v3.3.1,可用的 Kubernetes 集群数量为 1。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

接下来,点击左上角的 Platform(平台)菜单,然后选择 Cluster Management(集群管理)。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

下面是你使用多台 Ubuntu 服务器('master'、node1 和 node2 服务器)安装好的 Kubernetes 集群详情。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

现在点击 Nodes(节点)菜单,查看 Kubernetes 集群上可用节点的详细信息。如下所示,Kubernetes 集群上共有三个不同的节点。'master' 服务器同时用作控制平面(control plane)和工作节点(worker node)。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

现在点击 System Components(系统组件),查看你的 Kubernetes 与 KubeSphere 部署中所安装组件的详情。你可以看到三类不同的组件:KubeSphere、Kubernetes 和 Monitoring(监控)。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

接下来,回到 'master' 服务器的终端会话,执行下面的 'kubectl' 命令,以获取 Kubernetes 集群上可用节点的列表。

kubectl get nodes

你应当会收到类似如下的输出——Kubernetes 集群上共有三个可用节点:用作控制平面的 master 节点,以及用作工作节点的 node1 和 node2。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

执行以下命令,获取 Kubernetes 集群上每个节点的详细信息。

kubectl describe node

下面你可以看到 'master' 服务器上 Kubernetes 控制平面的详情。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

下面是在 node1 服务器上工作节点的详情。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

下面是在 node2 服务器上工作节点的详情。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

最后,执行以下命令,获取你的 Kubernetes 集群上正在运行的 Pod 列表。

kubectl get pods --all-namespaces

在下面的输出中,你可以看到多个命名空间——'kube-system'、'kubesphere-system'、'kubesphere-control-system' 和 'kubesphere-monitoring-system'——在你的 Kubernetes 集群上都已存在,且所有 Pod 都在运行中。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

至此,你已经使用多台 Ubuntu 服务器节点部署好了 Kubernetes 集群与 KubeSphere,并且已经访问了 KubeSphere 管理面板并修改了默认的管理员密码。

完成上述步骤后,你现在可以将自己的应用部署到 Kubernetes 与 KubeSphere 上。在下一步中,你将向 Kubernetes 部署一个简单的 Nginx Web 服务器,以确认你的 Kubernetes 与 KubeSphere 安装成功。

向 Kubernetes 与 KubeSphere 部署 Pod

在本示例中,你将向 Kubernetes 集群与 KubeSphere 部署 Nginx Pod。

执行以下命令,为 Nginx Web 服务器创建一个新的 Deployment。在本示例中,我们将基于 “nginx:alpine” 镜像创建两个副本(replicas)的 Nginx Pod。

kubectl create deployment nginx --image=nginx:alpine --replicas=2

现在使用下面的 kubectl 命令创建一个类型为 “NodePort” 的新 Service,用于暴露 Nginx Deployment。该命令将创建一个名为 “nginx”、类型为 “NodePort” 的 Kubernetes Service,并为 Pod 暴露 “80” 端口。

kubectl create service nodeport nginx --tcp=80:80

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

接下来,执行以下 kubectl 命令,检查 Kubernetes 集群上正在运行的 Pod 列表。你应当会看到两个 Nginx Pod 在运行。

kubectl get pods

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

现在使用以下命令查看 Kubernetes 上可用的 Service 列表。你应当会看到 “nginx” 这个 NodePort 类型的 Service 在 Kubernetes 主机(hosts)上暴露了 “80” 端口和 “32241” 端口。NodePort 类型的 Service 在 Kubernetes 主机(工作节点)上暴露的端口范围始终位于 xxx–xxxx 之间。

kubectl get svc

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

执行下面的 curl 命令来访问你的 Nginx 部署。

curl 10.233.14.102
curl node1:32241
curl node2:32241

下面是在 'master' 服务器上暴露的 Nginx Pod 的 index.html 页面输出。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

下面来自 “node1” 的 index.html 源代码输出。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

下面则是来自 “node2” 的 index.html 代码。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

现在回到 KubeSphere 管理面板。点击 Application Workloads(应用负载),然后点击 Workloads(工作负载)。你将看到名为 'nginx' 的 Deployment 已就绪,并运行着两个 Pod。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

点击 'nginx' Deployment 查看部署的详细信息。你应当会看到 'nginx' 部署包含两个副本(replicas),并且这两个 Pod 副本都在运行中。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

接下来,点击 Services(服务)菜单,查看 Kubernetes 集群上可用的 Service 列表。你应当会看到名为 'nginx' 和 'Kubernetes' 的 Service 已在集群中可用。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

点击 'nginx' Service 查看该服务的详细信息。下面是在你的 KubeSphere 面板上显示的类似页面。

在 Ubuntu 22.04 上安装并配置 KubeSphere 容器平台

至此,你已经完成了向 Kubernetes 集群部署 Nginx Pod,并从 KubeSphere 管理面板验证了部署的详细信息。

总结

在本教程中,你已经在多台 Ubuntu 22.04 服务器上部署了 Kubernetes 集群和 KubeSphere。你使用了由 KubeSphere 开发的名为 'KubeKey' 的自动化工具来部署 Kubernetes。你还学习了用于 Kubernetes 部署的 Ubuntu 服务器基础配置。此外,你已成功安装并配置了作为 Kubernetes Web 管理面板的 KubeSphere。你已学会使用 KubeSphere 查看 Kubernetes 集群以及部署、Pod 和服务的基本操作。想了解更多关于 KubeSphere 的内容,请访问 KubeSphere 的官方文档;关于 Kubernetes,请访问 Kubernetes 的官方文档。