Airflow Helm Chart中createUserJob如何执行多条命令
问题原因
配置不生效核心是三个问题:
- 你在脚本开头的删除命令前加了
exec:exec会用后续紧跟的命令替换当前bash进程,第一条删除命令执行完后shell进程就会直接退出,分号后的创建用户命令根本不会被执行 - 删除用户时硬编码了用户名为
admin,没有和配置里的默认用户名变量联动,修改默认用户名时会出现删错对象的问题 - 没有处理首次部署时用户不存在的场景:如果目标用户不存在,
airflow users delete命令会返回非0退出码,直接导致Job失败中断
可用配置
把exec移动到最后一条创建用户的命令前,同时给删除命令增加容错、替换硬编码的用户名即可,完整配置如下:
airflow: createUserJob: command: ~ args: - "bash" - "-c" - |- # 先删除已存在的目标用户,用户不存在时忽略报错 airflow users delete --username "{{ .Values.webserver.defaultUser.username }}" || true # 最后执行用户创建,保留exec保证进程信号、退出码能被K8s正确捕获 exec airflow {{ semverCompare ">=2.0.0" .Values.airflowVersion | ternary "users create" "create_user" }} "$@" - -- - "-r" - "{{ .Values.webserver.defaultUser.role }}" - "-u" - "{{ .Values.webserver.defaultUser.username }}" - "-e" - "{{ .Values.webserver.defaultUser.email }}" - "-f" - "{{ .Values.webserver.defaultUser.firstName }}" - "-l" - "{{ .Values.webserver.defaultUser.lastName }}" - "-p" - "{{ .Values.webserver.defaultUser.password }}"
关键说明
bash -c模式本身就支持运行多条命令,用换行、分号;、&&、||分隔都可以,核心是不要在非最后一条命令前加exec- 最后一条命令前保留
exec是为了贴合原Chart的设计:让业务进程直接接管PID 1,Kubernetes可以正确传递终止信号、获取Job执行的退出码 - 删除命令后加
|| true是为了兼容首次部署场景:第一次跑Job时用户还没创建,删除命令会报错,加了之后会忽略这个错误继续往下执行创建逻辑
内容的提问来源于stack exchange,提问作者wjmolinam
相关产品推荐
相关产品推荐

