# #python #docker #docker-compose #gitlab #airflow
Вопрос:
Я использую установку Airflow через образ Docker в экземпляре AWS, и я создал образ docker своего проекта и отправил его в реестр контейнеров GitLab. Теперь я хочу использовать это изображение в airflow для ежедневного запуска, я знаю, что когда мы используем наше собственное личное изображение, мы должны пройти аутентификацию, чтобы я мог войти в систему с помощью dag airflow, файла или любого метода для решения этой проблемы. Мой код
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 (пользовательский образ, в котором также есть Dag) из моего личного реестра
Я экспортирую этот секрет в качестве переменной 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
Теперь нам нужно использовать созданный выше секрет в наших Dag следующим образом
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
)
Комментарии:
1. не могли бы вы уточнить, как это сделать?
2. @DanielM Я обновил информацию о том, как использовать секреты при извлечении изображения из частного репо
3. Можете ли вы объяснить, как я могу создать секрет для извлечения образа docker из реестра контейнеров GitLab?
4. Автор ответа использует DockerOperator, зачем вы даете ему «решение» с помощью KubernetesPodOperator?