全部產品
Search
文件中心

Elastic Container Instance:部署DataCache CRD

更新時間:Jul 06, 2024

阿里雲以DataCache CRD的方式將ECI的資料緩衝功能提供給Kubernetes使用者,以便Kubernetes使用者可以使用該功能來提前拉取大規模資料。本文介紹如何在Kubernetes叢集中部署DataCache CRD。

計費說明

  • 如果是ACK叢集,部署DataCache CRD會預設部署在已有ECS節點上,無需額外付費。

  • 如果是ACK Serverless叢集,部署DataCache CRD後會產生一個0.25 vCPU 、0.5 GiB的ECI Pod,收取ECI執行個體費用。費用=(0.25*vCPU單價+0.5*記憶體單價)*運行時間長度。關於ECI執行個體如何計費,以及vCPU和記憶體的具體單價,請參見ECI執行個體計費

準備工作

操作前,請準備好以下資訊:

  • AccessKey ID和AccessKey Secret。擷取方式請參見建立AccessKey

    重要

    請確保AccessKey所屬阿里雲帳號或者RAM使用者具有資料緩衝相關API的許可權。

  • 叢集所屬的地區ID。

(推薦)通過Helm部署

  1. 串連Kubernetes叢集。

  2. 確認Helm版本。

    helm version
  3. 根據Helm版本選擇以下一種方式部署DataCache CRD。

    Helm版本為3.7及以上版本

    1. 如果Helm版本為3.7,需開啟實驗功能。

      Helm版本為3.8及以上版本可跳過該步驟。

      export HELM_EXPERIMENTAL_OCI=1
    2. 設定環境變數。

      說明

      設定REPO時,請直接使用oci://eci-release-registry.cn-hangzhou.cr.aliyuncs.com/datacache/datacache-operator,無需修改地區ID。

      export REPO="oci://eci-release-registry.cn-hangzhou.cr.aliyuncs.com/datacache/datacache-operator"
      export AK='<AccessKey ID>'
      export SK='<AccessKey Secret>'
      export REGION='<地區ID>'
    3. 部署DataCache CRD。

      helm install datacache-operator $REPO --set accessKey=$AK --set secretKey=$SK --set regionId=$REGION

    Helm版本低於3.7

    1. 安裝阿里雲ACR外掛程式。

      helm plugin install https://github.com/AliyunContainerService/helm-acr

      如果您訪問Github比較流暢,可以直接執行上述命令。如果網路不流暢,可以參考以下命令安裝。

      git clone https://github.com/AliyunContainerService/helm-acr.git
      sed -i 's/github.com/helm-acr-releases.oss-cn-hangzhou.aliyuncs.com/g' helm-acr/scripts/install_plugin.sh
      helm plugin install helm-acr
    2. 添加Helm倉庫到本地Helm用戶端。

      helm repo add datacache acr://eci-release-chart.cn-hangzhou.cr.aliyuncs.com/datacache/datacache-operator
      helm repo update
    3. 設定環境變數。

      export REPO="datacache/datacache-operator"
      export AK='<AccessKey ID>'
      export SK='<AccessKey Secret>'
      export REGION='<地區ID>'
    4. 部署DataCache CRD。

      helm install datacache-operator $REPO --set accessKey=$AK --set secretKey=$SK --set regionId=$REGION

通過YAML部署

  1. 串連Kubernetes叢集。

  2. 準備DataCache CRD的YAML設定檔,命名為aliyun-datacache-controller.yaml。

    YAML設定檔內容如下,請根據實際修改代碼中的AccessKey ID(第13行)、AccessKey Secret(第14行)和地區ID(第211行)。

    展開查看詳細YAML

    apiVersion: v1 
    kind: Namespace 
    metadata: 
      name: datacache-controller
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: accesskey.eci.aliyun.com
      namespace: datacache-controller
    type: Opaque
    stringData:
      accessKey: ***            #請按實際填寫AccessKey ID
      secretKey: ***            #請按實際填寫AccessKey Secret
    ---
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: datacaches.eci.aliyun.com
    spec:
      group: eci.aliyun.com
      scope: Cluster
      names:
        kind: DataCache
        plural: datacaches
        singular: datacache
        shortNames:
          - edc
        categories:
          - all
      versions:
        - name: v1alpha1
          served: true
          storage: true
          subresources:
            status: {}
          schema:
            openAPIV3Schema:
              type: object
              required:
                - spec
              properties:
                spec:
                  type: object
                  required:
                    - path
                    - dataSource
                  properties:
                    bucket:
                      type: string
                      default: default
                      description: 對應一個bucket,預設為default,eci-system為ECI公用緩衝保留空間,不可使用
                    path:
                      type: string
                      description: 對應的bucket的目錄
                    dataSource:
                      type: object
                      description: 快取資料源
                      properties:
                        type:
                          type: string
                          description: 支援NAS/OSS/URL/SNAPSHOT等
                        options:
                          type: object
                          description: 具體型別參數,詳見DataCache文檔
                          x-kubernetes-preserve-unknown-fields: true
                    size:
                      type: integer
                      default: 20
                      description: 緩衝大小,需要提前評估好,預設取最小的Block Storage大小,即20 GiB
                    retentionDays:
                      type: integer
                      description: 保留天數,預設不到期
                    netConfig:
                      type: object
                      properties:
                        securityGroupId:
                          type: string
                          description: 安全性群組
                        vSwitchId:
                          type: string
                          description: 交換器
                        eipInstanceId:
                          type: string
                          description: 如果交換器沒有配置SNAT,可以綁定EIP,拉取公網資料
                        eipCreateParam:
                          type: object
                          description: 與EipInstanceId二選一
                          properties:
                            bandwidth:
                              type: integer
                              description: 公網頻寬,單位為MB,預設值為5
                            commonBandwidthPackage:
                              type: string
                              description: 共用頻寬包
                            internetChargeType:
                              type: string
                              description: EIP計費類型
                            publicIpAddressPoolId:
                              type: string
                              description: IP位址集區
                            ISP:
                              type: string
                              description: EIP線路類型
                status:
                  type: object
                  properties:
                    status: 
                      type: string
                    progress:
                      type: string
                    snapshotId:
                      type: string
                    dataCacheId:
                      type: string
          additionalPrinterColumns:
            - name: Age
              type: date
              jsonPath: .metadata.creationTimestamp
            - name: dataCacheId
              type: string
              jsonPath: .status.dataCacheId
            - name: Status
              type: string
              jsonPath: .status.status
            - name: Progress
              type: string
              jsonPath: .status.progress
            - name: Bucket
              type: string
              jsonPath: .spec.bucket
            - name: Path
              type: string
              jsonPath: .spec.path
    --- 
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: aliyun-datacache-controller
      namespace: datacache-controller
    --- 
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: aliyun-datacache-controller
      namespace: datacache-controller
    rules:
      - apiGroups:
          - "eci.aliyun.com"
        resources:
          - datacaches
          - datacaches/status
        verbs:
          - "*"
      - apiGroups:
          - ""
        resources:
          - events
        verbs:
          - create
          - patch
          - update
      - apiGroups:
          - ""
        resources:
          - configmaps
        verbs:
          - get
    --- 
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: aliyun-datacache-controller
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: aliyun-datacache-controller
    subjects:
      - kind: ServiceAccount
        name: aliyun-datacache-controller
        namespace: datacache-controller
    --- 
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: aliyun-datacache-controller
      namespace: datacache-controller
    spec:
      selector:
        matchLabels:
          app: aliyun-datacache-controller
      replicas: 1
      template:
        metadata:
          labels:
            app: aliyun-datacache-controller
        spec:
          serviceAccountName: aliyun-datacache-controller
          containers:
          - name: datacache-operator
            image: eci-release-registry.cn-hangzhou.cr.aliyuncs.com/datacache/datacache-operator:latest
            resources:
              limits: 
                memory: "512Mi"
                cpu: "250m"
              requests:
                memory: "64Mi"
                cpu: "50m"
            env: 
            - name: REGION_ID
              value: ***          #請根據實際填寫地區
            - name: ACCESS_KEY
              valueFrom:
                secretKeyRef:
                  name: accesskey.eci.aliyun.com
                  key: accessKey
            - name: SECRET_KEY
              valueFrom: 
                secretKeyRef:
                  name: accesskey.eci.aliyun.com
                  key: secretKey
  3. 部署DataCache CRD。

    kubectl apply -f aliyun-datacache-controller.yaml