#kubernetes #airflow #google-cloud-composer
#kubernetes #воздушный поток #google-cloud-композитор
Вопрос:
Я настраиваю среду Airflow в Google Cloud Composer для тестирования. Я добавил несколько секретов в свое пространство имен, и они отображаются нормально:
$ kubectl describe secrets/eric-env-vars
Name: eric-env-vars
Namespace: eric-dev
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
VERSION_NUMBER: 6 bytes
Я ссылался на этот секрет в своем файле определения базы данных (для краткости опустив некоторый код):
env_var_secret = Secret(
deploy_type='env',
deploy_target='VERSION_NUMBER',
secret='eric-env-vars',
key='VERSION_NUMBER',
)
dag = DAG('env_test', schedule_interval=None, start_date=start_date)
operator = KubernetesPodOperator(
name='k8s-env-var-test',
task_id='k8s-env-var-test',
dag=dag,
image='ubuntu:16.04',
cmds=['bash', '-cx'],
arguments=['env'],
config_file=os.environ['KUBECONFIG'],
namespace='eric-dev',
secrets=[env_var_secret],
)
Но когда я запускаю эту базу данных, VERSION_NUMBER
переменная env не распечатывается. Не похоже, что он также должным образом связан с pod (прошу прощения за неточный язык, я новичок как в Kubernetes, так и в Airflow). Это взято из журнала задач Airflow в ответе на создание модуля (также отформатирован для краткости / удобочитаемости):
'env': [
{
'name': 'VERSION_NUMBER',
'value': None,
'value_from': {
'config_map_key_ref': None,
'field_ref': None,
'resource_field_ref': None,
'secret_key_ref': {
'key': 'VERSION_NUMBER',
'name': 'eric-env-vars',
'optional': None}
}
}
]
Я предполагаю, что мы каким-то образом вызываем конструктор для Secret
неправильного, но я не совсем уверен. Руководство приветствуется!
Комментарии:
1. Попадает ли значение, которое вы ожидаете в
VERSION_NUMBER
, по крайней мере, вBASE_IMAGE_VERSION
?2. @hexacyanide Да, это та же переменная, я просто допустил ошибку при редактировании журналов и операторов. Исправляем это сейчас.
Ответ №1:
Оказывается, это было неправильное представление журналов!
При предоставлении переменной среды модулю Kubernetes через Секрет, этот value
ключ в ответе API является None
ключом, потому что значение поступает из secret_key_ref
.
Комментарии:
1. Означает ли это, что ваша переменная среды была правильно передана в ваш контейнер Ubuntu? Если нет, нужно ли было что-то менять, чтобы это заработало?