安装 Compute Engine Symphony 提供程序

本文档介绍了如何为 Compute Engine 安装和配置 IBM Symphony 提供程序。您将学习如何设置 Pub/Sub 以监控虚拟机 (VM) 实例事件、构建和安装提供程序插件,以及在 Symphony 主机工厂环境中配置提供程序实例。

如需详细了解适用于 Google Cloud的 Symphony 连接器,请参阅将 IBM Spectrum Symphony 与 Google Cloud集成

准备工作

如需为 Compute Engine 安装 Symphony 提供程序,您必须拥有以下资源:

  • 已启用主机工厂服务的正在运行的 IBM Spectrum Symphony 集群。您拥有 IBM Spectrum Symphony 主主机的 hostname。
  • 具有所需角色的专用服务账号。如需详细了解如何创建此服务账号,请参阅创建服务账号
  • 您已配置的防火墙规则,用于允许 Symphony 主宿主与 Compute Engine 之间进行通信。例如:

    gcloud compute firewall-rules create allow-symphony-primary-to-compute \
        --project=PROJECT_ID \
        --direction=INGRESS \
        --priority=1000 \
        --network=NETWORK_NAME \
        --allow=all \
        --source-tags=NETWORK_TAGS_MASTER \
        --target-tags=NETWORK_TAGS
    
    gcloud compute firewall-rules create allow-symphony-compute-to-primary \
        --project=PROJECT_ID \
        --direction=INGRESS \
        --priority=1000 \
        --network=NETWORK_NAME \
        --allow=all \
        --source-tags=NETWORK_TAGS \
        --target-tags=NETWORK_TAGS_MASTER
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud项目的 ID。
    • NETWORK_NAME:部署 Symphony 资源的 VPC 网络的名称。
    • NETWORK_TAGS_MASTER:应用于 Symphony 主宿主虚拟机的网络标记。
    • NETWORK_TAGS:应用于 Symphony 计算节点虚拟机的网络标记。

    如需了解详情,请参阅创建 VPC 防火墙规则

所需的角色

如需获得创建和管理使用服务账号的实例所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

准备 Compute Engine 环境

如需让 Symphony 主机工厂创建和管理虚拟机,您需要配置多个 Google Cloud 资源:

  • 实例模板:一种蓝图,用于定义主机工厂创建的 Symphony 计算虚拟机的配置。

  • 托管式实例组 (MIG):使用实例模板创建的一组相同的虚拟机。宿主工厂会根据工作负载需求,通过添加或移除虚拟机来扩缩此组。

  • Pub/Sub 主题和订阅:一种消息传递服务,用于向 Symphony 提供商通知虚拟机生命周期事件,例如抢占或删除。此服务可让提供方维护集群的准确状态。

创建实例模板

使用 gcloud compute instance-templates create 命令为 Symphony 计算主机创建实例模板。此模板定义了其创建的虚拟机的属性。这些虚拟机必须已安装 Symphony。您可以选择使用预安装了 Symphony 的映像,也可以在创建虚拟机后使用启动脚本来安装 Symphony。如需了解如何在计算主机虚拟机上安装 Symphony,请参阅 IBM 文档中的在 Linux 计算主机上安装

  gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --machine-type=MACHINE_TYPE \
    --network-interface=nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=SUBNET_NAME,no-address \
    --instance-template-region=REGION \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/trace.append \
    --tags=NETWORK_TAGS \
    --create-disk=auto-delete=yes,boot=yes,device-name=INSTANCE_TEMPLATE_NAME,image-family=rocky-linux-9,image-project=rocky-linux-cloud,mode=rw,size=20,type=pd-balanced \
    --shielded-secure-boot \
    --shielded-vtpm \
    --shielded-integrity-monitoring

替换以下内容:

  • INSTANCE_TEMPLATE_NAME:新实例模板的名称。
  • MACHINE_TYPE:计算实例的机器类型。如需了解详情,请参阅创建具有自定义机器类型的虚拟机
  • SUBNET_NAME:实例所用子网的名称。如需了解详情,请参阅查看实例的网络配置
  • SERVICE_ACCOUNT_EMAIL:您在准备工作部分中设置的服务账号的电子邮件地址。确保此服务账号具有所需角色部分中指定的角色。
  • REGION:您要在其中创建资源的 Google Cloud 区域。
  • NETWORK_TAGS:要应用于实例的网络标记,可用于防火墙规则,例如 symphony-compute

创建代管式实例组

使用上一步中的实例模板创建代管式实例组 (MIG)。主机工厂提供程序会根据工作负载需求添加或移除实例,从而扩缩此组。

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --project=PROJECT_ID \
    --base-instance-name=INSTANCE_GROUP_NAME \
    --template=projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_NAME \
    --size=0 \
    --zone=ZONE
    --default-action-on-vm-failure=repair \
    --no-force-update-on-repair \
    --standby-policy-mode=manual \
    --list-managed-instances-results=pageless

替换以下内容:

  • INSTANCE_GROUP_NAME:您为代管式实例组选择的名称。
  • PROJECT_ID:您的 Google Cloud项目的 ID。如需了解详情,请参阅查找项目名称、编号和 ID
  • INSTANCE_TEMPLATE_NAME:您在上一步中创建的实例模板的名称。
  • REGION:资源所在的区域,例如 us-east
  • ZONE:所选区域内的可用区,例如 a

如需详细了解如何创建 MIG,请参阅在单个可用区中创建 MIG

设置 Pub/Sub

如需让 Symphony 提供商接收有关虚拟机生命周期事件的通知,请配置 Pub/Sub 主题和订阅:

  1. 在 Symphony 主宿主机上,设置以下环境变量:

    export GCP_PROJECT=PROJECT_ID
    export PUBSUB_TOPIC=PUBSUB_TOPIC
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • PUBSUB_TOPIC:Google Cloud 主题的名称,例如 hf-gce-vm-events
  2. 创建 Pub/Sub 主题:

    gcloud pubsub topics create $PUBSUB_TOPIC
    
  3. 使用 gcloud logging sinks create 命令创建日志记录接收器,以将审核日志导出到 Pub/Sub:

    gcloud logging sinks create ${PUBSUB_TOPIC}-sink \
        pubsub.googleapis.com/projects/${GCP_PROJECT}/topics/${PUBSUB_TOPIC} \
        --log-filter="
        logName=\"projects/${GCP_PROJECT}/logs/cloudaudit.googleapis.com%2Factivity\"
        resource.type=(\"gce_instance_group_manager\" OR \"gce_instance\")
        protoPayload.methodName=(
            \"v1.compute.instanceGroupManagers.createInstances\"
            OR
            \"v1.compute.instanceGroupManagers.deleteInstances\"
            OR
            \"v1.compute.instances.insert\"
            OR
            \"v1.compute.instances.delete\"
        )
        " \
        --description="Exports MIG VM create/delete audit logs to Pub/Sub"
    

    此命令的输出包含您将在下一步中使用的服务账号。

  4. 向上一步中的服务账号授予 Pub/Sub Publisher (roles/pubsub.publisher) 角色:

    gcloud pubsub topics add-iam-policy-binding $PUBSUB_TOPIC \
        --member="serviceAccount:LOGGING_SINK_SERVICE_ACCOUNT" \
        --role="roles/pubsub.publisher"
    

    LOGGING_SINK_SERVICE_ACCOUNT 替换为日志接收器创建输出中的服务账号名称。

  5. 创建订阅以接收日志:

    gcloud pubsub subscriptions create ${PUBSUB_TOPIC}-sub \
        --topic=${PUBSUB_TOPIC}
    
  6. 验证您的服务账号是否具有订阅相应订阅的正确权限:

    gcloud pubsub subscriptions add-iam-policy-binding ${PUBSUB_TOPIC}-sub \
        --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
        --role="roles/pubsub.subscriber"
    

    SERVICE_ACCOUNT_EMAIL 替换为管理您的实例组的服务账号的电子邮件地址。这与您在准备工作部分中设置的服务账号相同。

Pub/Sub 设置已完成。如需详细了解如何配置 Pub/Sub,请参阅使用 Google Cloud CLI 在 Pub/Sub 中发布和接收消息

加载主机工厂环境变量

在配置或管理宿主工厂服务之前,您必须将 Symphony 环境变量加载到 shell 会话中。在 Symphony 主宿主虚拟机上,运行以下命令:

source INSTALL_FOLDER/profile.platform

INSTALL_FOLDER 替换为安装文件夹的路径。默认的 Symphony 安装文件夹路径为 /opt/ibm/spectrumcomputing。如果您将 Symphony 安装在其他位置,请使用适合您环境的正确路径。

此命令会执行 profile.platform 脚本,该脚本会导出 $EGO_TOP$HF_TOP 等基本环境变量,并将 Symphony 命令行工具添加到 shell 的 PATH。您必须为每个新的终端会话运行此命令,以确保环境配置正确。

安装提供程序插件

若要将 Compute Engine 提供程序与 Symphony 主机工厂服务集成,请从 RPM 软件包安装预构建的提供程序插件,或从源代码构建提供程序

安装预构建的提供程序插件

如需使用 RPM 软件包安装提供程序插件,请在 Symphony 主宿主机上按照以下步骤操作:

  1. 为 Google Cloud Symphony 连接器添加 yum 代码库:

    sudo tee /etc/yum.repos.d/google-cloud-symphony-connector.repo << EOM
    [google-cloud-symphony-connector] name=Google Cloud Symphony Connector
    baseurl=https://packages.cloud.google.com/yum/repos/google-cloud-symphony-connector-x86-64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
           https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOM
    
  2. 安装 Compute Engine 的提供程序软件包:

    sudo yum install -y hf-gcpgce-provider.x86_64
    

RPM 软件包会将提供程序可执行文件和脚本安装到 Symphony 主机工厂服务的正确目录中。安装完成后,目录结构如下所示:

├── bin
│   └── hf-gce
└── scripts
    ├── getAvailableTemplates.sh
    ├── getRequestStatus.sh
    ├── getReturnRequests.sh
    ├── requestMachines.sh
    └── requestReturnMachines.sh

从源代码构建提供程序

如需在提供程序插件目录的 bin 目录中构建并安装 CLI 可执行文件,请按以下步骤操作:

  1. 从 GitHub 克隆 symphony-gcp-connector 代码库:

    git clone https://github.com/GoogleCloudPlatform/symphony-gcp-connector.git
    
  2. 前往项目中的 hf-provider 目录:

    cd PROJECT_ROOT/hf-provider
    

    PROJECT_ROOT 替换为包含 hf-provider 目录的顶级目录的路径,例如 /home/user/symphony-gcp-connector

  3. 如果您尚未安装 uv,请使用以下命令进行安装:

    pip install uv
    
  4. 使用 uv 创建 Python 虚拟环境:

    uv venv
    
  5. 激活此虚拟环境:

    source .venv/bin/activate
    
  6. 安装所需的项目依赖项:

    uv pip install .
    
  7. 安装 PyInstaller,该工具可将 Python 应用捆绑到独立的可执行文件中:

    uv pip install pyinstaller
    
  8. 为 Compute Engine 集群创建 hf-gce CLI:

    uv run pyinstaller hf-gce.spec --clean
    
  9. 如需验证安装,请针对可执行文件运行 --help 命令。如果您未设置必需的环境变量,可能会看到错误。

    dist/hf-gce --help
    
  10. 将可执行文件复制到提供程序插件 bin 目录:

    mkdir -p ${HF_TOP}/${HF_VERSION}/providerplugins/gcpgce/bin
    cp dist/hf-gce ${HF_TOP}/${HF_VERSION}/providerplugins/gcpgce/bin/
    
  11. 将脚本复制到提供程序插件 scripts 目录:

    cp -R ./resources/gce_cli/1.2/providerplugins/gcpgce/scripts ${HF_TOP}/${HF_VERSION}/providerplugins/gcpgce/
    

    操作系统必须支持用于构建可执行文件的 Python 版本。可执行文件已使用 Python 3.9.6 进行测试。

安装后,提供程序插件的目录结构类似于以下示例:

├── bin
│   └── hf-gce
└── scripts
    ├── getAvailableTemplates.sh
    ├── getRequestStatus.sh
    ├── getReturnRequests.sh
    ├── requestMachines.sh
    └── requestReturnMachines.sh

启用提供方插件

如需启用 Compute Engine 提供程序插件,请在宿主工厂配置中注册该插件:

  1. 打开 $HF_TOP/conf/providerplugins/hostProviderPlugins.json 文件。

    当您使用 source 命令时,$HF_TOP 环境变量会在您的环境中定义。该值是 IBM Spectrum Symphony 主机工厂服务的顶级安装目录的路径。

  2. 添加 gcpgce 提供方插件部分:

    {
        "name": "gcpgce",
        "enabled": 1,
        "scriptPath": "${HF_TOP}/${HF_VERSION}/providerplugins/gcpgce/scripts/"
    }
    

    如果您使用的是提供程序插件的 1.2 版,且 $HF_TOP 的值为默认值,则生成的 scriptPath 值为:INSTALL_FOLDER/hostfactory/1.2/providerplugins/gcpgce/scripts/

设置提供方实例

如需为您的环境配置 Compute Engine 提供程序,请创建提供程序实例。

  1. 为提供程序实例设置目录:

    • 如果您从源代码构建了提供程序,则必须手动创建目录和配置文件:

      mkdir -p $HF_TOP/conf/providers/gcpgceinst/
      
    • 如果您使用 RPM 进行安装,则此目录已存在,并且包含示例配置文件。复制示例文件以创建配置:

      cp $HF_TOP/conf/providers/gcpgceinst/gcpgceinstprov_config.json.dist $HF_TOP/conf/providers/gcpgceinst/gcpgceinstprov_config.json
      cp $HF_TOP/conf/providers/gcpgceinst/gcpgceinstprov_templates.json.dist $HF_TOP/conf/providers/gcpgceinst/gcpgceinstprov_templates.json
      
  2. $HF_TOP/conf/providers/gcpgceinst/ 目录中,创建或修改 gcpgceinstprov_config.json 文件。此文件包含提供程序的主要配置。提供程序支持以下配置变量。 您必须在此配置中指定没有默认值的变量。

    变量名称 说明 默认值
    HF_DBDIR 相应提供程序存储其状态数据库的位置。 在 HostFactory 环境中定义为 $HF_DBDIR
    HF_TEMPLATES_FILENAME 模板文件的名称。 gcpgceinstprov_templates.json
    GCP_CREDENTIALS_FILE Google Cloud 服务账号凭据文件的位置。 如果您未指定此值,应用将使用默认凭据。
    GCP_PROJECT_ID Google Cloud 项目的 ID。
    GCP_INSTANCE_PREFIX 要附加到此提供程序创建的所有主机前面的字符串。 sym-
    LOGFILE 提供程序将日志发送到的日志文件的位置。 一个具有生成名称的文件,位于由 HostFactory 环境变量 HF_PROVIDER_LOGDIR 定义的目录中。
    LOG_LEVEL Python 日志级别 WARNING
    PUBSUB_TIMEOUT 如果最新的 Pub/Sub 事件早于此时长(以秒为单位),Pub/Sub 监听器会断开连接。此超时时间仅在自动启动 Pub/Sub 事件监听器时适用。否则,监听器会无限期运行,并且管理员必须控制生命周期。 600
    PUBSUB_TOPIC Pub/Sub 主题的名称。此变量仅用于向后兼容。 hf-gce-vm-events
    PUBSUB_SUBSCRIPTION 要监控的 Pub/Sub 订阅的名称(用于监控虚拟机事件)。 hf-gce-vm-events-sub
    PUBSUB_LOCKFILE 用于指示 Pub/Sub 事件监听器是否处于活动状态的文件的名称。 /tmp/sym_hf_gcp_pubsub.lock
    PUBSUB_AUTOLAUNCH 如果设置为 true,提供程序会尝试自动启动 Pub/Sub 事件监听器。如果值为 false,您必须使用所选方法通过命令 hf-gce monitorEvents 启动 Pub/Sub 事件监听器。 true

    以下示例展示了基本配置:

    {
        "GCP_PROJECT_ID": "PROJECT_ID",
        "LOG_LEVEL":"INFO",
        "PUBSUB_SUBSCRIPTION": "PUBSUB_SUBSCRIPTION",
        "PUBSUB_TIMEOUT": 100
    }
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • PUBSUB_SUBSCRIPTION:您创建的用于监控虚拟机事件的 Pub/Sub 订阅的名称。 如需了解详情,请参阅设置 Pub/Sub
  3. 在同一目录中,创建或修改 gcpgceinstprov_templates.json 文件。此文件定义了提供程序可以创建的虚拟机的模板。模板中的属性必须与支持实例组的配置保持一致。

    • 如果您使用 RPM 进行安装,请使用您在上一步中创建的 gcpgceinstprov_templates.json 文件作为起点。
    • 如果您是从源代码构建的,请使用以下示例模板:

      {
          "templates": [
              {
                  "templateId": "template-gcp-01",
                  "maxNumber": 10,
                  "attributes": {
                      "type": [ "String", "X86_64" ],
                      "ncpus": [ "Numeric", "1" ],
                      "nram": [ "Numeric", "1024" ]
                  },
                  "gcp_zone": "GCP_ZONE",
                  "gcp_instance_group": "INSTANCE_GROUP_NAME"
              }
          ]
      }
      

      替换以下内容:

      • GCP_ZONE:实例组所在的 Google Cloud 可用区,例如 us-central1-a
      • INSTANCE_GROUP_NAME:提供方管理的实例组的名称,例如 symphony-compute-ig
  4. 创建这些文件后,请验证您的提供程序实例目录是否与以下示例类似:

    ├── gcpgceinstprov_config.json
    └── gcpgceinstprov_templates.json
    

启用提供方实例

如需激活提供程序实例,请在宿主工厂配置文件中启用它:

  1. 打开 $HF_TOP/conf/providers/hostProviders.json 文件。

  2. 添加 gcpgceinst 提供方实例部分:

    {
        "name": "gcpgceinst",
        "enabled": 1,
        "plugin": "gcpgce",
        "confPath": "${HF_CONFDIR}/providers/gcpgceinst/",
        "workPath": "${HF_WORKDIR}/providers/gcpgceinst/",
        "logPath": "${HF_LOGDIR}/"
    }
    

    当您使用 source command 配置 shell 会话时,此脚本会将这些变量设置为指向 Symphony 安装中的正确子目录。然后,宿主工厂服务会使用这些变量在运行时构建完整路径。

启用请求者实例

如需允许特定 Symphony 组件使用 Compute Engine 提供程序来预配资源,请为该请求者启用该提供程序。

  1. 打开 $HF_TOP/conf/requestors/hostRequestors.json 文件。

  2. 在相应的请求者实例中,向 providers 参数添加 gcpgceinst

    "providers": ["gcpgceinst"],
    

    提供方值必须与您在启用提供方实例中使用的提供方名称一致。

启动主机工厂服务

如需应用配置更改,请启动主机工厂服务。在 Symphony 主要主机虚拟机上,以集群管理员身份登录并启动服务:

sed -i -e "s|MANUAL|AUTOMATIC|g" $EGO_ESRVDIR/esc/conf/services/hostfactory.xml
egosh user logon -u "SYMPHONY_USERNAME -x "SYMPHONY_PASSWORD
egosh service start HostFactory

替换以下内容:

  • SYMPHONY_USERNAME:用于身份验证的 Symphony 用户名。
  • SYMPHONY_PASSWORD:Symphony 用户的密码。

测试连接器

创建资源请求以测试 Compute Engine 的提供程序。

为此,请使用以下方法之一:

  • Symphony GUI:如需了解如何使用 Symphony GUI 创建资源请求,请参阅 IBM 文档中的手动安排云主机请求和返回

  • REST API:如需使用 REST API 创建资源请求,请按以下步骤操作:

    1. 查找宿主工厂 REST API 的主机和端口:

      egosh client view REST_HOST_FACTORY_URL
      

      输出类似于以下示例:

      CLIENT NAME: REST_HOST_FACTORY_URL
      DESCRIPTION: http://sym2.us-central1-c.c.symphonygcp.internal:9080/platform/rest/hostfactory/
      TTL        : 0
      LOCATION   : 40531@10.0.0.33
      USER       : Admin
      
      CHANNEL INFORMATION:
      CHANNEL             STATE
      9                   CONNECTED
      
    2. 如需使用 REST API 创建资源请求,请使用以下命令:

      HOST=PRIMARY_HOST
      PORT=PORT
      TEMPLATE_NAME=INSTANCE_TEMPLATE_NAME
      PROVIDER_NAME=gcpgceinst
      
      curl -X POST -u "SYMPHONY_USER:SYMPHONY_PASSWORD" -H "Content-Type: application/json" -d "{ \"demand_hosts\": [ { \"prov_name\": \"$PROVIDER_NAME\", \"template_name\": \"$TEMPLATE_NAME\", \"ninstances\": 1 } ] }" \
      http://$HOST:$PORT/platform/rest/hostfactory/requestor/admin/request
      

      替换以下内容:

      • PRIMARY_HOST:上一个命令的输出中主主机的 hostname。
      • PORT:上一个命令的输出中主宿主的端口号,例如 9080
      • SYMPHONY_TEMPLATE_IDgcpgceinstprov_templates.json 文件中定义的 templateId,例如 template-gcp-01
      • SYMPHONY_USER:用于身份验证的 Symphony 用户。
      • SYMPHONY_PASSWORD:Symphony 用户的密码。

      如果成功,则输出类似于以下示例:

      {"scheduled_request_id":["SD-641ef442-1f9e-40ae-ae16-90e152ed60d2"]}
      

后续步骤