部署DataCache CRD
阿里云以DataCache CRD的方式將ECI的數(shù)據(jù)緩存功能提供給Kubernetes用戶,以便Kubernetes用戶可以使用該功能來提前拉取大規(guī)模數(shù)據(jù)。本文介紹如何在Kubernetes集群中部署DataCache CRD。
計費(fèi)說明
如果是ACK集群,部署DataCache CRD會默認(rèn)部署在已有ECS節(jié)點上,無需額外付費(fèi)。
如果是ACK Serverless集群,部署DataCache CRD后會生成一個0.25 vCPU 、0.5 GiB的ECI Pod,收取ECI實例費(fèi)用。費(fèi)用=(0.25*vCPU單價+0.5*內(nèi)存單價)*運(yùn)行時長。關(guān)于ECI實例如何計費(fèi),以及vCPU和內(nèi)存的具體單價,請參見ECI實例計費(fèi)。
準(zhǔn)備工作
操作前,請準(zhǔn)備好以下信息:
AccessKey ID和AccessKey Secret。獲取方式請參見創(chuàng)建AccessKey。
重要請確保AccessKey所屬阿里云賬號或者RAM用戶具有數(shù)據(jù)緩存相關(guān)API的權(quán)限。
集群所屬的地域ID。
(推薦)通過Helm部署
連接Kubernetes集群。
確認(rèn)Helm版本。
helm version
根據(jù)Helm版本選擇以下一種方式部署DataCache CRD。
Helm版本為3.7及以上版本
如果Helm版本為3.7,需開啟實驗功能。
Helm版本為3.8及以上版本可跳過該步驟。
export HELM_EXPERIMENTAL_OCI=1
設(shè)置環(huán)境變量。
說明設(shè)置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>'
部署DataCache CRD。
helm install datacache-operator $REPO --set accessKey=$AK --set secretKey=$SK --set regionId=$REGION
Helm版本低于3.7
安裝阿里云ACR插件。
helm plugin install https://github.com/AliyunContainerService/helm-acr
如果您訪問Github比較流暢,可以直接執(zhí)行上述命令。如果網(wǎng)絡(luò)不流暢,可以參考以下命令安裝。
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
添加Helm倉庫到本地Helm客戶端。
helm repo add datacache acr://eci-release-chart.cn-hangzhou.cr.aliyuncs.com/datacache/datacache-operator helm repo update
設(shè)置環(huán)境變量。
export REPO="datacache/datacache-operator" export AK='<AccessKey ID>' export SK='<AccessKey Secret>' export REGION='<地域ID>'
部署DataCache CRD。
helm install datacache-operator $REPO --set accessKey=$AK --set secretKey=$SK --set regionId=$REGION
通過YAML部署
連接Kubernetes集群。
準(zhǔn)備DataCache CRD的YAML配置文件,命名為aliyun-datacache-controller.yaml。
YAML配置文件內(nèi)容如下,請根據(jù)實際修改代碼中的AccessKey ID(第13行)、AccessKey Secret(第14行)和地域ID(第211行)。
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: 對應(yīng)一個bucket,缺省為default,eci-system為ECI公共緩存保留空間,不可使用 path: type: string description: 對應(yīng)的bucket的目錄 dataSource: type: object description: 緩存數(shù)據(jù)源 properties: type: type: string description: 支持NAS/OSS/URL/SNAPSHOT等 options: type: object description: 具體類型參數(shù),詳見DataCache文檔 x-kubernetes-preserve-unknown-fields: true size: type: integer default: 20 description: 緩存大小,需要提前評估好,默認(rèn)取最小的塊存儲大小,即20 GiB retentionDays: type: integer description: 保留天數(shù),默認(rèn)不過期 netConfig: type: object properties: securityGroupId: type: string description: 安全組 vSwitchId: type: string description: 交換機(jī) eipInstanceId: type: string description: 如果交換機(jī)沒有配置SNAT,可以綁定EIP,拉取公網(wǎng)數(shù)據(jù) eipCreateParam: type: object description: 與EipInstanceId二選一 properties: bandwidth: type: integer description: 公網(wǎng)帶寬,單位為MB,缺省值為5 commonBandwidthPackage: type: string description: 共享帶寬包 internetChargeType: type: string description: EIP計費(fèi)類型 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: *** #請根據(jù)實際填寫地域 - name: ACCESS_KEY valueFrom: secretKeyRef: name: accesskey.eci.aliyun.com key: accessKey - name: SECRET_KEY valueFrom: secretKeyRef: name: accesskey.eci.aliyun.com key: secretKey
部署DataCache CRD。
kubectl apply -f aliyun-datacache-controller.yaml