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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 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搭建和管理企业级网站应用
目录
相关文章
|
6天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
28 2
|
16天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
8天前
|
存储 Kubernetes Docker
【赵渝强老师】Kubernetes中Pod的基础容器
Pod 是 Kubernetes 中的基本单位,代表集群上运行的一个进程。它由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。基础容器负责维护 Pod 的网络空间,对用户透明。文中附有图片和视频讲解,详细介绍了 Pod 的组成结构及其在网络配置中的作用。
【赵渝强老师】Kubernetes中Pod的基础容器
|
8天前
|
运维 Kubernetes Shell
【赵渝强老师】K8s中Pod的临时容器
Pod 是 Kubernetes 中的基本调度单位,由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。临时容器用于故障排查和性能诊断,不适用于构建应用程序。当 Pod 中的容器异常退出或容器镜像不包含调试工具时,临时容器非常有用。文中通过示例展示了如何使用 `kubectl debug` 命令创建临时容器进行调试。
|
8天前
|
Kubernetes 调度 容器
【赵渝强老师】K8s中Pod中的业务容器
Pod 是 Kubernetes 中的基本调度单元,由一个或多个容器组成。除了业务容器,Pod 还包括基础容器、初始化容器和临时容器。本文通过示例介绍如何创建包含业务容器的 Pod,并提供了一个视频讲解。示例中创建了一个名为 "busybox-container" 的业务容器,并使用 `kubectl create -f firstpod.yaml` 命令部署 Pod。
|
8天前
|
Kubernetes 容器 Perl
【赵渝强老师】K8s中Pod中的初始化容器
Kubernetes的Pod包含业务容器、基础容器、初始化容器和临时容器。初始化容器在业务容器前运行,用于执行必要的初始化任务。本文介绍了初始化容器的作用、配置方法及优势,并提供了一个示例。
|
8天前
|
Kubernetes 监控 Java
如何在Kubernetes中配置镜像和容器的定期垃圾回收
如何在Kubernetes中配置镜像和容器的定期垃圾回收
|
12天前
|
关系型数据库 MySQL API
|
5天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
6天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?

相关产品

  • 容器服务Kubernetes版