Java Runtime 生命周期管理
Java 运行时生命周期管理包括:
- 安装和配置 Java 运行时
- 删除 Java 运行时
- 管理部署规则集
安装和配置 Java 运行时
JMS 允许您在组中的任何选定实例或所有托管实例上安装任何 Oracle JDK。此外,您还可以使用安装后操作进一步配置新的 Java 运行时。
对于每个受支持的平台,您可以选择是否要将 Java 运行时安装为普通归档文件(该归档文件将被提取到文件系统上的所选位置),或者 JMS 将通过为所选平台执行官方 Oracle JDK 安装程序来安装 Oracle JDK。
OCI 云控制台
- 以管理员身份登录 OCI 控制台。
- 打开导航菜单,单击可观察性和管理,然后单击 Java 管理下的组。
- 选择您的组。
- 单击操作,然后从菜单中选择安装 Java 运行时。
- 选择要安装的版本。
- 单击下一步。
- 您可以选择通过特定于平台的 JDK 安装程序安装 Java,或者下载 Java 归档文件并将其提取到指定的路径,然后单击下一步继续。
- 单击 Install Java Runtime 。
OCI CLI
- 使用以下命令为安装生成有效负载:
oci jms installation-site-summary add --generate-param-json-input installation-sites
- 编辑有效负载 json 文件,例如:
[ { "artifactContentType": "JDK", "managedInstanceId": "$MANAGED_INSTANCE_OCID", "releaseVersion": "21" } ]
- 执行以下命令:
oci jms installation-site-summary add --fleet-id $FLEET_OCID --installation-sites file://installation-sites.json
配置新的 Java 运行时
每次安装 Java 运行时都可配置多个选项以增强安全性、网络配置或日志记录。有关所有配置选项的详细说明,请参见Java Post-Installation Actions 。例如,您可以将此功能用于环境中 Java 运行时的全局代理配置。
您可以从 OCI 云控制台或 OCI CLI 运行该操作。
OCI 云控制台
- 以管理员身份登录 OCI 控制台。
- 打开导航菜单,单击可观察性和管理,然后单击 Java 管理下的组。
- 选择您的组。
- Click Actions and from the menu select Configure Java runtime lifecycle management settings.
- 在 Java 安装后操作部分下,配置您的要求。
- 单击保存。
- 现在,您可以启动上述 Java 运行时安装过程,并在对话框的第二步中确认新配置的安装后操作。
OCI CLI
- 使用以下命令为组生成 LCM 配置:
oci jms fleet-advanced-feature-configuration update --generate-param-json-input lcm
- 使用您的更改更新文件,例如:
{ "isEnabled": true, "postInstallationActions": { "proxies": { "httpProxyHost": "my-awesome-company-proxy", "httpProxyPort": 8080, "httpsProxyHost": "my-awesome-company-proxy", "httpsProxyPort": 8080, "useSystemProxies": false } } }
- 上载组配置:
oci jms fleet-advanced-feature-configuration update --lcm file://lcm-update.json --fleet-id $FLEET_OCID
- 更新您的安装有效负载文件,例如:
[ { "artifactContentType": "JDK", "managedInstanceId": "$MANAGED_INSTANCE_OCID", "releaseVersion": "21" } ]
- 执行安装脚本:
oci jms installation-site-summary add \ --fleet-id "$FLEET_OCID" \ --installation-sites file://installation-sites.json \ --post-installation-actions '["SETUP_HTTP_PROXY","SETUP_HTTPS_PROXY"]'
删除 Java 运行时
JMS 提供了组中所有托管实例搜索到的 Java 运行时的列表。组管理员可以选择从所选托管实例或 JMS 组内的所有托管实例中删除任何 Oracle Java 运行时。
OCI 云控制台
- 以管理员身份登录 OCI 控制台。
- 打开导航菜单,单击可观察性和管理,然后单击 Java 管理下的组。
- 选择您的组。
- 单击 Java 运行时部分,然后选择 Oracle Java 运行时。
- 单击删除。
- 再次单击删除以确认。
OCI CLI
- 使用以下命令生成要删除的有效负载:
oci jms installation-site-summary remove --generate-param-json-input installation-sites
- 获取给定组和 Java 版本的安装密钥:
oci jms installation-usage summarize --fleet-id $FLEET_OCID --jre-version $ORACLE_JDK_VERSION
- 获取具有已安装 Java 版本的给定组的托管实例 OCID:
oci jms managed-instance-usage summarize --fleet-id $FLEET_OCID --jre-version $ORACLE_JDK_VERSION
注意:
您只能找到具有附加参数--os-family
的特定平台的托管实例。 - 将安装密钥与托管实例相结合,安装密钥和托管实例特定于平台,例如:
[ { "installationKey": "$JAVA_RUNTIME_INSTALL_KEY_LINUX", "managedInstanceId": "$LINUX_MANAGED_INSTANCE_OCID" }, { "installationKey": "$JAVA_RUNTIME_INSTALL_KEY_WINDOWS", "managedInstanceId": "$WINDOWS_MANAGED_INSTANCE_OCID" } ]
- 完成安装密钥和托管实例对的列表后,将
installation-sites
配置保存到名为installation-sites.json
的文件中。 - 执行以下命令:
oci jms installation-site-summary remove --fleet-id $FLEET_OCID --installation-sites file://installation-sites.json
管理部署规则集
部署规则集是一组规则和策略,用于以安全、可定制的方式控制和管理 Java 小程序和 Web 应用程序的执行。
使用 JMS,管理部署规则集 jar 是一项简单的任务。组管理员将通过上载包含部署规则的签名 jar 来对其进行配置,然后 JMS 将将 DRS 文件分发到组中的所有托管实例(如果适用)。
注意:
“管理部署规则集”功能仅限于 Java 8 运行时。OCI 云控制台
- 以管理员身份登录 OCI 控制台。
- 打开导航菜单,单击可观察性和管理,然后单击 Java 管理下的组。
- 选择您的组。
- Click Actions and select Configure Java runtime lifecycle management settings.
- 在部署规则集文件部分中,上载部署规则集 jar 文件。
- 单击上载。
管理部署规则集
- 以管理员身份登录 OCI 控制台。
- 打开导航菜单,单击可观察性和管理,然后单击 Java 管理下的组。
- 选择您的组。
- 单击 Actions(操作)并选择 Manage Deployment Rule Set(管理部署规则集)。
- 单击 Distribute or Remove DRS panel(分配或删除 DRS 面板)。
- 单击提交。
OCI CLI
- 使用以下命令上载 DRS 文件:
oci os object put --namespace $NAMESPACE --bucket-name $BUCKET_NAME --file DeploymentRuleSet.jar
- 使用 JMS 验证:
oci jms fleet create-drs-file --namespace $NAMESPACE --bucket-name $BUCKET_NAME --drs-file-name DeploymentRuleSet.jar --fleet-id $FLEET_OCID
- 分发 DRS 文件:
oci jms fleet enable-drs --fleet-id $FLEET_OCID
DRS 高级功能依赖于将 DRS 相关有效负载从托管实例发送到 OCI Inventory 日志对象。下面是示例 DRS 有效负载:
{
"datetime": 1749559306604,
"logContent": {
"id": "117dffe5-defd-4d62-8d4c-b4b3b5ace029",
"time": "2025-06-10T12:41:46.604Z",
"oracle": {
"compartmentid": "ocid1.compartment.oc1..compartment-id",
"ingestedtime": "2025-06-10T12:41:46.604Z",
"loggroupid": "ocid1.loggroup.oc1.eu-frankfurt-1.log-group-id",
"logid": "ocid1.loggroup.oc1.eu-frankfurt-1.log-id",
"tenantid": "ocid1.tenancy.oc1..tenant-id"
},
"source": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
"specversion": "1.0",
"subject": "Oracle JMS Plugin",
"type": "jms.drs.scan.log",
"data": {
"data": {
"checksum": "405ca339f3e394a5cee7f618074f752a7c341bae2d9841155a23858d96d7696a",
"fleetId": "ocid1.jmsfleet.oc1.eu-frankfurt-1.fleet-id",
"managedInstanceId": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
"osArch": "amd64",
"osName": "Linux",
"osVersion": "5.15.0-306.177.4.el9uek.x86_64"
},
"datacontenttype": "application/json",
"dataschema": "1.0",
"id": "117dffe5-defd-4d62-8d4c-b4b3b5ace029",
"source": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
"specversion": "1.0",
"time": "2025-06-10T12:41:46.601Z",
"type": "jms.drs.scan.log"
}
},
"regionId": "eu-frankfurt-1"
}
范例
假设您希望使用特定的 http/https 代理配置自动执行 Oracle JDK 21 安装。以下是使用 JMS 实现此自动化的实际示例。
首先,让我们检查一个简单的脚本,并在配置变量部分定义所需的参数。
#!/usr/bin/env bash
# configuration variables
JAVA_VERSION=21
FLEET_OCID=ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta
MANAGED_INSTANCE_OCID=ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq
PROXY_HOST=my-awesome-company-proxy
PROXY_PORT=8080
# check LCM configuration
FLEET_LCM_CONFIGURED=$(oci jms fleet-advanced-feature-configuration get --fleet-id $FLEET_OCID | jq '.data.lcm."is-enabled"')
# enable LCM configuration if needed
if [ "$FLEET_LCM_CONFIGURED" == "false" ]; then
cat > lcm-proxy.json << EOF
{
"isEnabled": true,
"postInstallationActions": {
"proxies": {
"httpProxyHost": "$PROXY_HOST",
"httpProxyPort": $PROXY_PORT,
"httpsProxyHost": "$PROXY_HOST",
"httpsProxyPort": $PROXY_PORT,
"useSystemProxies": false
}
}
}
EOF
echo Uploading new LCM configuration for fleet $FLEET_OCID
cat lcm-proxy.json
# upload the LCM configuration to JMS without confirmation
oci jms fleet-advanced-feature-configuration update --force --lcm file://lcm-proxy.json --fleet-id $FLEET_OCID
rm lcm-proxy.json
fi
# JDK installation payload
cat > jdk-install-payload.json << EOF
[
{
"artifactContentType": "JDK",
"releaseVersion": "$JAVA_VERSION",
"managedInstanceId": "$MANAGED_INSTANCE_OCID",
}
]
EOF
# initiate installation on specified managed instance
WORK_REQUEST_OCID=$(oci jms installation-site-summary add \
--fleet-id "$FLEET_OCID" \
--installation-sites file://jdk-install-payload.json \
--post-installation-actions '["SETUP_HTTP_PROXY","SETUP_HTTPS_PROXY"]' | jq -r '."opc-work-request-id"')
echo Installation work request OCID: $WORK_REQUEST_OCID
rm jdk-install-payload.json
# additionally you can add your own logic to check if work request is finished
# sleep 600
# oci jms work-request get --work-request-id "$WORK_REQUEST_OCID" | jq .data.status
在下一步中,我们执行上面的脚本并等待完成。安装工作请求完成后,我们可以验证新安装的 JDK 21 的代理配置是否已设置了所需的配置:
oci jms work-request-log-entry list-work-request-logs --work-request-id "$WORK_REQUEST_OCID" | jq -r '.data.items[].message'
{"artifactType":"JDK","code":"COMMAND_COMPLETED_WITHOUT_ERRORS","jrePath":"/usr/lib/jvm/jdk-21-oracle-x64/","jreVersion":"21","managedInstance":"jms-demo","metadata":{"attempt":1,"maximumAttempts":3},"operation":"LCM_OPERATION","osType":"Linux","requestType":"ARTIFACTINSTALL"}
{"artifactType":"JDK","code":"POST_INSTALL_ACTIONS_SUCCESS","jrePath":"/usr/lib/jvm/jdk-21-oracle-x64/","jreVersion":"21","managedInstance":"jms-demo","metadata":{},"operation":"LCM_OPERATION","osType":"Linux","requestType":"ARTIFACTINSTALL"}
{"artifactType":"JDK","code":"POST_INSTALL_ACTIONS_EXECUTING","jrePath":"/usr/lib/jvm/jdk-21-oracle-x64/","jreVersion":"21","managedInstance":"jms-demo","metadata":{},"operation":"LCM_OPERATION","osType":"Linux","requestType":"ARTIFACTINSTALL"}
{"artifactType":"JDK","code":"POST_INSTALL_ACTIONS_PRESENT","jrePath":"/usr/lib/jvm/jdk-21-oracle-x64/","jreVersion":"21","managedInstance":"jms-demo","metadata":{},"operation":"LCM_OPERATION","osType":"Linux","requestType":"ARTIFACTINSTALL"}
{"artifactType":"JDK","code":"INSTALL_SUCCESS","jrePath":"/usr/lib/jvm/jdk-21-oracle-x64/","jreVersion":"21","managedInstance":"jms-demo","metadata":{},"operation":"LCM_OPERATION","osType":"Linux","requestType":"ARTIFACTINSTALL"}
{"artifactType":"JDK","code":"COMMAND_RUNNING","jrePath":null,"jreVersion":"21","managedInstance":"jms-demo","metadata":{"attempt":1,"maximumAttempts":3},"operation":"LCM_OPERATION","osType":"Linux","requestType":"ARTIFACTINSTALL"}
{"artifactType":"JDK","code":"COMMAND_CREATED","jrePath":null,"jreVersion":"21","managedInstance":"jms-demo","metadata":{},"operation":"LCM_OPERATION","osType":"Linux","requestType":"ARTIFACTINSTALL"}
# verification on the managed instance:
[root@jms-demo ~]# egrep '^https?\.proxy' /usr/lib/jvm/jdk-21-oracle-x64/conf/net.properties
http.proxyHost=my-awesome-company-proxy
http.proxyPort=8080
https.proxyHost=my-awesome-company-proxy
https.proxyPort=8080