From f4e4948258707d7ed61a0fd03ee3b016a1d7c33b Mon Sep 17 00:00:00 2001 From: GuangJie1 Date: Tue, 8 Jul 2025 15:43:56 +0800 Subject: [PATCH] add readmes --- Storage/ceph/README.md | 40 +++++++++++ Storage/ceph/doc/image-info.yml | 40 +++++++++++ Storage/ceph/doc/picture/logo.png | Bin 0 -> 5766 bytes Storage/curve/README.md | 38 ++++++++++ Storage/curve/doc/image-info.yml | 41 +++++++++++ Storage/curve/doc/picture/logo.png | Bin 0 -> 1912 bytes Storage/drbd/README.md | 41 +++++++++++ Storage/drbd/doc/image-info.yml | 39 ++++++++++ Storage/drbd/doc/picture/logo.png | Bin 0 -> 7063 bytes Storage/fastdfs/README.md | 84 ++++++++++++++++++++++ Storage/fastdfs/doc/image-info.yml | 80 +++++++++++++++++++++ Storage/fastdfs/doc/picture/logo.png | Bin 0 -> 2437 bytes Storage/glusterfs/README.md | 94 +++++++++++++++++++++++++ Storage/glusterfs/doc/image-info.yml | 94 +++++++++++++++++++++++++ Storage/glusterfs/doc/picture/logo.png | Bin 0 -> 56625 bytes Storage/lustre/README.md | 40 +++++++++++ Storage/lustre/doc/image-info.yml | 40 +++++++++++ Storage/lustre/doc/picture/logo.png | Bin 0 -> 22205 bytes 18 files changed, 671 insertions(+) create mode 100644 Storage/ceph/README.md create mode 100644 Storage/ceph/doc/image-info.yml create mode 100644 Storage/ceph/doc/picture/logo.png create mode 100644 Storage/curve/README.md create mode 100644 Storage/curve/doc/image-info.yml create mode 100644 Storage/curve/doc/picture/logo.png create mode 100644 Storage/drbd/README.md create mode 100644 Storage/drbd/doc/image-info.yml create mode 100644 Storage/drbd/doc/picture/logo.png create mode 100644 Storage/fastdfs/README.md create mode 100644 Storage/fastdfs/doc/image-info.yml create mode 100644 Storage/fastdfs/doc/picture/logo.png create mode 100644 Storage/glusterfs/README.md create mode 100644 Storage/glusterfs/doc/image-info.yml create mode 100644 Storage/glusterfs/doc/picture/logo.png create mode 100644 Storage/lustre/README.md create mode 100644 Storage/lustre/doc/image-info.yml create mode 100644 Storage/lustre/doc/picture/logo.png diff --git a/Storage/ceph/README.md b/Storage/ceph/README.md new file mode 100644 index 00000000..0d16bb45 --- /dev/null +++ b/Storage/ceph/README.md @@ -0,0 +1,40 @@ +# Quick reference + +- The official Ceph docker image. + +- Maintained by: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative). + +- Where to get help: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative), [openEuler](https://gitee.com/openeuler/community). + +# Ceph | openEuler +Current Ceph docker images are built on the [openEuler](https://repo.openeuler.org/). This repository is free to use and exempted from per-user rate limits. + +Ceph is a distributed object, block, and file storage platform. + +Learn more on [Ceph Documentation](https://docs.ceph.com/en/latest/start/). + +# Supported tags and respective Dockerfile links +The tag of each `ceph` docker image is consist of the version of `ceph` and the version of basic image. The details are as follows + +| Tag | Currently | Architectures | +|----------------------------------------------------------------------------------------------------------------------------------|----------------------------------------|---------------| +| [20.3.0-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/ceph/20.3.0/24.03-lts-sp1/Dockerfile) | Ceph 20.3.0 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +# Usage +In this usage, users can select the corresponding `{Tag}` based on their requirements. + +- Pull the `openeuler/ceph` image from docker + + ```bash + docker pull openeuler/ceph:{Tag} + ``` + +- Start a ceph instance + + ``` + docker run -it --rm openeuler/ceph:{Tag} + ``` + The `openeuler/ceph` image is used to verify the integration between the upstream ceph version and openEuler. + +# Question and answering +If you have any questions or want to use some special features, please submit an issue or a pull request on [openeuler-docker-images](https://gitee.com/openeuler/openeuler-docker-images). \ No newline at end of file diff --git a/Storage/ceph/doc/image-info.yml b/Storage/ceph/doc/image-info.yml new file mode 100644 index 00000000..d245e34b --- /dev/null +++ b/Storage/ceph/doc/image-info.yml @@ -0,0 +1,40 @@ +name: ceph +category: storage +description: Ceph 是一个开源的、分布式存储系统,设计目标是高性能、高可用、无限扩展(scale-out)。 +environment: | + 本应用在Docker环境中运行,安装Docker执行如下命令 + ``` + yum install -y docker + ``` +tags: | + ceph镜像的Tag由其版本信息和基础镜像版本信息组成,详细内容如下 + + | Tag | Currently | Architectures | + |----------|-------------|------------------| + |[20.3.0-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/ceph/20.3.0/24.03-lts-sp1/Dockerfile)| Ceph 20.3.0 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +download: | + 拉取镜像到本地 + ``` + docker pull openeuler/ceph:{Tag} + ``` + +usage: | + - 启动ceph实例 + + ``` + docker run -it --name ceph openeuler/ceph:{Tag} + ``` + `openeuler/ceph`镜像用于验证上游ceph版本和openEuler的集成。 + +license: GPL-2.0 License +similar_packages: + - MinIO:面向云原生应用的高性能对象存储,兼容 Amazon S3 API,部署更轻量。 + - GlusterFS:易于部署的分布式文件系统,适合海量小文件。 +dependency: + - python + - librbd + - librados + - openssl + - libcurl + - systemd diff --git a/Storage/ceph/doc/picture/logo.png b/Storage/ceph/doc/picture/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a7582ac855819fcf8f91330f61a51778b80668df GIT binary patch literal 5766 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 literal 0 HcmV?d00001 diff --git a/Storage/drbd/README.md b/Storage/drbd/README.md new file mode 100644 index 00000000..917f4106 --- /dev/null +++ b/Storage/drbd/README.md @@ -0,0 +1,41 @@ +# Quick reference + +- The official DRBD-utils docker image. + +- Maintained by: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative). + +- Where to get help: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative), [openEuler](https://gitee.com/openeuler/community). + +# DRBD-utils | openEuler +Current DRBD-utils docker images are built on the [openEuler](https://repo.openeuler.org/). This repository is free to use and exempted from per-user rate limits. + +DRBD, developed by LINBIT, is a software that allows RAID 1 functionality over TCP/IP and RDMA for GNU/Linux. DRBD is a block device which is designed to build high availability clusters and software defined storage by providing a virtual shared device which keeps disks in nodes synchronised using TCP/IP or RDMA. This simulates RAID 1 but avoids the use of uncommon hardware (shared SCSI buses or Fibre Channel). +This image contains the user space utilities for DRBD. + +Learn more on [DRBD Documentation](https://linbit.com/user-guides-and-product-documentation/). + +# Supported tags and respective Dockerfile links +The tag of each `drbd-utils` docker image is consist of the version of `drbd-utils` and the version of basic image. The details are as follows + +| Tag | Currently | Architectures | +|----------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------|---------------| +| [9.31.0-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/drbd-utils/9.31.0/24.03-lts-sp1/Dockerfile) | DRBD-utils 9.31.0 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +# Usage +In this usage, users can select the corresponding `{Tag}` based on their requirements. + +- Pull the `openeuler/drbd-utils` image from docker + + ```bash + docker pull openeuler/drbd-utils:{Tag} + ``` + +- Start a drbd-utils instance + + ``` + docker run -it --rm openeuler/drbd-utils:{Tag} + ``` + The `openeuler/drbd-utils` image is used to verify the integration between the upstream DRBD-utils version and openEuler. + +# Question and answering +If you have any questions or want to use some special features, please submit an issue or a pull request on [openeuler-docker-images](https://gitee.com/openeuler/openeuler-docker-images). \ No newline at end of file diff --git a/Storage/drbd/doc/image-info.yml b/Storage/drbd/doc/image-info.yml new file mode 100644 index 00000000..4ba15350 --- /dev/null +++ b/Storage/drbd/doc/image-info.yml @@ -0,0 +1,39 @@ +name: drbd-utils +category: storage +description: DRBD-utils 是 DRBD(Distributed Replicated Block Device) 的用户空间工具集,用于配置、管理和监控 DRBD 设备。 +environment: | + 本应用在Docker环境中运行,安装Docker执行如下命令 + ``` + yum install -y docker + ``` +tags: | + drbd-utils镜像的Tag由其版本信息和基础镜像版本信息组成,详细内容如下 + + | Tag | Currently | Architectures | + |----------|-------------|------------------| + |[9.31.0-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/drbd-utils/9.31.0/24.03-lts-sp1/Dockerfile)| DRBD-utils 9.31.0 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +download: | + 拉取镜像到本地 + ``` + docker pull openeuler/drbd-utils:{Tag} + ``` + +usage: | + - 启动drbd-utils实例 + + ``` + docker run -it --name drbd-utils openeuler/drbd-utils:{Tag} + ``` + `openeuler/drbd-utils`镜像用于验证上游DRBD-utils版本和openEuler的集成。 + +license: GPL-2.0 license +similar_packages: + - N/A +dependency: + - udev + - libxslt + - keyutils + - rubygem + - libyaml + - libnl3 diff --git a/Storage/drbd/doc/picture/logo.png b/Storage/drbd/doc/picture/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2c2e2db2340093affd94d317c02c4c4337515f9b GIT binary patch literal 7063 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 test.txt + + # Upload file + fdfs_test /etc/fdfs/client.conf upload test.txt + ``` + +# Question and answering +If you have any questions or want to use some special features, please submit an issue or a pull request on [openeuler-docker-images](https://gitee.com/openeuler/openeuler-docker-images). \ No newline at end of file diff --git a/Storage/fastdfs/doc/image-info.yml b/Storage/fastdfs/doc/image-info.yml new file mode 100644 index 00000000..e16b1b5e --- /dev/null +++ b/Storage/fastdfs/doc/image-info.yml @@ -0,0 +1,80 @@ +name: fastdfs +category: storage +description: FastDFS(Fast Distributed File System) 是一个开源的轻量级分布式文件存储系统,由国内开发者余庆开发,主要用于解决大容量文件存储和高并发访问的问题。 +environment: | + 本应用在Docker环境中运行,安装Docker执行如下命令 + ``` + yum install -y docker + ``` +tags: | + fastdfs镜像的Tag由其版本信息和基础镜像版本信息组成,详细内容如下 + + | Tag | Currently | Architectures | + |----------|-------------|------------------| + |[6.12.3-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/fastdfs/6.12.3/24.03-lts-sp1/Dockerfile)| FastDFS 6.12.3 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +download: | + 拉取镜像到本地 + ``` + docker pull openeuler/fastdfs:{Tag} + ``` + +usage: | + - 使用交互式 Shell 启动容器 + + 交互式 shell 启动容器来运行 fastdfs: + ``` + docker run -it --rm openeuler/fastdfs:{Tag} bash + ``` + + - 启动Tracker服务器 + + ``` + fdfs_trackerd /etc/fdfs/tracker.conf start + ``` + 验证Tracker是否运行: + ``` + ps aux | grep fdfs_trackerd + ``` + + - 启动Storage服务器 + + 将配置文件`/etc/fdfs/storage.conf`中的`tracker_server`修改为本地容器IP。 + ``` + fdfs_storaged /etc/fdfs/storage.conf start + ``` + 验证Storage是否运行: + ``` + ps aux | grep fdfs_storaged + ``` + + - 监控集群状态 + + 将配置文件`/etc/fdfs/client.conf`中的`tracker_server`修改为本地容器IP。 + ``` + fdfs_monitor /etc/fdfs/client.conf + ``` + 预期输出应显示: + ``` + Storage 1: + id = 172.17.0.2 + ip_addr = 172.17.0.2 ACTIVE + ``` + + - 测试文件上传 + + ``` + # 创建测试文件 + echo "Hello FastDFS" > test.txt + + # 上传文件 + fdfs_test /etc/fdfs/client.conf upload test.txt + ``` + +license: GPL-3.0 license +similar_packages: + - GlusterFS: GlusterFS 是一个开源的分布式文件系统,可以将多个存储服务器的存储空间聚合成一个统一的虚拟存储池,提供高性能、高可扩展性和容错性。 +dependency: + - perl + - libserverframe + - libfastcommon diff --git a/Storage/fastdfs/doc/picture/logo.png b/Storage/fastdfs/doc/picture/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cbf7b164c27210818b65e949b112adf725def01e GIT binary patch literal 2437 zcmb7G`9Bkm8`rm-OO8SzYt&FV7xE!xuCP(gX0F*ZFUAKG%28pNBhuuKB+C(tA@?#v za~EpN5k_sI94!fb^dEeCzh2Mre%|lrhv&B^>583|xR|_{fPjFw^<{Gh0fBv-z5b=h z{=LjSx?H$d_Te3@paRu{irhVN0BZ_26%eRN2W+DR_c-JV%*kS}{w+!bEtz{eQeh5u zjsnKm@J1W0Yh}uPzYk9mvQ`+n3m5l9(csGnynuk5)SuYb3trzFinLpsn>s~$E4t+q<7luEFA*8}C$;WgUy#1C0 z>19r{g+)=m3+f=zXYRvb2OjC4X%Jg=-e@`LRN8J{tI@DnZEx$n_I&uO&r8fYnZ+aE z4w7a*g*8sd^CEP(*A*;~K1ScSFsVCnxi2k<>A}sfsC!Bc_ml4WJyzcAshj{gC_>4s z(UsG-XSoEeLkY!nv=>-~EcZP4{5ZO}I{DzSmy~Jgd_U(`iDegDftrByH~XdOJV@-m zTdh?fZZ*~4ae7|9&QY{*6K%Bq_*MzUDKU0Y5YnN=u!@ByxwY&j7~Mn6Msb|`Hw3g zxi{?wBMF<5U-Qp)S8TvrYdSbXwed_xcB3oY`(KV}Z z4K;m+T#R!i-lZBU7#IMY@Is{2*pNkQsqu_MRXP2plWB{yW2{COug$K-RHR6u?PWhw zd!GORxGqHsusMpgh`^<*i@5e0hX6uOfE>0)7s}Bkn?&Xp2Y1gFbpE1hY6unhT7v-_ zj2`AmN4=ky$nB@SRx34XC~s}|2veioL5iT(>cu*vx57S#yC!ut#a>oC9l8Sn<8L0X zr%cr_KTeD#E+is}I;beDRNi{#zB$JAz9#;>rR(y_1IfDd(oK+u2h3+JlDJ!>o}Z_Z}Am%9nOq7{f9 z?e#PaL{x{$3alth3x`_>HiRYh4o3RXFizXoQF z*YztGm!+nF4v2(dI9S}Yn)(0guVGSD9Z4lO!1l4vF4iMN#7mDPzQM4Yh&12Y)eEEc z8_yd6#ZQ2=^X6dH{V4U@{hZ?c6o=g9f&NGfqKLGG;#^d<0p*8ou7aoTe48w?JaF*# zvvoZXv6<7P9ug*xXsmXp=v4mDoGkRyfN)?JK=;O$n}qcA=@K6{6BFC? zxy+~mk*CgcDe4oUNcPTGh$XJQHP+i=sx+(mAez#dt>7PBglGUPgwn{@2L&DDh$S=-A#x>(Gk@#vbW4g?|_`tzf7oSYe1iIV@K zy_DFK%h$d+QD}W1)#QUD1XL`%+U#pgc&`Sd@5+(XfjrCX%u7YX!2^m@oEXw`eN?E# z-s-j%*fD2obJFb^p!&mrX*uJG@Zu?*ku{^K;E3*qWJBl2a+)ADSd4oRo@{@zOv1OY zHK3Mdqor}(y{5`1o$O1n6%m6ho5PfsAfir-`QWAW^1|V^PcYe%G?%Cj8TJ+VXS8%t zB{;IB57>Q*kpn*d3@hlVmm7PMKhK?pfcvZ^JJDV^v#OT5w3MKS>z;=-L2rOlRv9x% zNhM@OV}+wK!lM;e6--lyPh~OT=Vk(Keo0yWDNS9M27j$g6cOvtGfzddFcWZ{0SGcTQ{g+;N? zy)6GRF}DJd$-%Ckd4lij*CcOr$!b_v(tjGpyJdmgco-McrjLi?kU)v!_hN*)`$yOB zlwO9bQ#{URE`Y+6KXIW~qhYLYl%&fBnT!Xp+9>~L~ ze0up=eUn1n%9NTR%S+a6-hcPfwwA}^P_6WIAY-D z&?QU6jW%piiUD41=tAz6zaDVRYB!HeY3@vRd5)cH=V5x5*rPqc#lQJuuG!kuc%i?0 c9{vwE<09W)yiy9{ME_&9wy-m=hI+^S2hWpWr~m)} literal 0 HcmV?d00001 diff --git a/Storage/glusterfs/README.md b/Storage/glusterfs/README.md new file mode 100644 index 00000000..dd068641 --- /dev/null +++ b/Storage/glusterfs/README.md @@ -0,0 +1,94 @@ +# Quick reference + +- The official GlusterFS docker image. + +- Maintained by: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative). + +- Where to get help: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative), [openEuler](https://gitee.com/openeuler/community). + +# GlusterFS | openEuler +Current GlusterFS docker images are built on the [openEuler](https://repo.openeuler.org/). This repository is free to use and exempted from per-user rate limits. + +GlusterFS is a scalable network filesystem suitable for data-intensive tasks such as cloud storage and media streaming. GlusterFS is free and open source software and can utilize common off-the-shelf hardware. + +Learn more on [GlusterFS Documentation](https://docs.gluster.org/en/latest/). + +# Supported tags and respective Dockerfile links +The tag of each `glusterfs` docker image is consist of the version of `glusterfs` and the version of basic image. The details are as follows + +| Tag | Currently | Architectures | +|-----------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------|---------------| +| [11.1-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/glusterfs/11.1/24.03-lts-sp1/Dockerfile) | GlusterFS 11.1 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +# Usage +In this usage, users can select the corresponding `{Tag}` based on their requirements. + +- Pull the `openeuler/glusterfs` image from docker + + ```bash + docker pull openeuler/glusterfs:{Tag} + ``` + +- Run with an interactive shell + + You can also start the container with an interactive shell to use glusterfs. + ``` + docker run -it --rm openeuler/glusterfs:{Tag} bash + ``` + +- Start the GlusterFS management daemon + + ``` + glusterd + ``` + This start the `glusterd` service, which manages your cluster state. + +- Create a brick directory and a mount point + + ClusterFS requires a physical directory to store data (called a brick) and a local directory where you will mount the volume. + ``` + mkdir -p /bricks/brick1 /mnt/glusterfs + ``` + +- Get your container's real IP address + + Using `localhost` or `127.0.0.1` does not work for volume creation -- use the actual IP. + ``` + dnf install -y hostname + export NODE_IP=$(hostname -i | awk '{print $1}') + echo "Node IP: ${NODE_IP}" + ``` + +- Create the ClusterFS volume + + Use the actual IP and the brick path. + The `force` flag allows you to create a single-node volume. + ``` + gluster volume create testvol ${NODE_IP}:/bricks/brick1 force + ``` + +- Start the volume + + ``` + gluster volume start testvol + ``` + +- Mount the volume + + Use `mount -t glusterfs`. + **Note:** You must run the container in `--privileged` mode (or with `--cap-add SYS_ADMIN`) so the kernel allows FUSE mounts. + ``` + mount -t glusterfs ${NODE_IP}:/testvol /mnt/glusterfs + ``` + +- Verify + + Write a file into your mounted GlusterFS volume and list its contents. + ``` + echo "test file" > /mnt/glusterfs/test.txt + ls -l /mnt/glusterfs + ``` + You should see `text.txt` inside your mounted volume. + +# Question and answering +If you have any questions or want to use some special features, please submit an issue or a pull request on [openeuler-docker-images](https://gitee.com/openeuler/openeuler-docker-images). \ No newline at end of file diff --git a/Storage/glusterfs/doc/image-info.yml b/Storage/glusterfs/doc/image-info.yml new file mode 100644 index 00000000..72ad0a5c --- /dev/null +++ b/Storage/glusterfs/doc/image-info.yml @@ -0,0 +1,94 @@ +name: glusterfs +category: storage +description: GlusterFS 是一个开源的分布式文件系统,基于用户空间的 FUSE 实现,专注于海量数据的横向扩展(scale-out)。它通过将多台服务器的存储资源聚合成一个统一的全局命名空间,为用户提供高性能、高可用的网络存储解决方案。 +environment: | + 本应用在Docker环境中运行,安装Docker执行如下命令 + ``` + yum install -y docker + ``` +tags: | + glusterfs镜像的Tag由其版本信息和基础镜像版本信息组成,详细内容如下 + + | Tag | Currently | Architectures | + |----------|-------------|------------------| + |[11.1-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/glusterfs/11.1/24.03-lts-sp1/Dockerfile)| GlusterFS 11.1 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +download: | + 拉取镜像到本地 + ``` + docker pull openeuler/glusterfs:{Tag} + ``` + +usage: | + - 使用交互式 Shell 启动容器 + + 你可以用交互式 shell 启动容器来运行 GlusterFS: + ``` + docker run -it --rm --privileged openeuler/glusterfs:{Tag} bash + ``` + + - 启动 GlusterFS 管理守护进程 + + ``` + glusterd + ``` + 这会启动 `glusterd` 服务,用于管理 GlusterFS 集群状态。 + + - 创建 Brick 目录和挂载点 + + GlusterFS 需要一个物理目录来存储数据(称为 brick),还需要一个本地目录用于挂载卷。 + ``` + mkdir -p /bricks/brick1 /mnt/glusterfs + ``` + + - 获取容器的真实 IP 地址 + + 在创建卷时不能使用 `localhost` 或 `127.0.0.1`,必须使用实际 IP。 + ``` + dnf install -y hostname + export NODE_IP=$(hostname -i | awk '{print $1}') + echo "Node IP: ${NODE_IP}" + ``` + + - Create the ClusterFS volume + + 使用实际的 IP 和 brick 路径。 + `force` 参数用于允许创建单节点卷(仅用于测试)。 + ``` + gluster volume create testvol ${NODE_IP}:/bricks/brick1 force + ``` + + - 启动卷 + + ``` + gluster volume start testvol + ``` + + - 挂载卷 + + 使用 `mount -t glusterfs` 挂载。 + **注意:** 容器必须使用 `--privileged` 或至少带 `--cap-add SYS_ADMIN`,这样内核才允许使用 FUSE 挂载。 + ``` + mount -t glusterfs ${NODE_IP}:/testvol /mnt/glusterfs + ``` + + - 验证挂载是否成功 + + 在挂载好的 GlusterFS 卷中写入一个文件,然后查看内容: + ``` + echo "test file" > /mnt/glusterfs/test.txt + ls -l /mnt/glusterfs + ``` + 你应该能看到 `test.txt` 已经写入到挂载的卷里。 + + +license: GPL-2.0, LGPL-3.0 licenses +similar_packages: + - MinIO:面向云原生应用的高性能对象存储,兼容 Amazon S3 API,部署更轻量。 + - Ceph:开源的、分布式存储系统,设计目标是高性能、高可用、无限扩展(scale-out)。 +dependency: + - FUSE + - protobuf + - attr + - openssl + - acl diff --git a/Storage/glusterfs/doc/picture/logo.png b/Storage/glusterfs/doc/picture/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b148e703c23b381a3e9cedc748a2bd41e382795c GIT binary patch literal 56625 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 HRn-3hR8<7? literal 0 HcmV?d00001 diff --git a/Storage/lustre/README.md b/Storage/lustre/README.md new file mode 100644 index 00000000..ca8cf70e --- /dev/null +++ b/Storage/lustre/README.md @@ -0,0 +1,40 @@ +# Quick reference + +- The official Lustre docker image. + +- Maintained by: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative). + +- Where to get help: [openEuler CloudNative SIG](https://gitee.com/openeuler/cloudnative), [openEuler](https://gitee.com/openeuler/community). + +# Lustre | openEuler +Current Lustre docker images are built on the [openEuler](https://repo.openeuler.org/). This repository is free to use and exempted from per-user rate limits. + +The Lustre file system is an open-source, parallel file system that supports many requirements of leadership class HPC simulation environments. + +Learn more on [Lustre Documentation](https://www.lustre.org/documentation/). + +# Supported tags and respective Dockerfile links +The tag of each `lustre` docker image is consist of the version of `lustre` and the version of basic image. The details are as follows + +| Tag | Currently | Architectures | +|--------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------|---------------| +| [2.16.55-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/lustre/2.16.55/24.03-lts-sp1/Dockerfile) | Lustre 2.16.55 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +# Usage +In this usage, users can select the corresponding `{Tag}` based on their requirements. + +- Pull the `openeuler/lustre` image from docker + + ```bash + docker pull openeuler/lustre:{Tag} + ``` + +- Start a lustre instance + + ``` + docker run -it --rm openeuler/lustre:{Tag} + ``` + The `openeuler/lustre` image is used to verify the integration between the upstream lustre version and openEuler. + +# Question and answering +If you have any questions or want to use some special features, please submit an issue or a pull request on [openeuler-docker-images](https://gitee.com/openeuler/openeuler-docker-images). \ No newline at end of file diff --git a/Storage/lustre/doc/image-info.yml b/Storage/lustre/doc/image-info.yml new file mode 100644 index 00000000..739dc889 --- /dev/null +++ b/Storage/lustre/doc/image-info.yml @@ -0,0 +1,40 @@ +name: lustre +category: storage +description: Lustre(LUxury + STORage)是一个面向大规模高性能计算(HPC)的开源并行分布式文件系统。 +environment: | + 本应用在Docker环境中运行,安装Docker执行如下命令 + ``` + yum install -y docker + ``` +tags: | + lustre镜像的Tag由其版本信息和基础镜像版本信息组成,详细内容如下 + + | Tag | Currently | Architectures | + |----------|-------------|------------------| + |[2.16.55-oe2403sp1](https://gitee.com/openeuler/openeuler-docker-images/blob/master/Storage/lustre/2.16.55/24.03-lts-sp1/Dockerfile)| Lustre 2.16.55 on openEuler 24.03-LTS-SP1 | amd64, arm64 | + +download: | + 拉取镜像到本地 + ``` + docker pull openeuler/lustre:{Tag} + ``` + +usage: | + - 启动lustre实例 + + ``` + docker run -it --name lustre openeuler/lustre:{Tag} + ``` + `openeuler/lustre`镜像用于验证上游lustre版本和openEuler的集成。 + +license: GPL-2.0 License +similar_packages: + - GlusterFS:易于部署的分布式文件系统,适合海量小文件。 +dependency: + - libnl3 + - libyaml + - numactl + - libuuid + - keyutils + - bison + - flex diff --git a/Storage/lustre/doc/picture/logo.png b/Storage/lustre/doc/picture/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8f704c863c5e0d5f77f80411b9c2a755fbe29dd1 GIT binary patch literal 22205 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 w-`}^et!;2G+eE8P{)r3oR&!PeAw;S9{}A-H{Y