Oracle免费4核24GB内存ARM实例创建和保活

narcissuskid
发布于 2023-08-04 / 364 阅读 / 0 评论 / 1 点赞

Oracle免费4核24GB内存ARM实例创建和保活

前情提要:话接上回,oracle提供的免费服务中还包含一个重头戏——VM.Standard.A1.Flex(4 个 OCPU 和 24GB RAM),但手动创建时,一直提示“主机容量不足”(Out of host Capacity),不过在我羊毛党大军面前,区区跳梁小丑,何足道哉!故写下此文以记此役。

前置条件

解决问题

  • 1. 手动创建大概率遇到Out of host Capacity报错
  • 2. 防止机器空闲被回收

操作步骤

抢机器

  1. 在oracle账户中新建api
  • User Settings -> Resources -> API keys -> Add API Key
  1. 生成密钥并下载
  2. 复制并保存config文件
  3. 获取脚本必备参数
  • 新建实例(Menu -> Compute -> Instances -> Create Instance)
  • 修改公共IP地址选择为"Do not assign a public IPv4 address"
  • 修改SSH Keys为"No SSH keys"
  • 打开浏览器的"开发者工具"(chrome快捷键:ctrl+shift+I),并切换到"network"标签,点击"创建"后弹出"Out of capacity"报错,在network中找到标红的instances API,鼠标右击复制链接(copy as curl),贴入文本文件中便于后续使用。
  1. 生成SSH密钥对
  • ~/.ssh/id_rsa
  • ~/.ssh/id_rsa.pub
ssh-keygen \
    -m PEM \
    -t rsa \
    -b 4096 \
    -C "azureuser@myserver" \
    -f ~/.ssh/mykeys/myprivatekey \
    -N mypassphrase
参数说明
ssh-keygen用于创建密钥的程序
-m PEM将密钥的格式设为 PEM
-t rsa要创建的密钥类型,本例中为 RSA 格式
-b 4096密钥的位数,本例中为 4096
-C "azureuser@myserver"追加到公钥文件末尾以便于识别的注释。 通常以电子邮件地址用作注释,但也可以使用任何最适合你基础结构的事物。
-f ~/.ssh/mykeys/myprivatekey私钥文件的文件名(如果选择不使用默认名称)。 追加了 .pub 的相应公钥文件在相同目录中生成。 该目录必须存在。
-N mypassphrase用于访问私钥文件的其他密码,千万要记住,忘记就废了(别问我怎么知道的..)
  1. 安装脚本
git clone https://github.com/hitrov/oci-arm-host-capacity.git
cd oci-arm-host-capacity/
composer install
  1. 修改配置
  • 复制.env文件以作备份
cp .env.example .env
  • 根据之前保存的instances API信息修改配置文件
envinstances API其他必须
OCI_SUBNET_IDsubnetId
OCI_IMAGE_IDimageId
OCI_PRIVATE_KEY_FILENAME-步骤2、3文件的绝对路径
OCI_SSH_PUBLIC_KEY-步骤5生成的~/.ssh/id_rsa.pub公钥内容
OCI_AVAILABILITY_DOMAINavailabilityDomain
OCI_OCPUS可选参数:1,2,3,4
OCI_MEMORY_IN_GBS可选参数:6,12,18,24
  1. 检查脚本是否能正常运行
php ./index.php

如下返回结果则表示脚本可正常执行

{
    "code": "InternalError",
    "message": "Out of host capacity."
}

若出现如下信息,则表示实例已超过用户上限,请删除实例或修改脚本参数配置

{
    "code": "LimitExceeded",
    "message": "The following service limits were exceeded: standard-a1-memory-count, standard-a1-core-count. Request a service limit increase from the service limits page in the console. "
}
  1. 使用crontab定时执行任务(此处设为每分钟执行一次,不建议设置太频繁,被oracle收回账户得不偿失)
EDITOR=nano crontab -e
* * * * * /usr/bin/php /path/to/oci-arm-host-capacity/index.php >> /path/to/oci-arm-host-capacity/oci.log
  1. 之后就是听天命了,隔几天看看oci.log日志有没有抢到机器(亲测20天左右),成功日志如下:
  2. 设置公共IP地址
  • Instance Details -> Resources -> Attached VNICs
  • Resources -> IPv4 Addresses -> Edit
  • 选择"ephemeral"并更新
  1. Done(真香)

防回收

好不容易薅到的羊毛总不能没用几天就被收回去吧,据说空闲计算实例可能会被回收,不怕一万只怕万一,挂个lookbusy先占坑,后续任务多了再下掉。

  1. 安装docker compose(docker compse安装)
  2. 新建docker-compose.yaml文件
version: '3'

services:
 lookbusy:
   image: fogforest/lookbusy:latest
   container_name: lookbusy
   hostname: lookbusy
   restart: always
   environment:
     - TZ=Asia/Shanghai
     - CPU_UTIL=10-20 # CPU占用,单位%,不可省略,支持固定值或范围
     - CPU_CORE=1 # CPU占用核心数,不指定默认跑全核,出现CPU打满的情况可以指定为1核
     - MEM_UTIL=15 # 内存占用,单位%,不跑内存可省略
     - SPEEDTEST_INTERVAL=120 # 网络测速间隔,单位分钟,不跑网络可省略
  1. 运行脚本
docker-compose up -d
  1. Done

Reference

  1. https://www.louishe.com/2022/02/23/doc-11585.html
  2. https://github.com/hitrov/oci-arm-host-capacity
  3. https://learn.microsoft.com/zh-cn/azure/virtual-machines/linux/create-ssh-keys-detailed
  4. https://fairysen.com/826.html
  5. https://community.oracle.com/customerconnect/discussion/671904/reclamation-of-idle-compute-instances
  6. https://www.ioiox.com/archives/165.html

评论