注:
- 此教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间示例值。完成实验室时,请将这些值替换为特定于云环境的那些值。
使用 OCI 容器实例为 OCI 计算实例安排启动和停止时间
简介
Oracle Cloud Infrastructure (OCI) 容器实例是一项无服务器计算服务,使用此服务,您无需管理任何服务器,就可以快速轻松地运行容器。
您可以使用 OCI 计算服务创建裸金属计算或虚拟机 (VM) 实例,以部署和运行应用程序。通过 OCI 计算,您可以预配和管理计算主机(称为实例)。
本教程介绍了如何使用容器实例来管理区间中计算实例的生命周期状态(它还可以扩展到租户)。在某些情况下,您需要一种自动方式来安排计算实例的停止/启动(例如 crontab 作业)。例如,您需要在白天运行一些计算实例,并在夜间停止这些计算实例以节省成本。可以使用 OCI 容器实例服务创建此类“crontab”作业。
基本上,容器实例在一个区间中的每个计算实例中运行 Python 代码,并在循环中查找特定的自由形式标记。如果找到特定标记,则会将标记值与当前时间(脚本运行时)进行比较,以确定计算实例当时是否应处于运行状态或停止状态,并决定停止或启动计算实例。
目标
- 构建 Docker 映像
- 根据您自己的映像构建容器实例
- 使用 Oracle Cloud Infrastructure Registry
- 将参数传递给容器 ENTRYPOINT
先决条件
- 了解 Docker、映像、注册表。
- 能够创建动态组策略的用户权限(这些权限将允许容器实例管理计算实例)。如果用户没有这些权限,则租户管理员可以创建动态组和策略。
- 在运行此教程的计算机上运行的 Docker。
- 在 Oracle Cloud Infrastructure Registry 中使用映像(推送、拉取、标记)的用户权限,以及为登录 Oracle Cloud Infrastructure Registry 创建的令牌。
- 熟悉将映像推送到 Oracle Cloud Infrastructure Registry。
任务 1:创建动态组以允许容器实例管理计算实例
-
要允许(使用策略)运行中的容器实例管理区间中的计算实例,需要执行此操作。
-
为动态组创建匹配规则,如以下命令中所示。
ALL {resource.type = 'computecontainerinstance', resource.compartment.id = 'ocid1.compartment.oc1…… '}
任务 2:创建策略以允许动态组中的资源管理计算实例
-
创建以下策略。
allow dynamic-group <dynamic group name> to manage instances in compartment <compartment name>
任务 3:构建 Docker 映像
-
创建本地文件夹。
-
提取 files.zip 的内容并将所有文件复制到本地文件夹。
-
requirements.txt
文件包含将安装的 Python 软件包。目前,我们只需要 oci 软件包。 -
使用 Docker 构建映像。
docker build -t start_stop_compute:latest .
任务 4:将映像上载到 Oracle Cloud Infrastructure Registry
-
在将映像推送到 Oracle Cloud Infrastructure Registry 之前登录。有关详细信息,请参阅登录 Oracle Cloud Infrastructure Registry 。
-
标记刚才创建的图像,如以下示例中所示。有关如何为租户/Oracle Cloud Infrastructure Registry 资料档案库设置映像标识符和目标标记的详细信息,请参阅使用 Docker CLI 推送映像。
docker tag start_stop_compute:latest fra.ocir.io/orasenatdpltintegration03/fvassrepo1/start_stop_compute:latest
-
将映像推送到 Oracle Cloud Infrastructure Registry。
docker push fra.ocir.io/orasenatdpltintegration03/fvassrepo1/start_stop_compute:latest
任务 5:在计算实例上定义自由形式标记
-
如果使用本教程中提供的代码,则自由形式标记必须命名为
myschedule
。这是因为在容器内运行的 Python 代码正在搜索名为myschedule
的自由形式标记(在计算元数据中)。 -
如果希望计算实例由本教程中提供的管理,则必须将名为
myschedule
的自由形式标记添加到每个计算实例。 -
自由形式标记的值必须如下节所示,其中“s”表示 STOPPED,“r”表示 RUNNING。
s,s,s,s,s,s,s,s,r,r,r,r,r,r,r,r,r,s,s,s,s,s,s,s
-
列表中的每个元素对应于从午夜(从 00 到 01 AM)开始的一天中的一小时。因此,元素 0 对应于当天上午 00 到 01 之间的间隔,“s”表示应停止实例。
myschedule[0] from 00 to 01 AM => s means instance should be stopped myschedule[8] from 08 to 09 AM => r means instance should be running
-
根据以上详细信息,实例应执行,如下部分所示。
00-08 stopped 08-17 running 17-00 stopped
任务 6:创建容器实例
-
按照 OCI Web 控制台中的工作流操作,创建一个新的容器实例。
-
选择您已推送到任务 4 中的 Oracle Cloud Infrastructure Registry 的映像。
-
作为入口点参数传递您将使用代码管理计算实例的区间的 OCID,如下图中所示。
相关链接
确认
- Francisc Vass(主要云架构师)
更多学习资源
探索 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 频道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Use OCI Container Instances to schedule start and stop for OCI Compute Instances
F79241-01
March 2023
Copyright © 2023, Oracle and/or its affiliates.