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 稳定版仓库¶
helm repo add apache-airflow https://airflow.org.cn
helm repo update
创建命名空间¶
export NAMESPACE=example-namespace
kubectl create namespace $NAMESPACE
安装图表¶
export RELEASE_NAME=example-release
helm install $RELEASE_NAME apache-airflow/airflow --namespace $NAMESPACE
使用以下代码安装包含示例 DAG 的图表
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 的 参考镜像
。但是,当您试用它时,您可能希望添加自己的 DAG、自定义依赖项、软件包,甚至自定义提供程序。
注意
创建自定义镜像意味着您还需要维护一定程度的自动化,因为当您要安装的软件包或 Airflow 升级时,您需要重新创建镜像。请不要忘记保留这些脚本。另请记住,如果您运行的是纯 Python 任务,则可以使用 Python Virtualenv 函数,它将在运行时动态获取和安装 Python 依赖项。从 Airflow 2.8.0 开始,Virtualenv 也可以被缓存。
实现此目标的最佳方法是构建您自己的自定义镜像。
向镜像添加 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