容器应用使用阿里云文件存储NAS最佳实践

简介: 应用程序需要数据, IT方案被创造出来是为了解决商业业务数据的问题。容器问世之时,它最初的目的是应对无状态化服务。随着容器技术的成熟,越来越多的人希望容器化应用可以直接关联数据。不论是传统的还是新型应用,都需要持久化存储。

容器应用需要使用共享文件存储吗

应用程序需要数据, IT方案被创造出来是为了解决商业业务数据的问题。容器问世之时,它最初的目的是应对无状态化服务。随着容器技术的成熟,越来越多的人希望容器化应用可以直接关联数据。不论是传统的还是新型应用,都需要持久化存储。
阿里云文件存储NAS以简单,易用,弹性扩展的特点,自然而然成为容器存储的一个主要选择。

通常来说,共享文件存储存储主要应用在需要长时间运行,多POD间需要共享访问数据,同时还需要进行故障切换的有状态容器业务场景,例如如下的一些场景:

  • 内容管理应用程序像WordPress和Drupal需要扩展到多个实例来获取性能和冗余型,并在多个实例间共享上传数据、插件、模板。
  • 开发工具比如JIRA, Artifactory, Git需要实例之间共享代码和编译数据并实现高可用性。
  • 机器学习框架MXNet和Tensorflow需要通过文件系统接口访问数据,并持久存储允许多个用户共享访问和运行相同的数据集。
  • 共享笔记本系统PAI-Notebook需要持久存储笔记本和用户工作区,并允许多个研究员合作共享访问数据。

可以通过哪些方式将共享文件系统到容器

阿里云文件存储NAS单文件系统默认可以创建两个根目录的挂载地址(可申请更多数量),挂载地址对应的是DNS域名,可以归属于不同的VPC,因此通过不同VPC的挂载地址将文件系统挂载到不同VPC的ECS或者容器应用。

挂载单文件系统到容器

  • 每个POD挂载一个文件系统
    对于不需要数据在多个POD间共享的场景(Deployment无状态服务为主),但又需要持久化存储具备较好的性能和灵活的弹性扩展能力,不同POD间的数据需要完全的隔离以保证数据安全和性能的QOS,我们可以为每个POD挂载一个独立的文件系统。单POD可以独享文件系统的吞吐和IOPS能力。
  • 多个POD挂载一个文件系统
    对于需要在多个POD间共享数据,并且需要POD具备Failover故障恢复能力的场景(Stateful有状态服务为主),我们可以将一个文件系统通过同一挂载地址同时挂载到多个POD上。数据可以被多个POD同时共享访问,单个POD销毁或故障后在其它节点拉起。

挂载文件系统子目录到容器

前面提到,单文件系统默认有两个根路径的挂载地址,但是使用挂载地址+子目录的形式将子目录挂载给单个POD,这样该POD只拥有这个被挂载子目录的权限,无法看到其它子目录的数据。
对于很多微服务化的容器应用,容器POD随着业务规模的变化动态灵活的创建和销毁,为了管理的方便简单,我们可以使用单一文件系统的多目录挂载给不同应用的POD,例如,/application1和/application2,这样application1的POD只能看到自己挂载目录的数据。因为单文件系统的吞吐能力是随存储容量弹性增长,所以使用单一文件系统还有个优势,就是可以通过多目录聚集的容量获得更大的吞吐性能。

什么是静态文件存储卷和动态文件存储卷

静态存储卷是预先创建好PVC和PV,再创建应用时使用对应PV进行存储映射。动态存储卷则只需要预先定义StorageClass,在创建应用的时候动态创建文件系统或者目录后,映射为PV关联给容器使用。例如,当为不同的用户提供不同的nas子目录进行挂载的时候,或者当使用有状态的SatefulSet部署应用,每个pod配置使用不同nas数据卷的时候,推荐使用动态存储卷。

如何选择正确的文件存储规格类型

  • 通用型NAS
    通用型NAS主要特点是容量可以随数据写入或者删除弹性伸缩,吞吐能力也随容量的伸缩弹性变化,通过数据存储容量获得较高的聚合吞吐能力。支持NFS和SMB协议、Quota、ACL、加密,具备较广的企业应用兼容性,同时还支持生命周期管理降低存储成本。通用型NAS在同一个地域内可以跨可用区挂载,配合容器的多AZ实现高可用能力。

应用场景:Linux/Windows企业应用、WEB内容管理、数据库备份、主目录

  • 极速型NAS
    极速型NAS主要特点是提供低时延高IOPS的读写能力,适用于大量小文件,元数据密集型操作的应用场景,可提供百微秒级的时延和200K的IOPS能力。极速型NAS支持NFS协议、快照和加密,建议和容器POD部署在同一个可用分区以获得更低的时延。

应用场景:时延敏感型企业应用、CI/CD开发测试环境、PHP网站、日志存储、轻量级数据库

  • CPFS
    并行文件存储CPFS是专为高性能计算和AI训练设计的高性能并行文件存储,主要针对大容量、高吞吐和高IOPS的高性能计算业务,可提供上百GB/s的吞吐能力。目前阿里云的EHPC镜像,基因容器镜像和AI容器镜像都和CPFS进行了深度集成。

应用场景:HPC高性能计算、AI训练、基因分析、影视渲染、EDA仿真、油气勘探、气象分析

如何备份容器存储的数据

文件系统快照

阿里云文件存储NAS极速型规格支持文件系统快照,可以针对容器挂载的文件系统进行快照保护,快照可配置灵活的策略周期性的创建副本数据,如果发生容器数据人为误删除或者文件系统误删除,都可以通过快照回滚来恢复数据。

文系统备份服务

阿里云文件存储NAS通用型规格支持文件系统备份服务,可以配置备份服务针对容器挂载的文件系统进行备份保护,备份任务周期性的降数据副本保存到备份库。如果你不小心删除数据,需要从备份恢复,你可以恢复备份现有文件系统中的一个目录或一个新的文件系统。

如何加密容器的数据

阿里云文件存储NAS支持数据存储加密功能,当前已经支持使用KMS托管密钥进行数据加密。可以在为容器创建文件系统时选择使能加密功能,KMS服务会默认创建一个托管密钥,并使用该密钥对存储数据进行加密。

通过文件存储生命周期管理降低容器存储成本

阿里云文件存储NAS支持低频存储类型,可以配置生命周期管理策略,将指定时间内没有读写访问的数据自动迁移到低频NAS里存储,最低成本可降低90%,如果后续需要访问这些数据,用户可以直接读写访问,后台透明将数据取回,应用无感知。例如,像基因测序、大数据分析等应用场景,用户生产的大部分数据都不会频繁访问,但是需要长期存储。基于生命周期管理的低频NAS就可以很好的帮助用户解决存储成本和应用访问接口一致的问题。
生命周期管理的配置也非常简单,只需要对需要挂载到容器的文件系统或者子目录启用该功能,并且配置对应策略即可。

如何监控容器存储的状态

阿里云文件存储NAS支持接入阿里云监控服务,可以对文件系统的吞吐、IOPS/元数据OPS和时延进行监控统计,同时可以配置阀值告警。

  • IOPS
    统计了单文件系统总的IOPS性能,如果你使用的是通用型NAS,并且监控到IOPS已经达到了规格上限,则可以考虑拆分为多个文件系统或者更换使用极速型NAS。
  • 吞吐
    统计了所有访问该文件系统的客户端读写带宽总和,如果监控到使用的通用型NAS吞吐达到了上限,可以考虑更换使用CPFS文件存储或者提交吞吐配额提升申请。
  • 时延
    该项统计了文件存储后端的IO读写时延,但并不包含计算节点到文件存储的网络时延,因此对时延数据的分析还要综合考虑跨可用区的因素和VPC网络是否存在异常。
相关实践学习
函数计算部署PuLID for FLUX人像写真实现智能换颜效果
只需一张图片,生成程序员专属写真!本次实验在函数计算中内置PuLID for FLUX,您可以通过函数计算+Serverless应用中心一键部署Flux模型,快速体验超写实图像生成的魅力。
相关文章
|
8月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1131 108
|
8月前
|
运维 监控 数据可视化
小白也能部署应用,3个免费的容器化部署工具测评
本文对比了三款容器化部署工具:Docker Compose、Portainer 和 Websoft9。Docker Compose 适合开发者编排多容器应用,Portainer 提供图形化管理界面,而 Websoft9 则面向中小企业和非技术人员,提供一键部署与全流程运维支持,真正实现“开箱即用”。三款工具各有定位,Websoft9 更贴近大众用户需求。
小白也能部署应用,3个免费的容器化部署工具测评
|
6月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
705 51
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
9月前
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
562 59
|
7月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
759 2
|
9月前
|
缓存 Java Docker
如何对应用代码进行优化以提高在Docker容器中的性能?
如何对应用代码进行优化以提高在Docker容器中的性能?
407 1
|
9月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
667 57