如何使用气流 DockerOperator 提取我自己的私有存储库的 docker 映像?
Posted
技术标签:
【中文标题】如何使用气流 DockerOperator 提取我自己的私有存储库的 docker 映像?【英文标题】:How to pull my own private repository's docker image using airflow DockerOperator? 【发布时间】:2021-06-14 02:48:30 【问题描述】:我在 AWS 实例中通过 Docker 映像使用 Airflow 安装,并且我创建了我的项目的 docker 映像并将其推送到 GitLab 容器注册表。 现在我想在气流中提取此图像以每天运行,我知道当我们提取自己的私有图像时,我们必须进行身份验证所以我如何使用气流 dag、文件或任何方法登录来解决此问题。 我的代码
stripetos3_scheduler = DockerOperator(
task_id='stripe-to-s3',
image='registry.gitlab.com/mobinalhassan/stripetos3dags:latest',
auto_remove=True,
force_pull=True,
dag=dag
)
【问题讨论】:
【参考方案1】:使用这里提到的 imagePullSecrets https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/stable/operators.html
像这样创建一个秘密
apiVersion: v1
kind: Secret
metadata:
name: .Release.Name-image-pull-secret
namespace: .Release.Namespace
data:
.dockerconfigjson: template "dockerConfigTemplate" .
type: kubernetes.io/dockerconfigjson
创建一个模板供上面的秘密组件使用
- define "dockerConfigTemplate"
- if .Values.images.airflow.registry
- $url := .Values.images.airflow.registry.url
- $name := .Values.images.airflow.registry.username
- $password := .Values.images.airflow.registry.password
- $email := .Values.images.airflow.registry.email
- $auth := (printf "%s:%s" $name $password | b64enc)
- printf "\"auths\":\"%s\":
\"username\":\"%s\",\"password\":\"%s\",\"email\":\"%s\",\"auth\":\"%s\""
$url $name $password $email $auth | b64enc
- end
- end
在我的情况下,我正在从我的私人注册表部署 Airflow(也有 Dags 的自定义图像)
我正在将此 Secret 导出为可供其他组件使用的 Env 变量
apiVersion: v1
kind: Pod
metadata:
name: worker-pod
spec:
containers:
- args: []
command: []
env:
- name: OI_DATAPIPELINE_IMAGE_PULL_SECRET
value: .Release.Name-pipeline-image-pull-secret
现在我们需要在我们的 Dags 中使用上面创建的秘密,如下所示
data_pipeline = KubernetesPodOperator(
namespace='default',
name="DataPipeline",
task_id="data_pipeline",
image='*********.jfrog.io/*****:latest',
image_pull_secrets=
[k8s.V1LocalObjectReference('OI_DATAPIPELINE_IMAGE_PULL_SECRET')],
env_from=env_from,
cmds=["./deployments/data_pipeline/start.sh"],
get_logs=True,
is_delete_operator_pod=True,
dag=dag
)
【讨论】:
你能详细说明一下吗? @DanielM 我更新了如何在从私人仓库拉取图像时使用 Secrets 你能解释一下我如何创建一个秘密来从 GitLab 容器注册表中提取 docker 映像吗?以上是关于如何使用气流 DockerOperator 提取我自己的私有存储库的 docker 映像?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用气流将 bigquery 导出到 bigtable?架构问题