3.2. 了解 odo

Red Hat OpenShift Developer CLI(odo)是在 OpenShift Container Platform 和 Kubernetes 上创建应用程序的工具。使用 odo,您可以在 Kubernetes 集群中开发、测试、调试和部署基于微服务的应用,而无需深入了解平台。

odo 遵循 创建和推送 工作流。作为用户,当您创建时,信息(或清单)存储在配置文件中。推送 时,会在 Kubernetes 集群中创建对应的资源。所有这些配置都存储在 Kubernetes API 中,以实现无缝访问和功能。

odo 使用 servicelink 命令将组件和服务链接在一起。odo 通过使用集群中的 Kubernetes Operator 创建和部署服务来实现这个目标。可使用 Operator Hub 上可用的任何 Operator 创建服务。在链接服务后,odo 会将服务配置注入组件。然后,应用程序就可以使用此配置与 Operator 支持的服务通信。

3.2.1. odo 的主要功能

odo 的设计目的是为 Kubernetes 的开发人员提供一个友好的 Kubernetes 接口,能够:

  • 通过创建新清单或使用现有清单,在 Kubernetes 集群上快速部署应用程序
  • 使用命令轻松创建和更新清单,而无需理解和维护 Kubernetes 配置文件
  • 提供对在 Kubernetes 集群上运行的应用程序的安全访问
  • 为 Kubernetes 集群上的应用程序添加和删除额外存储
  • 创建 Operator 支持的服务,并将应用程序链接到它们
  • 在作为 odo 组件部署的多个微服务间创建一个链接
  • 在 IDE 中使用 odo 进行远程调试应用程序
  • 使用 odo 轻松测试 Kubernetes 上部署的应用程序

3.2.2. odo 核心概念

odo 将 Kubernetes 概念抽象化为开发人员熟悉的术语:

Application(应用程序)

使用 云原生方法 开发的典型应用,用于执行特定的任务。

应用程序示例包括在线视频流、在线购物和酒店预订系统。

组件

一组可单独运行和部署的 Kubernetes 资源。云原生应用是一系列小、独立、松散耦合的组件

组件示例包括 API 后端、Web 界面和支付后端。

项目
包含源代码、测试和库的单一单元。
Context
包含单一组件的源代码、测试、库和 odo 配置文件的目录。
URL
公开组件的机制可从集群外部访问。
存储
集群中的持久性存储。它会在重启和组件重建过程中保留数据。
服务

为组件提供额外的功能的外部应用程序。

服务 示例包括 PostgreSQL、MySQL、Redis 和 RabbitMQ。

odo 中,服务从 OpenShift Service Catalog 置备,且必须在集群中启用。

devfile

用于定义容器化开发环境的开放式标准,使开发人员工具可以简化和加速工作流。如需更多信息,请参阅文档 https://devfile.io

您可以连接到公开可用的 devfile registry,也可以安装安全 registry。

3.2.3. 列出 odo 中的组件

odo 使用可移植 devfile 格式来描述组件及其相关 URL、存储和服务。odo 可以连接到各种 devfile registry,以下载用于不同语言和框架的 devfile。有关如何管理 odo registry 用来检索 devfile 信息的更多信息,请参阅 odo registry 命令的文档。

您可以使用 odo catalog list components 命令列出不同 registry 的所有 devfile

流程

  1. 使用 odo 登陆到集群:

    $ odo login -u developer -p developer
  2. 列出可用的 odo 组件:

    $ odo catalog list components

    输出示例

    Odo Devfile Components:
    NAME                             DESCRIPTION                                                         REGISTRY
    dotnet50                         Stack with .NET 5.0                                                 DefaultDevfileRegistry
    dotnet60                         Stack with .NET 6.0                                                 DefaultDevfileRegistry
    dotnetcore31                     Stack with .NET Core 3.1                                            DefaultDevfileRegistry
    go                               Stack with the latest Go version                                    DefaultDevfileRegistry
    java-maven                       Upstream Maven and OpenJDK 11                                       DefaultDevfileRegistry
    java-openliberty                 Java application Maven-built stack using the Open Liberty ru...     DefaultDevfileRegistry
    java-openliberty-gradle          Java application Gradle-built stack using the Open Liberty r...     DefaultDevfileRegistry
    java-quarkus                     Quarkus with Java                                                   DefaultDevfileRegistry
    java-springboot                  Spring Boot® using Java                                             DefaultDevfileRegistry
    java-vertx                       Upstream Vert.x using Java                                          DefaultDevfileRegistry
    java-websphereliberty            Java application Maven-built stack using the WebSphere Liber...     DefaultDevfileRegistry
    java-websphereliberty-gradle     Java application Gradle-built stack using the WebSphere Libe...     DefaultDevfileRegistry
    java-wildfly                     Upstream WildFly                                                    DefaultDevfileRegistry
    java-wildfly-bootable-jar        Java stack with WildFly in bootable Jar mode, OpenJDK 11 and...     DefaultDevfileRegistry
    nodejs                           Stack with Node.js 14                                               DefaultDevfileRegistry
    nodejs-angular                   Stack with Angular 12                                               DefaultDevfileRegistry
    nodejs-nextjs                    Stack with Next.js 11                                               DefaultDevfileRegistry
    nodejs-nuxtjs                    Stack with Nuxt.js 2                                                DefaultDevfileRegistry
    nodejs-react                     Stack with React 17                                                 DefaultDevfileRegistry
    nodejs-svelte                    Stack with Svelte 3                                                 DefaultDevfileRegistry
    nodejs-vue                       Stack with Vue 3                                                    DefaultDevfileRegistry
    php-laravel                      Stack with Laravel 8                                                DefaultDevfileRegistry
    python                           Python Stack with Python 3.7                                        DefaultDevfileRegistry
    python-django                    Python3.7 with Django                                               DefaultDevfileRegistry

3.2.4. odo 中的 Telemetry

odo 会收集有关如何使用它的信息,包括操作系统、RAM、CPU、内核数量、odo 版本、错误、成功/失败以及 odo 命令完成所需的时间。

您可以使用 odo preference 命令修改遥测同意:

  • odo preference set ConsentTelemetry true 代表同意遥测。
  • odo preference unset ConsentTelemetry 会禁用 Telemetry。
  • odo preference view 显示当前的首选项。