【ML on Kubernetes】第 3 章:探索 Kubernetes

 🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎

📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​

📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

 🖍foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。

如果你对这个系列感兴趣的话,可以关注订阅哟👋

文章目录

技术要求

探索 Kubernetes 主要组件

控制平面

工作节点

运行应用程序所需的 Kubernetes 对象

通过 Kubernetes 变得与云无关

了解运算符

设置本地 Kubernetes 环境

安装 kubectl

在 Linux 上安装 kubectl

在 macOS 上安装 kubectl

安装 minikube

在 Linux 上安装 minikube

在 macOS 上安装 minikube

在 Windows 上安装 minikube

设置本地 Kubernetes 集群

安装 OLM

在 GCP 上配置虚拟机

概括


既然您已经看到 Kubernetes 将构成您的机器学习ML ) 平台的基础,那么刷新您对我们解决方案的底层基础的知识是合乎逻辑的。尽管互联网上有很多关于 Kubernetes 主题的资源,但我们将简要讨论 Kubernetes 在云时代的作用以及它为构建解决方案提供的灵活性。您还将了解 Kubernetes 中的 Operator,以及它们如何帮助简化 Kubernetes 工作负载的安装和操作。在本章结束时,您将在本地机器或云端构建一个正在运行的minikube实例。这是一个单节点 Kubernetes 集群,您将使用它作为构建和运行 ML 平台的基础架构。

按照这个特定的顺序,我们将涵盖以下主题:

  • 探索 Kubernetes 主要组件
  • 通过 Kubernetes 变得与云无关
  • 了解运算符
  • 设置本地 Kubernetes 环境
  • (可选)在谷歌云平台GCP )上配置虚拟机VM

技术要求

本章包括一些动手设置。您将设置一个 Kubernetes 集群,为此,您需要一台具有以下硬件规格的机器:

  • 一个至少有四个核心的中央处理器CPU );推荐八个
  • 至少 16 GB内存;建议使用 32 GB
  • 可用空间至少为 60 GB 的磁盘

这可以是一台物理机器,例如笔记本电脑、服务器或在支持嵌套虚拟化的云中​​运行的 VM。

探索 Kubernetes 主要组件

网络上有很多 Kubernetes 的定义。我们假设,作为 Kubernetes用户,您已经有一个最喜欢的选择。因此,在本节中,您将看到一些基本概念来刷新您的 Kubernetes 知识。本节绝不是 Kubernetes 系统的参考或教程。

第 2 章了解 MLOps中,您已经看到 Kubernetes 为您的 ML 平台提供了执行以下功能的方法:

  • 提供运行软件组件的声明式风格:此功能将帮助您的团队实现自治。
  • 为硬件资源提供抽象层:通过此能力,您可以在各种硬件上运行您的 ML 平台,并提供按需资源调度。
  • 提供一个应用程序编程接口 (API) 与之交互:这将使您能够将运行不同组件的自动化带到您的 ML 平台上。

让我们从定义 Kubernetes 平台的主要组件开始:控制平面和工作节点。

控制平面

控制平面是一个集合构成Kubernetes大脑的组件。由一个 API 服务器、一个键值数据库、一个调度器和一组控制器组成。让我们定义每个组件,如下所示:

  • API服务器:这个组件提供一组REpresentational State Transfer ( REST ) API与 Kubernetes 系统交互。每个人都通过这个 API 与 Kubernetes 进行交互。作为开发人员或运维工程师,您使用 API,内部 Kubernetes 组件与 API 服务器通信以执行不同的活动。
  • 键值数据库:API服务器是无状态的;它需要有一个持久存储它可以存储不同的对象。键值数据库由一个名为etcd的组件实现。Kubernetes 系统的任何其他组件都不会直接与这个值存储进行对话——这只能由 API 服务器访问。
  • 调度器:调度器组件指示应用程序实例将在何处运行。调度程序根据 Kubernetes 管理员定义的策略选择最合适的工作节点。
  • 控制器:有在控制平面中运行的多个控制器。每个控制器都有一个设定的任务;例如,节点控制器负责监控节点的状态。

以下图显示了多个之间的交互控制平面组件:

图 3.1 – Kubernetes 控制平面组件

控制平面协调对象的创建、更新和删除。它监控并维护 Kubernetes 集群的健康状态。控制平面运行保持集群运行的工作负载。但是应用程序工作负载呢?

工作节点

顾名思义,worker 是一组托管应用软件的节点。例如,所有 ML 平台组件将在工作节点上执行。但是,工作节点也运行一些 Kubernetes 组件,它们使控制平面和工作人员之间的通信通道,并管理工作人员节点上正在运行的应用程序。除了应用程序之外,这些是在工作节点上运行的关键组件:

  • Kube 代理:它的主要代理角色是管理节点上运行的应用程序的网络通信规则。
  • Kubelet:想想Kubelet 软件组件作为代理在每个节点上运行。该代理的主要作用是与控制平面 API 服务器通信并管理节点上运行的应用程序。代理还通过 API 捕获节点和应用程序的状态并将其发送回控制平面。
  • 容器运行时容器运行时组件负责按照 Kubelet 的指示运行承载应用程序的容器。Docker就是这样一个例子。然而,Kubernetes 有定义了一个容器运行时接口CRI)。CRI 定义了 Kubernetes 使用的接口,Kubernetes 管理员可以选择任何与 CRI 兼容的容器运行时。

下图展示了多个工作节点组件之间的交互:

图 3.2 – Kubernetes worker 组件

工人节点,也称为计算节点,执行在集群中运行应用程序工作负载的实际工作。跑步应用程序工作负载要求您使用 Kubernetes 对象或资源与控制平面进行交互。

运行应用程序所需的 Kubernetes 对象

现在,让我们定义一组运行应用程序通常需要的 Kubernetes对象在 Kubernetes 系统上。当您为 ML 平台构建组件时,您将使用这些 Kubernetes 对象在 Kubernetes 之上运行应用程序。这些对象在此处列出:

  • Namespace:一个 Kubernetes 集群由多个团队和项目共享。命名空间提供一种隔离 Kubernetes 资源的方法。这种隔离允许不同的团队、不同的环境,甚至不同的应用程序共享同一个集群,同时保持不同的配置、网络策略、资源配额和访问控制。这就像在同一个 Kubernetes 集群中拥有一个逻辑子集群。
  • Container image:何时如果你想在 Kubernetes 上运行一个应用程序,你需要将应用程序打包成标准格式。这种由您的应用程序及其所有依赖项组成的打包格式称为容器映像,该映像的运行实例是称为容器。它包含您的应用程序和所有依赖项,包括操作系统资源和您的应用程序需求,都在一个通用捆绑包中。
  • Deployment:这个Kubernetes 对象代表应用程序在集群上的期望状态。Deployment 对象包含诸如您要运行哪个容器映像以及您需要多少个容器实例或副本等信息。Kubernetes 会定期将当前集群状态与 Deployment 对象中定义的所需状态进行比较。当 Kubernetes 发现当前状态与期望状态不同时,它将对集群应用必要的更新以达到期望状态。这些更新包括使用部署对象中定义的容器映像启动新容器、停止容器以及配置部署对象所需的网络和其他资源。
  • Pod:一个 Pod 是跑步的基本单位Kubernetes 中的应用程序。它也是最小的可调度部署单元。它可以包含一个或多个容器。pod 内的容器共享网络和磁盘资源。在单个 pod 中运行的容器在同一个节点上一起调度,同时彼此之间也有本地通信。
  • Services:如何豆荚相互通信吗?Pod 通过集群网络进行通信,每个 Pod 都有自己的自己的Internet 协议IP ) 地址。但是,豆荚可能会来来去去。Kubernetes 可能会因节点健康或调度更改而重启 Pod,当这种情况发生时,Pod 的 IP 地址会发生变化。此外,如果 Deployment 对象被配置为运行同一个 pod 的多个副本,这意味着每个副本都有自己的 IP 地址。

Kubernetes 中的服务将一组 pod 公开为单个抽象网络服务。它提供一个一致的 IP 地址和域名系统DNS ) 名称,可以路由流量并在 Pod 上执行负载平衡。将服务视为正在运行的 Pod 的负载平衡反向代理。

  • ConfigMaps 和 Secrets:我们将应用程序打包为容器镜像并作为吊舱运行。同一个 pod 将部署在多个环境中,例如 Dev、Test 和 Production。但是,每个环境都会有不同的配置,例如数据库位置或其他。将这样的配置硬编码到容器映像中并不是正确的方法。原因之一是容器映像可能部署在具有不同环境设置的多个环境中。必须有一种方法可以在容器镜像之外定义配置,并在运行时将此配置注入我们的容器!

ConfigMaps 和 Secrets 提供了一种在 Kubernetes 中存储配置数据的方法。一旦定义了这些对象,就可以将它们作为 pod 文件系统中的文件或作为一组环境变量注入到正在运行的 pod 中。

ConfigMap 是用于存储和访问配置数据。但是,对于密码和私钥等敏感配置,Kubernetes 为此提供了一个特殊的对象,称为 Secret。与 ConfigMap 一样,Secrets 可以作为文件或环境变量挂载到 pod 中。

下图展示了 Deployment、Pod、ConfigMap 和 Services 之间的逻辑关系。Deployment 对象提供了容器化应用程序的抽象。这隐藏运行复制控制器和 Pod背后的复杂性。部署可帮助您将应用程序作为一个 pod 或一组 pod 运行,ConfigMaps 为您的 pod 提供特定于环境的配置,而服务将部署中的 pod 公开为单个网络服务:

图 3.3 – Kubernetes 中的存储配置

  • 存储(PersistentVolume 和 PersistentVolumeClaim(PV 和 PVC)):Pod 是短暂的。一旦它们被销毁,该 pod 的所有本地资源都将消失。更多时候,应用程序部署为 pod 可能需要访问存储读取和写入可以超过 pod 的持久性数据。

Kubernetes 有望成为许多硬件供应商和云提供商之上的基础架构抽象层。但是,请求存储资源或配置磁盘的方式因各种云提供商和本地系统而异。这就需要在不同的硬件供应商和云提供商之间以一致的方式请求存储资源。

Kubernetes 对此的解决方案是将存储资源拆分为两个 Kubernetes 对象。PV 是定义物理存储卷的对象。它包含底层存储基础架构的详细信息。另一方面,PVC 是指向 PV 的抽象指针。PVC 表示所有者对特定 PV 拥有声明。Pods 存储资源与 PVC 相关联,从不直接与 PV 相关联;这样,底层存储定义就从应用程序中抽象出来了。

以下图显示了 pod、PVC 和 PV 之间的关系。pod 挂载一个 PVC 作为卷;PVC 用作 pod 的抽象层,以请求与 pod 关联的物理卷;PVC 绑定到提供磁盘细节的 PV:

图 3.4 – Kubernetes 中的存储配置(续)

  • 入口:服务允许访问 Kubernetes 集群中的 pod。对于需要从 Kubernetes 集群外部访问 pod 的场景,Ingress 就是答案。Ingress 为您提供了一种公开特定服务以从集群外部访问的方法。这个使您能够映射基于超文本传输​​协议HTTP ) 的统一资源定位器URL )指向服务。入口可能还可以在公开的 URL 上使用安全套接字层SSL ),并且可以配置为终止集群内流量的 SSL。这样,传输层将一直加密到 Ingress,同时以纯 HTTP 将流量转发到 Pod。还值得注意的是如果需要,Kubernetes 允许将流量一直加密到 pod。

下图显示了 Ingress 如何使 pod 可以从 Kubernetes 集群外部访问:

图 3.5 – Kubernetes 集群中的 Ingress 对象

现在您已经刷新了对 Kubernetes 的理解,让我们看看 Kubernetes 如何让您在任何地方运行您的平台。

通过 Kubernetes 变得与云无关

我们正在构建的机器学习平台的关键方面之一是它使组织能够在任何云或数据中心上运行。但是,每个云都有自己的专有 API 来管理资源和部署应用程序。为了例如,亚马逊网络服务AWS ) API在以下情况下使用Elastic Compute Cloud ( EC2 ) 实例(服务器)配置服务器,而 Google Cloud 的 API 使用Google Compute Engine ( GCE ) VM(服务器)。甚至资源的名称都不一样!这就是 Kubernetes 发挥关键作用的地方。

Kubernetes 的广泛采用迫使主要的云供应商提出与 Kubernetes 紧密集成的解决方案。这允许任何人在几分钟内启动 AWS、GCP 或 Azure 中的 Kubernetes 集群。

Kubernetes API 使您能够管理云资源。使用标准的 Kubernetes API,您可以在任何主要的云提供商上部署应用程序,而无需了解云提供商的 API。Kubernetes API 已成为管理云中工作负载的抽象层。您将在本书中构建的机器学习平台将专门使用 Kubernetes API 来部署和运行应用程序。这包括构成 ML 平台的软件组件。

下图显示了 Kubernetes 如何让您变得与云无关。您通过 Kubernetes API 与 Kubernetes 交互,这消除或减少了直接与云供应商的 API 交互的需要。换句话说,Kubernetes 提供了一种与您的环境交互的一致方式,而不管它在哪个云或数据中心上运行:

图 3.6 – Kubernetes 充当云提供商 API 的垫片

另一个重要的来自 Kubernetes 社区的东西是Operators。您将使用 Kubernetes Operators 部署 ML 平台的大部分组件。让我们深入挖掘。

了解运算符

在传统的信息技术IT ) 组织中,专业和敬业的团队需要维护应用程序和其他软件组件,例如数据库、缓存和消息传递组件。这些团队一直在观察软件生态系统并做一些具体的事情,例如备份数据库、升级和修补更新版本的软件组件等等。

运营商就像系统管理员或工程师,持续监控在 Kubernetes 环境中运行的应用程序并执行与特定组件相关的操作任务。换句话说,Operator 是一个自动化的软件管理器,负责管理 Kubernetes 上应用程序的安装和生命周期。

简而言之,不是您创建和更新 Kubernetes 对象(部署、入口等),Operator 根据您提供的配置承担此责任。指导 Operator 执行某些任务的配置称为自定义资源CR ),而定义了 CR 的结构或模式通过称为CR 定义CRD ) 的对象。

下图显示了 Operator 如何自动化应用程序操作活动。在传统方法中,开发人员构建和开发应用程序,然后应用程序运营团队提供支持以运行应用程序。Kubernetes Operator 的目标之一是自动化操作人员执行的活动:

图 3.7 – 操作员是一种自动化操作团队任务的软件

Kubernetes 运营商可能很复杂。有些 Operator 管理数据库实例,而有些则管理协同工作的 Pod 集群。一些运营商只拥有 1 或 2 个 CRD,而其他人可能拥有 10 多个 CRD。Operator Lifecycle Manager ( OLM ) 简化了 Kubernetes Operator的安装和管理。让我们深入挖掘一下。

在 OLM 中,安装 Operator 需要多个阶段:为 Operator 创建 Deployment 对象,配置运行 Operator 所需的权限(因为它需要观察 Kubernetes 集群中的变化),以及创建 CRD。为了降低安装 Operator 的复杂性,管理层可能会派上用场。OLM 承担了这个角色。

OLM 将与 Operator 的交互标准化。它要求与 Operator 的所有交互都通过 Kubernetes API 完成。OLM 通过一个标准接口——Kubernetes API 可以轻松管理多个 Operator 的生命周期。我们的 ML 平台将使用一些 Operator,因此了解 OLM 和与之相关的对象很有用。让我们在这里更详细地看看它们:

  • ClusterServiceVersion:此对象定义有关 Operator 的元数据。它包括 Operator 的名称和版本,以及安装信息和所需的权限。它还描述了运营商拥有和要求的 CRD。
  • SubscriptionSubscription对象允许用户安装和更新运营商。OLM 使用此对象来安装和配置 Operator、CRD 和相关的访问控制对象。
  • OperatorGroupOperatorGroup提供了一种关联您的 Operator 的方法具有一组特定的命名空间。OperatorGroup定义了一组命名空间,相关的 Operator 将对其做出反应。如果我们没有在OperatorGroup定义中定义一组命名空间,那么 Operator 将在所有命名空间中全局运行。

在下一部分中,您将安装和配置本地 Kubernetes 环境,并在 Kubernetes 集群上安装 OLM。

设置本地 Kubernetes 环境

现在我们已经更新了一些基本的 Kubernetes 概念,是时候上路了。在本节中,我们将准备和验证我们的本地 Kubernetes 集群。我们在这里设置的集群将在后面的章节中用于托管 ML 平台。

安装 kubectl

kubectl是一个帮助运行命令的命令行工具一个 Kubernetes 集群。你可以通过此实用程序创建 Kubernetes 对象、查看日志并监控您的操作进度。以下步骤将在您的机器上安装kubectl

在 Linux 上安装 kubectl

首先,让我们看看在机器上安装kubectl的过程运行 Linux。请按照以下步骤操作:

  1. 在 Linux 计算机上创建或保护 Shell ( SSH ) 到终端会话。
  2. 下载kubectl。Kubernetes命令行界面CLI )。我们将在本书中使用1.22.4版本。以下两行代码是一个命令:
    curl -LO https://dl.k8s.io/release/v1.22.4/bin/linux/amd64/kubectl
  3. 通过运行以下命令安装kubectl CLI:
    sudo install kubectl /usr/local/bin/kubectl
  4. 通过运行以下命令验证它是否已安装:
    kubectl version --client

您应该看到对version命令的以下响应:

图 3.8 – Linux 中 kubectl version 命令的输出

您现在应该在 Linux 机器上运行kubectl 。

在 macOS 上安装 kubectl

首先,让我们请参阅在 a 上安装kubectl的过程运行 macOS 的机器。按着这些次序:

  1. 在 Mac 计算机上创建或SSH到终端会话。
  2. 下载kubectl Kubernetes CLI。我们将在本书中使用1.22.4版本。

对于 Intel Mac,运行以下命令:

curl -LO https://dl.k8s.io/release/v1.22.4/bin/darwin/amd64/kubectl

为了Apple M1 Macs,运行以下命令:

curl -LO https://dl.k8s.io/release/v1.22.4/bin/darwin/aa64/kubectl
  1. 通过运行以下命令安装kubectl CLI:
    sudo install kubectl /usr/local/bin/kubectl
  2. 证实通过运行以下命令安装它:
    kubectl version --client

您应该看到对version命令的以下响应:

                         图 3.9 – macOS 中 kubectl version 命令的输出

您现在应该在 macOS 上运行kubectl

在 Windows 上安装 kubectl

现在,让我们经过Windows 的步骤如下:

  1. 管理员身份运行PowerShell
  2. 通过运行以下命令下载kubectl Kubernetes CLI 二进制文件。我们将在本书中使用1.22.4版本:
    curl.exe -LO https://dl.k8s.io/release/v1.22.4/bin/windows/amd64/kubectl.exe
  3. 通过运行以下命令将kubectl.exe文件复制到c:\kubectl :
    mkdir c:\kubectl
    
    copy kubectl.exe c:\kubectl
  4. 通过运行以下命令将c:\kubectl添加到PATH环境变量然后重新启动您的 PowerShell 终端:
    setx $ENV:PATH "$ENV:PATH;C:\kubectl" /M
  5. 证实通过运行以下命令安装它:
    kubectl version –client

您应该看到对version命令的以下响应:

                         图 3.10 – Windows 中 kubectl version 命令的输出

您刚刚安装了kubectl Kubernetes CLI。下一步是安装minikube,一个本地的单节点 Kubernetes 集群。

安装 minikube

minikube提供一种运行本地的方法轻松实现 Kubernetes 集群。这是一个最小集群,仅用于本地开发或实验。在生产环境中运行 Kubernetes 超出了本书的范围。

kubectl 一样,让我们​​了解不同类型操作系统的安装。

在 Linux 上安装 minikube

跟随在 Linux上安装minikube的这些步骤:

  1. 创造终端会话或SSH到您的 Linux 计算机。
  2. 使用以下代码为minikube安装podman :
    sudo dnf install podman -y
  3. 从这个位置下载minikube 。我们使用的是minikube 1.24.0版本:
    curl -LO https://storage.googleapis.com/minikube/releases/v1.24.0/minikube-linux-amd64
  4. 安装minikube实用程序,如下所示:
    sudo install minikube-linux-amd64 /usr/local/bin/minikube
  5. 验证minikube版本,如下所示:
    minikube version

您应该看到以下响应:

                 图 3.11 – Linux 上 minikube version 命令的输出

您刚刚在 Linux 上安装了kubectlminikube。这两个命令行工具将帮助您设置本地 Kubernetes 集群。

在 macOS 上安装 minikube

虽然我们首选的操作系统是 Linux对于本书,我们也提供了在 macOS上安装minikube的步骤。很多开发者都使用 macOS 系统,苹果提供操作系统的详细信息会很有帮助。请按照以下步骤操作:

1.从 Docker 网站或访问以下网页下载并安装 Docker Desktop:https ://www.docker.com/products/docker-desktop 。

2.一旦 Docker 可用,请通过运行以下命令确保它已正确安装。在运行此命令之前确保 Docker 正在运行:

docker version

您应该看到以下响应。如果出现错误,请确保 Docker 正在运行:

图 3.12 – macOS 上 docker version 命令的输出

3.打开macOS 计算机上的终端。

4.通过运行以下命令之一下载minikube 。您将使用Minikube 1.24.0 版:

  • 如果您有 Intel Mac,请运行以下命令:
    curl -Lo minikube https://storage.googleapis.com/minikube/releases/v1.24.0/minikube-darwin-amd64
  • 如果您有 M1 Mac(Apple 芯片),请运行以下命令:
    curl -Lo minikube https://storage.googleapis.com/minikube/releases/v1.24.0/minikube-darwin-arm64

5.将下载的文件移动到/usr/local/bin文件夹,并使用以下命令使下载的文件成为可执行文件:

sudo mv minikube /usr/local/bin

sudo chmod +x /usr/local/bin/minikube

6.验证minikube版本,如下:

minikube version

应该看到以下响应:

图 3.13 – minikube version 命令的输出

你有刚刚在 macOS 上安装了kubectlminikube。这两个命令行工具将帮助您设置本地 Kubernetes 集群。

在 Windows 上安装 minikube

macOS,大量的开发者使用 Windows。提供有关如何在强大的 Windows 微软操作系统上运行练习的步骤是公平的。让我们深入了解如何使用Microsoft 虚拟化层Hyper-V在 Windows上运行minikube 。请注意,Hyper-V可在除 Windows Home 之外的所有 Windows 上使用。按着这些次序:

1.以管理员身份运行PowerShell

2.在 PowerShell 控制台中,运行以下命令以启用Hyper-V

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V --All

你应该如果Hyper-V不是,请参阅以下响应启用。如果它已经启用,该命令将只打印状态。按Y继续:

                

                                图 3.14 – 在 Windows 上启用 Hyper-V 的命令输出

如果需要,重新启动计算机。

3.通过在浏览器中打开以下链接下载minikube安装程序: https ://github.com/kubernetes/minikube/releases/download/v1.24.0/minikube-installer.exe 。

4.运行下载的安装程序。您应该会看到语言设置屏幕,如以下屏幕截图所示。点击确定

图 3.15 – minikube 安装程序的语言选择对话框

5.安装程序将显示以下欢迎屏幕。单击Next >,如以下屏幕截图所示:

图 3.16 – minikube 安装向导

6.安装程序将呈现以下许可协议屏幕。点击我同意

图 3.17 – minikube 安装程序的许可协议屏幕

7.在这屏幕,选择所在位置您要安装minikube,然后单击Install,如以下屏幕截图所示:

图 3.18 – minikube 安装程序的安装位置屏幕

8.这安装可能需要几分钟。一旦安装成功,您应该看到以下屏幕。单击下一步 >

                        

图 3.19 – minikube 安装程序的成功安装屏幕

9.这是minikube设置中的最后一个屏幕过程。单击完成以完成它:

图 3.20 – minikube 安装程序的最终屏幕

10.最后,在PowerShell 控制台,设置 vminikubehyperv的虚拟化驱动程序。您可以通过运行以下命令来执行此操作:

minikube config set driver hyperv

您应该看到以下响应:

                 

                                         图 3.21 – minikube config 命令的输出

恭喜——你已经在你的 Windows 机器上设置了minikube程序!

在前面的部分中,您已经安装了kubectlminikube工具来设置您的 Kubernetes 集群。在下一节中,您将设置一个 Kubernetes 集群。

设置本地 Kubernetes 集群

现在,我们将在本地机器上设置 Kubernetes 集群。如技术要求所述,我们至少需要 4 个 CPU 内核虚拟 CPU ( vCPU )、60 GB 可用磁盘和至少 16 GB 内存分配给 Kubernetes 集群。我们推荐的配置是 8 个 CPU 和 64 GB 内存以及 60 GB 磁盘空间。如果您在本地没有可用的这些资源,您可以在云中配置 Linux 主机。我们将在下一节中介绍如何在 Google Cloud 上配置主机。进行如下操作:

1.通过以下命令设置CPU、磁盘和内存的minikube配置:

minikube config set cpus 8

minikube config set memory 32GB

minikube config set disk-size 60GB

2.通过以下命令验证配置是否设置正确:

minikube config view

您应该看到以下响应:

图 3.22 – minikube config 命令的输出

3.现在,通过运行以下命令启动 Kubernetes 集群:

minikube start --kubernetes-version=1.22.4

您应该看到以下响应:

图 3.23 – minikube start 命令的部分输出

启动过程完成后,在 Kubernetes 平台可用后,您应该会看到如下所示的成功消息:

图 3.24 – minikube 启动成功后的输出

4.证实在 Linux 或 macOS 上通过以下命令确保所有 pod 都处于Running状态。请注意,pod 可能需要几分钟才能进入Running状态:

watch kubectl get pods --all-namespaces

或者,在 Windows PowerShell 中运行以下命令:

while (1) {kubectl get pods --all-namespaces; sleep 5}

您应该看到以下响应:

图 3.25 – 验证 Kubernetes pod 是否已成功启动

恭喜!您刚刚安装并验证了新的 Kubernetes 集群。下一步是安装允许您在新的 Kubernetes 集群上运行 Operator 的组件。

安装 OLM

在你之后已验证所有 pod 都在运行本地 Kubernetes 集群,您现在将安装OLM。在 Kubernetes 中安装 OLM 或任何其他应用程序的过程对于所有操作系统类型都是相同的。进行如下操作:

1.运行以下命令为 OLM 安装 CRD:

kubectl apply -f https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.19.1/crds.yaml

您应该看到以下响应:

图 3.26 – 验证 OLM CR 已成功创建

2.运行以下命令在 Kubernetes 上安装 OLM:

kubectl apply -f https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.19.1/olm.yaml

您应该看到以下响应:

图 3.27 – 在 Kubernetes 中创建 OLM 对象

3.证实如果通过在 Linux 或 macOS 上运行此命令,所有 OLM pod 都处于运行状态:

watch kubectl get pods -n olm

或者,运行这个Windows PowerShell 中的命令:

while (1) {kubectl get pods -n olm; sleep 5}

您应该看到以下响应:

                

                                 图 3.28 – 验证 OLM 资源已成功创建

4.通过发出以下命令验证catalogsource是否可用:

kubectl get catalogsource -n olm

您应该看到以下响应:

图 3.29 – 验证 Operator 目录已安装

恭喜!您现在有一个本地版本的 Kubernetes 集群正在运行,并且您已经在其上安装了 OLM。您的集群现在已准备好安装 Kubernetes Operators。一些您可能无法访问机器具有运行 ML 平台所需的最低硬件要求,但不用担心 - 我们已经为您提供服务。以下部分将帮助您在 GCP 中配置所需的 VM。

在 GCP 上配置虚拟机

最好有一个可以用来练习的本地环境在这本书中。但是,我们知道并非每个人都拥有所需的计算资源在他们的本地机器上可用。所以,让我们去云端吧!您可以在云中免费提供练习所需的正确机器。例如,Google Cloud向新帐户提供价值 300 美元的美元USD ) 信用额度。AWS 和 Azure 等其他云提供商也提供了类似的免费套餐帐户,您可以自行选择云提供商。然而,为了配置本书所需的虚拟机,我们将使用谷歌云。

对帐户详细信息进行排序后,请使用以下步骤在您的帐户中预配 VM。只是不要忘记在完成会话后停止 VM 实例,以免因不使用机器的时间而被计费。

以下说明将指导您完成在 Google Cloud 中配置 VM 的过程:

  1. 首先,在https://cloud.google.com注册一个新帐户。
  2. 按照https://cloud.google.com/sdk/docs/install中的步骤安装gcloud 软件开发工具包SDK ) 。
  3. 使用以下命令登录 Google Cloud。此命令将打开一个浏览器实例,您可以在其中为您的 Google Cloud 帐户提供登录凭据:
    gcloud auth login

您应该看到以下响应:

图 3.30 – login 命令的输出

4.那么,它将带您到您将在其中进行身份验证的浏览器。一旦浏览器完成身份验证步骤,您将在命令行中看到以下输出:

图 3.31 – 成功登录 gcloud 帐户的输出

5.在 Google Cloud 中新建一个项目,如下所示。您的虚拟机将属于此项目。请注意,项目名称在 GCP 中必须是全局唯一的,因此请根据您的喜好更改它:

gcloud projects create mlops-kube --name="MLOps on Kubernetes"

您应该看到以下响应:

图 3.32 – 在 Google Cloud 中创建项目命令的输出

GCP 中的项目

项目标识符IDs ) 或项目名称在 Google Cloud 中必须是全局唯一的。只有第一个人才能创建名为mlops-kube的项目。选择您选择的其他项目名称以使此命令起作用。您还需要将所选项目名称用于指定mlops-kube项目名称的后续命令。

6.制作通过发出以下命令确保您在正确的项目中:

gcloud config set project mlops-kube

应该看到以下响应:

图 3.33 – 设置当前项目上下文的命令输出

7.根据您的位置设置正确的区域和区域。您可以通过gcloud compute zone list命令获取所有区域的列表,如下所示:

gcloud config set compute/region australia-southeast1

您应该看到以下响应:

图 3.34 – 设置 gcloud 区域后的输出

运行以下命令:

gcloud config set compute/zone australia-southeast1-a

然后,您应该会看到以下响应:

图 3.35 – 设置 gcloud 区域后的输出

8.使能够Compute Engine API,如下所示。此步骤是通过 API 配置 Linux VM 所必需的:

gcloud services enable compute.googleapis.com

9.禁用操作系统登录,因为您仅通过 SSH 连接,如下所示:

gcloud compute project-info add-metadata --metadata enable-oslogin=FALSE

10.现在,创建通过运行以下命令在此项目中创建一个 VM:

gcloud compute instances create mlopskube-cluster --project=mlops-kube --zone=australia-southeast1-a --machine-type=c2-standard-8 --network-interface=network-tier=PREMIUM,subnet=default --maintenance-policy=MIGRATE --service-account=702800110954-compute@developer.gserviceaccount.com --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append --create-disk=auto-delete=yes,boot=yes,device-name=instance-1,image=projects/centos-cloud/global/images/centos-8-v20211105,mode=rw,size=80,type=projects/mlops-kube/zones/australia-southeast1-b/diskTypes/pd-balanced --no-shielded-secure-boot --shielded-vtpm --shielded-integrity-monitoring --reservation-affinity=any

该命令的输出应显示机器详细信息,如下所示:

图 3.36 – Google Cloud 上 create VM 命令的输出

11.添加一个防火墙规则以允许通过 SSH 端口22访问实例,如下所示。这是一个宽松的规则,不应生产中使用:

gcloud compute --project=mlops-kube firewall-rules create allow22 --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:22 --source-ranges=0.0.0.0/0

您应该看到以下响应:

图 3.37 – 防火墙规则命令的输出

12.使用gcloud SSH 功能通过 SSH 连接到机器,如下所示。这将给出命令行,您可以调用上一节中提到的 Kubernetes 命令:

gcloud beta compute ssh --zone "australia-southeast1-a" "mlopskube-cluster"  --project "mlops-kube"

13.完成会话后删除实例,如下所示:

gcloud  compute instances delete --zone "australia-southeast1-a" "mlopskube-cluster"  --project "mlops-kube"

您应该看到以下响应:

图 3.38 – 删除 Google Cloud 上的机器

在这点,你可以将此gcloud虚拟机用作 Kubernetes 集群的主机。按照前面的部分,您现在应该知道如何安装kubectlminikube以及如何在此 VM 中设置本地 Kubernetes 集群。

概括

在本章中,您回顾了一些基本的 Kubernetes 概念,并了解了 Kubernetes 世界中的 Operator 生态系统。如果您想了解有关 Kubernetes 的更多信息, Packt的 Kubernetes Workshop是一个不错的起点。

您已安装设置本地 Kubernetes 集群所需的工具。您已经看到了在其他环境(例如 Linux、macOS 和 Windows)中执行此操作的说明。您已经在 Google Cloud 上设置了一个虚拟机,以防您不想使用本地计算机进行练习。您已将 OLM 配置为管理 Kubernetes 集群上的 Operator。这些技术将构成我们的机器学习平台的基础设施,您将在下一章开始构建它。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sonhhxg_柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值