======================================== 在 Amazon Web Services 上安装 ======================================== 本指南介绍了如何在 AWS 上运行的 Kubernetes 集群中设置和安装 Seldon Core。最后,您将启动并运行 Seldon Core,并准备开始部署机器学习模型。 先决条件 ----------------------------- AWS CLI ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 您将需要 AWS CLI 来检索集群身份验证凭证。它还可用于为您创建集群和其他资源: * `安装 AWS CLI `_ 弹性 Kubernetes 服务 (EKS) 集群 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If you haven't already created a Kubernetes cluster on EKS, you can follow this quickstart guide to get set up with your first cluster. We recommend using the `eksctl` path to create your cluster as it simplifies the process of creating IAM roles, VPCs and subnets. 如果您尚未在 EKS 上创建 Kubernetes 集群,您可以按照此快速入门指南设置您的第一个集群。我们建议使用 `eksctl` 路径来创建集群,因为它简化了创建 IAM 角色、VPC 和子网的过程。 * `安装 eksctl CLI `_ * `创建 EKS 集群 `_ .. warning:: 如果你计划使用 Ambassador 作为入口,你的集群需要运行 Kubernetes Kubectl ^^^^^^^^^^^^^ `kubectl `_ 是 Kubernetes 命令行工具。它允许您针对 Kubernetes 集群运行命令,这是我们在设置 Seldon Core 时需要执行的操作。 * `在 Linux 上安装 kubectl `_ * `在 macOS 上安装 kubectl `_ * `在 Windows 上安装 kubectl `_ Helm ^^^^^^^^^^^^^ `Helm `_ 是一个软件包管理器,可让您轻松查找、共享和使用为 Kubernetes 构建的软件。如果您尚未在本地安装 Helm,可以在此处安装: * `安装 Helm `_ 连接到您的集群 ------------------------------ 您可以通过运行以下 `aws eks` 命令连接到您的集群: .. code-block:: bash aws eks update-kubeconfig --region REGION_CODE --name CLUSTER_NAME 这将配置 ``kubectl`` 使用您的 aws kubernetes 集群。不要忘记用您创建集群时的名称替换 ``CLUSTER_NAME`` 。如果您忘记了集群名称,您可以运行 ``aws eks list-clusters``。 .. note:: 如果在运行上述命令时出现身份验证错误,请尝试运行 ``aws configure`` 以检查您是否正确登录。 安装 Cluster Ingress ------------------------------ ``Ingress`` 是一个 Kubernetes 对象,为您的集群提供路由规则。它管理传入流量并将其路由到集群内运行的服务。 Seldon Core 支持使用 `Istio `_ 或 `Ambassador `_ 来管理传入流量。 Seldon Core 会自动创建将流量路由到已部署的机器学习模型所需的对象和规则。 .. tab-set:: .. tab-item:: Istio Istio 是一个开源服务网格。如果您不熟悉 *服务网格* 这个术语,那么值得多读 `一些有关 Istio 的内容 `_。 **下载 Istio** 对于 Linux 和 macOS,下载 Istio 最简单的方法是使用以下命令: .. code-block:: bash curl -L https://istio.io/downloadIstio | sh - 移至 Istio 包目录。例如,如果包是 ``istio-1.11.4``: .. code-block:: bash cd istio-1.11.4 将 istioctl 客户端添加到您的路径(Linux 或 macOS): .. code-block:: bash export PATH=$PWD/bin:$PATH **安装 Istio** Istio 提供了一个命令行工具 ``istioctl`` ,使安装过程变得简单。``demo`` `配置文件 `_ 有一组很好的默认设置,可以在您的本地集群上运行。 .. code-block:: bash istioctl install --set profile=demo -y 命名空间标签 ``istio-injection=enabled`` 指示 Istio 自动注入代理以及我们在该命名空间中部署的任何内容。我们将为我们的 ``default`` 命名空间设置它: .. code-block:: bash kubectl label namespace default istio-injection=enabled **创建 Istio 网关** 为了让 Seldon Core 使用 Istio 的功能来管理集群流量,我们需要通过运行以下命令创建一个 `Istio 网关 `_ : .. warning:: 您需要从下面的代码块复制整个命令 .. code-block:: yaml 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 有关自定义配置和使用 Istio 安装 seldon core 的更多详细信息,请参阅 `Istio Ingress <../ingress/istio.md>`_ 页面。 .. tab-item:: Ambassador .. warning:: Ambassador 目前不支持 Kubernetes 1.22+,以下说明仅适用于 Kubernetes v1.21 或更早版本。 `Ambassador `_ 是 Kubernetes 入口控制器和 API 网关。它通过配置将传入流量路由到底层 Kubernetes 工作负载。 **安装 Ambassador** .. note:: 目前仅支持 Ambassador V1 API。以下安装说明将安装最新的 v1 版本的 emissary ingress。 首先添加 datawire helm 存储库: .. code-block:: bash helm repo add datawire https://www.getambassador.io helm repo update 运行以下 `helm` 命令在您的 GKE 集群上安装 Ambassador: .. code-block:: bash 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 Ingress <../ingress/ambassador.md>`_ 页面。 安装 Seldon Core ---------------------------- 在安装 Seldon Core 之前,我们将为控制器创建一个名为 ``seldon-system`` 的新命名空间: .. code:: bash kubectl create namespace seldon-system 现在,我们已准备好在集群中安装 Seldon Core。针对您选择的 Ingress 运行以下命令: .. tab-set:: .. tab-item:: Istio .. code:: bash 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 .. tab-item:: Ambassador .. warning:: Ambassador 目前不支持 Kubernetes 1.22+,以下说明仅适用于 Kubernetes v1.21 或更早版本。 .. code:: bash 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 控制器是否正在运行: .. code-block:: bash kubectl get pods -n seldon-system 您应该会看到一个 ``seldon-controller-manager`` pod 状态为 ``STATUS=Running``。 访问你的模型 ------------------------- 恭喜!Seldon Core 现已完全安装并运行。在继续部署模型之前,请记下您的集群 IP 和端口: .. tab-set:: .. tab-item:: Istio .. code-block:: bash export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') 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 这是您用于访问集群中运行的模型的公共地址。 .. tab-item:: Ambassador .. warning:: Ambassador 目前不支持 Kubernetes 1.22+,以下说明仅适用于 Kubernetes v1.21 或更早版本。 .. code-block:: bash export INGRESS_HOST=$(kubectl -n ambassador get service ambassador -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') 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 这是您用于访问集群中运行的模型的公共地址。 您现在可以将 `模型部署到您的集群了 <../workflow/github-readme.md>`_。