【k8s实战】 在离线项目混部 通过kubeflow(tf-operator)部署TensorFlow机器学习任务+prometheus/grafana监控资源使用全过程(最新 图文)

在离线混合部署概念

先举一个例子,众所周知的天猫双十一当天的流量非常之大,那么就需要成百上千台服务器构成一个超大集群来提供计算能力,但是双十一过去之后,集群资源就面临着浪费的局面。假设业务分为在线和离线两种模式:在线任务需要资源相对较少,但要求响应时间短;离线任务则不需要对任务进行迅速响应,但是计算量相对较大、占用资源多。那么我们应该怎么在K8S集群上完成这两种业务的部署、并且使得CPU利用率始终维持在一个比较高的水平上呢?显然要用到在离线混合部署,这有效第解决了资源利用的问题,但是也有人会问,如果某一个离线任务突然来了好几十TB的任务需要训练,就会导致在线资源的损失,这里就用到了k8s中的QoS,在另一文章中有详细介绍https://blog.csdn.net/qq_46595591/article/details/107620114

下面将着重介绍如何通过k8s上的kubeflow部署TensorFlow机器学习任务

最新版kubeflow部署

kubeflow 这个东西出来的比较新,但是更新迭代的速度也特别快,查阅国内资料,基本上对于kubeflow的部署都没有及时更新,这给部署造成了很大的困难,将在另一篇文章中详细介绍kubeflow部署的全过程以及踩过的坑,这里是已经成功的

具体参考我的另一篇文章:

配置要求(均根据官方文档)
1.k8s:1.14.6
2.kfctl :1.02
3…其中一个工作节点必须为4 CPU, 16G内存,50G硬盘

具体操作命令

1.下载kfctl 压缩包  tar -xvf kfctl_v1.0.2_<platform>.tar.gz
2.export PATH=$PATH:"<path-to-kfctl>"
3.export KF_NAME=<your choice of name for the Kubeflow deployment>
4.export KF_DIR=${BASE_DIR}/${KF_NAME}
5.export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml"
6.下载 yaml 文件 wget https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml
7.修改 kfctl_k8s_istio.v1.0.2.yaml 将 https://github.com/kubeflow/manifests/archive/v1.0.2.tar.gz 改为 file:///root/kubeflow/v1.0.2.tar.gz
8.mkdir -p ${KF_DIR}
  cd ${KF_DIR}
  kfctl apply -V -f ${CONFIG_URI}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

TensorFlow部署

概念

TensorFlow 是由 Google Brain 团队为深度神经网络(DNN)开发的功能强大的开源软件库,于 2015 年 11 月首次发布,在 Apache 2.x 协议许可下可用

开源深度学习库 TensorFlow 允许将深度神经网络的计算部署到任意数量的 CPU 或 GPU 的服务器、PC 或移动设备上,且只利用一个 TensorFlow API。你可能会问,还有很多其他的深度学习库,如 Torch、Theano、Caffe 和 MxNet,那 TensorFlow 与其他深度学习库的区别在哪里呢?包括 TensorFlow 在内的大多数深度学习库能够自动求导、开源、支持多种 CPU/GPU、拥有预训练模型,并支持常用的NN架构,如递归神经网络(RNN)、卷积神经网络(CNN)和深度置信网络(DBN)

TensorFlow 则还有更多的特点,如下:
支持所有流行语言,如 Python、C++、Java、R和Go
可以在多种平台上工作,甚至是移动平台和分布式平台
它受到所有云服务(AWS、Google和Azure)的支持
Keras——高级神经网络 API,已经与 TensorFlow 整合
与 Torch/Theano 比较,TensorFlow 拥有更好的计算图表可视化
允许模型部署到工业生产中,并且容易使用
有非常好的社区支持
TensorFlow 不仅仅是一个软件库,它是一套包括 TensorFlow,TensorBoard 和 TensorServing 的软件

部署

这里介绍的是在k8s上通过kubeflow 部署TensorFlow

离线

跑一个pod

注意 如果不是外网 这里百分百被墙 而且会疯狂报错
  这边已经给大家准备好了国内镜像(这个镜像目前看来是只有我独一份)  
  https://github.com/Eros11on/Dockerfile-library(这还不能直接拉取,具体操作一定要看另一篇文章!!!!)
 创建PV  修改各个deploy statefulset 的镜像下载策略 ,因为下载策略是Always ,需要修改为(imagePullPolicy后面值改为 IfNotPresent)
例子
#kubectl edit deploy deploy名字 -n kubeflow

在这里插入图片描述

在线

这里用到的是GPU
这里不再具体阐述
http://c.biancheng.net/view/2003.html上讲的很清楚

k8s上的prometheus+grafana监控资源

概念

Prometheus (中文名:普罗米修斯)是由 SoundCloud 开发的开源监控报警系统和时序列数据库(TSDB).自2012年起,许多公司及组织已经采用 Prometheus,并且该项目有着非常活跃的开发者和用户社区.现在已经成为一个独立的开源项目。Prometheus 在2016加入 CNCF ( Cloud Native Computing Foundation ), 作为在 kubernetes 之后的第二个由基金会主持的项目。 Prometheus 的实现参考了Google内部的监控实现,与源自Google的Kubernetes结合起来非常合适。另外相比influxdb的方案,性能更加突出,而且还内置了报警功能。它针对大规模的集群环境设计了拉取式的数据采集方式,只需要在应用里面实现一个metrics接口,然后把这个接口告诉Prometheus就可以完成数据采集了,下图为prometheus的架构图
在这里插入图片描述

部署

这里使用prometheus+grafana监控部署的机器学习任务

环境

这里用的是阿里云服务器
1个master 4C 16G
1个node 4C 32G 都是60G 云盘
k8s:1.14.6

采用daemonset方式部署node-exporter组件

cat node-exporter.yaml

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: node-exporter
  namespace: kube-system
  labels:
    k8s-app: node-exporter
spec:
  template:
    metadata:
      labels:
        k8s-app: node-exporter
    spec:
      containers:
      - image: prom/node-exporter
        name: node-exporter
        ports:
        - containerPort: 9100
          protocol: TCP
          name: http
---
apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: node-exporter
  name: node-exporter
  namespace: kube-system
spec:
  ports:
  - name: http
    port: 9100
    nodePort: 31672
    protocol: TCP
  type: NodePort
  selector:
    k8s-app: node-exporter

<

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个比较复杂的问题,需要详细说明。我会尽可能地给您提供一些指导。 首先,您需要了解一些基础知识,如 KubernetesPrometheusKubernetes 是一个容器编排平台,可以帮助您自动管理多个容器应用程序的部署、扩展和故障恢复。Prometheus 是一个开源的监控系统,可以收集和存储应用程序的指标,并支持告警和可视化。 以下是大致的步骤: 1. 部署 Kubernetes 集群,并准备好部署 PrometheusGrafana 的节点。您可以使用各种 Kubernetes 发行版,如 kops、kubeadm 等。 2. 安装和配置 Prometheus。您可以使用 Prometheus 的 Helm Chart 进行部署,并通过 Prometheus Operator 进行管理。在部署 Prometheus 时,您需要配置它来收集应用程序的指标,并将其存储在 Prometheus 存储中。 3. 部署 Grafana。您可以使用 Grafana 的 Helm Chart 进行部署,并配置它来连接到 Prometheus 存储。在 Grafana 中,您可以创建仪表板并可视化 Prometheus 存储中的指标数据。 4. 配置告警。您可以使用 Prometheus 的 Alertmanager 进行告警,并将告警发送到 Slack、Email 等渠道。在配置告警时,您需要定义告警规则,并配置 Alertmanager 来发送告警。 以上是部署 PrometheusGrafana 和告警的大致步骤。由于每个环境的部署和配置都有所不同,所以具体的细节可能会有所不同。我建议您查阅官方文档,并根据您的需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值