如何在阿里云ACK集群中使用CPFS存储卷服务

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 介绍: CPFS(Cloud Paralleled File System)是一种并行文件系统。CPFS 的数据存储在集群中的多个数据节点,并可由多个客户端同时访问,从而能够为大型高性能计算机集群提供高IOPS、高吞吐、低时延的数据存储服务。

介绍:

CPFS(Cloud Paralleled File System)是一种并行文件系统。CPFS 的数据存储在集群中的多个数据节点,并可由多个客户端同时访问,从而能够为大型高性能计算机集群提供高IOPS、高吞吐、低时延的数据存储服务。

CPFS详细产品介绍参考:
https://help.aliyun.com/product/111536.html

CPFS是共享存储服务类型,适合于容器服务场景对资源共享、高性能的要求,在大数据、AI、基因计算等高性能场景中使用容器服务 + CPFS是一个推荐的解决方案。

本文介绍如何在容器服务中安装Flexvolume插件,并通过CPFS数据卷的方式为应用(Pod)提供CPFS服务。

CSI中如何使用CPFS服务请参考:https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/cpfs.md

插件部署:

1. 限制:

容器服务中使用CPFS依赖两个驱动类组件:CPFS容器驱动 和 CPFS客户端驱动;

CPFS容器驱动:即为Flexvolume-cpfs插件,对centos各个版本都是兼容的,部署Flexvolume-cpfs即可完成安装;

CPFS客户端驱动:为CPFS挂载时的客户端(类似于nfs-client),驱动与操作系统内核是强依赖。容器场景中安装CPFS客户端驱动有几种方案:

手动安装驱动,参考https://help.aliyun.com/document_detail/131060.html
Flexvolume-cpfs部署时自动安装驱动,但只支持部分内核版本,

目前容器场景下支持在以下内核版本安装CPFS客户端驱动:

3.10.0-957.5.1
3.10.0-957.21.3
3.10.0-1062.9.1

可以通过在节点上执行: uname -r 查看内核版本。

目前Flexvolume只支持安装CPFS Client驱动,不支持cpfs-client驱动升级,即发现节点安装了cpfs客户端,不再继续安装驱动;

升级Flexvolume版本,只会升级Flexvolume驱动(容器驱动),而不会升级cpfs-client版本;

在已经部署了cpfs-client、lustre驱动的节点上安装cpfs flexvolume不会再安装新版本的CPFS-Client;

Client升级需要手动进行,参考cpfs使用文档(https://help.aliyun.com/document_detail/131060.html)

2. 部署模板:

在集群中执行kubectl命令部署下面模板:

# kubectl create -f flexvolume-cpfs.yaml
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: flexvolume-cpfs
  namespace: kube-system
  labels:
    k8s-volume: flexvolume-cpfs
spec:
  selector:
    matchLabels:
      name: acs-flexvolume-cpfs
  template:
    metadata:
      labels:
        name: acs-flexvolume-cpfs
    spec:
      hostPID: true
      hostNetwork: true
      tolerations:
      - operator: "Exists"
      priorityClassName: system-node-critical
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: type
                operator: NotIn
                values:
                - virtual-kubelet
      containers:
      - name: acs-flexvolume
        image: registry.cn-hangzhou.aliyuncs.com/acs/flexvolume:v1.14.8.71-22f141a-aliyun
        imagePullPolicy: Always
        securityContext:
          privileged: true
        env:
        - name: ACS_CPFS
          value: "true"
        - name: FIX_ISSUES
          value: "false"
        livenessProbe:
          exec:
            command:
            - sh
            - -c
            - ls /acs/flexvolume
          failureThreshold: 8
          initialDelaySeconds: 15
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 15
        volumeMounts:
        - name: usrdir
          mountPath: /host/usr/
        - name: etcdir
          mountPath: /host/etc/
        - name: logdir
          mountPath: /var/log/alicloud/
        - mountPath: /var/lib/kubelet
          mountPropagation: Bidirectional
          name: kubeletdir
      volumes:
      - name: usrdir
        hostPath:
          path: /usr/
      - name: etcdir
        hostPath:
          path: /etc/
      - name: logdir
        hostPath:
          path: /var/log/alicloud/
      - hostPath:
          path: /var/lib/kubelet
          type: Directory
        name: kubeletdir
  updateStrategy:
    type: RollingUpdate

3. 检查部署情况:

在集群中查看存储插件的部署情况,示例如下:

# kubectl get pod -nkube-system | grep flex
flexvolume-97psk                                  1/1     Running   0          27m
flexvolume-cpfs-dgxfq                             1/1     Running   0          98s
flexvolume-cpfs-qpbcb                             1/1     Running   0          98s
flexvolume-cpfs-vlrf9                             1/1     Running   0          98s
flexvolume-cpfs-wklls                             1/1     Running   0          98s
flexvolume-cpfs-xtl9b                             1/1     Running   0          98s
flexvolume-j8zjr                                  1/1     Running   0          27m
flexvolume-pcg4l                                  1/1     Running   0          27m
flexvolume-tjxxn                                  1/1     Running   0          27m
flexvolume-x7ljw                                  1/1     Running   0          27m

以flexvolume-cpfs 开头的pod表示部署的cpfs存储卷插件;

不含cpfs字样的flexvolume pod表示:集群默认部署的nas、云盘、oss存储卷插件,两个插件可以同时部署;

在集群的节点上查看cpfs-client是否安装完成:

# rpm -qa | grep cpfs
kmod-cpfs-client-2.10.8-202.el7.x86_64
cpfs-client-2.10.8-202.el7.x86_64

查看 mount.lustre 是否已经安装:

# which mount.lustre
/usr/sbin/mount.lustre

使用CPFS数据卷:

在ACK中使用CPFS数据卷,需要您先到CPFS控制台创建一个CPFS卷和挂载点,参考:https://help.aliyun.com/document_detail/111860.html

创建CPFS挂载点时,选择的vpc网络需要和ACK集群在同一个vpc内。

下面示例假设获取挂载点为:

挂载点:cpfs-*-alup.cn-shenzhen.cpfs.nas.aliyuncs.com@tcp:cpfs--ws5v.cn-shenzhen.cpfs.nas.aliyuncs.com@tcp

文件系统ID为:0237ef41

1. PV模板:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-cpfs
  labels:
    alicloud-pvname: pv-cpfs
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  flexVolume:
    driver: "alicloud/cpfs"
    options:
      server: "cpfs-****-alup.cn-shenzhen.cpfs.nas.aliyuncs.com@tcp:cpfs-***-ws5v.cn-shenzhen.cpfs.nas.aliyuncs.com@tcp"
      fileSystem: "0237ef41"
      subPath: "/k8s"
      options: "ro"

其中:

server:配置为CPFS的挂载点;

fileSystem:配置为CPFS文件系统ID;

subPath:配置为期望挂载的CPFS子目录,相对于文件系统根目录;

options:可选,挂载配置选项;

2. PVC、应用模板:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-cpfs
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
  selector:
    matchLabels:
      alicloud-pvname: pv-cpfs
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nas-cpfs
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
          - name: pvc-cpfs
            mountPath: "/data"
      volumes:
        - name: pvc-cpfs
          persistentVolumeClaim:
            claimName: pvc-cpfs

3. 创建应用:

创建上面模板后检查pod挂载情况:

# kubectl get pod
NAME                        READY   STATUS    RESTARTS   AGE
nas-cpfs-79964997f5-kzrtp   1/1     Running   0          45s

进入Pod查看挂载目录;
# kubectl exec -ti nas-cpfs-79964997f5-kzrtp sh
# mount | grep k8s
192.168.1.12@tcp:192.168.1.10@tcp:/0237ef41/k8s on /data type lustre (ro,lazystatfs)
进入pod所在节点,查看挂载目录;
# mount | grep cpfs
192.168.1.12@tcp:192.168.1.10@tcp:/0237ef41/k8s on /var/lib/kubelet/pods/c4684de2-26ce-11ea-abbd-00163e12e203/volumes/alicloud~cpfs/pv-cpfs type lustre (ro,lazystatfs)
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
13天前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
90 1
|
20天前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
177 89
|
6月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
233 9
|
6月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
8月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
720 33
|
8月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
411 19
|
8月前
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
存储 NoSQL 文件存储
云计算问题之阿里云文件存储CPFS如何满足大模型智算场景的存储需求
云计算问题之阿里云文件存储CPFS如何满足大模型智算场景的存储需求
210 2
|
Cloud Native 文件存储 数据库
《阿里云产品四月刊》—CPFS 智算版数据流动(1)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
201 1
|
Cloud Native 文件存储 对象存储
《阿里云产品四月刊》—CPFS 智算版数据流动(3)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
173 0
《阿里云产品四月刊》—CPFS 智算版数据流动(3)

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多