本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 Flink 和 FluentD 自定义 Docker 镜像
请执行以下步骤,使用 Apache Flink 或 FluentD 镜像在 EKS 上为亚马逊 EMR 自定义 Docker 镜像。
主题
先决条件
在自定义 Docker 镜像之前,请确保您已完成以下先决条件:
-
完成了在 EKS 上为亚马逊 EMR 设置 Flink Kubernetes 操作员的步骤。
-
已在您的环境中安装了 Docker。有关更多信息,请参阅获取 Docker
。
步骤 1:从 Amazon 弹性容器注册表中检索基础镜像
基础映像包含访问其他镜像所需的 Amazon EMR 运行时和连接器。 Amazon Web Services如果你在 EKS 上使用 Flink 6.14.0 或更高版本的 Amazon EMR,则可以从亚马逊 ECR 公共图库中获取基础图片。浏览图库以找到映像链接,然后将映像拉到本地工作区。例如,对于 Amazon EMR 6.14.0 版本,以下docker pull
命令返回最新的标准基础映像。emr-6.14.0:latest
用你想要的发行版替换。
docker pull public.ecr.aws/emr-on-eks/flink/emr-6.14.0-flink:latest
以下是 Flink 图库图片和 Fluentd 图库图片的链接:
步骤 2:自定义基础镜像
以下步骤描述了如何自定义您从 Amazon ECR 中提取的基础映像。
-
在您的本地 Workspace 上创建新的
Dockerfile
。 -
编辑
Dockerfile
并添加以下内容。这将Dockerfile
使用您从中提取的容器镜像public.ecr.aws/emr-on-eks/flink/emr-7.1.0-flink:latest
。FROM public.ecr.aws/emr-on-eks/flink/emr-7.1.0-flink:latest USER root ### Add customization commands here #### USER hadoop:hadoop
如果您正在使用,请使用以下配置
Fluentd
。FROM public.ecr.aws/emr-on-eks/fluentd/emr-7.1.0:latest USER root ### Add customization commands here #### USER hadoop:hadoop
-
将命令添加到
Dockerfile
以自定义基础镜像。以下命令演示了如何安装 Python 库。FROM public.ecr.aws/emr-on-eks/flink/emr-7.1.0-flink:latest USER root RUN pip3 install --upgrade boto3 pandas numpy // For python 3 USER hadoop:hadoop
-
在您创建的同一目录中
DockerFile
,运行以下命令来构建 Docker 镜像。您在-t
旗帜后面提供的字段是您自定义的图像名称。docker build -t <
YOUR_ACCOUNT_ID
>.dkr.ecr.<YOUR_ECR_REGION
>.amazonaws.com/<ECR_REPO
>:<ECR_TAG
>
第 3 步:发布您的自定义镜像
现在,您可以将新的 Docker 镜像发布到您的 Amazon ECR 注册表。
-
运行以下命令创建 Amazon ECR 存储库来存储您的 Docker 镜像。为您的存储库提供名称,例如
emr_custom_repo.
有关更多信息,请参阅 Amazon Elastic Con tainer Registry 用户指南中的创建存储库。aws ecr create-repository \ --repository-name emr_custom_repo \ --image-scanning-configuration scanOnPush=true \ --region <AWS_REGION>
-
运行以下命令对您的默认注册表进行身份验证。有关更多信息,请参阅 Amazon Elast ic Container Registry 用户指南中的使用默认注册表进行身份验证。
aws ecr get-login-password --region <
AWS_REGION
> | docker login --username Amazon --password-stdin <AWS_ACCOUNT_ID
>.dkr.ecr.<YOUR_ECR_REGION
>.amazonaws.com -
推送镜像。有关更多信息,请参阅《亚马逊弹性容器注册表用户指南》中的将图像推送到 Amazon ECR。
docker push <
YOUR_ACCOUNT_ID
>.dkr.ecr.<YOUR_ECR_REGION
>.amazonaws.com/<ECR_REPO
>:<ECR_TAG
>
第 4 步:使用自定义镜像在 Amazon EMR 中提交 Flink 工作负载
要使用自定义图片,请对您的FlinkDeployment
规范进行以下更改。为此,请在部署规范的spec.image
行中输入您自己的镜像。
apiVersion: flink.apache.org/v1beta1 kind: FlinkDeployment metadata: name: basic-example spec: flinkVersion: v1_18 image: <
YOUR_ACCOUNT_ID
>.dkr.ecr.<YOUR_ECR_REGION
>.amazonaws.com/<ECR_REPO
>:<ECR_TAG
> imagePullPolicy: Always flinkConfiguration: taskmanager.numberOfTaskSlots: "1"
要将自定义映像用于 Fluentd 作业,请在部署规范monitoringConfiguration.image
行中输入您自己的镜像。
monitoringConfiguration: image: <
YOUR_ACCOUNT_ID
>.dkr.ecr.<YOUR_ECR_REGION
>.amazonaws.com/<ECR_REPO
>:<ECR_TAG
> cloudWatchMonitoringConfiguration: logGroupName: flink-log-group logStreamNamePrefix: custom-fluentd