Helm3安裝Redis、RabbitMQ、ElasticSearch等並使用阿里雲CNFS作為網路儲存並共享NAS

Awbeci發表於2022-06-20

前言

之前寫過K8S使用阿里雲端儲存卷,並在helm安裝redis、rabbitmq和elasticsearch的過程中使用alicloud-nas-fs,但是事後發現,每次安裝都會重複生成NAS,但是NAS每個賬號最多新增20個,所以這不符合需求,通過跟阿里工程師的溝通之後,他們推薦使用CNFS來做為儲存媒介,所有服務都共享同一個NAS檔案系統,現在記錄下來分享給大家。

CNFS概述

傳統的共享檔案系統存在缺少容量配額的精確控制、無法恢復誤刪檔案、缺失儲存卷容量效能等監控指標、無安全加密及小檔案讀寫延遲等問題。阿里雲容器服務ACK推出了容器網路檔案系統CNFS提升NAS檔案系統的效能,QoS控制。本文介紹容器網路檔案系統CNFS的功能、儲存規格、適用場景、使用限制及計費說明。

使用CNF

這個是官方提供的操作文件:使用CNFS託管NAS檔案系統,我們只要看方式一:使用CNFS建立預設NAS檔案系統即可。

# 建立CNFS、storageclass和deployment、statefulset物件。
cat << EOF | kubectl apply -f -
apiVersion: storage.alibabacloud.com/v1beta1
kind: ContainerNetworkFileSystem
metadata:
  name: cnfs-nas-filesystem
spec:
  description: "cnfs"
  type: nas
  reclaimPolicy: Retain #只支援Retain策略,刪除CNFS時並不會刪除NAS檔案系統。
  parameters:
    encryptType: SSE-KMS #可選引數,不指定表示對檔案不使用NAS託管加密,指定SSE-KMS表示開啟此功能。
    enableTrashCan: "true" #可選引數,不指定表示不開啟回收站功能,指定true表示開啟此功能。
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alibabacloud-cnfs-nas
mountOptions:
  - nolock,tcp,noresvport
  - vers=3
parameters:
  volumeAs: subpath
  containerNetworkFileSystem: cnfs-nas-filesystem
  path: "/"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
allowVolumeExpansion: true #可選引數,指定為true表示允許對NAS檔案系統進行擴容。
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: cnfs-nas-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: alibabacloud-cnfs-nas
  resources:
    requests:
      storage: 70Gi #如果開啟目錄限額功能,則storage欄位會生效,動態建立目錄寫入資料量最大為70 GiB。
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cnfs-nas-deployment
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        volumeMounts:
        - mountPath: "/data"
          name: cnfs-nas-pvc
      volumes:
      - name: cnfs-nas-pvc
        persistentVolumeClaim:
          claimName: cnfs-nas-pvc
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: cnfs-nas-sts
  labels:
    app: nginx
spec:
  serviceName: "nginx"
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        volumeMounts:
        - mountPath: "/data"
          name: www
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "alibabacloud-cnfs-nas"
      resources:
        requests:
          storage: 50Gi #如果開啟目錄限額功能,則storage欄位會生效,動態建立目錄寫入資料量最大為50 GiB。
EOF

執行一下這個Yaml檔案,k create -f xxx.yaml,檢視生成情況。

# 執行以下命令檢視建立的NAS檔案系統
kubectl get cnfs
# 執行以下命令檢視NAS檔案系統的詳細資訊
kubectl get cnfs/cnfs-nas-filesystem -o yaml

同理,你可以在安裝redis、rabbitmq、elasticsearch中都可以使用alicloud-cnfs-nas這個StorageClass來建立NAS共享儲存,同時通過檢視阿里控制檯,NAS都只建立一個共享這一個。

總結

1、如果你想擴容CNFS,你可以檢視使用CNFS自動擴容NAS儲存卷

相關文章