将红帽构建的 Quarkus 应用程序部署到 OpenShift Container Platform
向红帽构建的 Quarkus 文档提供反馈 复制链接链接已复制到粘贴板!
要报告错误或改进文档,请登录您的红帽 JIRA 帐户并提交问题。如果您没有红帽 JIRA 帐户,系统会提示您创建一个帐户。
流程
- 单击以下链接 来创建 ticket。
- 在 Summary 中输入有关此问题的简单描述。
- 在描述中提供问题或增强功能的详细描述。请包括有问题的文档 URL。
- 点 Submit 创建问题并将其路由到适当的文档团队。
Red Hat OpenShift Container Platform 是一个基于 Kubernetes 的平台,用于开发和运行容器化应用程序。Quarkus 提供了根据 sane 默认值和用户提供的配置自动生成 OpenShift Container Platform 资源的功能。
作为应用程序开发人员,您可以将红帽构建的 Quarkus 应用程序部署到 Red Hat OpenShift Container Platform。这个功能由 quarkus-openshift 扩展提供,它支持多个部署选项:
1.1. OpenShift Container Platform 构建策略概述 复制链接链接已复制到粘贴板!
- Docker 构建
- 此策略在本地或 CI 环境中构建 OpenShift Container Platform 集群以外的工件,并将其提供给 OpenShift Container Platform 构建系统以及 Dockerfile。工件包括 JAR 文件或原生可执行文件。容器在 OpenShift Container Platform 集群中构建,并作为镜像流提供。
OpenShift Container Platform Docker 构建策略是首选的构建策略,因为它支持为 JVM 为目标或编译到原生可执行文件的 Quarkus 应用程序。但是,为了与早期 Quarkus 版本兼容,默认的构建策略是 S2I。要选择 OpenShift Container Platform Docker 构建策略,请使用 quarkus.openshift.build-strategy 属性。
- Source to Image (S2I)
- 构建过程是在 OpenShift Container Platform 集群中执行的。红帽构建的 Quarkus 完全支持使用 S2I 将红帽构建的 Quarkus 部署为 JVM 应用程序。
- 二进制 S2I
- 此策略将 JAR 文件用作 S2I 构建流程的输入,这可加快应用程序的构建和部署速度。
1.1.1. Quarkus 支持的构建策略 复制链接链接已复制到粘贴板!
下表概述了红帽构建的 Quarkus 支持的构建策略:
| 构建策略 | 支持 Red Hat build of Quarkus 工具 | 支持 JVM | 支持原生 | 支持 JVM Serverless | 支持原生 Serverless |
|---|---|---|---|---|---|
| Docker 构建 | 是 | 是 | 是 | 是 | 是 |
| S2I Binary | 是 | 是 | 否 | 否 | 否 |
| 源 S2I | 否 | 是 | 否 | 否 | 否 |
1.2. 引导项目 复制链接链接已复制到粘贴板!
首先,您需要一个包含 OpenShift 扩展的新项目。然后,在构建和部署我们的应用之前,您必须登录 OpenShift 集群。
1.2.1. 添加 OpenShift 扩展 复制链接链接已复制到粘贴板!
要将应用程序构建并部署为在 OpenShift Container Platform 集群内运行的容器镜像,您必须将红帽构建的 Quarkus OpenShift 扩展 quarkus-openshift 作为依赖项添加到项目中。
此扩展还会生成 OpenShift Container Platform 资源,如镜像流、构建配置、部署和服务定义。如果应用程序包含 quarkus-smallrye-health 扩展,OpenShift Container Platform 可以访问健康端点,并验证应用程序的启动、存活度和就绪度。
从 Red Hat build of Quarkus 3.8 中,DeploymentConfig 对象在 OpenShift 中弃用,红帽构建的 Quarkus 中也会被弃用。Deployment 是 quarkus-openshift 扩展的默认和首选部署类型。如果您在使用 DeploymentConfig 之前重新部署了部署的应用程序,默认情况下,这些应用会使用 Deployment,但不会删除之前的 DeploymentConfig。这会导致部署新的和旧的应用程序,因此您必须手动删除旧的 DeploymentConfig。但是,如果您想要继续使用 DeploymentConfig,仍可通过将 quarkus.openshift.deployment-kind 明确设置为 DeploymentConfig 来完成此操作。
先决条件
- 您有一个 Quarkus Maven 项目。
流程
要在项目中添加
quarkus-openshift扩展,请使用以下方法之一:配置
pom.xml文件:pom.xml
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-openshift</artifactId> </dependency><dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-openshift</artifactId> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 OpenShift Container Platform CLI 中输入以下命令:
./mvnw quarkus:add-extension -Dextensions="io.quarkus:quarkus-openshift"
./mvnw quarkus:add-extension -Dextensions="io.quarkus:quarkus-openshift"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Quarkus CLI 中输入以下命令:
quarkus extension add 'quarkus-openshift'
quarkus extension add 'quarkus-openshift'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.3. 登录到 OpenShift Container Platform 集群 复制链接链接已复制到粘贴板!
您可以使用 OpenShift CLI (oc)登录到 OpenShift Container Platform 集群。如需更多信息,请参阅 OpenShift CLI 入门 :
示例:使用 OpenShift CLI 登录
oc login -u myUsername
oc login -u myUsername
- 1
- 系统将提示您输入必要的信息,如服务器 URL、密码等。
另外,您可以使用 API 令牌登录:
示例:使用带有 API 令牌的 OpenShift CLI 登录
oc login --token=myToken --server=myServerUrl
oc login --token=myToken --server=myServerUrl
您可以使用 OpenShift Web 控制台中的 Copy Login Command 链接来请求令牌。
最后,完全不需要使用 OpenShift CLI。相反,设置 quarkus.kubernetes-client.api-server-url config 属性,并分别通过 quarkus.kubernetes-client.token 或 quarkus.kubernetes-client.username 和 quarkus.kubernetes-client.password 进行身份验证:
使用 Quarkus CLI:
quarkus build quarkus deploy openshift
quarkus build quarkus deploy openshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Maven:
./mvnw install -Dquarkus.kubernetes-client.api-server-url=myServerUrl -Dquarkus.kubernetes-client.token=myToken
./mvnw install -Dquarkus.kubernetes-client.api-server-url=myServerUrl -Dquarkus.kubernetes-client.token=myTokenCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Gradle:
./gradlew build -Dquarkus.kubernetes-client.api-server-url=myServerUrl -Dquarkus.kubernetes-client.token=myToken
./gradlew build -Dquarkus.kubernetes-client.api-server-url=myServerUrl -Dquarkus.kubernetes-client.token=myTokenCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.3.1. 切换到所需的 OpenShift Container Platform 项目 复制链接链接已复制到粘贴板!
您可以使用 Red Hat OpenShift Container Platform CLI 创建应用程序并管理 OpenShift Container Platform 项目。使用提供的信息来创建 OpenShift Container Platform 项目或切换到现有项目。
先决条件
-
您可以访问 OpenShift Container Platform 集群以及安装的最新兼容
oc工具版本。
流程
登录到
oc工具:oc login
oc loginCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要显示当前项目空间,请输入以下命令:
oc project -q
oc project -qCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下步骤进入所需的 OpenShift Container Platform 项目:
如果项目已存在,切换到项目:
oc project <project_name>
oc project <project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果项目不存在,请创建一个新项目:
oc new-project <project_name>
oc new-project <project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4. 构建和部署 复制链接链接已复制到粘贴板!
您可以使用以下部署选项构建和部署:
1.4.1. 非 S2I 构建 复制链接链接已复制到粘贴板!
OpenShift 扩展配置为使用 container-image-s2i。但是,仍可以使用其他容器镜像扩展,例如:
当使用非 S2i 容器镜像扩展时,会创建指向外部 dockerImageRepository 的 ImageStream。镜像构建并推送到 registry,ImageStream 会填充 dockerImageRepository 中提供的标签。
选择用于构建镜像的扩展:
quarkus.container-image.builder=docker
quarkus.container-image.builder=docker
或者
quarkus.container-image.builder=jib
quarkus.container-image.builder=jib
1.5. 自定义 复制链接链接已复制到粘贴板!
所有可用的自定义选项都位于 OpenShift 配置选项 中。
以下小节中提供了一些示例:
1.5.1. 公开路由 复制链接链接已复制到粘贴板!
为 Quarkus 应用程序公开路由:
quarkus.openshift.route.expose=true
quarkus.openshift.route.expose=true
您不需要在 application.properties 文件中添加此属性。相反,您可以将它作为命令行参数传递:
./mvnw clean package -Dquarkus.openshift.route.expose=true
./mvnw clean package -Dquarkus.openshift.route.expose=true
这同样适用于以下列出的所有属性。
1.5.1.1. 保护 Route 资源 复制链接链接已复制到粘贴板!
为了保护传入连接,OpenShift 提供了几种 TLS 终止来提供认证。
有关如何保护路由的更多信息,请参阅 OpenShift Container Platform 文档。
以下示例演示了如何通过添加 "quarkus.openshift.route.tls" 属性来使用 passthrough 终止来配置安全路由:
quarkus.openshift.route.expose=true quarkus.openshift.route.target-port=https ## Route TLS configuration: quarkus.openshift.route.tls.termination=passthrough quarkus.openshift.route.tls.insecure-edge-termination-policy=None
quarkus.openshift.route.expose=true
quarkus.openshift.route.target-port=https
## Route TLS configuration:
quarkus.openshift.route.tls.termination=passthrough
quarkus.openshift.route.tls.insecure-edge-termination-policy=None
1.5.2. 标签 复制链接链接已复制到粘贴板!
在生成的资源中添加标签:
quarkus.openshift.labels.foo=bar
quarkus.openshift.labels.foo=bar
1.5.3. 注解 复制链接链接已复制到粘贴板!
在生成的资源中添加注解:
quarkus.openshift.annotations.foo=bar
quarkus.openshift.annotations.foo=bar
1.5.4. 环境变量 复制链接链接已复制到粘贴板!
OpenShift Container Platform 提供了多种方法来定义环境变量:
- 键/值对
- 从 Secret 或 ConfigMap 导入所有值
- 隔离由 Secret 或 ConfigMap 中的给定字段标识的单个值
- 从同一资源内的字段维护一个值
1.5.4.1. 来自键/值对的环境变量 复制链接链接已复制到粘贴板!
在生成的资源中将键/值对添加为环境变量:
quarkus.openshift.env.vars.my-env-var=foobar
quarkus.openshift.env.vars.my-env-var=foobar
以上命令将 MY_ENV_VAR=foobar 添加为环境变量。键 my-env-var 将转换为大写,短划线将替换为下划线,从而导致 MY_ENV_VAR。
1.5.4.2. 来自 Secret 的环境变量 复制链接链接已复制到粘贴板!
要将 Secret 的所有键/值对作为环境变量添加,请应用以下配置,将每个 Secret 分隔以逗号(、)来用作源:
quarkus.openshift.env.secrets=my-secret,my-other-secret
quarkus.openshift.env.secrets=my-secret,my-other-secret
这会在容器定义中生成以下内容:
以下代码将 my-secret Secret 的 keyName 字段标识的值提取到 foo 环境变量中:
quarkus.openshift.env.mapping.foo.from-secret=my-secret quarkus.openshift.env.mapping.foo.with-key=keyName
quarkus.openshift.env.mapping.foo.from-secret=my-secret
quarkus.openshift.env.mapping.foo.with-key=keyName
这样可在容器的 env 部分中生成以下内容:
1.5.4.3. ConfigMap 中的环境变量 复制链接链接已复制到粘贴板!
要添加来自 ConfigMap 的所有键/值对作为环境变量,请应用以下配置,将每个 ConfigMap 分隔以逗号(、)来用作源:
quarkus.openshift.env.configmaps=my-config-map,another-config-map
quarkus.openshift.env.configmaps=my-config-map,another-config-map
这会在容器定义中生成以下内容:
以下命令将 my-config-map ConfigMap 中的 keyName 字段标识的值提取到 foo 环境变量中:
quarkus.openshift.env.mapping.foo.from-configmap=my-configmap quarkus.openshift.env.mapping.foo.with-key=keyName
quarkus.openshift.env.mapping.foo.from-configmap=my-configmap
quarkus.openshift.env.mapping.foo.with-key=keyName
这样可在容器的 env 部分中生成以下内容:
1.5.4.4. 来自字段的环境变量 复制链接链接已复制到粘贴板!
您还可以通过指定要用作源的字段路径,来使用另一个字段中的值来添加新环境变量。例如:
quarkus.openshift.env.fields.foo=metadata.name
quarkus.openshift.env.fields.foo=metadata.name
1.5.4.5. 更改生成的部署资源 复制链接链接已复制到粘贴板!
除了生成 Deployment 资源外,您还可以选择获取 DeploymentConfig、StatefulSet、Job 或 CronJob 资源,而不是使用 application.properties :
quarkus.openshift.deployment-kind=StatefulSet
quarkus.openshift.deployment-kind=StatefulSet
1.5.4.5.1. 生成作业资源 复制链接链接已复制到粘贴板!
如果要生成 Job 资源,您需要使用 application.properties 添加以下属性:
quarkus.openshift.deployment-kind=Job
quarkus.openshift.deployment-kind=Job
如果您使用 Picocli 扩展,则默认生成 Job 资源。
您可以通过 quarkus.openshift.arguments 属性提供 Kubernetes 作业使用的参数。例如,添加属性 quarkus.openshift.arguments=A,B。
最后,每次在 OpenShift 中安装 Kubernetes 任务时都会启动 Kubernetes 作业。有关如何运行 Kubernetes 作业的更多信息,请参阅 运行示例作业。
您可以使用 quarkus.openshift.job.xxx 下的属性来配置 Kubernetes 任务配置的其余部分。如需更多信息,请参阅 quarkus.openshift.job.parallelism。
1.5.4.5.2. 生成 CronJob 资源 复制链接链接已复制到粘贴板!
如果要生成 CronJob 资源,您需要使用 application.properties 文件添加以下属性:
quarkus.openshift.deployment-kind=CronJob # Cron expression to run the job every hour quarkus.openshift.cron-job.schedule=0 * * * *
quarkus.openshift.deployment-kind=CronJob
# Cron expression to run the job every hour
quarkus.openshift.cron-job.schedule=0 * * * *
CronJob 资源需要 Cron 表达式来指定何时通过 quarkus.openshift.cron-job.schedule 属性启动作业。如果没有提供t,则构建会失败。
您可以使用 quarkus.openshift.cron-job.xxx 下的属性来配置 Kubernetes CronJob 配置的其余部分(如需更多信息,请参阅 quarkus.openshift.cron-job.parallelism)。
1.5.4.6. 验证 复制链接链接已复制到粘贴板!
例如,两个定义之间有冲突,例如,错误地分配一个值并指定变量来自字段,从而导致构建时抛出错误。您可以在将应用程序部署到集群中之前解决这个问题,其中可能很难诊断问题的来源。
同样,两个冗余定义(例如,从同一 secret 定义注入两次)不会造成问题,而是报告警告来告知您可能还没有重复该定义。
1.5.4.6.1. 后向兼容性 复制链接链接已复制到粘贴板!
以前的 OpenShift 扩展版本支持不同的语法来添加环境变量。旧语法仍被支持,但已弃用,建议您迁移到新语法。
| Old | New | ||
| 普通变量 |
|
| |
| from 字段 |
|
| |
|
所有来自 |
|
| |
|
所有来自 |
|
| |
|
从一个 |
|
| |
|
|
| ||
|
在一个 |
|
| |
|
|
|
If you redefine the same variable by using the new syntax while keeping the old syntax, only the new version is kept, and a warning will be issued to alert you of the problem. For example, if you define both `quarkus.openshift.env-vars.my-env-var.value=foobar` and `quarkus.openshift.env.vars.my-env-var=newValue`, the extension generates an environment variable `MY_ENV_VAR=newValue` and issues a warning.
If you redefine the same variable by using the new syntax while keeping the old syntax, only the new version is kept, and a warning will be issued to alert you of the problem.
For example, if you define both `quarkus.openshift.env-vars.my-env-var.value=foobar` and `quarkus.openshift.env.vars.my-env-var=newValue`, the extension generates an environment variable `MY_ENV_VAR=newValue` and issues a warning.
1.5.5. 挂载卷 复制链接链接已复制到粘贴板!
OpenShift 扩展允许您为应用配置卷和挂载。您可以使用简单配置挂载任何卷:
quarkus.openshift.mounts.my-volume.path=/where/to/mount
quarkus.openshift.mounts.my-volume.path=/where/to/mount
这将向 my pod 添加一个挂载,以便卷 my-volume 到路径 /where/to/mount。您可以配置卷本身,如以下部分所示:
1.5.5.1. Secret 卷 复制链接链接已复制到粘贴板!
quarkus.openshift.secret-volumes.my-volume.secret-name=my-secret
quarkus.openshift.secret-volumes.my-volume.secret-name=my-secret
1.5.5.2. ConfigMap 卷 复制链接链接已复制到粘贴板!
quarkus.openshift.config-map-volumes.my-volume.config-map-name=my-config-map
quarkus.openshift.config-map-volumes.my-volume.config-map-name=my-config-map
1.5.5.3. 持久性卷声明 (PVC) 复制链接链接已复制到粘贴板!
quarkus.openshift.pvc-volumes.my-pvc.claim-name=my-pvc
quarkus.openshift.pvc-volumes.my-pvc.claim-name=my-pvc
1.6. 配置参考 复制链接链接已复制到粘贴板!
在构建时修复的配置属性 - 所有其他配置属性在运行时可覆盖
| 配置属性 | 类型 | default |
|
从中加载环境变量的可选 Secret 名称列表。
环境变量: | 字符串列表 | |
|
从中加载环境变量的可选 ConfigMap 名称列表。
环境变量: | 字符串列表 | |
|
映射将环境变量名称与关联的字段引用它们获取其值。
环境变量: | Map<String,String> | |
|
环境变量值
环境变量: | string | |
|
要从中提取值的 Secret 的可选名称。与
环境变量: | string | |
|
要从中提取值的 ConfigMap 的可选名称。与
环境变量: | string | |
|
标识从中提取值的字段的键。
环境变量: | string |
必需
|
|
将环境变量添加到容器时使用的可选前缀。
环境变量: | string | |
|
将环境变量添加到容器时使用的可选前缀。
环境变量: | string | |
|
此组件所属的组名称。
环境变量: | string | |
|
应用程序的名称。这个值将用于命名 Kubernetes 资源,如: - Deployment - Service 等
环境变量: | string | |
|
应用程序的版本。
环境变量: | string | |
|
生成的资源应属于的命名空间。如果没有设置值,则不会将 'namespace' 字段添加到生成的清单的 'metadata' 部分。这反过来意味着,当清单应用到集群时,命名空间将从当前的 Kubernetes 上下文解析(请参阅 org-cluster-access-kubeconfig )。
环境变量: | string | |
|
要添加到所有资源的自定义标签。
环境变量: | Map<String,String> | |
|
要添加到所有资源的自定义注解。
环境变量: | Map<String,String> | |
|
为应用程序生成的服务类型
环境变量: |
|
|
|
是否在 Kubernetes 注解中添加构建时间戳,这对同一应用程序的连续构建清单有所不同,因此,确保 Kubernetes 将应用更新的资源。
环境变量: | 布尔值 |
|
|
如果为
环境变量: | 布尔值 |
|
|
如果为
环境变量: | 布尔值 |
|
|
工作目录。
环境变量: | string | |
|
命令。
环境变量: | 字符串列表 | |
|
参数。
环境变量: | 字符串列表 | |
|
服务帐户。
环境变量: | string | |
|
如果设置,它将根据配置更改容器名称。
环境变量: | string | |
|
端口号。指的是容器端口。
环境变量: | int | |
|
主机端口。
环境变量: | int | |
|
应用程序路径(引用 Web 应用程序路径)。
环境变量: | string |
|
|
协议。
环境变量: |
|
|
|
此端口应映射到的 nodePort。这只在将 serviceType 设置为 node-port 时才会生效。
环境变量: | int | |
|
如果启用,该端口将配置为使用 schema HTTPS。
环境变量: | 布尔值 |
|
|
镜像拉取(pull)策略。
环境变量: |
|
|
|
镜像 pull secret。
环境变量: | 字符串列表 | |
|
提供容器镜像用户名和密码时,启用生成镜像 pull secret。
环境变量: | 布尔值 |
|
|
配置
环境变量: | int | |
|
用于选择
环境变量: | string | |
|
用于探测的 http 路径。要达到此目的,还需要设置容器端口。 假设已设置了容器端口(如以上注释),如果没有设置 execAction 或 tcpSocketAction,则即使未设置任何路径(这将导致使用 root 路径),则会自动使用 HTTP 探测。如果使用 Smallrye Health,则会根据健康检查路径自动设置路径。
环境变量: | string | |
|
环境变量: | string | |
|
用于探测的命令。
环境变量: | string | |
|
用于探测的 tcp 套接字(格式是 host:port)。
环境变量: | string | |
|
用于探测的 gRPC 端口(格式是 port 或 port:service)。
环境变量: | string | |
|
如果没有提供 enabled 和
环境变量: | 布尔值 |
|
|
开始探测前等待的时间。
环境变量: |
| |
|
应调用该操作的期间。
环境变量: |
| |
|
等待每个操作的时间长度。
环境变量: |
| |
|
要使用的成功阈值。
环境变量: | int |
|
|
要使用的失败阈值。
环境变量: | int |
|
|
配置
环境变量: | int | |
|
用于选择
环境变量: | string | |
|
用于探测的 http 路径。要达到此目的,还需要设置容器端口。 假设已设置了容器端口(如以上注释),如果没有设置 execAction 或 tcpSocketAction,则即使未设置任何路径(这将导致使用 root 路径),则会自动使用 HTTP 探测。如果使用 Smallrye Health,则会根据健康检查路径自动设置路径。
环境变量: | string | |
|
环境变量: | string | |
|
用于探测的命令。
环境变量: | string | |
|
用于探测的 tcp 套接字(格式是 host:port)。
环境变量: | string | |
|
用于探测的 gRPC 端口(格式是 port 或 port:service)。
环境变量: | string | |
|
如果没有提供 enabled 和
环境变量: | 布尔值 |
|
|
开始探测前等待的时间。
环境变量: |
| |
|
应调用该操作的期间。
环境变量: |
| |
|
等待每个操作的时间长度。
环境变量: |
| |
|
要使用的成功阈值。
环境变量: | int |
|
|
要使用的失败阈值。
环境变量: | int |
|
|
配置
环境变量: | int | |
|
用于选择
环境变量: | string | |
|
用于探测的 http 路径。要达到此目的,还需要设置容器端口。 假设已设置了容器端口(如以上注释),如果没有设置 execAction 或 tcpSocketAction,则即使未设置任何路径(这将导致使用 root 路径),则会自动使用 HTTP 探测。如果使用 Smallrye Health,则会根据健康检查路径自动设置路径。
环境变量: | string | |
|
环境变量: | string | |
|
用于探测的命令。
环境变量: | string | |
|
用于探测的 tcp 套接字(格式是 host:port)。
环境变量: | string | |
|
用于探测的 gRPC 端口(格式是 port 或 port:service)。
环境变量: | string | |
|
如果没有提供 enabled 和
环境变量: | 布尔值 |
|
|
开始探测前等待的时间。
环境变量: |
| |
|
应调用该操作的期间。
环境变量: |
| |
|
等待每个操作的时间长度。
环境变量: |
| |
|
要使用的成功阈值。
环境变量: | int |
|
|
要使用的失败阈值。
环境变量: | int |
|
|
为 true (默认)时,发出一组注解来标识 prometheus 为指标提取的服务。 在使用带有 ServiceMonitor 的 Prometheus Operator 的配置中,可能不需要注解。
环境变量: | 布尔值 |
|
|
为 true (默认)时,发出一组注解来标识 prometheus 为指标提取的服务。 在使用带有 ServiceMonitor 的 Prometheus Operator 的配置中,可能不需要注解。
环境变量: | 布尔值 |
|
|
定义用于提取值的注解前缀,此值将用作其他注解名称默认值的基础。更改生成的注解的基础可以更轻松地定义重新标记规则,并避免意外的 knock-on 效果。默认值为
环境变量: | string |
|
|
定义用于指示应提取的服务的注释。默认情况下,
环境变量: | string | |
|
定义用于指示要提取的路径的注解。默认情况下,
环境变量: | string | |
|
定义用于指示要提取的端口的注解。默认情况下,
环境变量: | string | |
|
定义用于指示默认情况下用于提取的方案的注解,
环境变量: | string | |
|
要挂载的 volumeName 的名称。
环境变量: | string | |
|
挂载的路径。
环境变量: | string | |
|
应挂载容器 volumeName 的 volumeName 中的路径。
环境变量: | string | |
|
只读。
环境变量: | 布尔值 |
|
|
要挂载的 secret 的名称。
环境变量: | string |
必需
|
|
默认模式。在指定八进制数时,必须存在前导零。
环境变量: | string |
|
|
挂载文件的路径。
环境变量: | string |
必需
|
|
它必须是 0000 到 0777 之间的值。如果没有指定,则使用卷 defaultMode。
环境变量: | int |
|
|
选填
环境变量: | 布尔值 |
|
|
要挂载的 ConfigMap 的名称。
环境变量: | string |
必需
|
|
默认模式。在指定八进制数时,必须存在前导零。
环境变量: | string |
|
|
挂载文件的路径。
环境变量: | string |
必需
|
|
它必须是 0000 到 0777 之间的值。如果没有指定,则使用卷 defaultMode。
环境变量: | int |
|
|
选填
环境变量: | 布尔值 |
|
|
emptyDir 卷。
环境变量: | 字符串列表 | |
|
Git 存储库 URL。
环境变量: | string |
必需
|
|
要挂载的存储库的目录。
环境变量: | string | |
|
要使用的提交哈希。
环境变量: | string | |
|
要挂载的声明的名称。
环境变量: | string |
必需
|
|
默认模式。在指定八进制数时,必须存在前导零。
环境变量: | string |
|
|
选填
环境变量: | 布尔值 |
|
|
要挂载的磁盘名称。
环境变量: | string |
必需
|
|
分区。
环境变量: | int | |
|
文件系统类型。
环境变量: | string |
|
|
volumeName 是否是只读的。
环境变量: | 布尔值 |
|
|
共享名称。
环境变量: | string |
必需
|
|
机密名称。
环境变量: | string |
必需
|
|
volumeName 是否是只读的。
环境变量: | 布尔值 |
|
|
要挂载的磁盘名称。
环境变量: | string |
必需
|
|
如果 Kind 为 Managed,则 vhd blob 对象的 URI 或 Azure 管理的数据磁盘的 resourceID
环境变量: | string |
必需
|
|
磁盘类型。
环境变量: |
|
|
|
磁盘缓存模式。
环境变量: |
|
|
|
文件系统类型。
环境变量: | string |
|
|
volumeName 是否是只读的。
环境变量: | 布尔值 |
|
|
从中加载环境变量的可选 Secret 名称列表。
环境变量: | 字符串列表 | |
|
从中加载环境变量的可选 ConfigMap 名称列表。
环境变量: | 字符串列表 | |
|
映射将环境变量名称与关联的字段引用它们获取其值。
环境变量: | Map<String,String> | |
|
环境变量值
环境变量: | string | |
|
要从中提取值的 Secret 的可选名称。与
环境变量: | string | |
|
要从中提取值的 ConfigMap 的可选名称。与
环境变量: | string | |
|
标识从中提取值的字段的键。
环境变量: | string |
必需
|
|
将环境变量添加到容器时使用的可选前缀。
环境变量: | string | |
|
将环境变量添加到容器时使用的可选前缀。
环境变量: | string | |
|
容器镜像。
环境变量: | string | |
|
工作目录。
环境变量: | string | |
|
命令
环境变量: | 字符串列表 | |
|
这些参数
环境变量: | 字符串列表 | |
|
服务帐户。
环境变量: | string | |
|
要公开应用的主机。
环境变量: | string | |
|
端口号。指的是容器端口。
环境变量: | int | |
|
主机端口。
环境变量: | int | |
|
应用程序路径(引用 Web 应用程序路径)。
环境变量: | string |
|
|
协议。
环境变量: |
|
|
|
此端口应映射到的 nodePort。这只在将 serviceType 设置为 node-port 时才会生效。
环境变量: | int | |
|
如果启用,该端口将配置为使用 schema HTTPS。
环境变量: | 布尔值 |
|
|
镜像拉取(pull)策略。
环境变量: |
|
|
|
镜像 pull secret。
环境变量: | 字符串列表 | |
|
配置
环境变量: | int | |
|
用于选择
环境变量: | string | |
|
用于探测的 http 路径。要达到此目的,还需要设置容器端口。 假设已设置了容器端口(如以上注释),如果没有设置 execAction 或 tcpSocketAction,则即使未设置任何路径(这将导致使用 root 路径),则会自动使用 HTTP 探测。如果使用 Smallrye Health,则会根据健康检查路径自动设置路径。
环境变量: | string | |
|
环境变量: | string | |
|
用于探测的命令。
环境变量: | string | |
|
用于探测的 tcp 套接字(格式是 host:port)。
环境变量: | string | |
|
用于探测的 gRPC 端口(格式是 port 或 port:service)。
环境变量: | string | |
|
如果没有提供 enabled 和
环境变量: | 布尔值 |
|
|
开始探测前等待的时间。
环境变量: |
| |
|
应调用该操作的期间。
环境变量: |
| |
|
等待每个操作的时间长度。
环境变量: |
| |
|
要使用的成功阈值。
环境变量: | int |
|
|
要使用的失败阈值。
环境变量: | int |
|
|
配置
环境变量: | int | |
|
用于选择
环境变量: | string | |
|
用于探测的 http 路径。要达到此目的,还需要设置容器端口。 假设已设置了容器端口(如以上注释),如果没有设置 execAction 或 tcpSocketAction,则即使未设置任何路径(这将导致使用 root 路径),则会自动使用 HTTP 探测。如果使用 Smallrye Health,则会根据健康检查路径自动设置路径。
环境变量: | string | |
|
环境变量: | string | |
|
用于探测的命令。
环境变量: | string | |
|
用于探测的 tcp 套接字(格式是 host:port)。
环境变量: | string | |
|
用于探测的 gRPC 端口(格式是 port 或 port:service)。
环境变量: | string | |
|
如果没有提供 enabled 和
环境变量: | 布尔值 |
|
|
开始探测前等待的时间。
环境变量: |
| |
|
应调用该操作的期间。
环境变量: |
| |
|
等待每个操作的时间长度。
环境变量: |
| |
|
要使用的成功阈值。
环境变量: | int |
|
|
要使用的失败阈值。
环境变量: | int |
|
|
要挂载的 volumeName 的名称。
环境变量: | string | |
|
挂载的路径。
环境变量: | string | |
|
应挂载容器 volumeName 的 volumeName 中的路径。
环境变量: | string | |
|
只读。
环境变量: | 布尔值 |
|
|
CPU 要求
环境变量: | string | |
|
内存要求
环境变量: | string | |
|
CPU 要求
环境变量: | string | |
|
内存要求
环境变量: | string | |
|
从中加载环境变量的可选 Secret 名称列表。
环境变量: | 字符串列表 | |
|
从中加载环境变量的可选 ConfigMap 名称列表。
环境变量: | 字符串列表 | |
|
映射将环境变量名称与关联的字段引用它们获取其值。
环境变量: | Map<String,String> | |
|
环境变量值
环境变量: | string | |
|
要从中提取值的 Secret 的可选名称。与
环境变量: | string | |
|
要从中提取值的 ConfigMap 的可选名称。与
环境变量: | string | |
|
标识从中提取值的字段的键。
环境变量: | string |
必需
|
|
将环境变量添加到容器时使用的可选前缀。
环境变量: | string | |
|
将环境变量添加到容器时使用的可选前缀。
环境变量: | string | |
|
容器镜像。
环境变量: | string | |
|
工作目录。
环境变量: | string | |
|
命令
环境变量: | 字符串列表 | |
|
这些参数
环境变量: | 字符串列表 | |
|
服务帐户。
环境变量: | string | |
|
要公开应用的主机。
环境变量: | string | |
|
端口号。指的是容器端口。
环境变量: | int | |
|
主机端口。
环境变量: | int | |
|
应用程序路径(引用 Web 应用程序路径)。
环境变量: | string |
|
|
协议。
环境变量: |
|
|
|
此端口应映射到的 nodePort。这只在将 serviceType 设置为 node-port 时才会生效。
环境变量: | int | |
|
如果启用,该端口将配置为使用 schema HTTPS。
环境变量: | 布尔值 |
|
|
镜像拉取(pull)策略。
环境变量: |
|
|
|
镜像 pull secret。
环境变量: | 字符串列表 | |
|
配置
环境变量: | int | |
|
用于选择
环境变量: | string | |
|
用于探测的 http 路径。要达到此目的,还需要设置容器端口。 假设已设置了容器端口(如以上注释),如果没有设置 execAction 或 tcpSocketAction,则即使未设置任何路径(这将导致使用 root 路径),则会自动使用 HTTP 探测。如果使用 Smallrye Health,则会根据健康检查路径自动设置路径。
环境变量: | string | |
|
环境变量: | string | |
|
用于探测的命令。
环境变量: | string | |
|
用于探测的 tcp 套接字(格式是 host:port)。
环境变量: | string | |
|
用于探测的 gRPC 端口(格式是 port 或 port:service)。
环境变量: | string | |
|
如果没有提供 enabled 和
环境变量: | 布尔值 |
|
|
开始探测前等待的时间。
环境变量: |
| |
|
应调用该操作的期间。
环境变量: |
| |
|
等待每个操作的时间长度。
环境变量: |
| |
|
要使用的成功阈值。
环境变量: | int |
|
|
要使用的失败阈值。
环境变量: | int |
|
|
配置
环境变量: | int | |
|
用于选择
环境变量: | string | |
|
用于探测的 http 路径。要达到此目的,还需要设置容器端口。 假设已设置了容器端口(如以上注释),如果没有设置 execAction 或 tcpSocketAction,则即使未设置任何路径(这将导致使用 root 路径),则会自动使用 HTTP 探测。如果使用 Smallrye Health,则会根据健康检查路径自动设置路径。
环境变量: | string | |
|
环境变量: | string | |
|
用于探测的命令。
环境变量: | string | |
|
用于探测的 tcp 套接字(格式是 host:port)。
环境变量: | string | |
|
用于探测的 gRPC 端口(格式是 port 或 port:service)。
环境变量: | string | |
|
如果没有提供 enabled 和
环境变量: | 布尔值 |
|
|
开始探测前等待的时间。
环境变量: |
| |
|
应调用该操作的期间。
环境变量: |
| |
|
等待每个操作的时间长度。
环境变量: |
| |
|
要使用的成功阈值。
环境变量: | int |
|
|
要使用的失败阈值。
环境变量: | int |
|
|
要挂载的 volumeName 的名称。
环境变量: | string | |
|
挂载的路径。
环境变量: | string | |
|
应挂载容器 volumeName 的 volumeName 中的路径。
环境变量: | string | |
|
只读。
环境变量: | 布尔值 |
|
|
CPU 要求
环境变量: | string | |
|
内存要求
环境变量: | string | |
|
CPU 要求
环境变量: | string | |
|
内存要求
环境变量: | string | |
|
ip 地址。
环境变量: | string | |
|
要解析到 ip 的主机名。
环境变量: | 字符串列表 | |
|
nodeSelector 的键。
环境变量: | string |
必需
|
|
nodeSelector 的值。
环境变量: | string |
必需
|
|
CPU 要求
环境变量: | string | |
|
内存要求
环境变量: | string | |
|
CPU 要求
环境变量: | string | |
|
内存要求
环境变量: | string | |
|
如果设置,该机密将挂载到应用容器,其内容将用于应用配置。
环境变量: | string | |
|
如果设置,配置映射将挂载到应用程序容器,其内容将用于应用程序配置。
环境变量: | string | |
|
角色的名称。
环境变量: | string | |
|
角色的命名空间。
环境变量: | string | |
|
要添加到角色资源的标签。
环境变量: | Map<String,String> | |
|
策略规则的 API 组。
环境变量: | 字符串列表 | |
|
策略规则的非资源 URL。
环境变量: | 字符串列表 | |
|
策略规则的资源名称。
环境变量: | 字符串列表 | |
|
策略规则的资源。
环境变量: | 字符串列表 | |
|
策略规则的操作动词。
环境变量: | 字符串列表 | |
|
集群角色的名称。
环境变量: | string | |
|
要添加到 ClusterRole 资源的标签。
环境变量: | Map<String,String> | |
|
策略规则的 API 组。
环境变量: | 字符串列表 | |
|
策略规则的非资源 URL。
环境变量: | 字符串列表 | |
|
策略规则的资源名称。
环境变量: | 字符串列表 | |
|
策略规则的资源。
环境变量: | 字符串列表 | |
|
策略规则的操作动词。
环境变量: | 字符串列表 | |
|
服务帐户的名称。
环境变量: | string | |
|
服务帐户的命名空间。
环境变量: | string | |
|
服务帐户的标签。
环境变量: | Map<String,String> | |
|
如果为 true,则此服务帐户将在生成的 Deployment 资源中使用。
环境变量: | 布尔值 | |
|
要生成的 RoleBinding 资源的名称。如果没有提供,它将使用应用名称以及角色 ref 名称。
环境变量: | string | |
|
要添加到 RoleBinding 资源的标签。
环境变量: | Map<String,String> | |
|
由生成的 Role Binding 资源中的 RoleRef 元素使用的 Role 资源的名称。默认情况下,它的"查看"角色名称。
环境变量: | string | |
|
如果
环境变量: | 布尔值 | |
|
由生成的 Role Binding 资源中的 Subject 元素使用的 "name" 资源。
环境变量: | string | |
|
由生成的 Role Binding 资源中的 Subject 元素使用的 "kind" 资源。默认情况下,它使用 "ServiceAccount" 类型。
环境变量: | string |
|
|
与 "kind" 属性匹配的 "apiGroup" 资源。默认情况下,它将为空。
环境变量: | string | |
|
由生成的 Role Binding 资源中的 Subject 元素使用的 "namespace" 资源。默认情况下,它将使用与生成的资源中提供的相同。
环境变量: | string | |
|
要生成的 ClusterRoleBinding 资源的名称。如果没有提供,它将使用应用名称以及角色 ref 名称。
环境变量: | string | |
|
要添加到 RoleBinding 资源的标签。
环境变量: | Map<String,String> | |
|
由生成的 ClusterRoleBinding 资源中的 RoleRef 元素使用的 ClusterRole 资源的名称。
环境变量: | string |
必需
|
|
由生成的 Role Binding 资源中的 Subject 元素使用的 "name" 资源。
环境变量: | string | |
|
由生成的 Role Binding 资源中的 Subject 元素使用的 "kind" 资源。默认情况下,它使用 "ServiceAccount" 类型。
环境变量: | string |
|
|
与 "kind" 属性匹配的 "apiGroup" 资源。默认情况下,它将为空。
环境变量: | string | |
|
由生成的 Role Binding 资源中的 Subject 元素使用的 "namespace" 资源。默认情况下,它将使用与生成的资源中提供的相同。
环境变量: | string | |
|
应用到容器的 SELinux 级别标签。
环境变量: | string | |
|
应用到容器的 SELinux 角色标签。
环境变量: | string | |
|
应用到容器的 SELinux 类型标签。
环境变量: | string | |
|
应用到容器的 SELinux 用户标签。
环境变量: | string | |
|
要使用的 GMSA 凭证规格的名称。
环境变量: | string | |
|
GMSACredentialSpec 是 GMSA 准入 Webhook (windows-gsma)内联由 GMSACredentialSpecName 标识的 GMSA 凭证规格的内容。
环境变量: | string | |
|
Windows 中的 UserName,以运行容器进程的入口点。
环境变量: | string | |
|
HostProcess 确定容器是否应作为"主机进程"容器运行。
环境变量: | 布尔值 | |
|
用于运行容器进程的入口点的 UID。
环境变量: | long | |
|
用于运行容器进程的入口点的 GID。
环境变量: | long | |
|
表示容器必须以非 root 用户身份运行。
环境变量: | 布尔值 | |
|
除了容器的主 GID 外,还应用于每个进程的第一个进程的组列表。如果未指定,则不会将任何组添加到任何容器中。
环境变量: | 长列表 | |
|
适用于 pod 中所有容器的特殊补充组。
环境变量: | long | |
|
sysctl 包含用于 pod 的命名空间 sysctl 列表。
环境变量: | Map<String,String> | |
|
它包含在挂载卷时将 fsGroup 应用到卷的策略。值 :OnRootMismatch, Always
环境变量: | on-root-mismatch :它表示,只有根目录的权限和所有权与卷中预期权限不匹配时,才会更改卷的所有权和权限。 Always :它表示在 Pod 中挂载卷时,应该始终更改卷的所有权和权限。这个默认行为。 | |
|
用于控制是否生成的 kubernetes 资源中是否包含非idempotent 字段,以提高 git-ops 兼容性。
环境变量: | 布尔值 |
|
|
vcs-uri 注解是否应添加到生成的配置中。
环境变量: | 布尔值 |
|
|
vcs-uri 注解的可选覆盖。
环境变量: | string | |
|
要使用的 OpenShift 类别/版本。旧版本 OpenShift 在它们支持的标签和字段中具有细微差别。此选项允许用户让其清单自动与所使用的 OpenShift"flavor"保持一致。
环境变量: |
|
|
|
要使用的部署资源的种类。支持的值有 'Deployment', 'StatefulSet', 'Job', 'CronJob' 和 'DeploymentConfig'。如果
环境变量: |
Deployment , | |
|
所需的 pod 数量
环境变量: | int |
|
|
当 serviceType 设置为 nodePort 时,要设置的 nodePort
环境变量: | int | |
|
如果为 true,则会公开该服务
环境变量: | 布尔值 |
|
|
要公开应用程序的主机
环境变量: | string | |
|
名为 port 的目标。如果没有提供,它将从 Service 资源端口中分离。选项为:"http"和"https"。
环境变量: | string |
|
|
要添加到组成(路由或入口)资源的自定义注解
环境变量: | Map<String,String> | |
|
要添加到组成(路由或入口)资源的自定义标签
环境变量: | Map<String,String> | |
|
证书颁发机构证书内容。
环境变量: | string | |
|
证书内容。
环境变量: | string | |
|
最终目的地的 ca 证书的内容。
环境变量: | string | |
|
到路由不安全连接所需的行为。
环境变量: | string | |
|
密钥文件内容。
环境变量: | string | |
|
终止类型。
环境变量: | string | |
|
指定作业应在任意给定时间运行的最大 pod 数量。
环境变量: | int | |
|
指定作业应该运行成功完成的 pod 数量。
环境变量: | int | |
|
CompletionMode 指定如何跟踪 Pod 完成。
环境变量: |
|
|
|
指定在标记此作业失败前重试次数。
环境变量: | int | |
|
指定与 startTime 相关的持续时间(以秒为单位),作业可能会在系统尝试终止它前持续激活;值必须是正整数。
环境变量: | long | |
|
限制已完成执行的作业的生命周期( Complete 或 Failed)。如果设置了此字段,ttlSecondsAfterFinished 在作业完成后,它可以被自动删除。
环境变量: | int | |
|
suspend 指定作业控制器是否应该创建 Pod。
环境变量: | 布尔值 |
|
|
作业容器失败时重启策略。
环境变量: |
|
|
|
Cron 格式的调度,请参阅 Cron。
环境变量: | string | |
|
作业调度的时区。默认值为 kube-controller-manager 的本地时间。
环境变量: | string | |
|
concurrencyPolicy 描述了处理作业的方式。
环境变量: |
|
|
|
如果因任何原因而错过了计划时间,则启动作业的截止时间(以秒为单位)。错过的作业执行计为失败的作业。
环境变量: | long | |
|
要保留的失败完成作业数量。默认值为 1。
环境变量: | int | |
|
要保留的成功完成作业数量。默认值为 3。
环境变量: | int | |
|
指定作业应在任意给定时间运行的最大 pod 数量。
环境变量: | int | |
|
指定作业应该运行成功完成的 pod 数量。
环境变量: | int | |
|
CompletionMode 指定如何跟踪 Pod 完成。
环境变量: |
|
|
|
指定在标记此作业失败前重试次数。
环境变量: | int | |
|
指定与 startTime 相关的持续时间(以秒为单位),作业可能会在系统尝试终止它前持续激活;值必须是正整数。
环境变量: | long | |
|
限制已完成执行的作业的生命周期( Complete 或 Failed)。如果设置了此字段,ttlSecondsAfterFinished 在作业完成后,它可以被自动删除。
环境变量: | int | |
|
suspend 指定作业控制器是否应该创建 Pod。
环境变量: | 布尔值 |
|
|
作业容器失败时重启策略。
环境变量: |
|
|
|
如果为 true,则会启用 pod 中的 debug 模式。
环境变量: | 布尔值 |
|
|
要使用的传输。
环境变量: | string |
|
|
如果启用,则表示 JVM 将在执行 main 类之前等待调试器连接。如果为 false,则 JVM 将立即执行主类,同时侦听调试器连接。
环境变量: | string |
|
|
它指定调试套接字要侦听的地址。
环境变量: | int |
|
|
如果为 true,则会生成 init 任务。否则,将跳过 init 任务资源生成。
环境变量: | 布尔值 |
|
|
init 容器使用的 init 任务镜像。
环境变量: | string |
|
|
镜像拉取(pull)策略。
环境变量: |
|
|
|
如果为 true,则会生成 init 任务。否则,将跳过 init 任务资源生成。
环境变量: | 布尔值 |
|
|
init 容器使用的 init 任务镜像。
环境变量: | string |
|
|
镜像拉取(pull)策略。
环境变量: |
|
|
|
如果设置为 true,Quarkus 会尝试将应用程序部署到目标 Kubernetes 集群
环境变量: | 布尔值 |
|
|
如果启用了部署,它将遵循此策略将资源更新至目标 Kubernetes 集群。
环境变量: |
|
|
要写入持续时间值,请使用标准 java.time.Duration 格式。如需更多信息,请参阅 Duration#parse ()Java API 文档。
您还可以使用简化的格式,从数字开始:
- 如果值只是一个数字,它代表时间(以秒为单位)。
-
如果值为数字,后跟
ms,代表时间(毫秒)。
在其他情况下,简化的格式被转换为 java.time.Duration 格式以进行解析:
-
如果该值是一个数字,后跟
h、m或s,则前缀为PT。 -
如果值为数字,后跟
d,则会以P为前缀。
作为应用程序开发人员,您可以在一个步骤中构建红帽构建的 Quarkus 应用程序并将其部署到 OpenShift Container Platform。完成以下任一命令:
使用 Quarkus CLI:
quarkus build quarkus deploy openshift
quarkus build quarkus deploy openshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Maven:
./mvnw install -Dquarkus.openshift.deploy=true
./mvnw install -Dquarkus.openshift.deploy=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Gradle:
./gradlew build -Dquarkus.openshift.deploy=true
./gradlew build -Dquarkus.openshift.deploy=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
通过这些命令,您可以在本地构建应用程序,触发容器镜像构建,并自动应用生成的 OpenShift Container Platform 资源。
生成的资源使用 Kubernetes 部署,但仍利用特定于 OpenShift 的资源,如 Route、BuildConfig 等。
2.1. 先决条件 复制链接链接已复制到粘贴板!
- 已安装 OpenJDK 17 或更高版本。
-
您已将
JAVA_HOME环境变量设置为 Java SDK 的位置。 -
您可以访问 OpenShift Container Platform 集群以及安装了
ocCLI 工具的最新兼容版本。 - 您在正确的 OpenShift 项目命名空间中工作。
要运行此部署,不需要在 Red Hat build of Quarkus 项目中包含 quarkus-openshift 扩展。
2.2. 流程 复制链接链接已复制到粘贴板!
- 在单个步骤中触发构建和部署:
使用 Quarkus CLI:
quarkus build quarkus deploy openshift
quarkus build quarkus deploy openshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Maven:
./mvnw install -Dquarkus.openshift.deploy=true
./mvnw install -Dquarkus.openshift.deploy=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Gradle:
./gradlew build -Dquarkus.openshift.deploy=true
./gradlew build -Dquarkus.openshift.deploy=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果要立即测试应用程序,请将 quarkus.openshift.route.expose 配置属性设置为 true 以自动公开服务。
例如,在上述命令中 add -Dquarkus.openshift.route.expose=true。如需更多信息,请参阅公开路由。
从 OpenShift Container Platform 4.14 开始,DeploymentConfig 对象已弃用。Deployment 现在是 quarkus-openshift 扩展的默认和首选部署类型。
由于这个变化,请考虑以下几点:
-
如果您使用
DeploymentConfig重新部署之前部署的应用程序,则这些应用将使用Deployment,但不会删除之前的DeploymentConfig。这会导致部署新的和旧的应用程序,因此您必须手动删除旧的DeploymentConfig。如果要继续使用DeploymentConfig,仍可通过将quarkus.openshift.deployment-kind明确设置为DeploymentConfig来完成此操作。 -
部署是一个 Kubernetes 资源,而不是 OpenShift 特定的资源,因此它无法利用ImageStream资源,就像DeploymentConfig一样。因此,镜像引用必须包含托管镜像的容器镜像 registry。
有关弃用的更多信息,如何设置和使用自动回滚、触发器、生命周期 hook 和自定义策略,请参阅红帽知识库文章 DeploymentConfig API 在 Red Hat OpenShift Container Platform 4.14 中已被弃用。
2.3. 验证 复制链接链接已复制到粘贴板!
验证镜像流和服务资源是否已创建,并使用 OpenShift Container Platform Web 控制台部署应用程序。
quarkus.container-image.group=<project/namespace name>
quarkus.container-image.group=<project/namespace name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,运行以下 OpenShift Container Platform 命令行界面(CLI)命令:
oc get is oc get pods oc get svc
oc get is1 oc get pods2 oc get svc3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要获取应用程序的 pod 的日志输出,请输入以下命令:
oc logs -f <pod_name>
oc logs -f <pod_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,该服务不会公开给外部世界。因此,如果您在构建应用程序前设置
quarkus.openshift.route.expose=true属性来自动公开创建的服务,您可以手动公开服务。oc expose svc/openshift-quickstart oc get routes curl http://<route>/hello
oc expose svc/openshift-quickstart1 oc get routes2 curl http://<route>/hello3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4. 参考 复制链接链接已复制到粘贴板!
作为应用程序开发人员,您可以使用 Docker 构建策略作为部署选项将应用程序部署到 OpenShift Container Platform。
此 stategy 在 OpenShift Container Platform 集群内部或 CI 环境中构建工件,并将其提供给 OpenShift Container Platform 构建系统以及 Dockerfile。工件包括 JAR 文件或原生可执行文件。OpenShift Container Platform 集群构建容器,并将其作为镜像流提供。
此功能由 quarkus-openshift 扩展提供。如果要使用自定义 Dockerfile,请将该文件添加到 src/main/docker 目录或模块内的任何位置。另外,使用 quarkus.openshift.jvm-dockerfile 属性来设置 Dockerfile 的路径。
3.1. 先决条件 复制链接链接已复制到粘贴板!
- 已安装 OpenJDK 17 或 21。
-
您已将
JAVA_HOME环境变量设置为 Java SDK 的位置。 - 已安装 Apache Maven 3.8.6 或更高版本。
-
您有一个包含
quarkus-openshift扩展的 Quarkus 项目。 -
您可以访问 OpenShift Container Platform 集群,以及安装
ocCLI 工具的最新兼容版本。 - 您在正确的 OpenShift 项目命名空间中工作。
3.2. 流程 复制链接链接已复制到粘贴板!
在
application.properties配置文件中设置 Docker 构建策略:quarkus.openshift.build-strategy=docker
quarkus.openshift.build-strategy=dockerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:根据您的环境在
application.properties文件中设置以下属性:如果您使用不受信任的证书,请为
KubernetesClient启用证书信任:quarkus.kubernetes-client.trust-certs=true
quarkus.kubernetes-client.trust-certs=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要公开服务并创建 OpenShift Container Platform 路由,请设置以下属性:
quarkus.openshift.route.expose=true
quarkus.openshift.route.expose=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用自定义 Dockerfile 而不是预生成的 Dockerfile,请将路径设置为 Dockerfile:
quarkus.openshift.jvm-dockerfile=<path_to_your_dockerfile>
quarkus.openshift.jvm-dockerfile=<path_to_your_dockerfile>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,指定名为
Dockerfile.custom-jvm的自定义 Dockerfile:quarkus.openshift.jvm-dockerfile=src/main/resources/Dockerfile.custom-jvm
quarkus.openshift.jvm-dockerfile=src/main/resources/Dockerfile.custom-jvmCopy to Clipboard Copied! Toggle word wrap Toggle overflow
将应用程序打包并部署到当前的 OpenShift Container Platform 项目中:
./mvnw clean package -Dquarkus.openshift.deploy=true
./mvnw clean package -Dquarkus.openshift.deploy=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3. 验证 复制链接链接已复制到粘贴板!
以下验证步骤使用 openshift-helloworld 示例应用程序。
显示与当前 OpenShift 项目关联的 pod 列表:
oc get pods
oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow NAME READY STATUS RESTARTS AGE openshift-helloworld-1-build 0/1 Completed 0 11m openshift-helloworld-1-deploy 0/1 Completed 0 10m openshift-helloworld-1-gzzrx 1/1 Running 0 10m
NAME READY STATUS RESTARTS AGE openshift-helloworld-1-build 0/1 Completed 0 11m openshift-helloworld-1-deploy 0/1 Completed 0 10m openshift-helloworld-1-gzzrx 1/1 Running 0 10mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要获取应用程序的 pod 的日志输出,请使用
oc logs -f命令及其名称。以下示例使用openshift-helloworld-1-gzzrxpod 名称,它与以应用程序名称作为前缀的最新 pod 对应:oc logs -f openshift-helloworld-1-gzzrx
oc logs -f openshift-helloworld-1-gzzrxCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取服务列表:
oc get svc
oc get svcCopy to Clipboard Copied! Toggle word wrap Toggle overflow NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE openshift-helloworld ClusterIP 172.30.64.57 <none> 80/TCP 14m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE openshift-helloworld ClusterIP 172.30.64.57 <none> 80/TCP 14mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取用于测试应用的 URL。为此,请在构建应用程序前设置
application.properties文件中的quarkus.openshift.route.expose=true属性来确保您已公开 OpenShift Container Platform 路由。oc get routes
oc get routesCopy to Clipboard Copied! Toggle word wrap Toggle overflow NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD openshift-helloworld openshift-helloworld-username-dev.apps.sandbox-m2.ll9k.p1.openshiftapps.com openshift-helloworld http None
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD openshift-helloworld openshift-helloworld-username-dev.apps.sandbox-m2.ll9k.p1.openshiftapps.com openshift-helloworld http NoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意请注意,路由现在侦听端口 80,不再在端口 8080 上。
您可以使用
curl和oc get routes的完整 URL 输出(即 "\http://openshift-helloworld-username-dev.apps.sandbox-m2.ll9k.p1.openshiftapps.com")来测试本示例中演示的应用或终端。例如:
curl http://openshift-helloworld-username-dev.apps.sandbox-m2.ll9k.p1.openshiftapps.com。
3.4. 参考 复制链接链接已复制到粘贴板!
您可以使用 Source-to-Image (S2I)方法将红帽构建的 Quarkus 应用程序部署到 Red Hat OpenShift Container Platform。使用 S2I 时,您必须通过 Git 存储库向构建容器提供源代码,或者在构建时上传源代码。
部署过程会根据红帽构建的 Quarkus 应用程序使用的 Java 版本而有所不同。
您可以使用 S2I 方法将运行 Java 17 的 Red Hat build of Quarkus 应用程序部署到 OpenShift Container Platform。
4.1.1. 先决条件 复制链接链接已复制到粘贴板!
- 您有一个使用 Java 17 构建的 Quarkus 应用程序。
-
可选: 您有一个 Quarkus 项目,其中包含
quarkus-openshift扩展。 - 您在正确的 OpenShift 项目命名空间中工作。
- 您的项目托管在 Git 存储库中。
4.1.2. 流程 复制链接链接已复制到粘贴板!
打开
pom.xml文件,并将 Java 版本设置为 17:<maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target>
<maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令打包您的 Java 17 应用程序:
./mvnw clean package
./mvnw clean packageCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
在与
pom.xml文件相同的级别上创建名为.s2i的目录。 在
.s2i目录中创建一个名为environment的文件并添加以下内容:MAVEN_S2I_ARTIFACT_DIRS=target/quarkus-app S2I_SOURCE_DEPLOYMENTS_FILTER=app lib quarkus quarkus-run.jar JAVA_OPTIONS=-Dquarkus.http.host=0.0.0.0 AB_JOLOKIA_OFF=true JAVA_APP_JAR=/deployments/quarkus-run.jar
MAVEN_S2I_ARTIFACT_DIRS=target/quarkus-app S2I_SOURCE_DEPLOYMENTS_FILTER=app lib quarkus quarkus-run.jar JAVA_OPTIONS=-Dquarkus.http.host=0.0.0.0 AB_JOLOKIA_OFF=true JAVA_APP_JAR=/deployments/quarkus-run.jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 提交您的更改并推送到远程 Git 存储库。
输入以下命令导入支持的 OpenShift Container Platform 镜像:
oc import-image ubi9/openjdk-17 --from=registry.access.redhat.com/ubi9/openjdk-17 --confirm
oc import-image ubi9/openjdk-17 --from=registry.access.redhat.com/ubi9/openjdk-17 --confirmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意- 如果使用 OpenShift 镜像 registry 并从同一项目中的镜像流拉取,则您的 Pod 服务帐户必须已具有正确的权限。
- 如果您要在其他 OpenShift Container Platform 项目或安全 registry 中拉取镜像,则可能需要额外的配置步骤。
如需更多信息,请参阅 Red Hat Openshift Container Platform 文档。
构建项目、创建应用程序并部署 OpenShift Container Platform 服务:
oc new-app registry.access.redhat.com/ubi9/openjdk-17~<git_path> --name=<project_name>
oc new-app registry.access.redhat.com/ubi9/openjdk-17~<git_path> --name=<project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用托管 Quarkus 项目的 Git 存储库路径替换
。例如,oc new-app registry.access.redhat.com/ubi9/openjdk-17~https://github.com/johndoe/code-with-quarkus.git --name=code-with-quarkus。如果您没有为 Git 存储库配置 SSH 密钥,在指定 Git 路径时,请使用 HTTPS URL 而不是 SSH URL。
-
将
<project_name> 替换为应用程序的名称。
要部署项目的更新版本,请将更改推送到 Git 存储库,然后运行:
oc start-build <project_name>
oc start-build <project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要为应用程序公开路由,请运行以下命令:
oc expose svc <project_name>
oc expose svc <project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.3. 验证 复制链接链接已复制到粘贴板!
列出与当前 OpenShift Container Platform 项目关联的 pod:
oc get pods
oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要获取应用程序的 pod 的日志输出,请运行以下命令,将 <
pod_name> 替换为应用程序名称前缀的最新 pod 的名称:oc logs -f <pod_name>
oc logs -f <pod_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以使用 S2I 方法部署运行 Java 21 到 OpenShift Container Platform 的红帽构建的 Quarkus 应用程序。
4.2.1. 先决条件 复制链接链接已复制到粘贴板!
-
可选: 您有一个 Quarkus Maven 项目,其中包含
quarkus-openshift扩展。 - 您在正确的 OpenShift Container Platform 项目命名空间中工作。
- 您的项目托管在 Git 存储库中。
4.2.2. 流程 复制链接链接已复制到粘贴板!
打开
pom.xml文件,并将 Java 版本设置为 21:<maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target>
<maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令打包您的 Java 21 应用程序:
./mvnw clean package
./mvnw clean packageCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
在与
pom.xml文件相同的级别上创建名为.s2i的目录。 在
.s2i目录中创建一个名为environment的文件并添加以下内容:MAVEN_S2I_ARTIFACT_DIRS=target/quarkus-app S2I_SOURCE_DEPLOYMENTS_FILTER=app lib quarkus quarkus-run.jar JAVA_OPTIONS=-Dquarkus.http.host=0.0.0.0 AB_JOLOKIA_OFF=true JAVA_APP_JAR=/deployments/quarkus-run.jar
MAVEN_S2I_ARTIFACT_DIRS=target/quarkus-app S2I_SOURCE_DEPLOYMENTS_FILTER=app lib quarkus quarkus-run.jar JAVA_OPTIONS=-Dquarkus.http.host=0.0.0.0 AB_JOLOKIA_OFF=true JAVA_APP_JAR=/deployments/quarkus-run.jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 提交您的更改并推送到远程 Git 存储库。
输入以下命令导入支持的 OpenShift Container Platform 镜像:
oc import-image ubi9/openjdk-21 --from=registry.access.redhat.com/ubi9/openjdk-21 --confirm
oc import-image ubi9/openjdk-21 --from=registry.access.redhat.com/ubi9/openjdk-21 --confirmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意- 如果使用 OpenShift 镜像 registry 并从同一项目中的镜像流拉取,则您的 Pod 服务帐户必须已具有正确的权限。
- 如果您要在其他 OpenShift Container Platform 项目或安全 registry 中拉取镜像,则可能需要额外的配置步骤。如需更多信息,请参阅 Red Hat Openshift Container Platform 文档。
-
如果要在 IBM Z 基础架构上部署,请输入
oc import-image ubi9/openjdk-21 --from=registry.redhat.io/ubi9/openjdk-21 --confirm。有关此镜像的详情,请查看 Red Hat build of OpenJDK 21。
构建项目、创建应用程序并部署 OpenShift Container Platform 服务:
oc new-app registry.access.redhat.com/ubi8/openjdk-21~<git_path> --name=<project_name>
oc new-app registry.access.redhat.com/ubi8/openjdk-21~<git_path> --name=<project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用托管 Quarkus 项目的 Git 存储库路径替换
。例如,oc new-app registry.access.redhat.com/ubi9/openjdk-21~https://github.com/johndoe/code-with-quarkus.git --name=code-with-quarkus。如果您没有为 Git 存储库配置 SSH 密钥,在指定 Git 路径时,请使用 HTTPS URL 而不是 SSH URL。
将
<project_name> 替换为应用程序的名称。注意如果要在 IBM Z 基础架构上部署,请输入
oc new-app ubi9/openjdk-21~ --name=<project_name>。
要部署项目的更新版本,请将更改推送到 Git 存储库,然后运行:
oc start-build <project_name>
oc start-build <project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要为应用程序公开路由,请运行以下命令:
oc expose svc <project_name>
oc expose svc <project_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.3. 验证 复制链接链接已复制到粘贴板!
列出与当前 OpenShift Container Platform 项目关联的 pod:
oc get pods
oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要获取应用程序的 pod 的日志输出,请运行以下命令,将 <
pod_name> 替换为应用程序名称前缀的最新 pod 的名称:oc logs -f <pod_name>
oc logs -f <pod_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3. 参考 复制链接链接已复制到粘贴板!
第 5 章 部署编译到原生可执行文件的 Quarkus 应用程序的红帽构建 复制链接链接已复制到粘贴板!
您可以使用 Docker 构建策略将 Quarkus 应用程序的原生红帽构建部署到编译到原生可执行文件的 OpenShift Container Platform。
您必须为应用程序创建一个原生的可执行文件,该应用程序以受支持的操作系统为目标,并与架构匹配。这意味着,如果您要在 Windows 上构建,您可以使用容器运行时(如 Docker 或 Podman)创建一个原生 Linux 可执行文件。
您的 Quarkus 项目包括预生成的 Dockerfile 及说明。如果要使用自定义 Dockerfile,请将该文件添加到 src/main/docker 目录或模块内的任何位置。另外,如果您想要有多个 Docker 文件并在它们之间进行切换,请使用 quarkus.openshift.native-dockerfile 属性设置到首选 Dockerfile 的路径。
本指南通过将 Quarkus 项目与 Maven 用作示例项目来描述此策略。
5.1. 先决条件 复制链接链接已复制到粘贴板!
- 支持的操作系统或开放容器项目(OCI)兼容容器运行时,如 Podman 或 Docker。
-
您有一个包含
quarkus-openshift扩展的 Quarkus Maven 项目。 -
您可以访问 OpenShift Container Platform 集群以及安装了
ocCLI 工具的最新兼容版本。 - 您在正确的 OpenShift 项目命名空间中工作。
5.2. 流程 复制链接链接已复制到粘贴板!
在
application.properties配置文件中设置 Docker 构建策略:quarkus.openshift.build-strategy=docker
quarkus.openshift.build-strategy=dockerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用基于容器的原生构建:
quarkus.native.container-build=true
quarkus.native.container-build=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:根据您的环境在
application.properties文件中设置以下属性:如果您使用不受信任的证书,请为
KubernetesClient启用证书信任:quarkus.kubernetes-client.trust-certs=true
quarkus.kubernetes-client.trust-certs=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要公开服务并创建 OpenShift Container Platform 路由,请设置以下属性:
quarkus.openshift.route.expose=true
quarkus.openshift.route.expose=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用自定义 Dockerfile 而不是预生成的 Dockerfile,请设置自定义 Dockerfile 的路径:
quarkus.openshift.native-dockerfile=<path_to_your_dockerfile>
quarkus.openshift.native-dockerfile=<path_to_your_dockerfile>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,指定名为
Dockerfile.custom-native的自定义 Dockerfile:quarkus.openshift.native-dockerfile=src/main/docker/Dockerfile.custom-native
quarkus.openshift.native-dockerfile=src/main/docker/Dockerfile.custom-nativeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 指定容器引擎:
使用 Podman 构建原生可执行文件:
quarkus.native.container-runtime=podman
quarkus.native.container-runtime=podmanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Docker 构建原生可执行文件:
quarkus.native.container-runtime=docker
quarkus.native.container-runtime=dockerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
最后,构建原生可执行文件、软件包,并将您的应用程序部署到 OpenShift Container Platform:
./mvnw clean package -Pnative -Dquarkus.openshift.deploy=true
./mvnw clean package -Pnative -Dquarkus.openshift.deploy=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3. 验证 复制链接链接已复制到粘贴板!
验证镜像流和服务资源是否已创建,并且是否部署了应用。使用 OpenShift Container Platform Web 控制台或以下 OpenShift Container Platform 命令行界面(CLI)命令:
oc get is oc get pods oc get svc
oc get is1 oc get pods2 oc get svc3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要获取应用程序的 pod 的日志输出,请运行以下命令,其中 <
pod_name> 是带有应用程序名称作为前缀的最新 pod 的名称:oc logs -f <pod_name>
oc logs -f <pod_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow

