【实战体验】一步一步搭建容器弹性 Web 与内容管理系统|学习笔记

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 快速学习【实战体验】一步一步搭建容器弹性 Web 与内容管理系统

开发者学堂课程【容器持久化储存训练营【实战体验】一步一步搭建容器弹性 Web 与内容管理系统】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/889/detail/14191


【实战体验】一步一步搭建容器弹性 Web 与内容管理系统


内容介绍:

一、前言

二、CNFS 使用步骤

三、通过 CNFS 搭建弹性Web 服务、回收站实现数据保护


一、前言

这节课演示一下 CNFS 基本的使用方式也顺便介绍一下 CNFS建弹性 Web 服务的时候的基本步骤

首先了解 CNFS 基本概念

Container Network FileSvstem:容器网络文件系统;

 KBS 生态中对底层存储服务的抽象描述;

CNFS 后端存储依然是IAAS层分布式存储;

CNF S是底层存储资源+最佳实践;

CNFS 有诸多的功能以及一些使用方式

下面这个使用文档中有 CNFS 更多的细节:

https://help.aliyun.com/document_detail/264678.html

首先理顺一下 CNFS 和 Volume 的关系,image.png

Pod 引用 PVC 去使用存储卷,而PVC 和 CNF S关系怎么样的呢CNFS 是一个存储在 K8S 一个映射 

比如一个 NAS 的文件系统K8S里面映射成一个 CNFS 的对象,那么这个对象StorageClass 所引用这时使用某个PVC 去创建 PV相当于这个 PVC 使用了这个 CNFS也就是这个 NAS 创建个 PV

此时 PVC 就对应了 PV 和这个 NAS 起到 Pod 使用 PVC 使用 PV 使用 NAS 的功能,就是 Pod一个 PVC 的时候使用 StorageClass 赢了一个我们所定义的CNFS 这么一个容器网络文件系统

所以说从概念上来说CNFS 就是一个底层存储 KBS 的一个映射。


二、CNFS 使用步骤

1、集群创建

阿里云控制台创建 ACK 集群

在存储插件栏:选择创建 NAS 文件系统和动态存储类型;

首先登录 ACK 容器服务的公众平台,点击创建一个集群然后建一个,例如 cnfs-demo-1,然后选择地域,并选择 vpc,以及 API Server 公网的访问权限

image.png

然后选择机器类型然后去设置密码或设置密钥,接着去配置主键,在我们的存储件里面,有一个‘创建默认 NAS 文件系统如CNFS 容器网文件系统动态存储类型’的选项,把这个勾选上

这就是群创一个 CNFS 的一个对象

最后点击创建个集群因为创建集群可能需要十多分钟创建时间所以这时可以不去具体创建,而是选择使用一个已经创建好的集群

2、CNFS 检查

· 到集群中查看是否默认创建 CNFS;

· 意看是否创建默认 StorageClass;

这一步检查 CNFS 对象是不是已经创建。首先,点到我们的一个自定义资源里,然后看到有没有一个 ContainerNetworkFileSystem

,点进去发现已经创建好了一个对象叫 default-cnfs-nas-a3c9809-20210917180452这就是我们所创建的 CNFS,也是集群创建的然后看一下 YAMLYAML 里面有描述 CNFS 的细节。从中可以看出这个 CNFS 是一个 NFS 文件类型,并且  cn-huhehaot 的 regionld。 这里还可以看到其他文件系统以及其他所有的参数所以它的状态是可用的

再看一下我们的所有 Class在我们的存下面我们有一个存,从中可以看到有一个 CNFS 类型Class,这说明这个 Class 它是可用的,并且自动创建好了

3、创建应用

· 创建 PVC ,动态创建 NAS 子目录卷;

· 创建应用,使用动态创建的 NAS PV;

首先去公众台创建一个应用,利用模板创建应用

image.png选择创建自定义应用,然后把模板粘贴上去,然后可以看到 pvc 的定义它是一个把所有 Class 定义成了一个 alibabacloud-cnfs-nas 的卷,在所有的 strongeClassName 中,大小配置是 1Gi,其具体的模板是一个 nginx 服务,并且挂载一个容器的 data 的目录下面

为了做对比,在创建之前,确定存储以及是空的pv pvc 也都是空的

现在重新创建一下自定义服务,把模板粘贴上去,然后点击创建创建完成后,看一下无状态务,可以看到一个 cnfs-nas 已经创建,但是现在容器组数量为0/1

看一下存储存储声明,发现一个 pvc 已经开始创建并且已经关联到了一个存储卷的一个 pv,这个 pv 也是自动创建的

然后再去看一下这个无状态服务已经创建一个具体的 Pod(容器组数量为1/1)。

接着容器组里看到 Pod 详情。我们可以去登录我们 Pod,检查一下挂载情况,看到挂载 data 这个目录下面,同时可以看下挂载点的信息

root@cnts-nas-7c56657995-qfb6x:/# ls bin boot data dev etc home lib lib64 media mnt opt proc root run sbin selinux srv sys tmp usr var

root@cnfs-nas-7c56657995-qfb6x:/# cd /data

root@cnfs-nas-7c56657995-qfb6x:/data# l5

rootecnfs-nas-7c56657995-qfb6x:/datar mount |grep nfs __e_2_addc-ad11-b6cadhf1e5h8 an /data tvne

8c2234afff-hff98. cn-huhehaote.nas.aliyuncs.com:/nas-b9e23aee-df43-4ddc-ad11-b6côdbfle5b8 on /data type nfs (rw,relat ine,vers=3,rsize=1848576,wsize=1848576,namlen=255,hard,nolock,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.2.249,mountvers=3,mountport=2049,mountproto=tcp,local_lock=al

L,addr=192.168.2.249)

root@cnfs-nas-7c56657995-qfb6x:/data#

我们可以看到 data 的目录是挂载到 8c2234afff-hff98. cn-huhehaote.nas.aliyuncs.com:/nas  这个 nas 系统的子目录上,

然后 nas-b9e23aee-df43-4ddc-ad11-b6côdbfle5b8 就是我们的 pv 的名字,这存储卷里的 pv 对应起来的,也就是这个 pv 所对应的一个子目录

这时我们可以在这个目录下面创建一个 demo 的文件。首先关掉我们的 demo然后可以重启 Pod,或者添加 Pod。

首先把现 Pod 删掉然后会创建一个新的 Pod。

登录新的 Pod看到数据仍然存在

同时可以扩容一下这个 Pod,比如做一个伸缩

image.png然后一个 Pod 变成两个 Pod点击确认可以看新创建的一个 Pod

登录在这个 Pod 里面同样是挂在相同的一个 NAS 的文件系统里,并且那个 demo 的文件也依然存在这就是演示的通过 CNFS创应用并且扩容我们的一个应用的一个过程。

4.数据管理

· 删除 PVC ,根据回收策略 PV  会被自动删除;

· 对应NAS 数据也会被清理;

数据管理其实就是回收 pvc 的一个情况,比如我们这个应用已经执行完了,想要删掉这个应用,删掉它占用的存储。那么首先把应用删掉然后把容器组的一个容器删掉删除容器可能需要二三十秒的关闭的时间)。

这时我们去看一下存储声明以及存

删除底盘外面的存储声明是不会自动删除的需要我们手删除等到 Pod 全部删干净之后,就会自动删掉 pvc。并且删除 pvc,那么 pv 也会被回收掉


三、通过 CNFS 搭建弹性 Web 服务、回收站实现数据保护

1.创建 wordpress 应用:

应用目录找到 Wordpress 的应用,然后改一下配置。在参数里面,把具体的所有 Class 类型配置成 CNFS,并把云盘类型改为 CNFS类型,修改 storageClass,然后点创建,此时 wordpress 的应用已经创建

2.Wordpress 中添加新内容:

到集内部去看一下服务情况可以看到有一个无的服务和一个有的服务因为 WordPress 的底层是一个数据库而上层是 WordPress 的一个外部服务器所以说它是由两部分组成的一个包含有状态的数据库还有一个 WordPress 服务器

所有它会创建两个 pvc我们可以看类里面两个 pvc一个是给层使用的这里选择使用云盘,它的 class 配置的是 alicloud-disk-ssd 的一个云盘而上层是通过外部服务器的一个 pvc,它是通过我们刚才配置创建了一个 nas pv 给使用

所有两个 pvc 都已经自动创建了相应的 pv然后我们看一下他们应的的 Pod,发现 Pod 启动的相对慢一些,这是因为它会做一些健康检查类的工作

同时 WordPress 会等到我们的数据库准备好后才能起来所以这地方会稍微慢一些

此时,WordPresss 的这个数据库已经起来了,但是WordPress版型的服务器还在启动当中我们可以等个几秒钟的时间

这时我们可以连到一个服务器上去

[rootiZhp35dZsdvbz9rnhm99kqZ~]# kubect get pod

image.png这里可以看到两个Pod,第二个 Pod也在启动当中

然后可以我们刚才所安装的

image.png此时两个 Pod 已经都起来了,然后通过网络地址访问 WordPress。

image.png是一个默认的一个 WordPress,这时候我们去登录一下 WordPress,首先确定用户密码image.png这是获取密码的一个方式

这时候我们可以去登录下这个 WordPress。登录进去之后我们可以发布一个博客然后看一下他的数据持续化情况

登陆完成后,加一个新的一个博客。比如名字叫 cnfs demo然后加一个 hello cnfs,再加一图片然后发布发布完成 

从主页上我们可以看到发布博客

3.删除 nas 中的图片数据,模拟数据丢失:
接下来演示一下数据的一个丢失和找回的过程
首先去到我们的容器组演示应用程序误删了一个文件或者用户误删了一个文件因为这是 WordPress 本身发生的事情,所以我们进入它的 pod 里面做一个误删的操作进入 WordPress 本身 pod 里的挂载情况有一个 fs 挂载就是我们刚才所说的那个 CNFS 的某个子目录,并且下面有一个 WordPress 的一个子目挂载到cd目录
image.png我们假装的把刚才上传图片这个文件删掉
这时再去登录一下刚才发布的博客刷新一下,会发现这个图片已经丢失
4.通过回收站恢复数据;
么此时我们就要去到nas公众台找回这个数据找到刚才那个文件系统可以看到是哪一个目录。它 pv 的名字nas-bd50e1a8-7425-4cf5-Sea7b80e9166feal然后找到这个目录image.png这就是刚刚所删然后点击恢复这个文件恢复到原来的目录里面,并且里面的图片也已经回来了,这时再去刷新一下我们的网站,图片已经回到页面上这也就证明了  WordPress 的一个误删找回的功能。

  image.png

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6天前
|
JSON Rust 安全
30天拿下Rust之实战Web Server
30天拿下Rust之实战Web Server
26 7
|
8天前
|
JavaScript 前端开发 数据安全/隐私保护
组件库实战 | 教你如何设计Web世界中的表单验证
该文章通过实战演练,教授了如何在Web应用中设计和实现表单验证,包括使用Vue.js处理表单输入的验证逻辑、展示错误信息以及通过插槽和组件间通信来增强表单的功能性和用户体验。
组件库实战 | 教你如何设计Web世界中的表单验证
|
11天前
|
缓存 中间件 网络架构
Python Web开发实战:高效利用路由与中间件提升应用性能
在Python Web开发中,路由和中间件是构建高效、可扩展应用的核心组件。路由通过装饰器如`@app.route()`将HTTP请求映射到处理函数;中间件则在请求处理流程中插入自定义逻辑,如日志记录和验证。合理设计路由和中间件能显著提升应用性能和可维护性。本文以Flask为例,详细介绍如何优化路由、避免冲突、使用蓝图管理大型应用,并通过中间件实现缓存、请求验证及异常处理等功能,帮助你构建快速且健壮的Web应用。
11 1
|
2月前
|
数据库 开发者 Java
颠覆传统开发:Hibernate与Spring Boot的集成,让你的开发效率飞跃式提升!
【8月更文挑战第31天】在 Java 开发中,Spring Boot 和 Hibernate 已成为许多开发者的首选技术栈。Spring Boot 简化了配置和部署过程,而 Hibernate 则是一个强大的 ORM 框架,用于管理数据库交互。将两者结合使用,可以极大提升开发效率并构建高性能的现代 Java 应用。本文将通过代码示例展示如何在 Spring Boot 项目中集成 Hibernate,并实现基本的数据库操作,包括添加依赖、配置数据源、创建实体类和仓库接口,以及在服务层和控制器中处理 HTTP 请求。这种组合不仅简化了配置,还提供了一套强大的工具来快速开发现代 Java 应用程序。
62 0
|
2月前
|
Java 缓存 数据库连接
揭秘!Struts 2性能翻倍的秘诀:不可思议的优化技巧大公开
【8月更文挑战第31天】《Struts 2性能优化技巧》介绍了提升Struts 2 Web应用响应速度的关键策略,包括减少配置开销、优化Action处理、合理使用拦截器、精简标签库使用、改进数据访问方式、利用缓存机制以及浏览器与网络层面的优化。通过实施这些技巧,如懒加载配置、异步请求处理、高效数据库连接管理和启用GZIP压缩等,可显著提高应用性能,为用户提供更快的体验。性能优化需根据实际场景持续调整。
49 0
|
2月前
|
Java 数据库连接 Spring
Struts 2 插件开发竟如魔法盛宴,为框架注入超能力,开启奇幻编程之旅!
【8月更文挑战第31天】在Web开发中,Struts 2插件开发允许我们在不改动框架核心代码的前提下,通过创建实现特定接口的Java类来扩展框架功能、调整其行为或促进与其他框架(如Spring、Hibernate)的集成,从而更好地满足特定业务需求。遵循良好的设计原则与实践,能够确保插件的高效稳定运行并提升整体项目的可维护性。具体步骤包括创建项目、定义插件类、实现初始化与销毁逻辑,并将插件部署至应用中。
46 0
|
2月前
|
开发者 前端开发 开发框架
JSF与移动应用,开启全新交互体验!让你的Web应用轻松征服移动设备,让用户爱不释手!
【8月更文挑战第31天】在现代Web应用开发中,移动设备的普及使得构建移动友好的应用变得至关重要。尽管JSF(JavaServer Faces)主要用于Web应用开发,但结合Bootstrap等前端框架,也能实现优秀的移动交互体验。本文探讨如何在JSF应用中实现移动友好性,并通过示例代码展示具体实现方法。使用Bootstrap的响应式布局和组件可以确保JSF页面在移动设备上自适应,并提供友好的表单输入和提交体验。尽管JSF存在组件库较小和学习成本较高等局限性,但合理利用其特性仍能显著提升用户体验。通过不断学习和实践,开发者可以更好地掌握JSF应用的移动友好性,为Web应用开发贡献力量。
39 0
|
1月前
|
数据库 开发者 Python
web应用开发
【9月更文挑战第1天】web应用开发
40 1
|
23天前
|
数据可视化 图形学 UED
只需四步,轻松开发三维模型Web应用
为了让用户更方便地应用三维模型,阿里云DataV提供了一套完整的三维模型Web模型开发方案,包括三维模型托管、应用开发、交互开发、应用分发等完整功能。只需69.3元/年,就能体验三维模型Web应用开发功能!
43 8
只需四步,轻松开发三维模型Web应用
|
13天前
|
安全 API 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
55 6
下一篇
无影云桌面