k8s环境搭建
测试推荐使用k3s,生产建议使用云服务商提供的k8s服务(如GKS,EKS,AKS),或者通过kubeadmin进行搭建。
(可选,按需操作)日志配置
默认配置
Airbyte 的k8s部署自带了一个单节点的Minio环境,默认情况下所有的日志都会推送到这个Minio节点。
如果想要将日志推送到本地的Minio节点,请确保指定的认证用户同时具备读和写的权限。
自定义配置
Airbyte 支持将日志推送到Minio节点,S3存储桶 和GCS存储桶
配置推送到本地的Minio节点。
想要将日志推送到本地的Minio节点,用户需要修改kube/overlays/stable(位于airbyte安装目录)目录下的.env文件,修改以下字段。S3_LOG_BUCKET=<your_minio_bucket_to_write_logs_in>
AWS_ACCESS_KEY_ID=<your_minio_access_key>
AWS_SECRET_ACCESS_KEY=<your_minio_secret_key>
S3_MINIO_ENDPOINT=<endpoint_where_minio_is_deployed_at>
#S3_LOG_BUCKET_REGION设置为空
S3_LOG_BUCKET_REGION=
S3_PATH_STYLE_ACCESS=true
配置推送到S3存储桶
如果想将日志推送至S3,使用 AWS 凭证创建一个新的 S3 存储桶。
修改kube/overlays/stable/.env(可以在启动 Airbyte 的位置找到该目录)下的以下环境变量。S3_LOG_BUCKET=<your_s3_bucket_to_write_logs_in>
S3_LOG_BUCKET_REGION=<your_s3_bucket_region>
#S3_MINIO_ENDPOINT设置为空
S3_MINIO_ENDPOINT=
#S3_PATH_STYLE_ACCESS设置为空
S3_PATH_STYLE_ACCESS=
修改kube/overlays/stable/.secrets(可以在启动 Airbyte 的位置找到该目录)下的以下环境变量。AWS_ACCESS_KEY_ID=<your_aws_access_key_id>
AWS_SECRET_ACCESS_KEY=<your_aws_secret_access_key>
部署airbyte
拉取airbyte代码,并进入airbyte目录
git clone https://github.com/airbytehq/airbyte.git
cd airbyte
(可选,按需操作)修改airbyte部署的命名空间,默认为default命名空间。修改kube/overlays/stable/kustomization.yaml,将namespace字段改为想要安装到的对应命名空间。
拉起airbyte服务。
kubectl apply -k kube/overlays/stable
检查airbyte所有服务状态。
#查看所有的服务。如果修改了命名空间,将default改为对应的命名空间。
kubectl get pod -n default |grep airbyte
部署完成,查看webapp服务的node port,通过node port 访问airbyte。访问地址http://k8s-node-ip:node-port
#获取airbyte-webapp的node port。如果修改了命名空间,将default改为对应的命名空间。
kubectl get svc -n default |grep airbyte-webapp-svc|awk '{print $5}'|awk -F: '{print $2}'
生产环境部署
设置pod资源限制
核心容器pod:
要为核心pod提供不同的资源配置,可以在kube/overlays/stable-with-resource-limits/set-resource-limits.yaml文件中设置资源限制
要使用带资源限制的配置, 部署的时候请使用kubectl apply -k kube/overlays/stable-with-resource-limits这个命令
连接器容器pod:
默认情况下,连接器的pod在拉起的时候是没有资源限制的。要配置资源限制,请修改kube/overlays/stable/.env 或kube/overlays/stable-with-resource-limits/.env (根据你需要启动的配置决定)
卷容量:
To specify different volume sizes for the persistent volume backing Airbyte, modify kube/resources/volume-* files.
想要给pv指定不同的容量,请修改 kube/resources/ 目录下 volume 开头的资源配置文件。
提高job并发能力
运行并行job(如获取规范、检查连接、刷新schema和执行同步)的能力受到几个因素的限制。所有的job都由Airbyte-worker-pods消费并执行。增加worker的数量将允许处理更多的job。
要创建更多 worker pod,需增加airbyte-worker部署的副本数。可以参考 Kustomization 补丁中增加 worker pod 的例子,在以下两个目录airbyte/kube/overlays/dev-integration-test/kustomization.yaml和airbyte/kube/overlays/dev-integration-test/parallelize-worker.yaml
要通过.env限制暴露的端口,需要配置环境变量TEMPORAL_WORKER_PORTS的值。您可以在每个暴露的端口并行运行job。如果您没有足够的端口进行通信,job可能无法完成或暂停,直到有端口可用为止。
用户也可以为 Pod 上运行的最大并行job设置限制。可以配置MAX_SPEC_WORKERS、MAX_CHECK_WORKERS、MAX_DISCOVER_WORKERS和MAX_SYNC_WORKERSworker这四个环境变量。这些需要配置到pod deployment里,而不是.env。用户可以使用这些变量给不同的类型的worker配置不用的资源限制。
云日志
Airbyte 将日志写入两个不同的目录:app-logging目录和job-logging目录。应用程序日志、服务器日志和调度程序日志将写入该app-logging目录。作业日志写入job-logging目录。这两个目录都位于顶层。例如,应用程序日志目录可能位于s3://log-bucket/app-logging. 我们建议使用专用的日志记录桶,不要将其用于其他目的。
Airbyte每分钟发布一次日志,所以日志延迟一分钟很正常。Cloud Storages 不支持追加操作。每个发布者都会创建自己的日志文件,这意味着您的日志存储桶中将有数百个文件。
每个日志文件都未压缩,并命名为{yyyyMMddHH24mmss}{podname}{UUID}。要查看日志,请到相关文件夹并下载所需时间段的文件。
使用外部数据库
用户可以使用外部的Postgres数据库替换k8s中使用的单节点Postgres数据。如果需要替换,只需要修改kube/overlays/stable/.env 或kube/overlays/stable-with-resource-limits/.env (根据你需要启动的配置决定)中DB相关的环境变量。
运维指南
查看 API server 日志
kubectl logs deployments/airbyte-server
查看连接器日志
可以通过查看调度程序日志来访问所有日志。至于连接器容器日志,使用 Airbyte UI 或 Airbyte API 将它们隔离以用于特定的作业尝试并更容易理解。Airbyte 启动的连接器 pod 不会将日志直接中继到 Kubernetes 日志记录。您必须通过 Airbyte 访问这些日志。
修改卷容量
要修改卷容量,请修改.spec.resources.requests.storage value。然后重新apply。对于生产环境,需要跟踪卷的使用情况以确保它们不会被完全占满
从卷数据拷贝数据到本地,使用kubectl cp命令进行操作
列出连接器日志文件
#请将容器name当前环境的容器name
kubectl exec -it airbyte-server-6b5747df5c-bj4fx ls /tmp/workspace/8
读取连接器日志文件
#请将容器name当前环境的容器name
kubectl exec -it airbyte-server-6b5747df5c-bj4fx cat /tmp/workspace/8/0/logs.log