使用阿里云彈性容器實例(Elastic Container Instance)調度Flink作業,可以不受限于ACK集群的節點計算容量,靈活動態地按需創建Pod(容器組),有效地降低計算成本。本文為您介紹如何使用ECI彈性調度Flink作業。
背景信息
如果您需要使用更多ECI的高級功能,可以通過設置更多的Annotation(注解)對ECI按需進行參數配置,詳情請參見ECI Pod Annotation。
前提條件
操作步驟
在ACK集群中安裝ECI所需的虛擬節點,詳情請參見步驟一:在ACK集群中部署ack-virtual-node組件。
在EMR on ACK上提交Flink作業時,可以通過設置Label(標簽)或Annotation(注解)來實現ECI調度Flink作業。
提交Flink作業詳情,請參見提交Flink作業。
說明本文示例中版本以Flink 1.13(EMR-3.41.0-ack)為例,其他版本時請修改
flinkVersion
的配置。詳細配置項請參見Flink Kubernetes Operator。方式一:配置Pod Label。
設置參數alibabacloud.com/eci為true,將指定Pod調度到ECI上運行,參考示例如下。
apiVersion: flink.apache.org/v1beta1 kind: FlinkDeployment metadata: name: basic-emr-example spec: flinkVersion: v1_13 flinkConfiguration: state.savepoints.dir: file:///flink-data/flink-savepoints state.checkpoints.dir: file:///flink-data/flink-checkpoints metrics.reporter.prom.factory.class: org.apache.flink.metrics.prometheus.PrometheusReporterFactory # 通過配置Label,Flink的JobManager和TaskManager使用ECI。 kubernetes.jobmanager.labels: alibabacloud.com/eci:true kubernetes.taskmanager.labels: alibabacloud.com/eci:true #(可選)配置ECI鏡像緩存,提升性能。 kubernetes.jobmanager.annotations: k8s.aliyun.com/eci-image-cache:true kubernetes.taskmanager.annotations: k8s.aliyun.com/eci-image-cache:true serviceAccount: flink podTemplate: metadata: annotations: prometheus.io/path: /metrics prometheus.io/port: "9249" prometheus.io/scrape: "true" spec: serviceAccount: flink containers: - name: flink-main-container volumeMounts: - mountPath: /flink-data name: flink-volume ports: - containerPort: 9249 name: metrics protocol: TCP volumes: - name: flink-volume emptyDir: {} jobManager: replicas: 1 resource: memory: "2048m" cpu: 1 taskManager: resource: memory: "2048m" cpu: 1 job: jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar parallelism: 2 upgradeMode: stateless
方式二:配置Pod Annotation。
設置參數alibabacloud.com/burst-resource為eci,將指定Pod調度到ECI上運行,Annotation取值包含兩種類型:
eci:當集群普通節點的資源不足時,使用ECI。
eci_only:只使用ECI。
參考示例如下。
apiVersion: flink.apache.org/v1beta1 kind: FlinkDeployment metadata: name: basic-emr-example spec: flinkVersion: v1_13 flinkConfiguration: state.savepoints.dir: file:///flink-data/flink-savepoints state.checkpoints.dir: file:///flink-data/flink-checkpoints metrics.reporter.prom.factory.class: org.apache.flink.metrics.prometheus.PrometheusReporterFactory # 通過配置Annotation,Flink的JobManager和TaskManager使用ECI。 kubernetes.jobmanager.annotations: alibabacloud.com/burst-resource:eci_only kubernetes.taskmanager.annotations: alibabacloud.com/burst-resource:eci_only #(可選)配置ECI鏡像緩存,提升性能。 kubernetes.jobmanager.annotations: k8s.aliyun.com/eci-image-cache:true kubernetes.taskmanager.annotations: k8s.aliyun.com/eci-image-cache:true serviceAccount: flink podTemplate: metadata: annotations: prometheus.io/path: /metrics prometheus.io/port: "9249" prometheus.io/scrape: "true" spec: serviceAccount: flink containers: - name: flink-main-container volumeMounts: - mountPath: /flink-data name: flink-volume ports: - containerPort: 9249 name: metrics protocol: TCP volumes: - name: flink-volume emptyDir: {} jobManager: replicas: 1 resource: memory: "2048m" cpu: 1 taskManager: resource: memory: "2048m" cpu: 1 job: jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar parallelism: 2 upgradeMode: stateless
方式三:每次提交作業時默認使用ECI Pod。
進入flink-conf.yaml頁簽。
在EMR on ACK頁面,單擊目標集群所在行的配置。
在配置頁簽,單擊flink-conf.yaml。
配置Flink集群以啟用ECI。
單擊新增配置項。
在新增配置項對話框中,添加以下配置。
參數
描述
kubernetes.jobmanager.annotations
固定值為alibabacloud.com/burst-resource:eci_only,k8s.aliyun.com/eci-image-cache:true。
kubernetes.taskmanager.annotations
固定值為alibabacloud.com/burst-resource:eci_only,k8s.aliyun.com/eci-image-cache:true。
單擊確定。
在彈出的對話框中,輸入執行原因,單擊保存。
生效配置。
單擊下方的部署客戶端配置。
在彈出的對話框中,輸入執行原因,單擊確定。
在確認對話框中,單擊確定。
等待30秒左右后,再次新建作業時即可看到默認配置的修改已生效。