KubeSphere——常用应用UI可视化部署实战(2)

2024/03 作者:ihunter 0 0

摘要

有关于的KubeSphere常用应用部署实战都这里。大家可以参考去部署自己的服务。

一、多租户管理

本文档面向初次使用 KubeSphere 的集群管理员用户,引导新手用户创建企业空间、创建新的角色和账户,然后邀请新用户进入企业空间后,创建项目和 DevOps 工程,帮助用户熟悉多租户下的用户和角色管理,快速上手 KubeSphere。

目前,平台的资源一共有三个层级,包括集群 (Cluster)、 企业空间 (Workspace)、 项目 (Project) 和 DevOps Project (DevOps 工程),层级关系如下图所示,在每个层级中,每个组织中都有多个不同的内置角色。

1.1 集群管理员

第一步:创建角色和账号

平台中的 cluster-admin 角色可以为其他用户创建账号并分配平台角色,平台内置了集群层级的以下三个常用的角色,同时支持自定义新的角色。

内置角色描述
cluster-admin集群管理员,可以管理集群中所有的资源。
workspaces-manager集群中企业空间管理员,可以管理集群中所有的企业空间及其下面的项目和工程资源。
cluster-regular集群中的普通用户,在被邀请加入企业空间之前没有任何资源操作权限。

本示例首先新建一个角色 (users-manager),为该角色授予账号管理和角色管理的权限,然后新建一个账号并给这个账号授予 users-manager 角色。

账号名集群角色职责
user-managerusers-manager管理集群的账户和角色
  1. 点击控制台左上角 平台管理 → 平台角色,可以看到当前的角色列表,点击 创建,创建一个角色用于管理所有账户和角色。

  1. 填写角色的基本信息和权限设置。

  • 名称:起一个简洁明了的名称,便于用户浏览和搜索,如 users-manager

  • 描述信息:简单介绍该角色的职责,如 管理账户和角色

  1. 权限设置中,勾选账户管理和角色管理的所有权限,点击 创建

  1. 点击控制台左上角 平台管理 → 账号管理,可以看到当前集群中所有用户的列表,点击 创建 按钮。

  1. 填写新用户的基本信息,如用户名设置为 user-manager,角色选择 users-manager,其它信息可自定义,点击 确定

  1. 然后用 user-manager 来创建下表中的四个账号,ws-manager 将用于创建一个企业空间,并指定其中一个用户名为 ws-admin 作为企业空间管理员。切换成上一步创建的 user-manager 账号登录 KubeSphere,在 账号管理 下,新建四个账号,创建步骤同上,参考如下信息创建。

账号名集群角色职责
ws-managerworkspaces-manager创建和管理企业空间
ws-admincluster-regular管理企业空间下所有的资源 (本示例用于邀请新成员加入企业空间)
project-admincluster-regular创建和管理项目、DevOps 工程,邀请新成员加入
project-regularcluster-regular将被 project-admin 邀请加入项目和 DevOps 工程, 用于创建项目和工程下的工作负载、Pipeline 等资源
  1. 查看新建的四个账号信息。

1.2 企业空间管理员

第二步:创建企业空间

企业空间 (workspace) 是 KubeSphere 实现多租户模式的基础,是用户管理项目、DevOps 工程和企业成员的基本单位。

  1. 切换为 ws-manager 登录 KubeSphere,ws-manager 有权限查看和管理平台的所有企业空间。点击左上角的 平台管理企业空间,可见新安装的环境只有一个系统默认的企业空间 system-workspace,用于运行 KubeSphere 平台相关组件和服务,禁止删除该企业空间。在企业空间列表点击 创建

  1. 参考如下提示填写企业空间的基本信息,然后点击 确定。企业空间的创建者同时默认为该企业空间的管理员 (workspace-admin),拥有企业空间的最高管理权限。

  • 企业空间名称:请尽量保持企业名称简短,便于用户浏览和搜索,本示例是 demo-workspace

  • 企业空间管理员:可从当前的集群成员中指定,这里指定上一步创建的 ws-admin 用户为管理员,相当于同时邀请了 ws-admin 用户进入该企业空间

  • 描述信息:简单介绍该企业空间

  1. 企业空间 demo-workspace 创建完成后,切换为 ws-admin 登录 KubeSphere,可看到该企业空间下的项目和 DevOps 工程列表,点击左侧「进入企业空间」进入企业空间详情页。

ws-admin 可以从集群成员中邀请新成员加入当前企业空间,然后创建项目和 DevOps 工程。在左侧菜单栏选择 企业空间管理 进入企业空间概览页,然后选择 企业空间管理成员管理,点击 邀请成员

  1. 这一步需要邀请在 步骤 1.6. 创建的两个用户 project-adminproject-regular 进入企业空间,且分别授予 workspace-regularworkspace-viewer 的角色,此时该企业空间一共有如下三个用户:

账号名企业空间角色职责
ws-adminworkspace-admin管理企业空间下所有的资源 (本示例用于邀请新成员加入企业空间)
project-adminworkspace-regular创建和管理项目、DevOps 工程,邀请新成员加入
project-regularworkspace-viewer将被 project-admin 邀请加入项目和 DevOps 工程, 用于创建工作负载、流水线等业务资源

1.3 项目和 DevOps 工程管理员

第三步:创建项目

创建工作负载、服务和 CI/CD 流水线等资源,需要先创建好项目和 DevOps 工程。

  1. 上一步将用户项目管理员 project-admin 邀请进入企业空间后,可切换为 project-admin 账号登录 KubeSphere,默认进入 demo-workspace 企业空间下,点击 创建,选择 创建资源型项目

  1. 填写项目的基本信息和高级设置,完成后点击 下一步

基本信息

  • 名称:为项目起一个简洁明了的名称,便于用户浏览和搜索,比如 demo-namespace

  • 别名:帮助您更好的区分资源,并支持中文名称,比如 示例项目

  • 描述信息:简单介绍该项目

高级设置,此处将默认的最大 CPU 和内存分别设置 2 Core2 Gi,后续的示例都需要在这个示例项目中完成,在项目使用过程中可根据实际情况再次编辑资源默认请求。

完成高级设置后,点击 创建

说明:高级设置是在当前项目中配置容器默认的 CPU 和内存的请求与限额,相当于是给项目创建了一个 Kubernetes 的 LimitRange 对象,在项目中创建工作负载后填写容器组模板时,若不填写容器 CPU 和内存的请求与限额,则容器会被分配在高级设置的默认 CPU 和内存请求与限额值。

  1. 邀请成员,示例项目 demo-namespace 创建成功后,点击进入示例项目。在 步骤 2.4. 已邀请用户 project-regular 加入了当前企业空间 demo-workspace,下一步则需要邀请 project-regular 进入该企业空间下的项目 demo-namespace。点击项目列表中的 demo-namespace 进入该项目。

4 在项目的左侧菜单栏选择 项目设置 → 项目成员,点击 邀请成员

  1. 在弹窗中的 project-regular 点击 "+",在项目的内置角色中选择 operator 角色。因此,后续在项目中创建和管理资源,都可以由 project-regular 用户登录后进行操作。

  1. 设置外网访问,在创建应用路由之前,需要先启用外网访问入口,即网关。这一步是创建对应的应用路由控制器,负责接收项目外部进入的流量,并将请求转发到对应的后端服务。

请使用项目管理员 project-admin 设置外网访问,选择 「项目设置」 → 「外网访问」,点击 「设置网关」。

  1. 在弹窗中,选择默认的 NodePort,然后点击 「保存」。

  1. 当前可以看到网关地址、http/https 端口号都已经开启。

1.4 创建 DevOps 工程

  1. 继续使用 project-admin 用户创建 DevOps 工程。点击 工作台,在当前企业空间下,点击 创建,在弹窗中选择 创建一个 DevOps 工程。DevOps 工程的创建者 project-admin 将默认为该工程的 Owner,拥有 DevOps 工程的最高权限。

  1. 输入 DevOps 工程的名称和描述信息,比如名称为 demo-devops。点击 创建,注意创建一个 DevOps 有一个初始化环境的过程需要几秒钟。

  1. 点击 DevOps 工程列表中的 demo-devops 进入该工程的详情页。

  2. 同上,这一步需要在 demo-devops 工程中邀请用户 project-regular,并设置角色为 maintainer,用于对工程内的 Pipeline、凭证等创建和配置等操作。菜单栏选择 工程管理 → 工程成员,然后点击 邀请成员,为用户 project-regular 设置角色为 maintainer。后续在 DevOps 工程中创建 Pipeline 和凭证等资源,都可以由 project-regular 用户登录后进行操作。

二、应用路由与服务示例

KubeSphere 在项目中为用户项目内置了一个全局的负载均衡器,即应用路由控制器 (Ingress Controller),为了代理不同后端服务 (Service) 而设置的负载均衡服务,用户访问 URL 时,应用路由控制器可以把请求转发给不同的后端服务。因此,应用路由的功能其实可以理解为 Service 的 “Service”。Kubernetes Ingress 官方提供了这样一个例子:对于 https://cafe.example.com,如果访问 https://cafe.example.com/coffee 则返回 “咖啡点餐系统”,如果访问 https://cafe.example.com/tea,则返回 “茶水点餐系统”。这两个系统分别由后端的 coffee 和 tea 这两个部署 (Deployment) 来提供服务。以下将在 KubeSphere 创建相关资源来说明这个应用路由的示例。

2.1 前提条件

2.2 创建 tea

以用户 project-regular 登录,进入 demo-namespace 项目后,选择 「工作负载」→「部署」,点击 「创建部署」。

  1. 参考如下提示填写基本信息,完成后点击 「下一步」。

  • 名称:必填,填写 tea,一个简洁明了的名称可便于用户浏览和搜索;

  • 别名:可选,支持中文帮助更好的区分资源,例如填写 茶水点餐系统

  • 描述信息:简单介绍该工作负载,方便用户进一步了解。

  1. 副本数增加至 2,点击 「添加容器」,在容器组模板的表单中,参考如下提示填写镜像和服务设置,其它信息默认即可:

  • 镜像:nginxdemos/hello:plain-text ;

  • 容器名称:tea

  • 服务设置:名称输入 port,协议默认 TCP,端口号输入 80 (容器端口);

无需设置存储卷,点击 「下一步」。标签设置保留默认即可,点击 「创建」,即可看到 tea 已创建成功。

2.3 创建 coffee

  1. 同上,点击「创建」,参考以上步骤创建一个名为 coffee 的咖啡点餐系统的部署 (deployment)。

  2. 副本数增加至 2,点击 「添加容器」,在容器组模板的表单中,参考如下提示填写 coffee 的镜像和服务设置,其它信息默认即可:

  • 镜像:nginxdemos/hello:plain-text ;

  • 容器名称:coffee

  • 服务设置:名称输入 port,协议默认 TCP,端口号输入 80 (容器端口);

2.4 创建服务

为 tea 和 coffee 分别创建两个服务,选择 「网络与服务」→ 「服务」,点击 「创建服务」。

2.5 创建 tea-svc

  1. 名称填写 tea-svc,点击 「下一步」。

  2. 选择第一项 通过集群内 IP 来访问服务 Virtual IP,参考如下提示填写服务设置:

  • 点击 「指定工作负载」,选择 tea,点击保存;

  • 端口:名称为 port,默认 TCP 协议,端口和目标端口都填写 80 (前者表示暴露在 Cluster IP 上的端口,仅提供给集群内部访问服务的入口,目标端口是当前的服务后端 Pod 上的端口)。

2.6 创建 coffee-svc

同上,点击「创建」,参考以上步骤创建一个名为 coffee-svc 的服务,工作负载指定为 coffee,其它信息与 tea-svc 服务相同,完成后点击 「创建」。至此已成功创建了两个服务。

2.7 创建 TLS 证书密钥

由于在应用路由中绑定的域名为 https 协议,因此需要预先在密钥中创建 TLS 证书。

  1. 点击 「配置中心」→ 「密钥」,点击 「创建」。

  2. 密钥名称填写 cafe-secret,点击 「下一步」。

  3. 类型选择 TLS,凭证和私钥填写如下,完成后点击 「创建」。

2.8 创建应用路由 cafe-ingress

  1. 选择 「网络与服务」→ 「应用路由」,点击 「创建应用路由」。

  2. 输入名称 cafe-ingress,点击 「下一步」,点击 「添加路由规则」。

  3. 选择 「指定域名」,按照如下提示填写路由规则,应用路由的路由规则即它的核心所在。

  • 域名:cafe.example.com

  • 协议:选择 https

  • 密钥:选择 cafe-secret

  • 路径:

    • 输入 /coffee,服务选择 coffee-svc,选择 80 端口作为服务端口,点击 「添加 Path」

    • 输入 /tea,服务选择 tea-svc,选择 80 端口作为服务端口

完成路由规则设置后点击「保存」,无需设置注解,选择 「下一步」,点击 「创建」,cafe-ingress 创建成功。

2.9 访问应用路由

在云平台需要把应用路由在外网访问的 https 端口 (比如本示例是 31198),在端口转发规则中将内网端口 31198 转发到源端口 31198,然后在防火墙开放这个源端口,确保外网流量可以通过该端口,即可通过 curl 命令进行访问测试。例如在 QingCloud 平台配置端口转发和防火墙规则,

至此,即可通过外网分别访问 “咖啡点餐系统” 和 “茶水点餐系统”,即访问应用路由下不同的服务。

提示:如果在内网环境可登录集群中的任意节点或通过 web kubectl,通过以下 curl 命令进行访问测试,需要将公网 IP 替换为网关地址。

比如,我们访问 https://cafe.example.com:{$HTTPS_PORT}/coffee 时,应该是 coffee 的部署负责响应请求,访问这个 URL 得到的返回信息是:Server name: coffee-6cbd8b965c-9659v,即 coffee 这个 Deployment 的名字。

# curl --resolve {$HOSTNAME}:{$HTTPS_PORT}:{$IP} https://{$hostname}:{$HTTPS_PORT}/{$PATH} --insecure$ curl --resolve cafe.example.com:31198:139.198.100.100 https://cafe.example.com:31198/coffee --insecureServer address: 10.233.122.100:80Server name: coffee-6cbd8b965c-9659vDate: 23/Apr/2019:03:17:43 +0000URI: /coffeeRequest ID: 1dcb8794548dd6013439b85bbaef0dd6

而访问 https://cafe.example.com:{$HTTPS_PORT}/tea 的时候,则应该是 tea 的部署负责响应我的请求(Server name: tea-588dbb89d5-bgxqn),说明应用路由已经成功将不同的请求转发给了对应的后端服务。

# curl --resolve {$HOSTNAME}:{$HTTPS_PORT}:{$IP} https://{$hostname}:{$HTTPS_PORT}/{$PATH} --insecurecurl --resolve cafe.example.com:31198:139.198.100.100 https://cafe.example.com:31198/tea --insecureServer address: 10.233.122.97:80Server name: tea-588dbb89d5-bgxqnDate: 23/Apr/2019:03:16:23 +0000URI: /teaRequest ID: 98db6b03aabd0b6ab29c26ba37ab2ba2

三、KubeSphere 部署 MySQL有状态应用

3.1 创建密钥

MySQL 的环境变量 MYSQL_ROOT_PASSWORD 即 root 用户的密码属于敏感信息,不适合以明文的方式表现在步骤中,因此以创建密钥的方式来代替该环境变量。创建的密钥将在创建 MySQL 的容器组设置时作为环境变量写入。

1.以项目普通用户 project-regular 登录 KubeSphere,在当前项目下左侧菜单栏的 配置中心 选择 密钥,点击 创建

  1. 填写密钥的基本信息,完成后点击 下一步

  • 名称:作为 MySQL 容器中环境变量的名称,可自定义,例如 mysql-secret

  • 别名:别名可以由任意字符组成,帮助您更好的区分资源,例如 MySQL 密钥

  • 描述信息:简单介绍该密钥,如 MySQL 初始密码

  1. 密钥设置页,填写如下信息,完成后点击 创建

  • 类型:选择 默认 (Opaque)

  • Data:Data 键值对填写 MYSQL_ROOT_PASSWORD123456

3.2 创建有状态副本集

在左侧菜单栏选择 工作负载 → 有状态副本集,然后点击 创建有状态副本集

3.3 填写基本信息

基本信息中,参考如下填写,完成后点击 下一步

  • 名称:必填,起一个简洁明了的名称,便于用户浏览和搜索,例如填写 wordpress-mysql

  • 别名:可选,支持中文帮助更好的区分资源,例如填写 MySQL 数据库

  • 描述信息:简单介绍该工作负载,方便用户进一步了解

3.4 容器组模板

  1. 点击 添加容器,填写容器组设置,名称可由用户自定义,镜像填写 mysql:5.6(应指定镜像版本号),CPU 和内存此处暂不作限定,将使用在创建项目时指定的默认请求值

  1. 服务设置环境变量 进行设置,其它项暂不作设置,完成后点击 保存

  • 端口:名称可自定义如 port,选择 TCP 协议,填写 MySQL 在容器内的端口 3306

  • 环境变量:勾选环境变量,点击 引用配置中心,名称填写 MYSQL_ROOT_PASSWORD,选择在第一步创建的密钥 mysql-secret (MySQL 密钥)MYSQL_ROOT_PASSWORD

3.5 添加存储卷模板

容器组模板完成后点击 下一步,在存储卷模板中点击 添加存储卷模板。有状态应用的数据需要存储在持久化存储卷 (PVC) 中,因此需要添加存储卷来实现数据持久化。参考下图填写存储卷信息。

  • 存储卷名称:必填,起一个简洁明了的名称,便于用户浏览和搜索,此处填写 mysql-pvc

  • 存储类型:选择集群已有的存储类型,如 Local

  • 容量和访问模式:容量默认 10 Gi,访问模式默认 ReadWriteOnce (单个节点读写)

  • 挂载路径:存储卷在容器内的挂载路径,选择 读写,路径填写 /var/lib/mysql

3.6 服务配置

要将 MySQL 应用暴露给其他应用或服务访问,需要创建服务,参考以下截图完成参数设置,完成后点击 下一步

  • 服务名称:此处填写 mysql-service,注意,这里定义的服务名称将关联 Wordpress,因此在创建 Wordpress 添加环境变量时应填此服务名

  • 会话亲和性:默认 None

  • 端口:名称可自定义,选择 TCP 协议,MySQL 服务的端口和目标端口都填写 3306,其中第一个端口是需要暴露出去的服务端口,第二个端口(目标端口)是容器端口

说明: 若有实现基于客户端 IP 的会话亲和性的需求,可以在会话亲和性下拉框选择 “ClientIP” 或在代码模式将 service.spec.sessionAffinity 的值设置为 “ClientIP”(默认值为 “None”),该设置可将来自同一个 IP 地址的访问请求都转发到同一个后端 Pod。

3.7 标签设置

标签保留默认设置 app: wordpress-mysql。下一步的节点选择器可以指定容器组调度到期望运行的节点上,此处暂不作设置,直接点击 创建

3.8 查看 MySQL 有状态应用

在列表页可以看到有状态副本集 “wordpress-mysql” 的状态为 “更新中”,该过程需要拉取镜像仓库中指定 tag 的 Docker 镜像、创建容器和初始化数据库等一系列操作,状态显示 ContainerCreating。正常情况下在一分钟左右状态将变为 “运行中”,点击该项即可进入有状态副本集的详情页,包括资源状态、版本控制、监控、环境变量、事件等信息。

至此,有状态应用 MySQL 已经创建成功,将作为 Wordpress 网站的后端数据库。下一步需要创建 Wordpress 部署并通过外网访问该应用。

四、KubeSphere 部署 Wordpress无状态应用

以创建一个部署 (Deployment) 为例,部署一个无状态的 Wordpress 应用,基于 [示例二] 的 MySQL 应用最终部署一个外网可访问的 Wordpress 网站。Wordpress 连接 MySQL 数据库的密码将以 配置 (ConfigMap) 的方式进行创建和保存。

4.1 前提条件

  • 已创建了有状态副本集 MySQL,若还未创建请参考上一篇

  • 使用项目管理员 project-admin 邀请项目普通用户 project-regular 加入项目并授予 operator 角色,参考 多租户管理快速入门 - 邀请成员 。

4.2 创建配置

Wordpress 的环境变量 WORDPRESS_DB_PASSWORD 即 Wordpress 连接数据库的密码,为演示方便,以创建配置 (ConfigMap) 的方式来代替该环境变量。创建的配置将在创建 Wordpress 的容器组设置时作为环境变量写入。

  1. 以项目普通用户 project-regular 登录 KubeSphere,在当前项目下左侧菜单栏的 配置中心 选择 配置,点击 创建配置

  1. 填写配置的基本信息,完成后点击 下一步

  • 名称:作为 Wordpress 容器中环境变量的名称,填写 wordpress-configmap

  • 别名:支持中文,帮助您更好的区分资源,比如 连接 MySQL 密码

  • 描述信息:简单介绍该 ConfigMap,如 MySQL password

  1. ConfigMap 是以键值对的形式存在,此处键值对设置为 WORDPRESS_DB_PASSWORD123456,完成后点击 创建

4.3 创建存储卷

  1. 在当前项目下左侧菜单栏的 存储卷,点击创建,基本信息如下。

  • 名称:wordpress-pvc

  • 别名:Wordpress 持久化存储卷

  • 描述信息:Wordpress PVC

  1. 完成后点击 下一步,存储卷设置中,参考如下填写:

  • 存储类型:选择集群中已创建的存储类型,例如 Local

  • 访问模式:选择单节点读写 (RWO)

  • 存储卷容量:默认 10 Gi

  1. 标签默认为 app: wordpress-pvc,点击 「创建」。

  1. 点击左侧菜单中的 存储卷,查看存储卷列表,可以看到存储卷 wordpress-pvc 已经创建成功,状态是 “准备就绪”,可挂载至工作负载。若存储类型为 Local,那么该存储卷在被挂载至工作负载之前都将显示创建中,这种情况是正常的,因为 Local 目前还不支持存储卷动态配置 (Dynamic Volume Provisioning) ,挂载后状态将显示 “准备就绪”。

4.4 创建部署

在左侧菜单栏选择 工作负载 → 部署,进入列表页,点击 创建部署

4.5 填写基本信息

基本信息中,参考如下填写,完成后点击 下一步

  • 名称:必填,起一个简洁明了的名称,便于用户浏览和搜索,比如 wordpress

  • 别名:可选,支持中文帮助更好的区分资源,如 Wordpress 网站

  • 描述信息:简单介绍该工作负载,方便用户进一步了解

4.6 容器组模板

  1. 点击 添加容器。容器组模板中,名称可自定义,镜像填写 wordpress:4.8-apache,CPU 和内存此处暂不作限定,将使用在创建项目时指定的默认值。

2. 下滑至服务设置,对 端口环境变量 进行设置,其它项暂不作设置。参考如下填写。

  • 端口:名称可自定义如 port,选择 TCP 协议,填写 Wordpress 在容器内的端口 80

  • 环境变量:这里需要添加两个环境变量

    • 点击 引用配置中心,名称填写 WORDPRESS_DB_PASSWORD,选择在第一步创建的配置 (ConfigMap) wordpress-configmapWORDPRESS_DB_PASSWORD

    • 点击 添加环境变量,名称填写 WORDPRESS_DB_HOST,值填写 mysql-service,对应的是 示例一 - 部署 MySQL 创建 MySQL 服务的名称,否则无法连接 MySQL 数据库,可在服务列表中查看其服务名。

4.7 存储卷设置

  1. 此处选择 添加已有存储卷,选择第二步创建的存储卷 wordpress-pvc

  1. 设置存储卷的挂载路径,其中挂载选项选择 读写,挂载路径为 /var/www/html,保存后点击 下一步

4.8 查看部署

  1. 标签保留默认值,节点选择器此处暂不作设置,点击 创建,部署创建完成。

  2. 创建完成后,部署的状态为 “更新中” 是由于创建后需要拉取 wordpress 镜像并创建容器 (大概一分钟左右),可以看到容器组的状态是 “ContainerCreating”,待部署创建完成后,状态会显示 “运行中”。

  1. 查看创建的部署 Wordpress,可以看到其状态显示运行中,下一步则需要为 Wordpress 创建服务,最终暴露给外网访问。

4.9 创建服务

  1. 在当前项目中,左侧菜单栏选择 网路与服务 → 服务,点击 创建

2. 基本信息中,信息填写如下,完成后点击 下一步

  • 名称:必填,起一个简洁明了的名称,便于用户浏览和搜索,比如 wordpress-service

  • 别名和描述信息:如 Wordpress 服务

  1. 服务设置参考如下填写,完成后点击 下一步

  • 服务类型:选择第一项 通过集群内部IP来访问服务 Virtual IP

  • 选择器:点击 指定工作负载 可以指定上一步创建的部署 Wordpress,指定后点击 保存

  • 端口:端口名称可自定义如 port,服务的端口和目标端口都填写 TCP 协议的 80 端口

  • 会话亲和性:None,完成参数设置,选择下一步

说明: 若有实现基于客户端 IP 的会话亲和性的需求,可以在会话亲和性下拉框选择 “ClientIP” 或在代码模式将 service.spec.sessionAffinity 的值设置为 “ClientIP”(默认值为 “None”),该设置可将来自同一个 IP 地址的访问请求都转发到同一个后端 Pod。

  1. 本示例标签保留默认值,选择 下一步

  2. 服务暴露给外网访问支持 NodePort 和 LoadBalancer,这里服务的访问方式选择 NodePort

  1. 点击 创建,wordpress-service 服务可创建成功。注意,wordpress-service 服务生成了一个节点端口 32689

注意:若需要在外网访问,可能需要绑定公网 EIP 并配置端口转发和防火墙规则。在端口转发规则中将内网端口 32689 转发到源端口 32689,然后在防火墙开放这个源端口,保证外网流量可以通过该端口,外部才能够访问。例如在 QingCloud 云平台进行上述操作,则可以参考 云平台配置端口转发和防火墙。

4.10 访问 Wordpress

设置完成后,WordPress 就以服务的方式通过 NodePort 暴露到集群外部,可以通过 http://{$公网 IP}:{$节点端口 NodePort} 访问 WordPress 博客网站。

至此,您已经熟悉了部署 (Deployments) 和有状态副本集 (Statefulsets) 、密钥 (Secret)、配置 (ConfigMap) 的基本功能使用,关于部署和有状态副本集的各项参数释义。详见 部署 和 有状态副本集。

五、创建定时任务

实际工作中,我们经常需要进行批量数据处理和分析,以及按照时间执行任务。可以在 KubeSphere 中使用容器技术完成,也就是使用 Job (任务) 和 CronJob (定时任务) 来执行。这样方便维护较为干净的执行环境,减少不同任务工具的相互干扰。同时可以在集群上按照任务要求和资源状况进行动态伸缩执行。

Job 负责批处理任务,即仅执行一次的任务。任务具有并发的特性,可以抽象成一个任务中的多个 Pod 并行运行,保证批处理任务的一个或多个 Pod 成功结束。平时也存在很多需要并行处理的场景,比如批处理程序,每个副本(Pod)都会从任务池中读取任务并执行,副本越多,执行时间就越短,效率就越高,类似这样的场景都可以用任务来实现。

本文档以创建一个并行任务去执行简单的命令计算并输出圆周率到小数点后 2000 位作为示例,说明任务的基本功能。

5.1 前提条件

  • 已创建了企业空间、项目和普通用户 project-regular 账号,若还未创建请参考 多租户管理快速入门;

  • 使用项目管理员 project-admin 邀请项目普通用户 project-regular 加入项目并授予 operator 角色,参考 多租户管理快速入门 - 邀请成员 。

5.2 创建任务

以项目普通用户 project-regular 登录 KubeSphere 控制台,在所属项目的左侧菜单栏,选择 工作负载 → 任务,进入任务列表页面。

5.3 填写基本信息

点击 创建,填写任务的基本信息,完成后点击 下一步

基本信息页中,需要填写任务的名称和描述信息。

  • 名称:为创建的任务起一个简洁明了的名称,便于用户浏览和搜索。

  • 别名:别名可以由任意字符组成,帮助您更好的区分资源,并支持中文名称。

  • 描述:简单介绍应用仓库的任务,让用户进一步了解该任务。

5.4 任务设置

任务设置页中,通过设置 Job Spec 的四个配置参数来设置 Job 的任务类型,完成后点击 下一步

  • Back Off Limit:输入 5,失败尝试次数,若失败次数超过该值,则 Job 不会继续尝试工作;如此处设置为 5 则表示最多重试 5 次。

  • Completions:输入 4,标志任务结束需要成功运行的 Pod 个数,如此处设置为 4 则表示任务结束需要运行 4 个 Pod。

  • Parallelism:输入 2,标志并行运行的 Pod 的个数;如此处设置为 2 则表示并行 2 个 Pod。

  • Active Deadline Seconds:输入 300,指定 Job 可运行的时间期限,超过时间还未结束,系统将会尝试进行终止,且 ActiveDeadlineSeconds 优先级高于 Back Off Limit;如此处设置 300 则表示如果超过 300s 后 Job 中的所有 Pod 运行将被终止。

5.5 配置任务模板

任务模板即设置 Pod 模板,其中 RestartPolicy 指通过同一节点上的 kubelet 重新启动容器,仅支持 Never 或 OnFailure,此处 RestartPolicy 选择 Never

说明: RestartPolicy 表示当任务未完成的情况下:

  • Never:任务会在容器组出现故障时创建新的容器组,且故障容器组不会消失。

  • OnFailure:任务会在容器组出现故障时其内部重启容器,而不是创建新的容器组。

下一步点击 添加容器,输入容器的名称 pi 和对应的镜像名 perl。CPU 和内存此处暂不作限定,将使用在创建项目时指定的默认值。

勾选 启动命令,依次添加如下四行命令,即让每一个 Job 执行输出圆周率小数点后 2000 位。设置完成后点击 保存,然后选择 下一步

# 命令perl-Mbignum=bpi-wleprint bpi(2000)

5.6 标签设置

本示例暂不需要设置存储卷,可以跳过此步骤,点击 下一步 进入标签设置。标签默认为 app : job-demo,无需设置节点选择器,点击 创建,任务创建成功,可在任务列表页查看。

5.7 验证任务结果

1、点击该任务 job-demo 查看执行记录,可以看到任务执行的结果状态是 “已完成”,并且一共运行了 4 个 Pod,这是因为在第二步 Completions 设置为 4。

2、在任务详情页的 资源状态,可以查看任务执行过程中创建的容器组。由于 Parallelism 设置为 2,因此任务将预先并行地创建 2 个容器组,然后再继续并行创建 2 个容器组,任务结束时将创建 4 个容器组,

3、点击其中一个容器组,比如 job-demo-5slt4,查看该容器组中的容器。

4、在 资源状态 页,进一步点击该容器然后在 容器日志 的 Tab 下,查看 pi 容器中命令计算圆周率到小数点后 2000 位的输出结果。另外,可点击左侧的 终端 进入容器内部执行命令。

至此,您已经熟悉了任务 (Job) 的基本功能使用,关于任务的各项参数释义详见 任务。

六、在 KubeSphere 中部署 Nginx

使用 project-regular 账号进入已创建的项目 demo-project 后,选择应用负载,点击应用,点击 部署新应用,然后在弹窗中选择 来自应用商店

应用详情配置文件中,可以查看 Nginx 应用的 helm chart 的配置文件。

点击页面右上角的部署按钮,进入基本信息设置页面。

在此页面中,你可进行如下设置:

  • 在应用名称输入框中,可修改应用名称;

  • 当应用包含多个版本时,可点击应用版本下拉框,选择所需的版本进行部署;

  • 在描述信息中,可设置部署应用的描述信息;

  • 点击部署位置,可选择应用部署的企业空间和项目。

点击下一步,进入到应用配置页面。目前,支持 2 种配置方式:可视化配置和 yaml 配置。通过点击 YAML 按钮,来实现配置方式的转换。在应用配置页面中,可设置 nginx 的副本数,并设置是否开启 Ingress。

点击部署,自动跳转到 demo-project 的应用列表页面。在应用列表中,可以查看应用状态为创建中;待应用部署完成后,应用的状态会更新为活跃状态。

在服务列表中,选择 nginx应用对应的服务,设置外网访问方式为 nodeport。示例中,nodeport 为31034。

可以通过 < kubesphere 集群 IP > : < nodeport 端口> 来访问 nginx。

七、在 KubeSphere 中部署 PostgreSQL

作为强大的开源对象关系型数据库系统,PostgreSQL 以其卓越的可靠性、功能鲁棒性和高性能而著称。

设置应用名称和版本,确保 PostgreSQL 部署在 demo-project 项目中,然后点击下一步

备注:如需为 PostgreSQL 设置更多的参数,可点击 YAML 后的切换开关打开应用的 YAML 清单文件,并在清单文件中设置相关参数。

访问 PostgreSQL 数据库:要从集群外访问 PostgreSQL,您需要先用 NodePort 暴露该应用。

访问方式设置为 NodePort 并点击确定。

容器组区域,展开容器详情,点击终端图标。在弹出的窗口中直接输入命令访问数据库。

备注:您也可以使用第三方应用例如 SQLPro Studio 连接数据库。取决于您的 Kubernetes 集群的部署位置,您可能需要在安全组中放行端口并配置相关的端口转发规则。

八、在 KubeSphere 中部署 RabbitMQ

RabbitMQ 是部署最广泛的开源消息代理。它轻量且易于在本地和云上部署,支持多种消息协议。RabbitMQ 可在分布和联邦的配置中部署,以满足大规模和高可用性需求。

设置应用名称和版本,确保 RabbitMQ 部署在 demo-project 项目中,然后点击下一步

应用配置页面,您可以直接使用默认配置,也可以通过修改表单参数或编辑 YAML 文件自定义配置。您需要记录 Root UsernameRoot Password 的值,用于在后续步骤中登录系统。设置完成后点击部署

要从集群外访问 RabbitMQ,您需要先用 NodePort 暴露该应用。

点击更多操作,在下拉菜单中选择编辑外网访问

访问方式设置为 NodePort 并点击确定

您可以在服务端口区域查看暴露的端口。

{$NodeIP}:{$Nodeport} 地址以及步骤 1 中记录的用户名和密码访问 RabbitMQ 的 management 端口。

九、在 KubeSphere 中部署 Redis

使用 project-regular 账号进入已创建的项目 demo-project 后,选择应用负载,点击应用,点击 部署新应用,然后在弹窗中选择 来自应用商店

选择并点击 redis 应用,进入应用信息页面。

应用详情配置文件中,可以查看 redis 应用的 helm chart 的配置文件。

点击页面右上角的部署按钮,进入基本信息设置页面

在此页面中,你可进行如下设置:

  • 在应用名称输入框中,可修改应用名称;

  • 当应用包含多个版本时,可点击应用版本下拉框,选择所需的版本进行部署;

  • 在描述信息中,可设置部署应用的描述信息;

  • 点击部署位置,可选择应用部署的企业空间和项目。

点击下一步,进入到应用配置页面。

目前,支持 2 种配置方式:可视化配置和 yaml 配置。通过点击 YAML 按钮,来实现配置方式的转换。

在应用配置页面中,可设置 redis 的密码。

点击部署,自动跳转到 demo-project 的应用列表页面。

在应用列表中,可以查看应用状态为创建中

待应用部署完成后,应用的状态会更新为活跃状态。

十、在 KubeSphere 中部署 Tomcat

Apache Tomcat 支撑着诸多行业和组织中的众多大规模任务关键型 Web 应用。它提供了一个纯 Java HTTP Web 服务器环境,可用于执行 Java 代码。

要从集群外访问 Tomcat 项目,您需要先用 NodePort 暴露该应用。

  1. 打开服务页面并点击 Tomcat 的服务名称。

点击更多操作,在下拉菜单中选择编辑外网访问

访问方式设置为 NodePort 并点击确定

在浏览器中用 {$NodeIP}:{$Nodeport}/sample 地址访问 Tomcat 示例项目。

赞(0) 更多分享

上篇: Kubernetes(K8S)管理,图形界面,Web UI
下篇: KubeSphere——常用应用UI可视化部署实战(1)