使用 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 端口转发到 http://localhost:8080/ 以确认 Airflow 正常工作。
kubectl port-forward svc/$RELEASE_NAME-webserver 8080:8080 --namespace $NAMESPACE
扩展 Airflow 镜像¶
Apache Airflow 社区发布的 Docker 镜像,是 Apache Airflow 的 reference images
。然而,当您尝试使用它时,您可能想添加自己的 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
进一步扩展和定制镜像¶
有关如何扩展和定制 Airflow 镜像的更多详细信息,请参阅 构建镜像。