在本系列文章中,将展示如何设置Google Kubernetes Engine (GKE) 集群来部署容器。假设已经熟悉深度学习、DevOps、Jenkins和Kubernetes的基础知识。
GKE是Google Cloud Platform提供的Kubernetes解决方案,它带来了许多好处。Kubernetes是一个先进的开源平台,用于部署、扩展和管理容器化应用程序或微服务。它提供:
Kubernetes集群由一个主节点和多个工作节点组成。主节点管理整个集群,包括通信。工作节点则承担所有繁重的工作。微服务将分布在工作节点上,以确保它们在集群生命周期内保持健康。
当前文章系列中与五个Kubernetes概念相关:
Pod是最小的Kubernetes单元。它是一组一个或多个容器。每个Pod都附加到一个工作节点上,该节点可以运行多个Pod。如果该节点失败,其Pod将移动到另一个可用的工作节点上。
Job启动一个或多个Pod来执行任务。一旦任务结束,所有Pod都将被终止。如果任务执行失败,Job将不断重试,直到成功。
Deployment是提供给主节点的一组规则。这些规则定义了如何在工作节点上创建应用程序并处理其生命周期。主节点不断监控部署。如果失败,将启动一个新实例,因此应用程序始终运行。要使部署可以从集群外部访问,需要创建一个LoadBalancer服务,该服务处理进入Kubernetes集群的流量。
服务是一组Pod和一个定义如何跨它们路由流量的策略。Secrets是YAML文件,集群中的任何元素都可以通过环境变量访问。这是在Kubernetes中处理敏感信息的默认方法。
如果还没有配置Google Cloud Platform的计费账户,请按照以下步骤操作。如果还没有配置Google Cloud SDK,请查看本文和本文,其中有配置指南。
让通过终端启动集群。如果计划进行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控制台并转到KubernetesEngine > Clusters。
应该找到Kubernetes集群处于活动状态:
在继续之前,请安装kubectl,这是一个命令行包,允许与Kubernetes交互:
为了能够从微服务中发送通知邮件,需要将电子邮件地址和相应的密码传递给它们。这些凭据是敏感信息,这就是为什么将使用secrets。用电子邮件地址和密码替换以下文件中的字段。(如果使用Gmail地址,请查看本文。)文件如下:
apiVersion: v1
kind: Secret
metadata:
name: gmail-secrets
type: Opaque
data:
gmail_address: your_email_address
gmail_password: your_app_password
kubectl apply -f secrets.yaml