如何在GCP GKE中通过Helm的values.yaml部署Airflow自定义Docker镜像
问题解答
1. helm upgrade 自动使用自定义镜像的实现方法
可以实现,操作逻辑如下:
- 每次构建自定义镜像时,给镜像设置唯一且固定的标签,不要一直用
latest标签,否则Kubernetes会默认使用节点上缓存的镜像,不会触发更新。推荐用代码commit哈希、构建时间作为标签,示例构建命令:docker build -t airflow-custom:$(git rev-parse --short HEAD) . - 在Airflow官方Helm Chart的
values.yaml中提前配置好镜像相关参数:defaultAirflowRepository: 你的镜像仓库地址 defaultAirflowTag: 你的镜像标签 - 每次构建完新镜像后,先更新
values.yaml里的defaultAirflowTag值为新的镜像标签,再执行helm upgrade命令即可自动完成镜像更新:helm upgrade airflow apache-airflow/airflow -f values.yaml
如果想要更自动化,可以写一个简单的Shell脚本,串联镜像构建、打标签、更新values.yaml、执行helm upgrade的全流程。
2. GKE使用自定义镜像的前置要求
你必须把本地构建的镜像上传到可被GKE集群访问的镜像仓库,不能直接引用本地镜像,原因如下:
- 你看到的kind集群
kind load命令是特殊用法:kind是运行在本地主机上的Kubernetes集群,和你本地Docker环境共享主机资源,所以可以直接把本地镜像导入到kind集群节点中。但GKE是运行在GCP云端的托管集群,节点和你的本地开发环境完全网络隔离,无法访问你本地机器上存储的镜像。 - 你不需要一定上传到Docker Hub,优先推荐使用GCP自带的Artifact Registry或者Container Registry,和GKE兼容性更好,同项目下的GKE集群默认拥有这两个镜像仓库的拉取权限,不需要额外配置拉取密钥。
操作示例(以GCR为例):
- 给本地镜像打GCR标签,替换为你自己的GCP项目ID:
docker tag airflow-custom:1.0.0 gcr.io/你的GCP项目ID/airflow-custom:1.0.0
- 推送镜像到GCR:
docker push gcr.io/你的GCP项目ID/airflow-custom:1.0.0
- 调整
values.yaml的镜像配置即可:
defaultAirflowRepository: gcr.io/你的GCP项目ID/airflow-custom defaultAirflowTag: "1.0.0"
内容的提问来源于stack exchange,提问作者Halc
相关产品推荐
相关产品推荐

