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

简介: 快速学习【实战体验】一步一步搭建容器弹性 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,也是集群创建的,然后查看一下 YAML,YAML 里面有描述 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

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
运维 数据可视化 C++
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
2025年热门Web化容器部署工具对比:Portainer与Websoft9。Portainer以轻量可视化管理见长,适合技术团队运维;Websoft9则提供一站式应用部署与容器管理,内置丰富开源模板,降低中小企业部署门槛。两者各有优势,助力企业提升容器化效率。
765 1
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
1677 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
JSON JavaScript 前端开发
实现ROS系统的Websocket传输,向Web应用推送sensor_msgs::Image数据
WebSocket协议具有低延迟和高实时性的特性,适用于实时数据推送。但是,它也依赖于网络条件,因此,在通过WebSocket发送数据时,保证网络稳定性也是重要的。以上步骤为建立基本的WebSocket传输提供了框架,并可以根据实际需求进行调整和优化。
840 0
|
监控 关系型数据库 MySQL
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
1293 30
|
存储 消息中间件 缓存
构建互联网高性能WEB系统经验总结
构建互联网高性能WEB系统经验总结
289 16
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
669 4
|
存储 消息中间件 缓存
构建互联网高性能WEB系统经验总结
如何构建一个优秀的高性能、高可靠的应用系统对每一个开发者至关重要
279 2
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
670 2
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
795 0
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
543 2