kind 快速入门¶
本文将向您展示如何在 Kind 上使用 Helm Chart 安装 Airflow
安装 kind 并创建集群¶
我们建议使用 Kubernetes 1.20+ 进行测试,例如
kind create cluster --image kindest/node:v1.21.1
确认它已启动
kubectl cluster-info --context kind-kind
添加 Airflow Helm Stable Repo¶
helm repo add apache-airflow https://airflow.apache.org
helm repo update
创建命名空间¶
export NAMESPACE=example-namespace
kubectl create namespace $NAMESPACE
安装 chart¶
export RELEASE_NAME=example-release
helm install $RELEASE_NAME apache-airflow/airflow --namespace $NAMESPACE
使用以下代码安装带有示例 DAG 的 chart
export NAMESPACE=example-namespace
helm install $RELEASE_NAME apache-airflow/airflow \
--namespace $NAMESPACE \
--set-string "env[0].name=AIRFLOW__CORE__LOAD_EXAMPLES" \
--set-string "env[0].value=True"
这可能需要几分钟。确认 Pod 已启动
kubectl get pods --namespace $NAMESPACE
helm list --namespace $NAMESPACE
运行以下命令将 Airflow UI 端口转发到 https://127.0.0.1:8080/ 以确认 Airflow 正在工作。
kubectl port-forward svc/$RELEASE_NAME-webserver 8080:8080 --namespace $NAMESPACE
扩展 Airflow 镜像¶
Apache Airflow 社区发布了 Docker 镜像,这些镜像作为 Apache Airflow 的参考 镜像
。但是,当您尝试使用时,您希望添加自己的 DAG、自定义依赖项、包,甚至自定义提供程序。
注意
创建自定义镜像意味着您还需要维护一定程度的自动化,因为当您要安装的包或 Airflow 升级时,您需要重新创建镜像。请不要忘记保留这些脚本。另请注意,在您运行纯 Python 任务时,可以使用 Python Virtualenv 函数,它将在运行时动态获取和安装 python 依赖项。使用 Airflow 2.8.0,还可以缓存 Virtualenvs。
实现它的最佳方法是构建您自己的自定义镜像。
向镜像添加 DAG¶
创建一个项目
mkdir my-airflow-project && cd my-airflow-project mkdir dags # put dags here cat <<EOM > Dockerfile FROM apache/airflow COPY . . EOM
然后构建镜像
docker build --pull --tag my-dags:0.0.1 .
将镜像加载到 kind 中
kind load docker-image my-dags:0.0.1
升级 Helm 部署
helm upgrade $RELEASE_NAME apache-airflow/airflow --namespace $NAMESPACE \ --set images.airflow.repository=my-dags \ --set images.airflow.tag=0.0.1
向镜像添加 apt
包¶
下面的示例添加了 vim
apt 包。
创建一个项目
mkdir my-airflow-project && cd my-airflow-project cat <<EOM > Dockerfile FROM apache/airflow USER root RUN apt-get update \ && apt-get install -y --no-install-recommends \ vim \ && apt-get autoremove -yqq --purge \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* USER airflow EOM
然后构建镜像
docker build --pull --tag my-image:0.0.1 .
将镜像加载到 kind 中
kind load docker-image my-image:0.0.1
升级 Helm 部署
helm upgrade $RELEASE_NAME apache-airflow/airflow --namespace $NAMESPACE \ --set images.airflow.repository=my-image \ --set images.airflow.tag=0.0.1
向镜像添加 PyPI
包¶
下面的示例添加了 lxml
PyPI 包。
创建一个项目
mkdir my-airflow-project && cd my-airflow-project cat <<EOM > Dockerfile FROM apache/airflow RUN pip install --no-cache-dir lxml EOM
然后构建镜像
docker build --pull --tag my-image:0.0.1 .
将镜像加载到 kind 中
kind load docker-image my-image:0.0.1
升级 Helm 部署
helm upgrade $RELEASE_NAME apache-airflow/airflow --namespace $NAMESPACE \ --set images.airflow.repository=my-image \ --set images.airflow.tag=0.0.1