使用阿里云弹性容器实例(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秒左右后,再次新建作业时即可看到默认配置的修改已生效。
- 本页导读 (1)