# Lab5 K8s

# 一、实验目的

  1. 掌握 Kubernetes (K8s) 集群的基本操作,理解其核心概念和功能模块。
  2. 熟悉 KubeSphere 平台的应用部署流程,学会在其上管理用户、角色、企业空间、项目及资源。
  3. 实现一个简单的应用部署(如 WordPress、Nginx),并结合存储和网络功能完成配置。
  4. 学习如何设置容器健康检查器,资源分配策略,以及应用滚动更新和版本回退。

# 二、实验内容与实验要求

KubeSphere 集群的初始化与用户管理:

  • 创建 Kubernetes 集群,完成集群环境的搭建。
  • 在 KubeSphere 平台上创建企业空间、项目及用户,并设置相应的角色权限。
  • 验证用户及角色权限是否正确。

应用部署与管理:

  • 创建并部署 WordPress 应用,包括前端组件(WordPress)和后端组件(MySQL)的设置。
  • 配置应用的密钥与存储,确保数据库与应用的正常交互。
  • 验证部署完成的应用是否可通过外网正常访问。

KubeSphere 的应用负载与服务管理:

  • 部署一个简单的 Nginx 应用,设置外网访问和相关参数。
  • 在 KubeSphere 平台上使用日志和终端功能管理容器。
  • 学习如何为容器定制启动命令和环境变量。

容器更新与版本控制:

  • 配置应用的更新策略,了解滚动更新和版本回退的功能。
  • 设置容器副本数,保障服务高可用性。

健康检查器与探测器配置:

  • 配置并验证存活探测器和就绪探测器的功能。
  • 通过模拟不健康状态验证探测器对容器状态的影响。

资源与存储配置:

  • 为容器分配 CPU 和内存资源,学习容器资源的预留和配额管理。
  • 创建并挂载持久化存储卷,验证存储卷的持久化效果。
  • 使用配置字典动态挂载配置文件,完成容器的动态配置。

# 三、实验过程与结果

# 新建集群

按照实验要求创建了集群,集群名称为姓名拼音

image-20241218101758463

# Ⅰ、创建企业空间、项目、用户和平台角色

# 步骤 1 创建用户

  1. 以 admin 身份使用默认帐户和密码 P@88w0rd 登录 Web 控制台

image-20241218102145055

  1. 点击左上角的平台管理,然后选择访问控制。在左侧导航栏中,选择平台角色。内置角色的描述信息如下表所示。

image-20241218103519806

  1. 然后开始创建新用户 ws-manager , 选择 platform-self-provisioner

​ 可以看到,新创建的用户显示在用户页面

image-20241218102726245

  1. 重复以上的步骤创建新用户

image-20241218102757283 project-admin

image-20241218102916738

project-regular

image-20241218103032977

  1. 用户页面,查看创建的用户,可以看到,用户均已成功从创建

image-20241218122039341

# 步骤 2 创建企业空间

  1. 在左侧导航栏,选择企业空间。企业空间列表中已列出默认企业空间 system-workspace,该企业空间包含所有系统项目。其中运行着与系统相关的组件和服务,您无法删除该企业空间。

image-20241218103717763

  1. 在企业空间列表页面,点击创建,输入企业空间的名称(姓名拼音),并将用户 ws-admin 设置为企业空间管理员。完成后,点击创建
    image-20241218103749924

image-20241218103806362

  1. 登出控制台,然后以 ws-admin 身份重新登录。在企业空间设置中,选择企业空间成员,然后点击邀请

image-20241218103933596

image-20241218103946828

image-20241218104002180

4、邀请 project-adminproject-regular 进入企业空间,分别授予 dengbohao-self-provisionerdengbohao-viewer 角色,点击确定

project-admin

image-20241218104145930

project-regular

image-20241218104257382

  1. 将 project-admin 和 project-regular 都添加到企业空间后,点击确定。在企业空间成员中,可以看到列出的三名成员。

image-20241218104352035

# 步骤 3 创建项目

  1. project-admin 身份登录 KubeSphere Web 控制台,在项目中,点击创建

image-20241218104514508

image-20241218104527597

  1. 输入项目名称 dengbohao ,点击确定

image-20241218104610003

  1. 项目设置 > 项目成员中,邀请 project-regular 至该项目,并授予该用户 operator 角色。具有 operator 角色的用户是项目维护者,可以管理项目中除用户和角色以外的资源。

    image-20241218104725256

image-20241218104813000

image-20241218104828958

# Ⅱ、创建并部署 WordPress

# 1、创建密钥

# 创建 MySQL 密钥
  1. 使用 project-regular 帐户登录 KubeSphere 控制台,访问 dengbohao 的详情页并导航到配置。在保密字典中,点击右侧的创建

image-20241218105028734

image-20241218105114206

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

image-20241218105248149

image-20241218105258921

image-20241218105318842

image-20241218105352152

# 创建 WordPress 密钥

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

image-20241218105454595

image-20241218105507245

# 2、创建持久卷声明

  1. 访问存储下的持久卷声明,点击创建
    image-20241218105609104

  2. 输入持久卷声明的基本信息,将其命名为 wordpress-pvc ,然后点击下一步
    image-20241218105643800

  3. 存储设置中,需要选择一个可用的存储类,并设置访问模式卷容量。直接使用默认值,点击下一步继续。
    image-20241218105729051

  4. 高级设置中,您无需添加额外的配置,点击创建完成即可。

image-20241218105753628

# 3、创建应用程序

# 添加 MySQL 后端组件和 WordPress 前端组件
  1. 导航到应用负载下的应用,选择自制应用 > 创建
    image-20241218110114947

  2. 输入基本信息,在应用名称一栏输入 wordpress ,然后点击下一步
    image-20241218110144498

  3. 服务设置中,点击创建服务以在应用中设置组件。
    image-20241218110158516

  4. 设置组件的服务类型为有状态服务
    image-20241218110207769

  5. 输入有状态服务的名称(例如 mysql)并点击下一步
    image-20241218110226451

  6. 容器组设置中,点击添加容器
    image-20241218110326039

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

  8. 向下滚动到环境变量,点击来自保密字典。输入名称 MYSQL_ROOT_PASSWORD ,然后选择资源 mysql-secret 和前面步骤中创建的密钥 MYSQL_ROOT_PASSWORD ,完成后点击 保存配置,最后点击下一步继续。
    image-20241218110719025

  9. 选择存储设置中的添加持久卷声明模板,输入 PVC 名称前缀 mysql挂载路径模式: 读写 ,路径: /var/lib/mysql 的值。完成后,点击 保存设置并点击下一步继续。
    image-20241218110748701
    image-20241218110850151

  10. 高级设置中,可以直接点击创建,也可以按需选择其他选项。
    image-20241218110908959

  11. 再次点击创建服务,选择无状态服务。输入名称 wordpress 并点击下一步
    image-20241218110929624
    image-20241218111003280

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

  13. 向下滚动到环境变量,点击来自保密字典。这里需要添加两个环境变量,请输入以下值:

    • 对于 WORDPRESS_DB_PASSWORD ,请选择在步骤 1 中创建的 wordpress-secretWORDPRESS_DB_PASSWORD
    • 点击添加环境变量,分别输入 WORDPRESS_DB_HOSTmysql 作为键 (Key) 和值 (Value)。

    注意:对于此处添加的第二个环境变量,该值必须与步骤 5 中创建 MySQL 有状态服务设置的名称完全相同。否则,WordPress 将无法连接到 MySQL 对应的数据库。

​ 点击 保存配置,再点击下一步继续。
image-20241218111402434

  1. 存储设置中,点击挂载卷,并点击选择持久卷声明

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

  3. 高级设置中,可以直接点击创建创建服务,也可以按需选择其他选项。
    image-20241218111617014

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

  5. 您可以在路由设置中设置路由规则(应用路由 Ingress),也可以直接点击创建。创建成功后,应用将显示在应用列表中。

image-20241218111723009

# 4、验证资源

工作负载中,分别检查部署有状态副本集wordpress-v1mysql-v1 的状态。如果它们的运行状态为运行中,就意味着 WordPress 已经成功创建。

wordpress-v1

image-20241218111850196

mysql-v1

image-20241218111904655

# 5、通过 NodePort 访问 WordPress

  1. 若要在集群外访问服务,选择左侧导航栏中的应用负载 > 服务。点击 wordpress 右侧的三个点后,选择编辑外部访问
    image-20241218112715065

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

  3. 点击服务进入详情页,可以在端口处查看暴露的端口。`

image-20241218112834341

  1. 通过 https://wordpress-dhxvgcho.c.kubesphere.cloud:30443 访问此应用程序

image-20241218123044991

# Ⅲ、使用 KubeSphere 创建第一个应用

# 1、创建并访问 Nginx 服务

从应用负载的服务面板中,开始创建服务,并选择无状态服务

image-20241218123336364

image-20241218123403291

填写名称 my-nginx

image-20241218123633141

使用镜像 nginx:1.17-alpine ,并使用默认端口
image-20241218123737010

开启外网访问

image-20241218123936883

进入到工作负载界面,可以看到 my-nginx-v1 在运行中,说明应用部署成功

image-20241218124135915

在服务面板可以看到 Nginx 外网访问端口,为 30971

image-20241218124221706

通过 https://nginx-dhxvgcho.c.kubesphere.cloud:30443 访问

image-20241218124900264

image-20241218124915462

# 2、访问容器日志和终端

从 “应用负载” 的 “容器组” 面板中,选择(进入)刚刚创建的 my-nginx 容器组

image-20241218125205542

进入容器组后,在右侧 “容器” 面板中可以通过容器名右侧的两个图标分别查看 “容器日志” 和访问 “终端”

image-20241218125249510

在 “终端” 中是可以如同本地终端一样对容器内的系统进行操作的

image-20241218125309639

# 3、定制启动命令和环境变量

从 “应用负载” 的 “工作负载” 面板中,选择(进入)刚刚创建的 my-nginx 工作负载

image-20241218125410509

点击 更多操作-编辑设置

image-20241218165111484

点击容器,进入容器编辑

image-20241218165155484

在 “编辑容器” 面板中,通过开启 “启动命令” 和 “环境变量” 面板可以对这两项内容进行编辑,编辑完成保存后将新更新部署

image-20241218165315435

# 4、配置应用部署的更新策略

在使用 KubeSphere 创建各类部署时,默认推荐的更新策略便是 “滚动更新”(另一项为 “替换更新”),同时也支持随时进行策略的变更和配置。

image-20241218165614532

“更新策略” 的配置入口与 “容器组模版” 在同一层,如果选择 “滚动更新”,可额外配置容器组更新时 “最少 存活的 Pod 数量” 和 “允许超出副本数的 Pod 数量”

在部署面板中,可以非常方便的增加或减少部署副本的数量,基于以上 “滚动更新” 的配置,会至少保证有 “容器组最小可用数量” 个存活的容器组在滚动更新的过程中工作以保障服务可用

image-20241218170040379

每个应用部署已执行过的更新都可以被记录下来,并通过进入 “版本控制” 标签页选择进行相应的更新 条目进行版本回退

image-20241218170137395

image-20241218170958316

# 5、为应用添加健康检查器

# 5.1 配置并使用 “存活” 探测器

此处选用 “TCP 端口检查” 的方式作为 “存活探测器” 的探针形态,并绑定探测的端口为 **80** ,其它皆使用默认配置并确认 ☑️

image-20241218170418691

通过进入 “终端” 修改 Nginx 监听的端口使 80 端口不生效,“存活探测器” 会基于 “不健康阈值” 配 置在 3 次探测失败后重启容器组,该过程可以在容器组 “事件” 标签页中观察到

进入终端输入

image-20241218171225137

image-20241218171303430

将端口改为 8080

image-20241218171417057

测试 nginx 新的配置,可以看到没问题

image-20241218171536434

然后重载 Nginx 来应用更改

image-20241218171617483

“存活探测器” 会基于 “不健康阈值” 配 置在 3 次探测失败后重启容器组,该过程可以在容器组 “事件” 标签页中观察到

image-20241218171746046

# 5.2 配置并使用 “就绪” 探测器

类似地,选择 “HTTP 请求检查” 的方式作为 “容器就绪检查” 的探针形态,绑定 **GET :80/** 作为探针入口,且设置 “初始延迟” 为 10 秒(服务就绪通常需要更多时间)

image-20241218170540183

image-20241218170611631

保存配置后,容器组仍然会执行滚动更新以使 “就绪探测器” 生效

image-20241218172021261

通过进入 “终端” 修改 Nginx 使 80 端口直接返回 404 ,“就绪探测器” 会基于 “不健康阈 值” 配置在 3 次探测失败后把容器组标记为不健康,该过程可以在容器组 “事件” 标签页中观察到

image-20241218171857649

在部署面板中,也可以看到容器组被 “就绪探测器” 被标记为 “容器没有准备就绪”( 就绪检测是 吧是不会导致容器组重启的)

image-20241218172307090

# Ⅳ、使用 KubeSphere 配置应用资源及存储

从 “应用负载” 面板中,选择 my-nginx 工作负载

image-20241218172358317

# 1、容器分配 CPU 和内存资源

# 1.1 配置容器的资源预留及配额

对容器进行定制化的资源配置,可以回到工作负载内的 “编辑配置模版” 界面,进入 nginx 容器的配置界面。

image-20241218172758498

image-20241218172958922

# 2、为容器组配置持久化数据

# 2.1 将配置文件挂载至指定目录

返回项目面板,通过左侧的 “配置中心” 中的 “配置字典”,可以进入配置字典面板执行 “创建配置”

image-20241218173420449

创建一个名为 nginx-conf 的配置集,添加一个 default.conf 的键并填写如上内容,用于覆盖现 有的 Nginx 默认配置文件

image-20241218173518460

image-20241218173748058

完成创建后,可以在配置面板看到已经创建的 nginx-conf 配置集,及其所含的一个配置项 default.conf

image-20241218173818270

接下来返回 my-nginx 的部署面板,再次进入 “编辑配置模版”,这次需要进入左侧 “存储卷” 标签页, 选择 “挂载配置文件或密钥”,开始绑定前面创建的配置集

image-20241218173946005

image-20241218174201613

完成如上配置并保存,即可实现:将 default.conf 配置项的内容作为文件挂载到 /etc/nginx/conf.d/default.conf (即覆盖原配置文件)

完成如上所有操作后,会触发容器组的滚动更新,更新成功后重新访问 Nginx 地址 https://nginx-dhxvgcho.c.kubesphere.cloud:30443

发现跳转到指定地址 http://www.uisee.com

image-20241218174327073

# 2.2 添加并挂载持久化存储卷

返回项目面板,从左侧面板的 “存储” 进入持久卷声明,开始 “创建存储卷”

image-20241218174539746

创建一个名为 nginx-pv 的存储卷,然后完成如图的配置后,“下一步” 跳过高级设置,直接 “创建” 存储卷

image-20241218175245448

再次进入 my-nginx 的 “编辑配置模版 “,选择 “挂载卷”

image-20241218175507801

如图所示,选取先前创建的 nginx-pv 持久化存储卷,并将它绑定到 Nginx 容器的 /var/www 目 录节点上,而后保存配置

image-20241218175622157

确认配置后,容器组会再次滚动更新

image-20241218175641008

现在 1 GB 的持久化存储已经绑定到了 Nginx 容器到 /var/www 目录下,可以通过终端进入目录任意写入内容

如我在 /var/www 目录下创建 test.txt

image-20241218175847818

然后重新部署容器组

image-20241218175956417

image-20241218180011004

再次进入容器内,进入 /var/www 目录,可以看到 test.txt 依然存在,证明持久化配置成功

image-20241218180046124

# 四、实验总结

通过这次实验,可不光熟悉了 KubeSphere 的核心功能,对 Kubernetes 的理解也更深了。KubeSphere 提供的界面化操作可比较好用,大大降低了 Kubernetes 的使用门槛,那些复杂的操作一下子就变得直观易懂。

在实验过程中,系统地学习了从用户管理到资源分配、从应用部署到存储挂载的完整流程,对现代化云原生技术有了更深刻的体会