在 Kubernetes 上部署 Kyuubi
环境要求
要在 Kubernetes 上部署 Kyuubi,你最好先了解以下内容。
- 使用 Kyuubi 官方 Docker 镜像,或自行构建 Kyuubi Docker 镜像
- 一个正常运行的 Kubernetes 集群
- 阅读在 Kubernetes 上部署 Kyuubi 引擎
- Kubectl
- 目标集群的 KubeConfig
Kyuubi 官方 Docker 镜像
你可以在 Docker Hub - apache/kyuubi 找到官方 Docker 镜像。
构建 Kyuubi Docker 镜像
你可以使用二进制包中提供的 ${KYUUBI_HOME}/bin/docker-image-tool.sh 脚本来自定义构建 Docker 镜像。
示例:
- Build and push image with tag "v1.8.1" to docker.io/myrepo
$0 -r docker.io/myrepo -t v1.8.1 build
$0 -r docker.io/myrepo -t v1.8.1 push
- Build and push with tag "v1.8.1" and Spark-3.5.1 as base image to docker.io/myrepo
$0 -r docker.io/myrepo -t v1.8.1 -b BASE_IMAGE=repo/spark:3.5.1 build
$0 -r docker.io/myrepo -t v1.8.1 push
- Build and push for multiple archs to docker.io/myrepo
$0 -r docker.io/myrepo -t v1.8.1 -X build
- Build with Spark placed "/path/spark"
$0 -s /path/spark build
- Build with Spark Image myrepo/spark:3.4.2
$0 -S /opt/spark -b BASE_IMAGE=myrepo/spark:3.4.2 build${KYUUBI_HOME}/bin/docker-image-tool.sh 默认使用 Kyuubi 版本号作为 Docker 标签,并始终构建 ${repo}/kyuubi:${tag} 镜像。
该脚本还可以帮助将外部 Spark 构建到 Kyuubi 镜像中,使其作为提交任务的客户端,可通过 -s ${SPARK_HOME} 参数实现。
当然,如果你已经有一个包含 Spark 二进制包的镜像,则无需在本地复制 Spark。可以使用 -S ${SPARK_HOME_IN_DOCKER} 和 -b BASE_IMAGE=${SPARK_IMAGE} 参数,将你的 Spark 镜像设置为 BASE_IMAGE。
你可以使用 ${KYUUBI_HOME}/bin/docker-image-tool.sh -h 查看更多参数。
部署
推荐使用 Helm Chart 在 Kubernetes 上运行 Kyuubi。
[可选] ServiceAccount
根据 Kubernetes RBAC,你需要授予 Kyuubi server 相应的 Kubernetes 权限,以便在 Kubernetes 中 创建/列出/删除 引擎 Pod。
你应该创建自己的 ServiceAccount(或复用具有相应权限的账号),并为 Kyuubi Pod 设置你的 ServiceAccountName,你可以在 ${KYUUBI_HOME}/docker/kyuubi-deployment.yaml 或 ${KYUUBI_HOME}/docker/kyuubi-pod.yaml 中找到该模板。
例如,你可以通过以下命令创建 ServiceAccount:
kubectl create serviceAccount kyuubi -n <your namespace>
kubectl create rolebinding kyuubi-role --role=edit --serviceAccount=<your namespace>:kyuubi --namespace=<your namespace>更多相关详情请参阅 使用 RBAC 授权 和 为 Pod 配置服务账户。
配置
你可以通过在镜像中放置 kyuubi-defaults.conf 来以传统方式配置 Kyuubi。Kyuubi 不建议在 Kubernetes 上使用这种方式。
Kyuubi 提供了 ${KYUUBI_HOME}/docker/kyuubi-configmap.yaml 来为 Kyuubi 构建 ConfigMap。
你可以在上述文件内的注释中找到使用方法。
如果你想了解 Kyuubi 引擎在 Kubernetes 上的配置,可以参考 在 Kubernetes 上部署 Kyuubi 引擎。
连接
如果你没有使用 Service 或 HostNetwork 来获取 Kyuubi 部署所在节点的 IP 地址,你应该像这样连接:
kubectl exec -it kyuubi-example -- /bin/bash
${KYUUBI_HOME}/bin/beeline -u 'jdbc:kyuubi://localhost:10009'或者,你也可以通过本地 beeline 直接提交任务:
${KYUUBI_HOME}/bin/beeline -u 'jdbc:kyuubi://${hostname}:${port}'使用 service nodePort 时,port 指的是 nodePort,hostname 指的是 Kubernetes 节点的任意主机名。
使用 HostNetwork 时,port 指的是 Kyuubi 容器的 containerPort,hostname 指的是部署 Kyuubi 所在节点的主机名。
TODO
Kyuubi 未来将提供更多连接方式,例如 Ingress、负载均衡(Load Balance)。
评论
登录后参与评论
KnowForge