在 Google Cloud Platform 安装¶
本指南介绍了如何在 Google Cloud 上运行的 Kubernetes 集群中设置和安装 Seldon Core。最终,您将能启动并运行 Seldon Core,并准备好部署机器学习模型。
要求¶
Google Cloud CLI¶
你需要 Google Cloud SDK 来检索集群验证凭证。它还可用于为您创建集群和其他资源:
Google Kubernetes Engine (GKE) 集群¶
如果您尚未在 GKE 上创建 Kubernetes 集群,则可以按照此快速入门指南设置您的第一个集群。确保创建 3 个节点 (--num-nodes 传递给 容器集群来创建) 以运行最小示例:
Warning
GKE 集群需要一个 标准 类型集群。GKE Autopilot 集群现在还不支持安装入口控制器。
Kubectl¶
kubectl 是 Kubernetes 命令行工具。它允许您对 Kubernetes 集群运行命令,这是设置 Seldon Core 的一部分。
Helm¶
Helm 是一个包管理工具,可以轻松查找、共享和使用为 Kubernetes 构建的软件。如果你还没有在本地安装 Helm,你可以在这里安装它:
连接到集群¶
运行 gcloud 命令连接到集群:
gcloud container clusters get-credentials CLUSTER_NAME
这将配置 kubectl 使用 google 云 kubernetes 集群。别忘记替换 CLUSTER_NAME 为你自己创建的集群。如果忘记,可以运行 gcloud container clusters list。
Note
如果运行如上命令出现认证错误,尝试运行 gcloud auth login 来检查是否正确登录。
安装集群入口¶
Ingress 是为您的集群提供路由规则的 Kubernetes 对象。它管理传入的流量并将其路由到集群内运行的服务。
Seldon Core 支持使用 Istio 或 Ambassador 来管理传入流量。Seldon Core 自动创建将流量路由到您部署的机器学习模型所需的对象和规则。
Istio 是一个开源服务网格。如果您对 service mesh 不熟悉,非常值得去阅读 更多关于Istio 的内容 。
下载 Istio
对于 Linux 及 macOS,最简单的方式是使用以下命令下载 Istio:
curl -L https://istio.io/downloadIstio | sh -
M进入 Istio 包目录。比如,包 istio-1.11.4:
cd istio-1.11.4
添加 istioctl 客户端到 path (Linux or macOS):
export PATH=$PWD/bin:$PATH
安装 Istio
Istio 提供了一个命令工具 istioctl 来使安装更便捷。示例 配置项 有一组很好的默认值来运行在你本地集群。
istioctl install --set profile=demo -y
命名空间标签 istio-injection=enabled 指示 Istio 注入自动代理我们在该命名空间中部署的任何内容。我们将为我们的 default 命名空间设置它:
kubectl label namespace default istio-injection=enabled
创建 Istio 网关
为了让 Seldon Core 使用 Istio 的特性来管理流量,我们使用如下命令来创建一个 Istio Gateway :
Warning
你需要拷贝下面全部的命令
kubectl apply -f - << END
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: seldon-gateway
namespace: istio-system
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
END
自定义配置及更多 seldon core 集成 Istio 安装的细节请查看 Istio 入口 页。
Ambassador 是 Kubernetes 入口控制器及 API 网关。他通过配置路由请求流量到 kubernetes 负载。
安装 Ambassador
Note
Seldon Core 现在只支持 Ambassador V1 APIs。以下安装说明将只安装 emissary ingress 最新的 v1 版本。
首先添加 datawire helm 仓库:
helm repo add datawire https://www.getambassador.io
helm repo update
执行以下 helm 命令安装 Ambassador 到 GKE 集群:
helm install ambassador datawire/ambassador --set enableAES=false --namespace ambassador --create-namespace
kubectl rollout status -n ambassador deployment/ambassador -w
Ambassador 已就绪。自定义配置及更多集成 Ambassador 安装 seldon core 的细节请查看 Ambassador 入口 页。
安装 Seldon Core¶
在安装 Seldon Core 前,创建一个 operator 运行所在的命名空间 seldon-system :
kubectl create namespace seldon-system
现在我们已经为在集群安装 Seldon Core 准备就绪。根据选择的入口类型执行如下命令:
helm install seldon-core seldon-core-operator \
--repo https://storage.googleapis.com/seldon-charts \
--set usageMetrics.enabled=true \
--set istio.enabled=true \
--namespace seldon-system
helm install seldon-core seldon-core-operator \
--repo https://storage.googleapis.com/seldon-charts \
--set usageMetrics.enabled=true \
--set ambassador.enabled=true \
--namespace seldon-system
使用以下命令检查 Seldon Controller 运行状态:
kubectl get pods -n seldon-system
你应当看到 seldon-controller-manager pod 的状态 STATUS=Running。
访问您的模型¶
恭喜!Seldon Core 现在已完全安装并运行。在继续部署模型之前,请记下您的集群 IP 和端口:
export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
export INGRESS_URL=$INGRESS_HOST:$INGRESS_PORT
echo $INGRESS_URL
这是您将用于访问集群中运行的模型的公共地址。
export INGRESS_HOST=$(kubectl -n ambassador get service ambassador -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export INGRESS_PORT=$(kubectl -n ambassador get service ambassador -o jsonpath='{.spec.ports[?(@.name=="http")].port}')
export INGRESS_URL=$INGRESS_HOST:$INGRESS_PORT
echo $INGRESS_URL
这是您将用于访问集群中运行的模型的公共地址。
您现在已准备好 将模型部署到您的集群。