(二)GKE上MLOps的Jenkins作业和部署

目录

作业YAML文件

部署YAML文件

文件结构

下一步


之前的系列文章中,我们解释了如何编写要在我们的Docker容器组中执行的脚本作为 CI/CD  MLOps管道的一部分。在本系列中,我们将设置一个Google Kubernetes Engine( GKE )集群来部署这些容器。

本系列文章假设您熟悉深度学习、DevOpsJenkinsKubernetes基础知识。

在本系列的上一篇文章中,我们设置了一个GKE集群。在本节中,我们将使用Kubernetes作业和部署。在该项目中,旨在完成任务然后终止的作业将执行诸如模型训练和测试之类的任务。除非您明确终止,否则永远不会结束的部署将使我们的预测API保持活动状态。

作业、服务和部署都声明为YAML文件,与我们定义机密的方式相同。

作业YAML文件

我们来看看处理AutomaticTraining-CodeCommit作业的YAML文件:

apiVersion: batch/v1
kind: Job
metadata:
  name: gke-training-code-commit
spec:
  backoffLimit: 1
  activeDeadlineSeconds: 900
  ttlSecondsAfterFinished: 60
  template:
    spec:
      containers:
      - name: code-commit
        image: gcr.io/automatictrainingcicd/code-commit:latest
        env:
          - name: gmail_password
            valueFrom:
              secretKeyRef:
                name: gmail-secrets
                key: gmail_password
          - name: email_address
            value: svirahonda@gmail.com
      restartPolicy: OnFailure

在上面的文件中:

  • kind:明确指出部署类型是Job
  • name:定义Kubernetes集群中的作业名称。
  • backoffLimit“1”表示如果失败,作业将再重试一次。activeDeadlineSeconds: “900”表示如果执行时间超过900秒,将终止作业。
  • ttlSecondsAfterFinished: "60" 将在成功执行后60秒删除已完成的作业。

注意:如果我们的程序中的某些内容不允许它结束,则上述两个声明可以控制资源使用。

  • name: "code-commit" 给容器一个名字
  • image: "gcr.io/automatictrainingcicd/code-commit:latest" 指示使用我们GCR注册表中的镜像。
  • env:将存储在secrets.yaml文件中的数据作为环境变量传递给我们的容器。
  • restartPolicy: OnFailure" 表示如果容器失败,执行我们作业的pod将重新启动。

部署YAML文件

让我们检查YAML文件中最相关的标签以进行Automatic-Training-PredictionAPI部署。

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gke-api
  labels:
    app: api
spec:
  replicas: 2
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
        - name: api
          image: gcr.io/automatictrainingcicd/prediction-api:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 5000
          env:
            - name: gmail_password
              valueFrom:
                secretKeyRef:
                  name: gmail-secrets
                  key: gmail_password
            - name: email_address
              value: svirahonda@gmail.com
---
apiVersion: v1
kind: Service
metadata:
  name: gke-api
  labels:
    app: api
spec:
  clusterIP: 10.127.240.120
  ports:
  - port: 5000
    protocol: TCP
  selector:
    app: api
  type: LoadBalancer
  • kindDeployment说明执行类型。
  • name“gke-api”是部署的名称。
  • replicas“2”定义了将执行程序的pod副本数量。
  • image: "gcr.io/automatictrainingcicd/prediction-api:latest" 表示使用GCR中的容器镜像。
  • imagePullPolicyAlways强制容器构建过程从不使用缓存容器。
  • containerPort: "5000" 打开容器的5000端口。
  • env:label通过存储在secrets.yaml文件到我们的容器作为环境变量的信息。

请注意,此文件中还有另一个块——“LoadBalancer”类型的“service”。此服务将通过固定的API地址和套接字将流量从集群内部路由到部署pod

文件结构

也许您想知道将这些传递给Kubernetes的位置,YAML文件应该保存在.py文件所在的同一目录中,扩展名为.yaml,并推送到相应的存储库。这样,每个存储库都将拥有自己的.yaml文件,该文件将指示Kubernetes如何操作。该AutomaticTraining-PredictionAPI文件结构应如下所示:

你可以找到我们的项目的所有的YAML文件:AutomaticTraining-CodeCommitAutomaticTraining-DataCommitAutomaticTraining,单元测试AutomaticTraining-PredictionAPIAutomaticTraining接口(可选)。

下一步

我们都准备开始在Kubernetes上进行部署。构建容器并将其推送到GCR后,您可以通过kubectl apply -f pod.yaml从相应应用的目录运行来将应用部署到GKE 

接下来的文章中,我们将为这个项目建立Jenkins CI,以便开始建立和自动化我们的MLOps管道。

Jenkins Jobs and Deployments for MLOps on GKE - CodeProject

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值