更新时间:2024-11-14 GMT+08:00

存储

简介

弹性到CCI的工作负载支持多种华为云存储配置,用于满足客户多样化的存储需求。通过阅读本章用户可以:

  • 了解弹性CCI的负载支持的存储类型。
  • 了解弹性CCI的负载Hostpath类型的典型场景以及如何使用。

约束与限制

调度到CCI的实例的存储类型支持ConfigMap、Secret、EmptyDir、DownwardAPI、Projected、PersistentVolumeClaims几种Volume类型,其中Projected和DownwardAPI类型仅bursting 1.3.25版本及以上支持。

  • EmptyDir:不支持子路径。
  • PersistentVolumeClaims:只支持SFS、SFS Turbo云存储类型,且只支持使用CSI类型的StorageClass。volcano调度器不支持调度所有云存储类型。
  • Projected:如配置了serviceAccountToken类型的source,那么弹性到CCI后挂载的会是对应service-account-token secret中的token,该token为长期有效的token且没有预期受众,即expirationSeconds和audience两项配置不会生效。

支持的存储类型

用户在配置负载存储类型时,CCE的console有如下选项。

弹性CCI的负载对存储类型的支持情况如下:

volume类型

是否支持

特殊场景说明

HostPath

  • CCI是共享集群,不直接开放HostPath能力。
  • 1.5.9及以上版本可支持配置path为/etc/localtime的HostPath存储,配置后CCI侧容器中挂载的时区将会与CCE节点的时区一致。

ConfigMap

-

Secret

-

EmptyDir

挂载EmptyDir不支持子路径。

EmptyDir的sizeLimit需为1Gi的整数倍,且不能大于Pod CPU核数的10倍。

DownwardAPI

-

Projected

如配置了serviceAccountToken类型的source,弹性到CCI后会挂载对应service-account-token secret中的token,该token为长期有效,且token没有预期受众,即expirationSeconds和audience两项配置不会生效。

PersistentVolumeClaims

只支持SFS、SFS Turbo云存储类型,且只支持使用CSI类型的StorageClass。

负载Hostpath配置方式

操作场景

在使用CCE或者其他K8s集群时,用户使用HostPath类型存储。但CCI是共享集群,不开放HostPath能力,因此使用HostPath的Pod通过bursting弹到CCI时,会被拦截。如无法改变Pod spec.volumes中配置的HostPath,可通过配置Annotation的形式,允许让使用HostPath的Pod弹性到CCI上,bursting在校验时需要去掉Pod中的HostPath或者将HostPath替换为localDir、emptyDir或者flexVolume。

约束与限制

  • LocalDir的sizeLimit只支持1Gi、2Gi。
  • EmptyDir的sizeLimit需为1Gi的整数倍,且不能大于Pod CPU核数的10倍。

操作步骤

通过在Pod.Annotations中加入注解可以做到hostPath转localdir、emptydir或者flexvolume。
  • 单个hostPath替换为localdir配置方式:
    "coordinator.cci.io/hostpath-replacement": '[{"name":"source-hostpath-volume","policyType":"replaceByLocalDir","localDir":{"sizeLimit":"1Gi"}}]
  • 单个hostPath替换为flexVolume配置方式:
    "coordinator.cci.io/hostpath-replacement": '[{"name":"source-hostpath-volume-1","policyType":"remove"},{"name":"source-hostpath-volume-2","policyType":"replaceByLocalDir","localDir":{"sizeLimit":"1Gi"}},{"name":"source-hostpath-volume-3","policyType":"replaceByEmptyDir","emptyDir":{"sizeLimit":"10Gi"}}]'

    EVS目前支持普通I/O、高I/O、超高I/O三种规格,volumeType根据实际情况填写。

    表1 EVS规格

    EVS规格

    类型

    应用场景

    应用场景示例

    普通I/O

    sata

    后端存储由SATA存储介质提供,适用于大容量,读写速率要求不高,事务性处理较少的应用场景。

    开发测试、企业办公应用。

    高I/O

    sas

    后端存储由SAS存储介质提供,适用于性能相对较高,读写速率要求高,有实时数据存储需求应用场景。

    创建文件系统、分布式文件共享。

    超高I/O

    ssd

    后端存储SSD存储介质提供,适用于高性能、高读写速率要求、数据密集型应用场景。

    NoSQL、关系型数据库、数据仓库(如Oracle RAC、SAP HANA)。

  • 全部HostPath都忽略:
    "coordinator.cci.io/hostpath-replacement": '[{"name":"*","policyType":"remove"}]'
  • 多个HostPath差异化替换策略:
    "coordinator.cci.io/hostpath-replacement": '[{"name":"source-hostpath-volume-1","policyType":"remove"},{"name":"source-hostpath-volume-2","policyType":"replaceByLocalDir","localDir":{"sizeLimit":"1Gi"}},{"name":"source-hostpath-volume-3","policyType":"replaceByEmptyDir","emptyDir":{"sizeLimit":"10Gi"}}]'

    对于path为/etc/localtime的HostPath存储,会被单个HostPath替换的策略(策略name为具体的volume name)替换,不会被全部HostPath替换的策略(策略name为"*")替换。

    参考deployment yaml示例:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      annotations:
        description: ''
      labels:
        virtual-kubelet.io/burst-to-cci: enforce
        appgroup: ''
        version: v1
      name: test
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: test
          version: v1
      template:
        metadata:
          labels:
            app: test
            version: v1
          annotations:
            coordinator.cci.io/hostpath-replacement: '[{"name": "test-log2", "policyType": "remove"}, {"name": "test-log", "policyType": "replaceByEmptyDir", "emptyDir":{"sizeLimit":"10Gi"}}, {"name": "test-log1", "policyType": "replaceByLocalDir", "localDir":{"sizeLimit":"1Gi"}}]'
        spec:
          containers:
            - name: container-1
              image: nginx
              imagePullPolicy: IfNotPresent
              env:
                - name: PAAS_APP_NAME
                  value: test
                - name: PAAS_NAMESPACE
                  value: default
                - name: PAAS_PROJECT_ID
                  value: 0b52a6e40b00d3682f36c0005163a82c
              resources:
                requests:
                  cpu: 250m
                  memory: 512Mi
                limits:
                  cpu: 250m
                  memory: 512Mi
              volumeMounts:
                - name: test-log
                  mountPath: /tmp/log
                - name: test-log1
                  mountPath: /tmp/log1
                - name: test-log2
                  mountPath: /tmp/log2
          volumes:
          - hostPath:
              path: /var/paas/sys/log/virtual-kubelet
              type: ""
            name: test-log
          - hostPath:
              path: /var/paas/sys/log
              type: ""
            name: test-log1
          - hostPath:
              path: /var/paas/sys/log2
              type: ""
            name: test-log2