Облачная платформаAdvanced

Динамическое создание подкаталога SFS Turbo с использованием StorageClass

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

Предыстория

При создании тома SFS Turbo существует минимальный предел ёмкости, поэтому оплата производится исходя из этой минимальной ёмкости, а не из фактически использованной. По умолчанию, когда вы монтируете том SFS Turbo к рабочей нагрузке, корневой каталог тома отображается в контейнерах. Фактическая ёмкость, используемая нагрузкой, значительно ниже предела, что приводит к растрате ресурсов.

Дополнение CCE Container Storage (Everest) позволяет динамически создавать подкаталоги в файловой системе SFS Turbo и монтировать эти подкаталоги в контейнеры. Таким образом, файловая система SFS Turbo может использоваться несколькими контейнерами для повышения эффективности хранения.

Примечания и ограничения

  • Поддерживаются только кластеры версии v1.15 и новее.
  • Кластер должен использовать дополнение CCE Container Storage (Everest) версии 1.1.13 или новее.
  • Контейнеры Kata не поддерживаются.
  • При использовании дополнения CCE Container Storage (Everest) версии ниже 1.2.69 или 2.1.11 одновременно можно создать не более 10 PVC, использующих подкаталоги. Рекомендуется использовать CCE Container Storage (Everest) версии 1.2.69 и новее или версии 2.1.11 и новее.
  • Том subPath представляет собой подкаталог файловой системы SFS Turbo. Увеличение ёмкости PVC этого типа изменяет только диапазон ресурсов, указанный в PVC, но не меняет общую ёмкость файловой системы SFS Turbo. Если общая ёмкость ресурсов файловой системы SFS Turbo недостаточна, доступная ёмкость тома subPath будет ограничена. Чтобы решить проблему, необходимо увеличить ёмкость ресурсов файловой системы SFS Turbo в консоли SFS Turbo.

    Удаление тома subPath не приводит к удалению файловой системы SFS Turbo.

Создание тома SFS Turbo типа subPath

  1. Создайте файловую систему SFS Turbo в той же VPC и подсети, что и кластер.
  2. Создайте YAML‑файл класса хранилища, например, sfsturbo-subpath-sc.yaml.

    Ниже приведён пример:

    apiVersion: storage.k8s.io/v1
    allowVolumeExpansion: true
    kind: StorageClass
    metadata:
    name: sfsturbo-subpath-sc # Storage class name
    mountOptions: #Mount options
    - lock
    parameters:
    csi.storage.k8s.io/csi-driver-name: sfsturbo.csi.everest.io
    csi.storage.k8s.io/fstype: nfs
    everest.io/archive-on-delete: "true"
    everest.io/share-expand-type: bandwidth
    everest.io/share-export-location: 192.168.1.1:/sfsturbo/ # Mount directory configuration
    everest.io/share-source: sfs-turbo
    everest.io/share-volume-type: STANDARD
    everest.io/volume-as: subpath
    everest.io/volume-id: 0d773f2e-1234-1234-1234-de6a35074696 # ID of an SFS Turbo volume
    provisioner: everest-csi-provisioner
    reclaimPolicy: Delete
    volumeBindingMode: Immediate

    Где:

    • name: указывает имя класса хранилища.
    • mountOptions: (Optional) указывает параметры монтирования.
      • В версиях новее CCE Container Storage (Everest) 1.1.13 и старше 1.2.8, только параметр nolock может быть настроен. По умолчанию для операции монтирования используется nolock и его не требуется настраивать. Если nolock установлен в false, используется поле lock.
      • Начиная с CCE Container Storage (Everest) 1.2.8, поддерживаются дополнительные параметры монтирования. Не устанавливайте nolock в true. Иначе операции монтирования завершатся с ошибкой.
        mountOptions:
        - vers=3
        - timeo=600
        - nolock
        - hard
    • everest.io/volume-as: Этот параметр задаётся как subpath для использования тома subPath.
    • everest.io/share-expand-type: (Optional) Если тип файловой системы SFS Turbo — SFS Turbo Standard – Enhanced или SFS Turbo Performance – Enhanced, задайте этот параметр как bandwidth.
    • everest.io/share-export-location: указывает каталог монтирования. Он состоит из общего пути SFS Turbo и подкаталога. Вы можете получить общий путь в консоли SFS Turbo и создать подкаталог самостоятельно. PVC, созданные с использованием класса хранилища, находятся в этом подкаталоге.
    • everest.io/share-volume-type: (Optional) указывает тип файловой системы SFS Turbo. Значение может быть STANDARD или PERFORMANCE. Для улучшенных типов этот параметр необходимо использовать совместно с everest.io/share-expand-type (значение которого должно быть bandwidth).
    • everest.io/zone: (Optional) Установите его в зону доступности, где расположена файловая система SFS Turbo.
    • everest.io/volume-id: указывает ID тома SFS Turbo. Вы можете получить ID тома в консоли SFS Turbo.
    • everest.io/archive-on-delete: Когда этот параметр установлен в true и для Reclaim Policy выбран Delete, удаление PVC удаляет подкаталог и архивирует исходные данные PV в каталог с именем archived-{$PV_NAME.TIMESTAMP}. (При удалении кластера подкаталог не удаляется и не архивируется.) Когда параметр установлен в false, удаление PVC удаляет подкаталог SFS Turbo без архивирования исходных данных PV. По умолчанию параметр установлен в true.

  1. Выполните kubectl create -f sfsturbo-subpath-sc.yaml.
  2. Создайте YAML‑файл PVC с именем sfs-turbo-test.yaml.

    Ниже приведён пример:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: sfs-turbo-test # PVC name
    namespace: default
    spec:
    accessModes:
    - ReadWriteMany
    resources:
    requests:
    storage: 50Gi
    storageClassName: sfsturbo-subpath-sc # Storage class name
    volumeMode: Filesystem

    Где:

    • name: указывает имя PVC.
    • storageClassName: указывает имя класса хранилища.
    • storage: В томе subPath изменение значения этого параметра не влияет на ёмкость ресурсов файловой системы SFS Turbo. Том subPath по сути представляет собой файловый путь внутри файловой системы SFS Turbo. Увеличение ёмкости тома subPath в PVC не приводит к увеличению ресурсов файловой системы SFS Turbo.
      Note

      Ёмкость тома subPath ограничивается общей ресурсной ёмкостью соответствующей файловой системы SFS Turbo. Если ресурсы файловой системы SFS Turbo недостаточны, вы можете изменить ресурсную ёмкость через консоль SFS Turbo.

  1. Выполните kubectl create -f sfs-turbo-test.yaml.

Создание Deployment и монтирование существующего Volume

  1. Создайте YAML‑файл для Deployment, например, deployment-test.yaml.

    Ниже приведён пример:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: test-turbo-subpath-example # Name of the created workload
    namespace: default
    generation: 1
    labels:
    appgroup: ''
    spec:
    replicas: 1
    selector:
    matchLabels:
    app: test-turbo-subpath-example
    template:
    metadata:
    labels:
    app: test-turbo-subpath-example
    spec:
    containers:
    - image: nginx:latest # Image of the workload
    name: container-0
    volumeMounts:
    - mountPath: /tmp #Mount path in a container
    name: pvc-sfs-turbo-example
    restartPolicy: Always
    imagePullSecrets:
    - name: default-secret
    volumes:
    - name: pvc-sfs-turbo-example
    persistentVolumeClaim:
    claimName: sfs-turbo-test # Name of an existing PVC

    Где:

    • name: указывает имя созданной рабочей нагрузки.
    • image: указывает образ, используемый рабочей нагрузкой.
    • mountPath: указывает путь монтирования контейнера. В этом примере том монтируется в каталог /tmp.
    • claimName: указывает имя существующего PVC.

  1. Создайте Deployment.

    kubectl create -f deployment-test.yaml

Динамическое создание subPath Volume для StatefulSet

  1. Создайте YAML‑файл для StatefulSet, например, statefulset-test.yaml.

    Ниже приведён пример:

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
    name: test-turbo-subpath # Name of the created workload
    namespace: default
    generation: 1
    labels:
    appgroup: ''
    spec:
    replicas: 2
    selector:
    matchLabels:
    app: test-turbo-subpath
    template:
    metadata:
    labels:
    app: test-turbo-subpath
    annotations:
    metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"","path":"","port":"","names":""}]'
    pod.alpha.kubernetes.io/initialized: 'true'
    spec:
    containers:
    - name: container-0
    image: 'nginx:latest' # Image of a workload
    resources: {}
    volumeMounts:
    - name: sfs-turbo-160024548582479676
    mountPath: /tmp # Mount path in a container
    terminationMessagePath: /dev/termination-log
    terminationMessagePolicy: File
    imagePullPolicy: IfNotPresent
    restartPolicy: Always
    terminationGracePeriodSeconds: 30
    dnsPolicy: ClusterFirst
    securityContext: {}
    imagePullSecrets:
    - name: default-secret
    affinity: {}
    schedulerName: default-scheduler
    volumeClaimTemplates:
    - metadata:
    name: sfs-turbo-160024548582479676
    namespace: default
    annotations: {}
    spec:
    accessModes:
    - ReadWriteMany
    resources:
    requests:
    storage: 10Gi
    storageClassName: sfsturbo-subpath-sc # Enter the name of a self-managed storage class.
    serviceName: wwww
    podManagementPolicy: OrderedReady
    updateStrategy:
    type: RollingUpdate
    revisionHistoryLimit: 10

    Где:

    • name: указывает имя созданной рабочей нагрузки.
    • image: указывает образ, используемый рабочей нагрузкой.
    • mountPath: указывает путь монтирования контейнера. В этом примере том монтируется в каталог /tmp.
    • spec.template.spec.containers.volumeMounts.name и spec.volumeClaimTemplates.metadata.name: должны быть согласованы, так как между ними существует сопоставление.
    • storageClassName: указывает имя локального класса хранилища.

  1. Создайте StatefulSet.

    kubectl create -f statefulset-test.yaml