Cloud-native 是与 Edge AI 相关的最重要的概念之一。这是因为 cloud native 为应用程序部署提供了大规模支持。它还提供了性能、弹性和易管理性,这些都是 Edge AI 的关键功能。云本机和边缘 AI 如此交织,以至于我们相信 Edge AI 的未来是云本地的 。
这篇文章概述了云本机组件以及准备好应用程序云本机的步骤。我将向您展示如何在 NVIDIA Fleet Command ,这是一种云服务,用于在边缘部署和管理应用程序,采用云本机原则构建。
如果遵循所有这些步骤,结果就是可以轻松地在 Fleet Command 和其他云本机部署和管理平台上部署云本机应用程序。
什么是云本机?
Cloud native 是一种开发和运行应用程序的方法,它包含了云计算交付模型的灵活性、可伸缩性和弹性。云本机方法允许组织构建具有弹性和可管理性的应用程序,从而允许更灵活的应用程序部署。
云本机开发的关键原则有:
微服务
容器
舵图
CI / CD
DevOps 公司
什么是微服务?
微服务是软件开发的一种形式,其中应用程序被分解为更小的、自包含的服务,这些服务相互通信。这些自包含服务是独立的,这意味着它们中的每一个都可以自己更新、部署和扩展,而不会影响应用程序中的其他服务。
微服务使开发应用程序更快,更新、部署和扩展这些更新的过程更容易。
什么是容器?
容器是一个软件包,它包含在任何计算环境中可靠运行应用程序所需的所有信息和依赖项。容器可以轻松地部署在不同的操作系统上,并提供可移植性和应用程序隔离。
整个应用程序可以被容器化,但应用程序的各个部分也可以被容器化。例如,容器与微服务配合得非常好,在微服务中,应用程序被分解为小型、自给自足的组件。每个微服务都可以在容器中打包、部署和管理)。此外,可以在集群中部署和管理多个容器。
容器非常适合边缘部署,因为它们使您能够将应用程序、依赖项和环境变量一次性安装到容器映像中,而不是安装在应用程序运行的每个系统上,从而使管理多个部署变得非常简单。
这对于边缘交换非常重要,因为一个组织可能需要在一个巨大的物理距离上安装和管理数百或数千个不同的部署,因此尽可能多地自动化部署过程至关重要。
什么是舵图?
对于复杂的容器部署,例如跨多个站点和多个系统部署多个应用程序,许多组织使用 Helm charts 。 Helm 是一个运行在 Kubernetes (稍后讨论)之上的应用程序包管理器。没有它,您必须为每个工作负载手动创建单独的 YAML 文件,指定部署所需的所有详细信息,从 pod 配置到负载平衡。
Helm charts 通过允许组织定义可重用的部署模板,以及版本控制和在部署过程中定制应用程序等其他好处,消除了这一繁琐的过程。
什么是 CI / CD ?
持续集成( CI )使您能够协作地迭代和测试新代码,通常是通过将其集成到共享存储库中。
连续交付( CD )是从 CI 阶段获取新构建并将其加载到存储库的自动化过程,在存储库中可以轻松地将其部署到生产中。
在将新代码集成到现有解决方案中时,适当的 CI / CD 流程可以避免服务中断。
什么是 DevOps ?
术语 DevOps 指的是合并开发人员和运营团队的过程,以简化开发和向客户交付应用程序的过程。
DevOps 对于云本地技术非常重要,因为这两个概念的理念都集中于持续、轻松地向客户提供解决方案,并创建端到端的开发管道以加速更新和迭代。
什么是云本机管理?
既然已经解释了云本机的核心原则,那么讨论如何在生产中管理云本机应用程序就很重要了。
编排容器的主要平台是 Kubernetes 。 Kubernetes 是开源的,允许组织部署、管理和扩展容器化应用程序。
一些组织已经在 Kubernetes 之上构建了企业级解决方案,以提供独特的优势和功能:
Red Hat OpenShift
VMWare Tanzu
Azure Kubernetes 服务
NVIDIA Fleet Command
为任何 Kubernetes 平台准备应用程序的过程,无论是 Kubernetes 本身还是构建在 Kubernetes 之上的解决方案,本质上都是相同的。每个解决方案都有特定的配置步骤,以确保组织的云本机应用程序可以有效运行而不会出现问题。
使用 NVIDIA Fleet Command 部署云本机应用程序
本节以 NVIDIA Fleet Command 为例介绍配置过程,并指出所需的具体配置。
第 0 步:理解 Fleet Command
Fleet Command 是一种用于跨不同边缘位置管理应用程序的云服务。它基于 Kubernetes 构建并部署云本机应用程序,因此将应用程序放到 Fleet Command 上的步骤与将应用程序放到其他云本机管理平台上的步骤相同。
假设应用程序已经构建,将该应用程序安装到 Fleet Command 上只需四个步骤:
将应用程序容器化
确定应用程序要求
建立舵图
在 Fleet Command 上部署
步骤 1 :将应用程序容器化
Fleet Command 将应用程序部署为容器。通过使用容器,您可以在同一系统上部署多个应用程序,还可以轻松地跨多个系统和位置扩展应用程序。此外,所有依赖项都打包在容器中,因此您知道应用程序将在数千个系统中执行相同的操作。
为应用程序构建容器很容易。有关更多信息,请参阅 容器装卸工指南 。
下面是一个 Dockerfile 示例,用于使用 NVIDIA CUDA 基本映像构建的自定义深度学习容器:
FROM nvcr.io/nvidia/cuda:11.3.0-base-ubuntu18.04 CMD nvidia-smi #set up environment RUN apt-get update && apt-get install --no-install-recommends --no-install-suggests -y curl RUN apt-get install unzip RUN apt-get -y install python3 RUN apt-get -y install python3-pip #copies the application from local path to container path COPY app/ /app/ WORKDIR /app #Install the dependencies RUN pip3 install -r /app/requirements.txt ENV MODEL_TYPE='EfficientDet' ENV DATASET_LINK='HIDDEN' ENV TRAIN_TIME_SEC=100 CMD ["python3", "train.py"]
在本例中,/app/包含所有源代码。为容器创建 Dockerfile 后,可以使用该文件构建容器,然后将其上载到云中的私有注册表,以便可以轻松地将容器部署到任何位置。
步骤 2 :确定应用程序需求
容器完成后,需要确定应用程序正常运行所需的内容。这通常涉及到考虑安全、网络和存储需求。
Fleet Command 是一个安全的软件堆栈,它能够控制应用程序在其部署的系统中可以访问哪些硬件和软件。因此,您的应用程序应该围绕以下安全最佳实践进行设计:
避免特权容器
将管理员和应用程序流量与存储流量分离
最小化系统设备访问
等等
围绕这些安全需求设计应用程序部署,在以后配置网络和存储时牢记这些安全需求。
下一步是确定需要什么样的网络访问需求,以及如何从容器中公开网络。
通常,应用程序需要不同的端口和路由来访问任何边缘传感器和设备、管理流量、存储流量和应用程序(云)流量。这些端口可以使用NodePorts或更高级的 Kubernetes 网络配置(如入口控制器)从 Fleet Command 公开。
最后,应用程序可能需要访问本地或远程存储以保存持久数据。 Fleet Command 支持hostPath卷装载功能。还可以使用其他 Kubernetes 功能,例如持久卷和持久卷声明。
如果需要,可以在 Fleet Command 系统上单独部署本地路径或 NFS 供应器,以配置本地或远程存储。如果应用程序支持此功能,还可以将其配置为连接到云存储。
有关更多信息,请参阅 Fleet Command 应用程序开发指南 。
步骤 3 :建立舵图
既然应用程序需求已经确定,现在就应该创建一个 Helm chart 。
与容器一样,Fleet Command 上的 Helm 图表也有一些特定要求。以下是一个 NVIDIA DeepStream Helm 图表 的示例,作为参考,以帮助构建部署在 Fleet Command 中的舵图。
要从头开始创建您自己的头盔图表,请首先运行以下命令创建示例头盔图表。此命令使用 NGINX Docker 容器生成一个示例舵图,然后可以为任何应用程序自定义该容器。
$ helm create deepstream
创建舵图后,该图的目录结构如下所示:
deepstream |-- Chart.yaml |-- charts |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- deployment.yaml | |-- ingress.yaml | `-- service.yaml `-- values.yaml
接下来,修改这些值。具有以下突出显示值的 yaml 文件,用于配置 DeepStream 容器和网络的示例舵图。
image: repository: nvcr.io/nvidia/deepstream pullPolicy: IfNotPresent # Overrides the image tag whose default is the chart appVersion. tag: 5.1-21.02-samples imagePullSecrets: [] nameOverride: "" fullnameOverride: "" serviceAccount: # Specifies whether a service account should be created create: false # Annotations to add to the service account annotations: {} # The name of the service account to use. # If not set and create is true, a name is generated using the fullname template name: "" podAnnotations: {} podSecurityContext: {} # fsGroup: 2000 securityContext: {} # capabilities: # drop: # - ALL # readOnlyRootFilesystem: true # runAsNonRoot: true # runAsUser: 1000 service: type: NodePort port: 8554 nodeport: 31113
创建自定义舵图后,可以将其上载到容器旁边的专用注册表。
步骤 4 :在 Fleet Command 上部署
将应用程序容器化并构建舵图后,将应用程序加载到 Fleet Command 。应用程序加载到 NGC 上,这是一个用于 GPU 加速的应用程序、模型和容器的中心,然后可以在 Fleet Command 上部署。应用程序可以是公共的,但也可以托管在私有注册表中,在该注册表中,访问权限仅限于组织。
整个过程将在 Fleet Command 用户指南 ,但在 Fleet Command 演示视频 。
奖励步骤:加入我们的合作伙伴生态系统
最近, NVIDIA 宣布扩大 NVIDIA Metropolis 合作伙伴计划 现在包括 Fleet Command 。 Metropolis 的合作伙伴如果将其应用程序配置为部署在 Fleet Command 上,则可以免费访问该解决方案,以便为客户操作 POC 。通过使用 Fleet Command ,合作伙伴无需在客户环境中构建定制的解决方案进行评估。他们可以使用 Fleet Command 并在几分钟内将其应用程序部署到客户站点。
开始使用云本机
这篇文章介绍了云本机技术的核心原则,以及如何使用 Fleet Command 让应用程序做好云本机准备。
您的下一步是获得在云本机环境中部署和管理应用程序的实践经验。 NVIDIA LaunchPad 可以提供帮助。
LaunchPad 提供对 Fleet Command 实例的即时、短期访问,以便在实际服务器上轻松部署和监控实际应用程序。动手实验室将引导您完成整个过程,从基础设施配置和优化到在适用用例的上下文中部署应用程序,例如在网络边缘部署 vision AI 应用程序。
关于作者
Troy Estes 是 NVIDIA Edge 和企业计算解决方案的产品营销经理。在加入 Edge & Enterprise 业务部门之前,特洛伊曾在自主汽车业务部门和 NVIDIA 电网产品集团从事营销活动和支持产品 GTM 。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !