在 GKE 上创建 MLOps Kubernetes 集群






4.95/5 (4投票s)
在本系列文章中,我们将演示如何使用 CI/CD 管道(通常由开发人员和 DevOps 团队使用的一种工具),并演示如何使用它来创建一个完整的 AI 训练、测试和部署管道,以满足 Google MLOps 成熟度模型中的第 2 级要求。
在 之前的文章系列 中,我们讨论了作为 CI/CD MLOps 管道一部分的一组 Docker 容器中执行的脚本。在本系列文章中,我们将向您展示如何设置 Google Kubernetes Engine (GKE) 集群来部署这些容器。本系列文章假设您熟悉深度学习、DevOps、Jenkins 和基本的 Kubernetes。
GKE 是 Google Cloud Platform 提供的 Kubernetes 解决方案,它提供了许多优势。 Kubernetes 是一种最先进的开源平台,用于部署、扩展和处理容器化应用程序或微服务。它提供:
- 极其简单的自动缩放
- 自动化的健康检查和自我修复选项
- 集群内微服务之间的网络流量自动路由
- 来自集群外部的流量的路由和负载平衡。
Kubernetes 简述
Kubernetes 集群由一个主节点和一个或多个工作节点组成。主节点管理整个集群,包括通信。正如您可能已经猜到的那样,工作节点承担了所有繁重的工作。您的微服务将分布在工作节点上,以确保它们在集群生命周期内保持健康。
五个 Kubernetes 概念与当前的文章系列相关 – pods(容器组)、jobs(任务)、deployments(部署)、services(服务)和 secrets(密钥)
- 一个 pod 是 Kubernetes 的最小单位。它是一个或多个容器的组合。每个 pod 都连接到一个工作节点,该节点可以运行多个 pod。如果此节点发生故障,其 pod 将被移动到另一个可用的工作节点。图片来自 Kubernetes
- 一个 job 启动一个或多个 pod 来执行任务。任务结束后,所有 pod 都会被终止。如果任务执行失败,job 将不断重试,直到成功。
- deployment 是一组提供给主节点的规则。这些规则定义了如何创建您的应用程序以及如何处理其在工作节点上的生命周期。主节点会不断监控您的 deployment。如果它失败,将启动一个新的实例,以便您的应用程序始终运行。要使您的 deployment 可以从集群外部访问,您需要创建一个 LoadBalancer(负载均衡器) service,它处理进入 Kubernetes 集群的传入流量。图片来自 Kubernetes
- 一个 service 是一组 pod 和一项策略,用于定义如何在它们之间路由流量。
- Secrets 是 YAML 文件,集群中的任何元素都可以通过环境变量访问它们。这是在 Kubernetes 中处理敏感信息的默认方法。
设置 GKE 集群
如果您尚未配置您的 Google Cloud Platform 结算帐户,请按照 这些步骤。如果您尚未配置 Google Cloud SDK,请查看 这篇文章 以及 这个,其中包含配置指南。
启动 GKE 集群
让我们通过终端启动集群。如果您计划进行启用 GPU 的训练,请发出:
gcloud container clusters create training-cluster --num-nodes=2 --zone=us-central1-a --accelerator="type=nvidia-tesla-p100,count=1" --machine-type="n1-highmem-2" --scopes="gke-default,storage-rw"
否则(对于 CPU 训练),请运行:
gcloud container clusters create training-cluster --num-nodes=2 --zone=us-central1-a --machine-type="n1-highmem-2" --scopes="gke-default,storage-rw"
响应将与此类似:
一旦响应通知您您的集群已创建,请打开 GCP 控制台 并转到 Kubernetes Engine > Clusters(Kubernetes Engine > 集群)。
您应该找到您的 Kubernetes 集群处于活动状态
在继续之前,请安装 kubectl,这是一个命令行包,它允许您与 Kubernetes 交互
创建 secrets.yaml 文件
为了能够从我们的微服务中发送通知电子邮件,我们需要向它们传递电子邮件帐户地址和相应的密码。这些凭据是敏感信息,这就是为什么我们将使用 secrets。将以下文件中的字段替换为您的电子邮件地址和密码。(如果您使用 Gmail 地址,请查看 本指南)。文件如下:
apiVersion: v1 kind: Secret metadata: name: gmail-secrets type: Opaque data: gmail_address: your_email_address gmail_password: your_app_password
将文件另存为 *secrets.yaml*。打开一个终端窗口并将这些说明应用于集群:
kubectl apply -f secrets.yaml
后续步骤
我们现在可以使用 GKE 了。在 下一篇文章 中,我们将看到如何定义 jobs、deployments 和 services,以便我们的容器能够完成其目标。敬请关注!