使用阿里云容器ACK通过云存储网关(CSG)挂载OSS

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文将详细介绍如何使用阿里云容器服务ACK通过云存储网关挂载OSS。

云存储网关CSG(Cloud Storage Gateway)以阿里云对象存储OSS为后端存储,给云上和云下应用提供业界标准的NFS和CIFS文件存储服务,以及iscsi块存储服务。


云存储网关的挂载方式支持共享存储;只支持静态存储卷,不支持动态存储卷。目前容器服务ACK控制台尚未集成云存储网关类型的存储卷,本文将详细介绍如何在ACK控制台云存储网关持久化存储卷。


一、前提条件

  1. 使用云存储网关需要开通对象存储bucket作为后端存储,可以参考:创建存储空间
  2. 开通云存储网关,并创建NFS协议共享,可以参考:在云控制台上使用文件网关
  3. 创建ACK集群。需要已创建一个ACK集群,且存储插件选择为CSI。创建ACK集群可以参考:创建Kubernetes托管版集群
  4. 已使用kubectl连接Kubernetes集群。具体操作参考:通过kubectl工具连接集群


二、通过控制台挂载


登录网关控制台->点击网关列表->点击需要挂载的网关id->记录下共享挂载点信息。格式为ip:/路径,如172.0.0.1:/share。

网关1.png

网关2.png


2.1 创建存储卷(PV)

在ack控制台,对应的ack集群中,选择存储-存储卷-创建。在“创建存储卷”对话框中选择NAS,挂载点域名选择自定义,填写前面记下的共享ip以及路径。

ack-1.png

2.2 创建存储卷声明(PVC)

选择存储声明,并创建。在“创建存储声明”对话框,选择NAS,分配模式选择已有存储卷。选择2.1步骤中创建的存储卷即可。

ack.png


2.3 创建应用

新建应用,在数据卷中选择增加云存储声明,挂载源选择刚才创建的pvc,容器路径则是自定义,将数据卷挂载容器的哪个路径下。

ack-3.png


2.4 验证存储

2.4.1 查看部署应用和文件

1)在kubectl客户端机器上,执行:

kubectl get pod


结果预期(pod的名称使用pod-1xxx等代替):

NAME       READY   STATUS    RESTARTS   AGE
pod-1xxx   1/1     Running   0          16h
pod-2xxx   1/1     Running   0          16h
pod-2xxx   1/1     Running   0          16h


2)查看任意一个pod下的挂载项,可以看到/tmp路径成功挂载了云存储网关共享。

ack-4.png


3)查看挂载路径/tmp下的文件,可以看到为空,说明暂时没有文件。

ack-5.png


2.4.2 创建文件

1)执行下面的命令,创建文件aaa

kubectl exec pod-1xxx --touch /tmp/aaa


2)执行下面的命令:

kubectl exec pod-1xxx --ls /tmp

预期结果:

aaa

说明在挂载路径下成功创建了文件aaa。


另外,还可以登录OSS控制台,去对应的bucket中查看创建的aaa文件。


2.4.3 验证持久化存储

1)执行以下命令,删除pod-1xxx。

kubectl delete pod pod-1xxx

结果预期:

pod "pod-1xxx" deleted


2)执行以下命令,查看重建的pod名称(下文中记为pod-1new):

kubectl get pod


3)执行以下命令,查看文件是否还在:

kubectl exec pod-1new --ls /tmp

预期结果:

aaa

说明文件是持久化存储的,pod删除并不会导致文件被删除。


2.4.4 验证共享存储

执行以下命令:

kubectl exec pod-2xxx --ls /tmp

预期结果:

aaa

说明不同pod之间可以共享存储。


三、通过kubectl命令行挂载

3.1 创建存储卷(PV)

创建一个yaml文件pv-csg.yaml,内容参考下面:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-csg
  labels:
    alicloud-pvname: pv-csg
spec:
  capacity:
    storage: 40Gi
  storageClassName: nas
  accessModes:
- ReadWriteOnce
  csi:
    driver: nasplugin.csi.alibabacloud.com
    volumeAttributes:
      path: #共享挂载路径,如: /share      server: xxx.xxx.xxx.xxx
    volumeHandle: pv-csg
  persistentVolumeReclaimPolicy: Retain
  volumeMode: Filesystem
# 如果有其他的nfs挂载参数,可以再添加下面的字段:  mountoptions:  
-# 部分挂载参数示例:nolock,proto=tcp,noresvport  -vers=3# 3 或 4.0

在kubectl客户端执行下面的命令:

kubectl create -f pv-csg.yaml 

预期结果:

persistentvolume/pv-csg created

登录控制台,可以看到存储-存储卷中新增了一项pv-csg。


3.2 创建存储卷声明(PVC)

创建一个yaml文件pvc-csg.yaml,内容参考下面:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-csg
spec:
  accessModes:
- ReadWriteOnce
  resources:
    requests:
      storage: 40Gi
  selector:
    matchLabels:
      alicloud-pvname: pv-csg # 3.1节中的pv name  storageClassName: nas
  volumeMode: Filesystem
  volumeName: pv-csg

在kubectl客户端执行下面的命令:

kubectl create -f pvc-csg.yaml 

预期结果:

persistentvolumeclaim/pvc-csg created

登录控制台,可以看到存储-存储声明中新增了一项pvc-csg。


3.3 创建应用

以魔方游戏为例创建一个无状态应用ack-cube。创建一个yaml文件cube.yaml,内容参考下面:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: ack-cube
  name: ack-cube
  namespace: default
spec:
  replicas: 3# pod副本数量  selector:
    matchLabels:
      app: ack-cube
  template:
    metadata:
      labels:
        app: ack-cube
    spec:
      containers:
- image: 'registry.cn-hangzhou.aliyuncs.com/acr-toolkit/ack-cube:1.0'          imagePullPolicy: IfNotPresent
          name: ack-cube
          ports:
- containerPort: 80          volumeMounts:
- mountPath: /tmp # 容器存储卷挂载路径              name: volume-pvc-csg
      volumes:
- name: volume-pvc-csg
          persistentVolumeClaim:
            claimName: pvc-csg # 3.2节中存储卷的名称

在kubectl客户端执行下面的命令:

kubectl create -f cube.yaml

预期结果:

deployment.apps/ack-cube created

登录控制台,可以看到工作负载-无状态中新增了一项ack-cube。


3.4 验证存储

验证存储可以采用和2.4节同样的方法。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
4天前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
5月前
|
存储 Kubernetes API
在K8S中,PVC创建和挂载失败原因有哪些?
在K8S中,PVC创建和挂载失败原因有哪些?
|
6月前
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2月前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
4月前
|
存储 API Swift
Ceph Reef(18.2.X)之Swift操作对象存储网关
这篇文章详细介绍了Ceph Reef(18.2.X)中通过Swift API操作对象存储网关的方法,包括创建用户、子用户、配置环境变量、以及使用swift命令行工具进行存储桶和对象的管理。
54 7
Ceph Reef(18.2.X)之Swift操作对象存储网关
|
4月前
|
存储 对象存储
Ceph Reef(18.2.X)的对象存储网关(rgw)组件搭建
这篇文章是关于Ceph Reef(18.2.X)版本中对象存储系统的配置和使用案例,包括对象存储网关的概述、核心资源介绍、Ceph RGW支持的接口、高可用radosgw的部署、s3cmd工具的使用以及如何通过HTTP方式访问对象存储。
175 3
Ceph Reef(18.2.X)的对象存储网关(rgw)组件搭建
|
3月前
|
Kubernetes 容器
基于Ubuntu-22.04安装K8s-v1.28.2实验(三)数据卷挂载NFS(网络文件系统)
基于Ubuntu-22.04安装K8s-v1.28.2实验(三)数据卷挂载NFS(网络文件系统)
220 0
|
4月前
|
存储 对象存储
radosgw高可用对象存储网关实战指南
关于radosgw高可用对象存储网关的实战指南,涵盖了从基本概念到具体操作案例,再到架构设计和使用技巧的全面介绍。
87 6
|
4月前
|
对象存储 Python
Ceph Reef(18.2.X)之python操作对象存储网关
这篇文章介绍了如何在Ceph Reef(18.2.X)环境中使用Python操作对象存储网关(rgw),包括环境搭建、账号创建、使用s3cmd工具以及编写和测试Python代码。
59 3
|
5月前
|
存储 机器学习/深度学习 弹性计算
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决

相关产品

  • 容器服务Kubernetes版