3.5. odo CLI 参考指南
3.5.1. odo build-images
odo
可根据 Dockerfile 构建容器镜像,并将这些镜像推送到 registry。
在运行 odo build-images
命令时,odo
会使用 镜像
类型搜索 devfile.yaml
中的所有组件,例如:
components: - image: imageName: quay.io/myusername/myimage dockerfile: uri: ./Dockerfile 1 buildContext: ${PROJECTS_ROOT} 2 name: component-built-from-dockerfile
对于每个镜像组件,odo 执行 podman
或 docker
(按此顺序找到的第一个),以使用指定的 Dockerfile、构建上下文和参数构建镜像。
如果将 --push
标志传递给命令,则镜像会在构建后推送到其 registry。
3.5.2. odo catalog
odo
使用不同的目录来部署组件和服务。
3.5.2.1. 组件
odo
使用可移植 devfile 格式来描述组件。它可以连接到各种 devfile registry,以便为不同的语言和框架下载 devfile。如需更多信息,请参阅 odo registry
。
3.5.2.1.1. 列出组件
要列出不同 registry 中可用的所有 devfile,请运行以下命令:
$ odo catalog list components
输出示例
NAME DESCRIPTION REGISTRY go Stack with the latest Go version DefaultDevfileRegistry java-maven Upstream Maven and OpenJDK 11 DefaultDevfileRegistry nodejs Stack with Node.js 14 DefaultDevfileRegistry php-laravel Stack with Laravel 8 DefaultDevfileRegistry python Python Stack with Python 3.7 DefaultDevfileRegistry [...]
3.5.2.1.2. 获取有关组件的信息
要获得有关特定组件的更多信息,请运行以下命令:
$ odo catalog describe component
例如,运行以下命令:
$ odo catalog describe component nodejs
输出示例
* Registry: DefaultDevfileRegistry 1 Starter Projects: 2 --- name: nodejs-starter attributes: {} description: "" subdir: "" projectsource: sourcetype: "" git: gitlikeprojectsource: commonprojectsource: {} checkoutfrom: null remotes: origin: https://github.com/odo-devfiles/nodejs-ex.git zip: null custom: null
如需有关从入门项目创建项目的更多信息,请参阅 odo create
。
3.5.2.2. 服务
odo
可使用 Operator 帮助部署服务。
odo 仅支持 Operator Lifecycle Manager 帮助部署的 Operator。
3.5.2.2.1. 列出服务
要列出可用的 Operator 及其关联的服务,请运行以下命令:
$ odo catalog list services
输出示例
Services available through Operators NAME CRDs postgresql-operator.v0.1.1 Backup, Database redis-operator.v0.8.0 RedisCluster, Redis
在本例中,集群中安装两个 Operator。postgresql-operator.v0.1.1
Operator 部署与 PostgreSQL 相关的服务: Backup
和 Database
。redis-operator.v0.8.0
Operator 将部署与 Redis 相关的服务:RedisCluster
和 Redis
。
要获取所有可用 Operator 的列表,odo
会获取当前处于 Succeeded 阶段的当前命名空间的 ClusterServiceVersion(CSV)资源。对于支持集群范围的访问权限的 Operator,当创建新命名空间时,这些资源会自动添加到其中。但是,在 Succeeded 阶段前可能需要一些时间,odo
可能会返回空列表,直到资源就绪为止。
3.5.2.2.2. 搜索服务
要通过关键字搜索特定服务,请运行以下命令:
$ odo catalog search service
例如,要检索 PostgreSQL 服务,请运行以下命令:
$ odo catalog search service postgres
输出示例
Services available through Operators NAME CRDs postgresql-operator.v0.1.1 Backup, Database
您将看到在其名称中包含 search 关键字的 Operator 列表。
3.5.2.2.3. 获取有关服务的信息
要获取有关特定服务的更多信息,请运行以下命令:
$ odo catalog describe service
例如:
$ odo catalog describe service postgresql-operator.v0.1.1/Database
输出示例
KIND: Database VERSION: v1alpha1 DESCRIPTION: Database is the Schema for the the Database Database API FIELDS: awsAccessKeyId (string) AWS S3 accessKey/token ID Key ID of AWS S3 storage. Default Value: nil Required to create the Secret with the data to allow send the backup files to AWS S3 storage. [...]
服务通过 CustomResourceDefinition(CRD)资源表示在集群中。上一命令显示 CRD 的详细信息,如 kind
、version
,以及用于定义此自定义资源实例的字段列表。
从 CRD 中包含的 OpenAPI schema 中提取字段列表。此信息在 CRD 中是可选的,如果不存在,它将从代表该服务的 ClusterServiceVersion(CSV)资源中提取。
也可以请求 Operator 支持的服务的描述,而无需提供 CRD 类型信息。要描述没有 CRD 的集群中的 Redis Operator,请运行以下命令:
$ odo catalog describe service redis-operator.v0.8.0
输出示例
NAME: redis-operator.v0.8.0 DESCRIPTION: A Golang based redis operator that will make/oversee Redis standalone/cluster mode setup on top of the Kubernetes. It can create a redis cluster setup with best practices on Cloud as well as the Bare metal environment. Also, it provides an in-built monitoring capability using ... (cut short for beverity) Logging Operator is licensed under [Apache License, Version 2.0](https://github.com/OT-CONTAINER-KIT/redis-operator/blob/master/LICENSE) CRDs: NAME DESCRIPTION RedisCluster Redis Cluster Redis Redis
3.5.3. odo create
odo
使用 devfile 来存储组件的配置,并描述组件的资源,如存储和服务。odo create 命令生成这个文件。
3.5.3.1. 创建组件
要为现有项目创建 devfile,请运行 odo create
命令,使用组件的名称和类型(例如 nodejs
或 go
):
odo create nodejs mynodejs
在示例中,nodejs
是组件的类型,mynodejs
是 odo
为您创建的组件的名称。
如需所有支持的组件类型列表,请运行 odo catalog list components
命令。
如果您的源代码存在于当前目录之外,可以使用 --context
标志来指定路径。例如,如果 nodejs 组件的源位于相对于当前工作目录的名为 node-backend
的文件夹,则运行以下命令:
odo create nodejs mynodejs --context ./node-backend
--context
标志支持相对和绝对路径。
要指定部署组件的项目或应用程序,请使用 --project
和 --app
标志。例如,要在 backend
项目中创建一个部分 myapp
应用程序的组件,请运行以下命令:
odo create nodejs --app myapp --project backend
如果没有指定这些标志,它们将默认为活跃的应用和项目。
3.5.3.2. Starter (初学者)项目
如果您没有现有的源代码,但希望快速设置并运行,请使用初学者项目来试验 devfile 和组件。要使用初学者项目,在 odo create
命令中添加 --starter
标志。
要获取组件类型的可用启动程序项目列表,请运行 odo catalog describe component
命令。例如,若要获取 nodejs 组件类型的所有可用入门项目,请运行以下命令:
odo catalog describe component nodejs
然后,在 odo create
命令中使用 --starter
标志指定所需的项目:
odo create nodejs --starter nodejs-starter
这将下载与所选组件类型对应的示例模板,在本例中为 nodejs
。模板已下载到您的当前目录中,或附加到 --context
标志指定的位置。如果初学者项目有自己的 devfile,则会保留此 devfile。
3.5.3.3. 使用现有的 devfile
如果要从现有 devfile 创建新组件,您可以使用 --devfile
标志指定 devfile 的路径。例如,要基于 GitHub 中的 devfile 创建名为 mynodejs
的组件,请使用以下命令:
odo create mynodejs --devfile https://raw.githubusercontent.com/odo-devfiles/registry/master/devfiles/nodejs/devfile.yaml
3.5.3.4. 互动创建
您还可以以互动方式运行 odo create
命令,以引导您按照创建组件所需的步骤进行指导:
$ odo create
? Which devfile component type do you wish to create go
? What do you wish to name the new devfile component go-api
? What project do you want the devfile component to be created in default
Devfile Object Validation
✓ Checking devfile existence [164258ns]
✓ Creating a devfile component from registry: DefaultDevfileRegistry [246051ns]
Validation
✓ Validating if devfile name is correct [92255ns]
? Do you want to download a starter project Yes
Starter Project
✓ Downloading starter project go-starter from https://github.com/devfile-samples/devfile-stack-go.git [429ms]
Please use odo push
command to create the component with source deployed
系统将提示您选择组件类型、名称和项目。您还可以选择是否下载初学者项目。完成后,在工作目录中创建一个新的 devfile.yaml
文件。
要将这些资源部署到集群中,请运行 odo push
命令。
3.5.4. odo delete
odo delete
命令对删除由 odo
管理的资源很有用。
3.5.4.1. 删除组件
要删除 devfile 组件,请运行 odo delete
命令:
$ odo delete
如果组件已推送到集群,则组件将从集群中删除,以及其依赖存储、URL、secret 和其他资源。如果组件还没有推送,则命令退出并显示一个错误,表示它无法找到集群中的资源。
使用 -f
或 --force
标志以避免出现确认问题。
3.5.4.2. 取消部署 devfile Kubernetes 组件
要取消部署 devfile Kubernetes 组件(已使用 odo deploy
部署 ),请使用 --deploy
标志执行 odo delete
命令:
$ odo delete --deploy
使用 -f
或 --force
标志以避免出现确认问题。
3.5.4.3. 全部删除
要删除包括以下项目的所有工件,请运行带有 --all
标记的 odo delete
命令:
- devfile 组件
-
使用
odo deploy
命令部署的 devfile Kubernetes 组件 - devfile
- 本地配置
$ odo delete --all
3.5.4.4. 可用标记
-f
,--force
- 使用此标志以避免出现确认问题。
-w
,--wait
- 使用此标志等待组件删除和任何依赖项。取消部署时,此标志不起作用。
关于 Common Flags 的文档提供有关可用于命令的标记的更多信息。
3.5.5. odo deploy
odo
可用于部署组件的方式类似于如何使用 CI/CD 系统进行部署。首先,odo
构建容器镜像,然后部署部署组件所需的 Kubernetes 资源。
在运行命令 odo deploy
时,odo
在 devfile 中搜索 kind deploy
的默认命令,并执行这个命令。从 2.2.0 版本开始的 devfile 格式支持 kind 部署
。
deploy
命令通常是一个 复合 命令,由多个 应用命令组成 :
-
引用
镜像
组件(应用时)的命令将构建要部署的容器的镜像,然后将其推送到注册表。 - 引用 Kubernetes 组件的命令 (应用时)将在集群中创建 Kubernetes 资源。
使用以下示例 devfile.yaml
文件,会使用 目录中存在的 Dockerfile
来构建容器镜像。镜像被推送到其 registry,然后使用这个全新的构建镜像在集群中创建 Kubernetes Deployment 资源。
schemaVersion: 2.2.0 [...] variables: CONTAINER_IMAGE: quay.io/phmartin/myimage commands: - id: build-image apply: component: outerloop-build - id: deployk8s apply: component: outerloop-deploy - id: deploy composite: commands: - build-image - deployk8s group: kind: deploy isDefault: true components: - name: outerloop-build image: imageName: "{{CONTAINER_IMAGE}}" dockerfile: uri: ./Dockerfile buildContext: ${PROJECTS_ROOT} - name: outerloop-deploy kubernetes: inlined: | kind: Deployment apiVersion: apps/v1 metadata: name: my-component spec: replicas: 1 selector: matchLabels: app: node-app template: metadata: labels: app: node-app spec: containers: - name: main image: {{CONTAINER_IMAGE}}
3.5.6. odo link
odo link
命令帮助将 odo
组件链接到由 Operator 支持的服务或另一个 odo
组件。它通过使用 Service Binding Operator 来达到此目的。目前,odo
使用 Service Binding 库,而不是 Operator 本身来实现所需的功能。
3.5.6.1. 各种链接选项
odo
提供了不同的选项,用来将组件链接到 Operator 支持的服务或另一个 odo
组件。无论您将组件链接到服务还是另一个组件,都可以使用这些选项(或标志)。
3.5.6.1.1. 默认行为
默认情况下,odo link
命令在组件目录中创建一个名为 kubernetes/
的目录,并在其中存储有关服务和链接的信息(YAML 清单)。当使用 odo push
时,odo
会将这些清单与 Kubernetes 集群上的资源状态进行比较,并决定是否需要创建、修改或销毁资源以匹配用户指定的内容。
3.5.6.1.2. --inlined
标记
如果在 odo link
命令中指定 --inlined
标志,odo
会将 devfile.yaml
中的链接信息存储在组件目录中,而不是在 kubernetes/
目录下创建一个文件。--inlined
标记的行为与 odo link
和 odo service create
命令相似。如果您希望在一个 devfile.yaml
中存储的所有内容,则此标志很有用。您必须记住在每个 odo link
和 odo service create
命令中使用 --inlined
标志。
3.5.6.1.3. --map
标志
有时,除了默认可用的组件外,您可能还想向组件添加更多绑定信息。例如,如果您将组件链接到服务,并希望从服务的 spec 中绑定一些信息(用于规格的缩写),您可以使用 --map
标志。请注意,odo
不会针对所链接的服务或组件的 spec 进行任何验证。只有在您熟悉 Kubernetes YAML 清单时,才建议使用这个标志。
3.5.6.1.4. --bind-as-files
标志
对于目前讨论的所有链接选项,odo
会将绑定信息作为环境变量注入组件。如果您想要将这些信息挂载为文件,您可以使用 --bind-as-files
标志。这可让 odo
将绑定信息作为文件注入到组件的 Pod 中的 /bindings
位置。与环境变量方案相比,当您使用 --bind-as-files
时,文件会以键命名,并且这些键的值存储为这些文件的内容。
3.5.6.2. 示例
3.5.6.2.1. 默认 odo 链接
在以下示例中,后端组件使用默认的 odo link
命令与 PostgreSQL 服务相关联。对于后端组件,请确定您的组件和服务被推送到集群:
$ odo list
输出示例
APP NAME PROJECT TYPE STATE MANAGED BY ODO app backend myproject spring Pushed Yes
$ odo service list
输出示例
NAME MANAGED BY ODO STATE AGE PostgresCluster/hippo Yes (backend) Pushed 59m41s
现在,运行 odo link
将后端组件与 PostgreSQL 服务链接:
$ odo link PostgresCluster/hippo
输出示例
✓ Successfully created link between component "backend" and service "PostgresCluster/hippo" To apply the link, please use `odo push`
然后,运行 odo push
在 Kubernetes 集群中实际创建链接。
在 odo push
成功后,您会看到几个结果:
当您打开由 backend 组件部署的应用程序的 URL 时,它会显示数据库中的
todo
列表。例如,在odo url list
命令的输出中,会列出todos
的路径:$ odo url list
输出示例
Found the following URLs for component backend NAME STATE URL PORT SECURE KIND 8080-tcp Pushed http://8080-tcp.192.168.39.112.nip.io 8080 false ingress
URL 的正确路径为 http://8080-tcp.192.168.39.112.nip.io/api/v1/todos。确切的 URL 取决于您的设置。另请注意,除非添加一些,否则数据库中也没有
todos
,因此 URL 可能会只显示空的 JSON 对象。您可以查看与 Postgres 服务注入后端组件相关的绑定信息。默认情况下,此绑定信息作为环境变量注入。您可以在后端组件的目录中使用
odo describe
命令检查它:$ odo describe
输出示例:
Component Name: backend Type: spring Environment Variables: · PROJECTS_ROOT=/projects · PROJECT_SOURCE=/projects · DEBUG_PORT=5858 Storage: · m2 of size 3Gi mounted to /home/user/.m2 URLs: · http://8080-tcp.192.168.39.112.nip.io exposed via 8080 Linked Services: · PostgresCluster/hippo Environment Variables: · POSTGRESCLUSTER_PGBOUNCER-EMPTY · POSTGRESCLUSTER_PGBOUNCER.INI · POSTGRESCLUSTER_ROOT.CRT · POSTGRESCLUSTER_VERIFIER · POSTGRESCLUSTER_ID_ECDSA · POSTGRESCLUSTER_PGBOUNCER-VERIFIER · POSTGRESCLUSTER_TLS.CRT · POSTGRESCLUSTER_PGBOUNCER-URI · POSTGRESCLUSTER_PATRONI.CRT-COMBINED · POSTGRESCLUSTER_USER · pgImage · pgVersion · POSTGRESCLUSTER_CLUSTERIP · POSTGRESCLUSTER_HOST · POSTGRESCLUSTER_PGBACKREST_REPO.CONF · POSTGRESCLUSTER_PGBOUNCER-USERS.TXT · POSTGRESCLUSTER_SSH_CONFIG · POSTGRESCLUSTER_TLS.KEY · POSTGRESCLUSTER_CONFIG-HASH · POSTGRESCLUSTER_PASSWORD · POSTGRESCLUSTER_PATRONI.CA-ROOTS · POSTGRESCLUSTER_DBNAME · POSTGRESCLUSTER_PGBOUNCER-PASSWORD · POSTGRESCLUSTER_SSHD_CONFIG · POSTGRESCLUSTER_PGBOUNCER-FRONTEND.KEY · POSTGRESCLUSTER_PGBACKREST_INSTANCE.CONF · POSTGRESCLUSTER_PGBOUNCER-FRONTEND.CA-ROOTS · POSTGRESCLUSTER_PGBOUNCER-HOST · POSTGRESCLUSTER_PORT · POSTGRESCLUSTER_ROOT.KEY · POSTGRESCLUSTER_SSH_KNOWN_HOSTS · POSTGRESCLUSTER_URI · POSTGRESCLUSTER_PATRONI.YAML · POSTGRESCLUSTER_DNS.CRT · POSTGRESCLUSTER_DNS.KEY · POSTGRESCLUSTER_ID_ECDSA.PUB · POSTGRESCLUSTER_PGBOUNCER-FRONTEND.CRT · POSTGRESCLUSTER_PGBOUNCER-PORT · POSTGRESCLUSTER_CA.CRT
其中一些变量在后端组件的
src/main/resources/application.properties
文件中使用,以便 Java Spring Boot 应用程序可以连接到 PostgreSQL 数据库服务。最后,
odo
在后端组件的目录中创建一个名为kubernetes/
的目录,其中包含以下文件:$ ls kubernetes odo-service-backend-postgrescluster-hippo.yaml odo-service-hippo.yaml
这些文件包含两个资源的信息(YAML 清单):
-
odo-service-hippo.yaml
- 使用odo service create --from-file ../postgrescluster.yaml
命令创建的 Postgres 服务。 -
odo-service-backend-postgrescluster-hippo.yaml
- 使用odo link
命令创建的链接。
-
3.5.6.2.2. 使用带有 --inlined 标记的 odo 链接
在 odo link
命令中使用 --inlined
标志与没有标志的 odo link
命令的效果相同,在注入绑定信息中。但是,通常的差异是,在上述情况下,kubernetes/
目录下有两个清单文件,一个用于 Postgres 服务,另一个用于后端组件和该服务之间的链接。但是,当您传递 --inlined
标志时,odo
不会在 kubernetes/
目录下创建一个文件来存储 YAML 清单,而是将其内联存储在 devfile.yaml
文件中。
要查看此信息,请首先从 PostgreSQL 服务中取消链接组件:
$ odo unlink PostgresCluster/hippo
输出示例:
✓ Successfully unlinked component "backend" from service "PostgresCluster/hippo" To apply the changes, please use `odo push`
要在集群中取消链接它们,请运行 odo push
。现在,如果您检查 kubernetes/
目录,则只看到一个文件:
$ ls kubernetes odo-service-hippo.yaml
接下来,使用 --inlined
标志来创建链接:
$ odo link PostgresCluster/hippo --inlined
输出示例:
✓ Successfully created link between component "backend" and service "PostgresCluster/hippo" To apply the link, please use `odo push`
您需要运行 odo push
以便在集群中创建链接,如省略 --inlined
标志的步骤。odo
将配置存储在 devfile.yaml
中。在这个文件中,您可以看到类似如下的条目:
kubernetes: inlined: | apiVersion: binding.operators.coreos.com/v1alpha1 kind: ServiceBinding metadata: creationTimestamp: null name: backend-postgrescluster-hippo spec: application: group: apps name: backend-app resource: deployments version: v1 bindAsFiles: false detectBindingResources: true services: - group: postgres-operator.crunchydata.com id: hippo kind: PostgresCluster name: hippo version: v1beta1 status: secret: "" name: backend-postgrescluster-hippo
现在,如果您运行 odo unlink PostgresCluster/hippo
,odo
会首先从 devfile.yaml
中删除链接信息,然后后续 odo push
将从集群中删除链接。
3.5.6.2.3. 自定义绑定
odo link
接受标记 --map
,它可以将自定义绑定信息注入组件。此类绑定信息将从您链接到您的组件的资源清单中获取。例如,在后端组件和 PostgreSQL 服务的上下文中,您可以将 PostgreSQL 服务的清单 postgrescluster.yaml
文件中的信息注入后端组件。
如果 PostgresCluster
服务的名称是 hippo
(或者 odo service list
的输出,如果您的 PostgresCluster 服务被命名),当您需要将 YAML 定义中的 postgresVersion
值注入后端组件时,请运行以下命令:
$ odo link PostgresCluster/hippo --map pgVersion='{{ .hippo.spec.postgresVersion }}'
请注意,如果 Postgres 服务的名称与 hippo
不同,则必须在上述命令中指定在 pgVersion
的值代替 .hippo
的位置。
在链接操作后,照常运行 odo push
。在成功完成推送操作后,您可以从后端组件目录中运行以下命令,以验证是否正确注入自定义映射:
$ odo exec -- env | grep pgVersion
输出示例:
pgVersion=13
因为您可能希望注入多个自定义绑定信息,odo link
接受映射的多个键值对。唯一约束应将它们指定为 --map <key>=<value>
。例如,如果还想将 PostgreSQL 镜像信息与版本一起注入,您可以运行:
$ odo link PostgresCluster/hippo --map pgVersion='{{ .hippo.spec.postgresVersion }}' --map pgImage='{{ .hippo.spec.image }}'
然后运行 odo push
。要验证两个映射是否已正确注入的映射,请运行以下命令:
$ odo exec -- env | grep -e "pgVersion\|pgImage"
输出示例:
pgVersion=13 pgImage=registry.developers.crunchydata.com/crunchydata/crunchy-postgres-ha:centos8-13.4-0
3.5.6.2.3.1. 使用内联还是不使用?
您可以接受默认行为,odo link
为 kubernetes/
目录下的链接生成清单文件。另外,如果您想将所有内容存储在单个 devfile.yaml
文件中,您可以使用 --inlined
标志。
3.5.6.3. 将绑定作为文件绑定
odo link
提供的另一个有用标志是 --bind-as-files
。当传递此标记时,绑定信息不会作为环境变量注入组件的 Pod 中,而是作为文件系统挂载。
确保后端组件和 PostgreSQL 服务之间没有现有链接。您可以通过在后端组件的目录中运行 odo describe
来检查输出是否类似以下内容:
Linked Services: · PostgresCluster/hippo
使用以下命令从组件中取消链接该服务:
$ odo unlink PostgresCluster/hippo $ odo push
3.5.6.4. --bind-as-files 示例
3.5.6.4.1. 使用默认 odo 链接
默认情况下,odo
在 kubernetes/
目录下创建清单文件来存储链接信息。使用以下命令链接后端组件和 PostgreSQL 服务:
$ odo link PostgresCluster/hippo --bind-as-files $ odo push
odo describe
输出示例:
$ odo describe Component Name: backend Type: spring Environment Variables: · PROJECTS_ROOT=/projects · PROJECT_SOURCE=/projects · DEBUG_PORT=5858 · SERVICE_BINDING_ROOT=/bindings · SERVICE_BINDING_ROOT=/bindings Storage: · m2 of size 3Gi mounted to /home/user/.m2 URLs: · http://8080-tcp.192.168.39.112.nip.io exposed via 8080 Linked Services: · PostgresCluster/hippo Files: · /bindings/backend-postgrescluster-hippo/pgbackrest_instance.conf · /bindings/backend-postgrescluster-hippo/user · /bindings/backend-postgrescluster-hippo/ssh_known_hosts · /bindings/backend-postgrescluster-hippo/clusterIP · /bindings/backend-postgrescluster-hippo/password · /bindings/backend-postgrescluster-hippo/patroni.yaml · /bindings/backend-postgrescluster-hippo/pgbouncer-frontend.crt · /bindings/backend-postgrescluster-hippo/pgbouncer-host · /bindings/backend-postgrescluster-hippo/root.key · /bindings/backend-postgrescluster-hippo/pgbouncer-frontend.key · /bindings/backend-postgrescluster-hippo/pgbouncer.ini · /bindings/backend-postgrescluster-hippo/uri · /bindings/backend-postgrescluster-hippo/config-hash · /bindings/backend-postgrescluster-hippo/pgbouncer-empty · /bindings/backend-postgrescluster-hippo/port · /bindings/backend-postgrescluster-hippo/dns.crt · /bindings/backend-postgrescluster-hippo/pgbouncer-uri · /bindings/backend-postgrescluster-hippo/root.crt · /bindings/backend-postgrescluster-hippo/ssh_config · /bindings/backend-postgrescluster-hippo/dns.key · /bindings/backend-postgrescluster-hippo/host · /bindings/backend-postgrescluster-hippo/patroni.crt-combined · /bindings/backend-postgrescluster-hippo/pgbouncer-frontend.ca-roots · /bindings/backend-postgrescluster-hippo/tls.key · /bindings/backend-postgrescluster-hippo/verifier · /bindings/backend-postgrescluster-hippo/ca.crt · /bindings/backend-postgrescluster-hippo/dbname · /bindings/backend-postgrescluster-hippo/patroni.ca-roots · /bindings/backend-postgrescluster-hippo/pgbackrest_repo.conf · /bindings/backend-postgrescluster-hippo/pgbouncer-port · /bindings/backend-postgrescluster-hippo/pgbouncer-verifier · /bindings/backend-postgrescluster-hippo/id_ecdsa · /bindings/backend-postgrescluster-hippo/id_ecdsa.pub · /bindings/backend-postgrescluster-hippo/pgbouncer-password · /bindings/backend-postgrescluster-hippo/pgbouncer-users.txt · /bindings/backend-postgrescluster-hippo/sshd_config · /bindings/backend-postgrescluster-hippo/tls.crt
之前的 odo describe
输出中的 key=value
格式是一个环境变量,现在作为一个文件被挂载。使用 cat
命令查看其中的一些文件的内容:
示例命令:
$ odo exec -- cat /bindings/backend-postgrescluster-hippo/password
输出示例:
q({JC:jn^mm/Bw}eu+j.GX{k
示例命令:
$ odo exec -- cat /bindings/backend-postgrescluster-hippo/user
输出示例:
hippo
示例命令:
$ odo exec -- cat /bindings/backend-postgrescluster-hippo/clusterIP
输出示例:
10.101.78.56
3.5.6.4.2. 使用 --inlined
使用 --bind-as-files
和 --inlined
的结果与使用 odo link --inlined
类似。链接的清单存储在 devfile.yaml
中,而不是存储在 kubernetes/
目录中的单独文件中。除此之外,odo describe
输出的内容与之前的输出相同。
3.5.6.4.3. 自定义绑定
当在将后端组件与 PostgreSQL 服务链接时传递自定义绑定时,这些自定义绑定不会作为环境变量注入,而是作为文件挂载。例如:
$ odo link PostgresCluster/hippo --map pgVersion='{{ .hippo.spec.postgresVersion }}' --map pgImage='{{ .hippo.spec.image }}' --bind-as-files $ odo push
这些自定义绑定作为文件挂载,而不是作为环境变量注入。要验证是否可以正常工作,请运行以下命令:
示例命令:
$ odo exec -- cat /bindings/backend-postgrescluster-hippo/pgVersion
输出示例:
13
示例命令:
$ odo exec -- cat /bindings/backend-postgrescluster-hippo/pgImage
输出示例:
registry.developers.crunchydata.com/crunchydata/crunchy-postgres-ha:centos8-13.4-0
3.5.7. odo registry
odo
使用可移植 devfile 格式来描述组件。odo
可以连接到各种 devfile registry,以下载用于不同语言和框架的 devfile。
您可以连接到公开可用的 devfile registry,也可以安装自己的 安全 Registry。
您可以使用 odo registry
命令管理 odo
使用的 registry 来检索 devfile 信息。
3.5.7.1. 列出 registry
要列出 odo
当前联系的 registry,请运行以下命令:
$ odo registry list
输出示例:
NAME URL SECURE DefaultDevfileRegistry https://registry.devfile.io No
DefaultDevfileRegistry
是 odo 使用的默认 registry,它由 devfile.io 项目提供。
3.5.7.2. 添加 registry
要添加 registry,请运行以下命令:
$ odo registry add
输出示例:
$ odo registry add StageRegistry https://registry.stage.devfile.io New registry successfully added
如果要部署自己的安全 Registry,您可以指定个人访问令牌来使用 --token
标志向安全 registry 进行身份验证:
$ odo registry add MyRegistry https://myregistry.example.com --token <access_token> New registry successfully added
3.5.7.3. 删除 registry
要删除 registry,请运行以下命令:
$ odo registry delete
输出示例:
$ odo registry delete StageRegistry ? Are you sure you want to delete registry "StageRegistry" Yes Successfully deleted registry
使用 --force
(或 -f
)标记强制删除 registry,而无需确认。
3.5.7.4. 更新 registry
要更新已注册的 registry 的 URL 或已经注册的个人访问令牌,请运行以下命令:
$ odo registry update
输出示例:
$ odo registry update MyRegistry https://otherregistry.example.com --token <other_access_token> ? Are you sure you want to update registry "MyRegistry" Yes Successfully updated registry
使用 --force
(或 -f
)标记强制更新 registry,而无需确认。
3.5.8. odo service
odo
可使用 Operator 帮助部署服务。
可使用 odo catalog
命令找到可用的 Operator 和服务列表。
服务在 组件 上下文中创建,因此在部署服务前运行 odo create
命令。
服务通过以下两个步骤进行部署:
- 定义服务并将其定义存储在 devfile 中。
-
使用
odo push
命令将定义的服务部署到集群。
3.5.8.1. 创建新服务
要创建新服务,请运行以下命令:
$ odo service create
例如,要创建一个名为 my-redis-service
的 Redis 服务实例,您可以运行以下命令:
输出示例
$ odo catalog list services Services available through Operators NAME CRDs redis-operator.v0.8.0 RedisCluster, Redis $ odo service create redis-operator.v0.8.0/Redis my-redis-service Successfully added service to the configuration; do 'odo push' to create service on the cluster
此命令在 kubernetes/
目录中创建 Kubernetes 清单,其中包含服务的定义,此文件从 devfile.yaml
文件引用。
$ cat kubernetes/odo-service-my-redis-service.yaml
输出示例
apiVersion: redis.redis.opstreelabs.in/v1beta1 kind: Redis metadata: name: my-redis-service spec: kubernetesConfig: image: quay.io/opstree/redis:v6.2.5 imagePullPolicy: IfNotPresent resources: limits: cpu: 101m memory: 128Mi requests: cpu: 101m memory: 128Mi serviceType: ClusterIP redisExporter: enabled: false image: quay.io/opstree/redis-exporter:1.0 storage: volumeClaimTemplate: spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
示例命令
$ cat devfile.yaml
输出示例
[...] components: - kubernetes: uri: kubernetes/odo-service-my-redis-service.yaml name: my-redis-service [...]
请注意,所创建的实例的名称是可选的。如果您不提供名称,它将是服务的小写名称。例如,以下命令创建一个名为 redis
的 Redis 服务实例:
$ odo service create redis-operator.v0.8.0/Redis
3.5.8.1.1. 显示清单
默认情况下,在 kubernetes/
目录中创建一个新清单,从 devfile.yaml
文件引用。可以使用 --inlined
标志在 devfile.yaml
文件中内联清单:
$ odo service create redis-operator.v0.8.0/Redis my-redis-service --inlined Successfully added service to the configuration; do 'odo push' to create service on the cluster
示例命令
$ cat devfile.yaml
输出示例
[...] components: - kubernetes: inlined: | apiVersion: redis.redis.opstreelabs.in/v1beta1 kind: Redis metadata: name: my-redis-service spec: kubernetesConfig: image: quay.io/opstree/redis:v6.2.5 imagePullPolicy: IfNotPresent resources: limits: cpu: 101m memory: 128Mi requests: cpu: 101m memory: 128Mi serviceType: ClusterIP redisExporter: enabled: false image: quay.io/opstree/redis-exporter:1.0 storage: volumeClaimTemplate: spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi name: my-redis-service [...]
3.5.8.1.2. 配置服务
如果没有特定的自定义,将使用默认配置创建该服务。您可以使用命令行参数或文件来指定您自己的配置。
3.5.8.1.2.1. 使用命令行参数
使用 --parameters
(或 -p
)指定您自己的配置。
以下示例使用三个参数配置 Redis 服务:
$ odo service create redis-operator.v0.8.0/Redis my-redis-service \ -p kubernetesConfig.image=quay.io/opstree/redis:v6.2.5 \ -p kubernetesConfig.serviceType=ClusterIP \ -p redisExporter.image=quay.io/opstree/redis-exporter:1.0 Successfully added service to the configuration; do 'odo push' to create service on the cluster
示例命令
$ cat kubernetes/odo-service-my-redis-service.yaml
输出示例
apiVersion: redis.redis.opstreelabs.in/v1beta1 kind: Redis metadata: name: my-redis-service spec: kubernetesConfig: image: quay.io/opstree/redis:v6.2.5 serviceType: ClusterIP redisExporter: image: quay.io/opstree/redis-exporter:1.0
您可以使用 odo catalog describe service
命令获取特定服务的可能参数。
3.5.8.1.2.2. 使用文件
使用 YAML 清单来配置您自己的规格。在以下示例中,Red Hat Redis 服务配置了三个参数。
创建清单:
$ cat > my-redis.yaml <<EOF apiVersion: redis.redis.opstreelabs.in/v1beta1 kind: Redis metadata: name: my-redis-service spec: kubernetesConfig: image: quay.io/opstree/redis:v6.2.5 serviceType: ClusterIP redisExporter: image: quay.io/opstree/redis-exporter:1.0 EOF
在清单中创建服务:
$ odo service create --from-file my-redis.yaml Successfully added service to the configuration; do 'odo push' to create service on the cluster
3.5.8.2. 删除服务
要删除服务,请运行以下命令:
$ odo service delete
输出示例
$ odo service list NAME MANAGED BY ODO STATE AGE Redis/my-redis-service Yes (api) Deleted locally 5m39s
$ odo service delete Redis/my-redis-service ? Are you sure you want to delete Redis/my-redis-service Yes Service "Redis/my-redis-service" has been successfully deleted; do 'odo push' to delete service from the cluster
使用 --force
(或 -f
)标记强制删除该服务而无需确认。
3.5.8.3. 列出服务
要列出为组件创建的服务,请运行以下命令:
$ odo service list
输出示例
$ odo service list NAME MANAGED BY ODO STATE AGE Redis/my-redis-service-1 Yes (api) Not pushed Redis/my-redis-service-2 Yes (api) Pushed 52s Redis/my-redis-service-3 Yes (api) Deleted locally 1m22s
对于每个服务,STATE
表示该服务是否使用 odo push
命令推送到集群,或者该服务仍然在集群中运行,但使用 odo service delete
命令在本地移除 devfile。
3.5.8.4. 获取有关服务的信息
要获取服务的详情,如其类型、版本、名称和配置参数列表,请运行以下命令:
$ odo service describe
输出示例
$ odo service describe Redis/my-redis-service Version: redis.redis.opstreelabs.in/v1beta1 Kind: Redis Name: my-redis-service Parameters: NAME VALUE kubernetesConfig.image quay.io/opstree/redis:v6.2.5 kubernetesConfig.serviceType ClusterIP redisExporter.image quay.io/opstree/redis-exporter:1.0
3.5.9. odo storage
odo
允许用户管理附加到组件的存储卷。存储卷可以是使用 emptyDir
Kubernetes 卷或 持久性卷声明 (PVC)的临时卷。PVC 允许用户声明持久性卷(如 GCE PersistentDisk 或 iSCSI 卷),而无需了解特定的云环境的详情。持久性存储卷可用于在重启后保留数据,并重新构建组件。
3.5.9.1. 添加存储卷
要在集群中添加存储卷,请运行以下命令:
$ odo storage create
输出示例:
$ odo storage create store --path /data --size 1Gi ✓ Added storage store to nodejs-project-ufyy $ odo storage create tempdir --path /tmp --size 2Gi --ephemeral ✓ Added storage tempdir to nodejs-project-ufyy Please use `odo push` command to make the storage accessible to the component
在上例中,第一个存储卷已挂载到 /data
路径中,大小为 1Gi
,第二个卷已挂载到 /tmp
,并且是临时卷。
3.5.9.2. 列出存储卷
要检查组件当前使用的存储卷,请运行以下命令:
$ odo storage list
输出示例:
$ odo storage list The component 'nodejs-project-ufyy' has the following storage attached: NAME SIZE PATH STATE store 1Gi /data Not Pushed tempdir 2Gi /tmp Not Pushed
3.5.9.3. 删除存储卷
要删除存储卷,请运行以下命令:
$ odo storage delete
输出示例:
$ odo storage delete store -f Deleted storage store from nodejs-project-ufyy Please use `odo push` command to delete the storage from the cluster
在上例中,使用 -f
标志强制删除存储而无需询问用户权限。
3.5.9.4. 在特定容器中添加存储
如果您的 devfile 有多个容器,您可以使用 odo storage create
命令中的 --container
标志指定您要将存储附加到的容器。
以下示例是带有多个容器的 devfile 摘录:
components: - name: nodejs1 container: image: registry.access.redhat.com/ubi8/nodejs-12:1-36 memoryLimit: 1024Mi endpoints: - name: "3000-tcp" targetPort: 3000 mountSources: true - name: nodejs2 container: image: registry.access.redhat.com/ubi8/nodejs-12:1-36 memoryLimit: 1024Mi
在示例中,有两个容器nodejs1
和 nodejs2
。要将存储附加到 nodejs2
容器,请使用以下命令:
$ odo storage create --container
输出示例:
$ odo storage create store --path /data --size 1Gi --container nodejs2 ✓ Added storage store to nodejs-testing-xnfg Please use `odo push` command to make the storage accessible to the component
您可以使用 odo storage list
命令列出存储资源:
$ odo storage list
输出示例:
The component 'nodejs-testing-xnfg' has the following storage attached: NAME SIZE PATH CONTAINER STATE store 1Gi /data nodejs2 Not Pushed
3.5.10. common 标记
多数 odo
命令提供了以下标记:
命令 | 描述 |
---|---|
| 设置定义组件的上下文目录。 |
| 设置组件的项目。默认为本地配置中定义的项目。如果没有可用的,则集群上的当前项目。 |
| 设置组件的应用程序。默认为本地配置中定义的应用程序。如果没有可用的,则为 app。 |
|
如果不使用默认配置,请将 path 设置为 |
| 使用此标志查看日志。 |
| 使用这个标志代表命令不会提示用户进行确认。 |
| 设置详细程度。如需更多信息,请参阅 odo 中的日志记录。 |
| 输出命令的帮助信息。 |
某些命令可能不能使用一些标志。使用 --help
标志运行命令以获取所有可用标志的列表。
3.5.11. JSON 输出
输出内容的 odo
命令通常会接受 -o json
标志以 JSON 格式输出此内容,适用于其他程序来更轻松地解析此输出。
输出结构与 Kubernetes 资源类似,带有 kind
, apiVersion
, metadata
, spec
, 和status
字段。
List 命令会返回 List
资源,其中包含一个项列表的 items
(或类似)字段,每个项目也与 Kubernetes 资源类似。
Delete 命令会返回一个 Status
资源;请参阅 Status Kubernetes 资源。
其他命令会返回与命令关联的资源,如 Application
, Storage
, URL
等。
当前接受 -o json
标记的命令的完整列表是:
命令 | kind(版本) | 列表项目的 kind(版本) | 完整内容? |
---|---|---|---|
odo application describe | Application (odo.dev/v1alpha1) | 不适用 | 否 |
odo application list | List (odo.dev/v1alpha1) | Application (odo.dev/v1alpha1) | ? |
odo catalog list components | List (odo.dev/v1alpha1) | 缺少 | 是 |
odo catalog list services | List (odo.dev/v1alpha1) | ClusterServiceVersion (operators.coreos.com/v1alpha1) | ? |
odo catalog describe component | 缺少 | 不适用 | 是 |
odo catalog describe service | CRDDescription (odo.dev/v1alpha1) | 不适用 | 是 |
odo component create | Component (odo.dev/v1alpha1) | 不适用 | 是 |
odo component describe | Component (odo.dev/v1alpha1) | 不适用 | 是 |
odo component list | List (odo.dev/v1alpha1) | Component (odo.dev/v1alpha1) | 是 |
odo config view | DevfileConfiguration (odo.dev/v1alpha1) | 不适用 | 是 |
odo debug info | OdoDebugInfo (odo.dev/v1alpha1) | 不适用 | 是 |
odo env view | EnvInfo (odo.dev/v1alpha1) | 不适用 | 是 |
odo preference view | PreferenceList (odo.dev/v1alpha1) | 不适用 | 是 |
odo project create | Project (odo.dev/v1alpha1) | 不适用 | 是 |
odo project delete | Status (v1) | 不适用 | 是 |
odo project get | Project (odo.dev/v1alpha1) | 不适用 | 是 |
odo project list | List (odo.dev/v1alpha1) | Project (odo.dev/v1alpha1) | 是 |
odo registry list | List (odo.dev/v1alpha1) | 缺少 | 是 |
odo service create | 服务 | 不适用 | 是 |
odo service describe | 服务 | 不适用 | 是 |
odo service list | List (odo.dev/v1alpha1) | 服务 | 是 |
odo storage create | Storage (odo.dev/v1alpha1) | 不适用 | 是 |
odo storage delete | Status (v1) | 不适用 | 是 |
odo storage list | List (odo.dev/v1alpha1) | Storage (odo.dev/v1alpha1) | 是 |
odo url list | List (odo.dev/v1alpha1) | URL (odo.dev/v1alpha1) | 是 |