搭建Kubesphere集群
快速部署KubeSphere容器平台
1.环境描述

- master :10.10.12.171
- worker1:10.10.12.172
- worker2:10.10.12.173
- Kubeoperator:10.10.12.170(安装ansible并通过Kubeoperator对kubesphere集群部署kubesphere软件,要求根目录至少需要200G用于储存所需的安装包)
所有服务器均采用centos7.6版本,最小安装模式,每个服务器均有一个空余磁盘用于部署ceph

这里使用的是/dev/sdb磁盘,用于安装ceph集群
2. 环境准备(所有节点)
2.1 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2.2 关闭swap
swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab
2.3 关闭Selinux
setenforce 0
sed -i '/=enforcing/ s/enforcing/disabled/' /etc/selinux/config
2.4 安装所需软件
yum -y install net-tools sshpass unzip lrzsz vim
2.5 设置服务器hostname
hostnamectl set-hostname ***(对应每个服务器)
3. 安装相关组件
kubeoperator描述:在kubeoperator上面安装ansible工具并通过kubeoperator工具对kubesphere集群的三台初始服务器安装Kubernetes和Kubesphere容器平台。
3.1 登录kubeoperator服务器
ssh 10.10.12.170
3.2 将所需软件拷贝到kubeoperator下的/tmp/tmp目录中

3.3 给shell脚本文件添加执行权限

chmod +x prepare.sh
3.4 根据实际环境情况对应修改prepare.sh内容
vim /tmp/tmp/prepare.sh

- installerIp:kubeoperatorIP地址
- cephPublicNetwork:ceph网段
- cephPublicNetworkCard:ceph集群物理机网卡名称
- cephDisk:ceph盘符名称
备注:ceph集群统一使用root登录,密码为Changeme_123
3.5 执行prepare.sh
sh /tmp/tmp/prepare.sh

前期准备完成(整个过程大概1分钟)
3.6 执行deploy-docker.sh,安装docker
cd /tmp/tmp/devops/
sh deploy-docker.sh

3.7 执行deploy-harbor.sh,安装Harbor镜像仓库
sh deploy-harbor.sh

整个过程大概持续10分钟左右

当ansible脚本完成后,打开网页浏览器输入:https://10.10.12.170
- 账号:admin
- 密码:Harbor12345

Harbor里面包含了所需要的相关kubesphere的安装包
3.8 执行deploy-kubeoperator.sh,安装kubeoperator
sh deploy-kubeoperator.sh


当ansible脚本完成后,打开网页浏览器输入:http://172.16.12.249:8888
- 账号:admin
- 密码:kubeoperator@admin123

3.9 执行deploy-ceph.sh,安装ceph
cd /tmp/tmp/ceph/
sh deploy-ceph.sh

(大概持续18分钟左右)
如果 TASK [ceph-dashboard : create dashboard admin user] 执行报错,请忽略此异常
ceph dashboard 账户密码可以使用以下命令进行创建,创建后可以使用admin/admin登录dashboard查看和管理ceph
echo "admin" > /tmp/file
ceph dashboard ac-user-create admin -i /tmp/file administrator
另外需要注意的是安装结束时Install Ceph Dashboard : In Progress (0:02:20)表明当前dashboard还在初始化,需要等待9443端口启动后(使用以下命令检查)再进行下一步操作
netstat -ntpl | grep 9443
4. 配置kubeoperator
4.1 设置系统IP

填写kubeoperatorIP地址
4.2 创建主机登录凭据


创建主机登录所需的登录凭据
4.3 创建主机


- 名称:填写主机名称
- ip:填写主机物理IP
- 端口: 填写SSH端口
- 凭据: 选择root的密码凭据

填写三台主机以后等待初始化,初始化完成后显示正常状态
4.3 创建kubesphere集群
4.3.1 创建资源

点击项目-单击kubeoperator管理员



添加资源主机
4.3.2 创建集群

集群-->添加
4.3.3 集群信息

4.3.4 高级选项

图片参数仅供参考,可以根据实际情况部署
4.3.5 节点信息

4.3.6 确认信息


等待集群安装,大概持续50分钟左右
如果有报错可以点击重试再试一次
4.3.7 查看日志

可以在这里面查到安装进度日志

4.4 登录kubesphere
http://10.10.12.171:30880

- 账号:admin
- 密码:P@88w0rd

5.KubeSphere配置
5.1 创建企业空间、项目、帐户和角色
本快速入门演示如何创建企业空间、角色和用户帐户。
5.1.1 创建账户
安装 KubeSphere 之后,您需要向平台添加具有不同角色的用户,以便他们可以针对自己授权的资源在不同的层级进行工作。一开始,系统默认只有一个帐户 admin,具有 platform-admin 角色。在本步骤中,您将创建一个帐户 user-manager,然后使用 user-manager 创建新帐户。
1.使用默认帐户和密码 (admin/P@88w0rd) 以 admin 身份登录 Web 控制台。
- 出于安全考虑,强烈建议您在首次登录控制台时更改密码。若要更改密码,在右上角的下拉菜单中选择个人设置,在密码设置中设置新密码,您也可以在个人设置中修改控制台语言。
-
image.png
2.登录控制台后,点击左上角的平台管理,然后选择访问控制。

在帐户角色中,有如下所示四个可用的内置角色。接下来要创建的第一个帐户将被分配 users-manager 角色。
内置角色 | 描述 |
---|---|
workspaces-manager | 企业空间管理员,管理平台所有企业空间。 |
users-manager | 用户管理员,管理平台所有用户。 |
platform-regular | 平台普通用户,在被邀请加入企业空间或集群之前没有任何资源操作权限 |
platform-admin | 平台管理员,可以管理平台内的所有资源。 |
内置角色由 KubeSphere 自动创建,无法编辑或删除。
3.在帐户管理中,点击创建。在弹出窗口中,提供所有必要信息(带有*标记),然后在角色字段选择 users-manager。请参考下图示例。

完成后,点击确定。新创建的帐户将显示在帐户管理中的帐户列表中。
4.切换帐户使用 user-manager 重新登录,创建如下四个新帐户,这些帐户将在其他的教程中使用。
帐户登出请点击右上角的用户名,然后选择登出。
帐户 | 角色 | 描述 |
---|---|---|
ws-manager | workspaces-manager | 创建和管理所有企业空间。 |
ws-admin | platform-regular | 管理指定企业空间中的所有资源(在此示例中,此帐户用于邀请新成员加入该企业空间)。 |
platform-admin | platform-regular | 创建和管理项目以及 DevOps 工程,并邀请新成员加入项目。 |
project-regular | platform-regular | project-regular 将由 project-admin 邀请至项目或 DevOps 工程。该帐户将用于在指定项目中创建工作负载、流水线和其他资源。 |
5.查看创建的四个帐户。

5.1.2 创建企业空间
您需要使用上一个步骤中创建的帐户 ws-manager 创建一个企业空间。作为管理项目、DevOps 工程和组织成员的基本逻辑单元,企业空间是 KubeSphere 多租户系统的基础。
-
1.以 ws-manager 身份登录 KubeSphere,它具有管理平台上所有企业空间的权限。点击左上角的平台管理,选择访问控制。在企业空间中,可以看到仅列出了一个默认企业空间 system-workspace,即系统企业空间,其中运行着与系统相关的组件和服务,您无法删除该企业空间。
image.png
-
2.点击右侧的创建,将新企业空间命名为 demo-workspace,并将用户 ws-admin 设置为企业空间管理员,如下图所示:
image.png
完成后,点击创建。
如果您已启用多集群功能,您需要为企业空间分配一个或多个可用集群,以便项目可以在集群中创建。
- 3.登出控制台,然后以 ws-admin 身份重新登录。在企业空间设置中,选择企业成员,然后点击 邀请成员。

- 4.邀请 project-admin 和 project-regular 进入企业空间,分别授予他们 workspace-self-provisioner 和 workspace-viewer 角色。
实际角色名称的格式:<workspace name>-<role name>。例如,在名为 demo-workspace 的企业空间中,角色 viewer 的实际角色名称为 demo-workspace-viewer。

- 5.将 project-admin 和 project-regular 都添加到企业空间后,点击确定。在企业成员中,您可以看到列出的三名成员。
帐户 | 角色 | 描述 |
---|---|---|
ws-admin | workspace-admin | 管理指定企业空间中的所有资源(在此示例中,此帐户用于邀请新成员加入该企业空间)。 |
platform-admin | workspace-self-provisioner | 创建和管理项目以及 DevOps 工程,并邀请新成员加入项目。 |
project-regular | workspace-viewer | project-regular 将由 project-admin 邀请至项目或 DevOps 工程。该帐户将用于在指定项目中创建工作负载、流水线和其他资源。 |
5.1.3 创建项目
在此步骤中,您需要使用在上一步骤中创建的帐户 project-admin 来创建项目。KubeSphere 中的项目与 Kubernetes 中的命名空间相同,为资源提供了虚拟隔离。有关更多信息,请参见命名空间。
- 1.以 project-admin 身份登录 KubeSphere,在项目管理中,点击创建。

- 2.输入项目名称(例如 demo-project),然后点击确定完成,您还可以为项目添加别名和描述。

- 3.在项目管理中,点击刚创建的项目查看其详细信息。

- 4.在项目的概览页面,默认情况下未设置项目配额。您可以点击设置并根据需要指定资源请求和限制(例如:CPU 和内存的限制分别设为 1 Core 和 1000 Gi)。


- 5.邀请 project-regular 至该项目,并授予该用户 operator 角色。请参考下图以了解具体步骤。

具有 operator 角色的用户是项目维护者,可以管理项目中除用户和角色以外的资源。
- 6.在创建路由(即 Kubernetes 中的 Ingress)之前,需要启用该项目的网关。网关是在项目中运行的 NGINX Ingress 控制器。若要设置网关,请转到项目设置中的高级设置,然后点击设置网关。此步骤中仍使用帐户 project-admin。

- 7.选择访问方式 NodePort,然后点击保存。

- 8.在外网访问下,可以在页面上看到网关地址以及 http/https 的端口。

5.1.4 创建角色
完成上述步骤后,您已了解可以为不同级别的用户授予不同角色。先前步骤中使用的角色都是 KubeSphere 提供的内置角色。在此步骤中,您将学习如何创建自定义角色以满足工作需求。
-
1.再次以 admin 身份登录控制台,然后转到访问控制。
-
2.帐户角色中列出了四个系统角色,无法删除或编辑。点击创建并设置角色标识符。在本示例将创建一个名为 roles-manager 的角色。

点击编辑权限继续。
- 3.在访问控制中,选择该角色所拥有的权限。例如,本示例选择帐户查看、角色管理和角色查看。点击确定完成创建。

- 4.新创建的角色将列于帐户角色中,可以点击右侧的三个点对其进行编辑。

- 5.在帐户管理中,添加一个新帐户并授予其 roles-manager 角色,您也可以通过编辑将现有帐户的角色更改为 roles-manager。

5.2 创建并部署WordPress
WordPress 简介
WordPress(使用 PHP 语言编写)是免费、开源的内容管理系统,用户可以使用 WordPress 搭建自己的网站。完整的 WordPress 应用程序包括以下 Kubernetes 对象,由 MySQL 作为后端数据库。

准备工作
您需要准备一个 project regular 帐户,并在一个项目中赋予该帐户 operator 角色(该用户已被邀请参加该项目)。有关更多信息,请参见5.1创建企业空间、项目、帐户和角色。
5.2.1 创建密钥
创建 MySQL 密钥
环境变量 WORDPRESS_DB_PASSWORD 是连接到 WordPress 数据库的密码。在此步骤中,您需要创建一个密钥来保存将在 MySQL Pod 模板中使用的环境变量。
- 1.使用 project-regular 帐户登录 KubeSphere 控制台,访问 demo-project 的详情页并导航到配置中心。在密钥中,点击右侧的创建。

- 2.输入基本信息(例如,将其命名为 mysql-secret)并点击下一步。在下一页中,选择类型为默认,然后点击添加数据来添加键值对。输入如下所示的键 (Key) MYSQL_ROOT_PASSWORD 和值 (Value) 123456,点击右下角 √ 进行确认。完成后,点击创建按钮以继续。

创建 WordPress 密钥
按照以上相同的步骤创建一个名为 wordpress-secret 的 WordPress 密钥,输入键 (Key) WORDPRESS_DB_PASSWORD 和值 (Value) 123456。创建的密钥显示在列表中,如下所示:

5.2.2 创建存储卷
- 1.访问存储管理下的存储卷,点击创建。

-
2.输入卷的基本信息(例如,将其命名为 wordpress-pvc),然后点击下一步。
-
3.在存储卷设置中,需要选择一个可用的存储类型,并设置访问模式和存储卷容量。您可以直接使用如下所示的默认值,点击下一步继续。

- 4.对于高级设置,您无需为当前步骤添加额外的配置,点击创建完成即可。
5.2.3 创建应用程序
添加 MySQL 后端组件
- 1.导航到应用负载下的应用,选择自制应用,再点击构建自制应用。

- 2.输入基本信息(例如,在应用名称一栏输入 wordpress),然后点击下一步。

- 3.在服务组件中,点击添加服务以在应用中设置组件。

-
4.设置组件的服务类型为有状态服务。
-
5.输入有状态服务的名称(例如 mysql)并点击下一步。

- 6.在容器镜像中,点击添加容器镜像。

- 7.在搜索框中输入 mysql:5.6,按下回车键,然后点击使用默认端口。由于配置还未设置完成,请不要点击右下角的 √ 按钮。

在高级设置中,请确保内存限制不小于 1000 Mi,否则 MySQL 可能因内存不足而无法启动。
- 8.下滚动到环境变量,点击引用配置文件或密匙。输入名称 MYSQL_ROOT_PASSWORD,然后选择资源 mysql-secret 和前面步骤中创建的密钥 MYSQL_ROOT_PASSWORD,完成后点击 √ 保存配置,最后点击下一步继续。

- 9.选择挂载存储中的添加存储卷模板,输入存储卷名称 (mysql) 和挂载路径(模式:读写,路径:/var/lib/mysql)的值,如下所示:

完成后,点击 √ 保存设置并点击下一步继续。
- 10.在高级设置中,可以直接点击添加,也可以按需选择其他选项。

- 11.现在,MySQL 组件已经添加完成,如下所示:

添加 WordPress 前端组件
- 12.再次点击添加服务,这一次选择无状态服务。输入名称 wordpress 并点击下一步。

- 13.与上述步骤类似,点击添加容器镜像,在搜索栏中输入 wordpress:4.8-apache 并按下回车键,然后点击使用默认端口。

- 14.向下滚动到环境变量,点击引用配置文件或密匙。这里需要添加两个环境变量,请根据以下截图输入值:
- 对于 WORDPRESS_DB_PASSWORD,请选择在步骤 1 中创建的 wordpress-secret 和 WORDPRESS_DB_PASSWORD。
- 点击添加环境变量,分别输入 WORDPRESS_DB_HOST 和 mysql 作为键 (Key) 和值 (Value)。

点击 √ 保存配置,再点击下一步继续。
- 15.在挂载存储中,点击添加存储卷,并选择已有存储卷。


- 16.选择上一步创建的 wordpress-pvc,将模式设置为读写,并输入挂载路径 /var/www/html。点击 √ 保存,再点击下一步继续。

- 17.在高级设置中,可以直接点击添加创建服务,也可以按需选择其他选项。

- 18.现在,前端组件也已设置完成。点击下一步继续。

- 19.您可以在这里设置路由规则(应用路由 Ingress),也可以直接点击创建。

- 20.创建后,应用将显示在下面的列表中。

5.2.4 验证资源
在工作负载中,分别检查部署和有状态副本集中 wordpress-v1 和 mysql-v1 的状态。如果它们的运行状态如下图所示,就意味着 WordPress 已经成功创建。


5.2.5 通过NodePort 访问WordPress
- 1.若要在集群外访问服务,请首先导航到服务。点击 wordpress 右侧的三个点后,选择编辑外网访问。

- 2.在访问方式中选择 NodePort,然后点击确定。

- 3.点击服务进入详情页,可以看到暴露的端口。

- 4.通过 {Node IP}:{NodePort} 访问此应用程序,可以看到下图:
