如何使用气流 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 映像?的主要内容,如果未能解决你的问题,请参考以下文章

如何从气流传感器中提取 xcom 值?

气流操作员从外部Rest API提取数据

如何使用气流将 bigquery 导出到 bigtable?架构问题

GCP apache气流,如何从私有存储库安装Python依赖项

气流 mysql 到 gcp Dag 错误

我啥时候应该在 python 运算符上使用特定的气流运算符?