# Lab5 K8s
# 一、实验目的
- 掌握 Kubernetes (K8s) 集群的基本操作,理解其核心概念和功能模块。
- 熟悉 KubeSphere 平台的应用部署流程,学会在其上管理用户、角色、企业空间、项目及资源。
- 实现一个简单的应用部署(如 WordPress、Nginx),并结合存储和网络功能完成配置。
- 学习如何设置容器健康检查器,资源分配策略,以及应用滚动更新和版本回退。
# 二、实验内容与实验要求
KubeSphere 集群的初始化与用户管理:
- 创建 Kubernetes 集群,完成集群环境的搭建。
- 在 KubeSphere 平台上创建企业空间、项目及用户,并设置相应的角色权限。
- 验证用户及角色权限是否正确。
应用部署与管理:
- 创建并部署 WordPress 应用,包括前端组件(WordPress)和后端组件(MySQL)的设置。
- 配置应用的密钥与存储,确保数据库与应用的正常交互。
- 验证部署完成的应用是否可通过外网正常访问。
KubeSphere 的应用负载与服务管理:
- 部署一个简单的 Nginx 应用,设置外网访问和相关参数。
- 在 KubeSphere 平台上使用日志和终端功能管理容器。
- 学习如何为容器定制启动命令和环境变量。
容器更新与版本控制:
- 配置应用的更新策略,了解滚动更新和版本回退的功能。
- 设置容器副本数,保障服务高可用性。
健康检查器与探测器配置:
- 配置并验证存活探测器和就绪探测器的功能。
- 通过模拟不健康状态验证探测器对容器状态的影响。
资源与存储配置:
- 为容器分配 CPU 和内存资源,学习容器资源的预留和配额管理。
- 创建并挂载持久化存储卷,验证存储卷的持久化效果。
- 使用配置字典动态挂载配置文件,完成容器的动态配置。
# 三、实验过程与结果
# 新建集群
按照实验要求创建了集群,集群名称为姓名拼音
# Ⅰ、创建企业空间、项目、用户和平台角色
# 步骤 1 创建用户
- 以 admin 身份使用默认帐户和密码
P@88w0rd
登录 Web 控制台
- 点击左上角的平台管理,然后选择访问控制。在左侧导航栏中,选择平台角色。内置角色的描述信息如下表所示。
- 然后开始创建新用户
ws-manager
, 选择platform-self-provisioner
可以看到,新创建的用户显示在用户页面
- 重复以上的步骤创建新用户
project-admin
project-regular
- 在用户页面,查看创建的用户,可以看到,用户均已成功从创建
# 步骤 2 创建企业空间
- 在左侧导航栏,选择企业空间。企业空间列表中已列出默认企业空间 system-workspace,该企业空间包含所有系统项目。其中运行着与系统相关的组件和服务,您无法删除该企业空间。
- 在企业空间列表页面,点击创建,输入企业空间的名称(姓名拼音),并将用户 ws-admin 设置为企业空间管理员。完成后,点击创建。
- 登出控制台,然后以
ws-admin
身份重新登录。在企业空间设置中,选择企业空间成员,然后点击邀请。
4、邀请 project-admin
和 project-regular
进入企业空间,分别授予 dengbohao-self-provisioner
和 dengbohao-viewer
角色,点击确定。
project-admin
project-regular
- 将 project-admin 和 project-regular 都添加到企业空间后,点击确定。在企业空间成员中,可以看到列出的三名成员。
# 步骤 3 创建项目
- 以
project-admin
身份登录 KubeSphere Web 控制台,在项目中,点击创建
- 输入项目名称
dengbohao
,点击确定。
在项目设置 > 项目成员中,邀请 project-regular 至该项目,并授予该用户 operator 角色。具有 operator 角色的用户是项目维护者,可以管理项目中除用户和角色以外的资源。
# Ⅱ、创建并部署 WordPress
# 1、创建密钥
# 创建 MySQL 密钥
- 使用
project-regular
帐户登录 KubeSphere 控制台,访问dengbohao
的详情页并导航到配置。在保密字典中,点击右侧的创建。
- 输入基本信息,将其命名为
mysql-secret
, 并点击下一步。在下一页中,选择类型为 Opaque(默认),然后点击添加数据来添加键值对。输入如下所示的键 (Key)MYSQL_ROOT_PASSWORD
和值 (Value)123456
,点击右下角 √ 进行确认。完成后,点击创建按钮以继续。
# 创建 WordPress 密钥
按照以上相同的步骤创建一个名为 wordpress-secret
的 WordPress 密钥,输入键 (Key) WORDPRESS_DB_PASSWORD
和值 (Value) 123456
。创建的密钥显示在列表中。
# 2、创建持久卷声明
访问存储下的持久卷声明,点击创建。
输入持久卷声明的基本信息,将其命名为
wordpress-pvc
,然后点击下一步。在存储设置中,需要选择一个可用的存储类,并设置访问模式和卷容量。直接使用默认值,点击下一步继续。
在高级设置中,您无需添加额外的配置,点击创建完成即可。
# 3、创建应用程序
# 添加 MySQL 后端组件和 WordPress 前端组件
导航到应用负载下的应用,选择自制应用 > 创建。
输入基本信息,在应用名称一栏输入
wordpress
,然后点击下一步。在服务设置中,点击创建服务以在应用中设置组件。
设置组件的服务类型为有状态服务。
输入有状态服务的名称(例如 mysql)并点击下一步。
在容器组设置中,点击添加容器。
在搜索框中输入 mysql:5.6 ,按下回车键,然后点击使用默认端口。由于配置还未设置完成,请不要点击右下角的 √ 按钮。
向下滚动到环境变量,点击来自保密字典。输入名称
MYSQL_ROOT_PASSWORD
,然后选择资源mysql-secret
和前面步骤中创建的密钥MYSQL_ROOT_PASSWORD
,完成后点击 √ 保存配置,最后点击下一步继续。选择存储设置中的添加持久卷声明模板,输入 PVC 名称前缀
mysql
和挂载路径模式: 读写 ,路径:/var/lib/mysql
的值。完成后,点击 √ 保存设置并点击下一步继续。在高级设置中,可以直接点击创建,也可以按需选择其他选项。
再次点击创建服务,选择无状态服务。输入名称 wordpress 并点击下一步。
与上述步骤类似,点击添加容器,在搜索栏中输入
wordpress:4.8-apache
并按下回车键,然后点击使用默认端口。向下滚动到环境变量,点击来自保密字典。这里需要添加两个环境变量,请输入以下值:
- 对于
WORDPRESS_DB_PASSWORD
,请选择在步骤 1 中创建的wordpress-secret
和WORDPRESS_DB_PASSWORD
。 - 点击添加环境变量,分别输入
WORDPRESS_DB_HOST
和mysql
作为键 (Key) 和值 (Value)。
注意:对于此处添加的第二个环境变量,该值必须与步骤 5 中创建 MySQL 有状态服务设置的名称完全相同。否则,WordPress 将无法连接到 MySQL 对应的数据库。
- 对于
点击 √ 保存配置,再点击下一步继续。
在存储设置中,点击挂载卷,并点击选择持久卷声明。
选择上一步创建的
wordpress-pvc
,将模式设置为 读写 ,并输入挂载路径/var/www/html
。点击 √ 保存,再点击下一步继续。在高级设置中,可以直接点击创建创建服务,也可以按需选择其他选项。
现在,前端组件也已设置完成。点击下一步继续。
您可以在路由设置中设置路由规则(应用路由 Ingress),也可以直接点击创建。创建成功后,应用将显示在应用列表中。
# 4、验证资源
在工作负载中,分别检查部署和有状态副本集中 wordpress-v1
和 mysql-v1
的状态。如果它们的运行状态为运行中,就意味着 WordPress 已经成功创建。
wordpress-v1
mysql-v1
# 5、通过 NodePort 访问 WordPress
若要在集群外访问服务,选择左侧导航栏中的应用负载 > 服务。点击 wordpress 右侧的三个点后,选择编辑外部访问。
在访问方式中选择 NodePort ,然后点击确定。
点击服务进入详情页,可以在端口处查看暴露的端口。`
通过 https://wordpress-dhxvgcho.c.kubesphere.cloud:30443 访问此应用程序
# Ⅲ、使用 KubeSphere 创建第一个应用
# 1、创建并访问 Nginx 服务
从应用负载的服务面板中,开始创建服务,并选择无状态服务
填写名称 my-nginx
使用镜像 nginx:1.17-alpine
,并使用默认端口
开启外网访问
进入到工作负载界面,可以看到 my-nginx-v1
在运行中,说明应用部署成功
在服务面板可以看到 Nginx 外网访问端口,为 30971
通过 https://nginx-dhxvgcho.c.kubesphere.cloud:30443 访问
# 2、访问容器日志和终端
从 “应用负载” 的 “容器组” 面板中,选择(进入)刚刚创建的 my-nginx 容器组
进入容器组后,在右侧 “容器” 面板中可以通过容器名右侧的两个图标分别查看 “容器日志” 和访问 “终端”
在 “终端” 中是可以如同本地终端一样对容器内的系统进行操作的
# 3、定制启动命令和环境变量
从 “应用负载” 的 “工作负载” 面板中,选择(进入)刚刚创建的 my-nginx 工作负载
点击 更多操作-编辑设置
点击容器,进入容器编辑
在 “编辑容器” 面板中,通过开启 “启动命令” 和 “环境变量” 面板可以对这两项内容进行编辑,编辑完成保存后将新更新部署
# 4、配置应用部署的更新策略
在使用 KubeSphere 创建各类部署时,默认推荐的更新策略便是 “滚动更新”(另一项为 “替换更新”),同时也支持随时进行策略的变更和配置。
“更新策略” 的配置入口与 “容器组模版” 在同一层,如果选择 “滚动更新”,可额外配置容器组更新时 “最少 存活的 Pod 数量” 和 “允许超出副本数的 Pod 数量”
在部署面板中,可以非常方便的增加或减少部署副本的数量,基于以上 “滚动更新” 的配置,会至少保证有 “容器组最小可用数量” 个存活的容器组在滚动更新的过程中工作以保障服务可用
每个应用部署已执行过的更新都可以被记录下来,并通过进入 “版本控制” 标签页选择进行相应的更新 条目进行版本回退
# 5、为应用添加健康检查器
# 5.1 配置并使用 “存活” 探测器
此处选用 “TCP 端口检查” 的方式作为 “存活探测器” 的探针形态,并绑定探测的端口为 **80**
,其它皆使用默认配置并确认 ☑️
通过进入 “终端” 修改 Nginx 监听的端口使 80 端口不生效,“存活探测器” 会基于 “不健康阈值” 配 置在 3 次探测失败后重启容器组,该过程可以在容器组 “事件” 标签页中观察到
进入终端输入
将端口改为 8080
测试 nginx 新的配置,可以看到没问题
然后重载 Nginx 来应用更改
“存活探测器” 会基于 “不健康阈值” 配 置在 3 次探测失败后重启容器组,该过程可以在容器组 “事件” 标签页中观察到
# 5.2 配置并使用 “就绪” 探测器
类似地,选择 “HTTP 请求检查” 的方式作为 “容器就绪检查” 的探针形态,绑定 **GET :80/**
作为探针入口,且设置 “初始延迟” 为 10 秒(服务就绪通常需要更多时间)
保存配置后,容器组仍然会执行滚动更新以使 “就绪探测器” 生效
通过进入 “终端” 修改 Nginx 使 80 端口直接返回 404 ,“就绪探测器” 会基于 “不健康阈 值” 配置在 3 次探测失败后把容器组标记为不健康,该过程可以在容器组 “事件” 标签页中观察到
在部署面板中,也可以看到容器组被 “就绪探测器” 被标记为 “容器没有准备就绪”(⚠ 就绪检测是 吧是不会导致容器组重启的)
# Ⅳ、使用 KubeSphere 配置应用资源及存储
从 “应用负载” 面板中,选择 my-nginx 工作负载
# 1、容器分配 CPU 和内存资源
# 1.1 配置容器的资源预留及配额
对容器进行定制化的资源配置,可以回到工作负载内的 “编辑配置模版” 界面,进入 nginx 容器的配置界面。
# 2、为容器组配置持久化数据
# 2.1 将配置文件挂载至指定目录
返回项目面板,通过左侧的 “配置中心” 中的 “配置字典”,可以进入配置字典面板执行 “创建配置”
创建一个名为 nginx-conf 的配置集,添加一个 default.conf 的键并填写如上内容,用于覆盖现 有的 Nginx 默认配置文件
完成创建后,可以在配置面板看到已经创建的 nginx-conf 配置集,及其所含的一个配置项 default.conf
接下来返回 my-nginx 的部署面板,再次进入 “编辑配置模版”,这次需要进入左侧 “存储卷” 标签页, 选择 “挂载配置文件或密钥”,开始绑定前面创建的配置集
完成如上配置并保存,即可实现:将 default.conf 配置项的内容作为文件挂载到 /etc/nginx/conf.d/default.conf (即覆盖原配置文件)
完成如上所有操作后,会触发容器组的滚动更新,更新成功后重新访问 Nginx 地址 https://nginx-dhxvgcho.c.kubesphere.cloud:30443
发现跳转到指定地址 http://www.uisee.com
# 2.2 添加并挂载持久化存储卷
返回项目面板,从左侧面板的 “存储” 进入持久卷声明,开始 “创建存储卷”
创建一个名为 nginx-pv 的存储卷,然后完成如图的配置后,“下一步” 跳过高级设置,直接 “创建” 存储卷
再次进入 my-nginx 的 “编辑配置模版 “,选择 “挂载卷”
如图所示,选取先前创建的 nginx-pv 持久化存储卷,并将它绑定到 Nginx 容器的 /var/www 目 录节点上,而后保存配置
确认配置后,容器组会再次滚动更新
现在 1 GB 的持久化存储已经绑定到了 Nginx 容器到 /var/www 目录下,可以通过终端进入目录任意写入内容
如我在 /var/www
目录下创建 test.txt
然后重新部署容器组
再次进入容器内,进入 /var/www
目录,可以看到 test.txt
依然存在,证明持久化配置成功
# 四、实验总结
通过这次实验,可不光熟悉了 KubeSphere 的核心功能,对 Kubernetes 的理解也更深了。KubeSphere 提供的界面化操作可比较好用,大大降低了 Kubernetes 的使用门槛,那些复杂的操作一下子就变得直观易懂。
在实验过程中,系统地学习了从用户管理到资源分配、从应用部署到存储挂载的完整流程,对现代化云原生技术有了更深刻的体会