安装 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

替换以下内容:

如需详细了解如何创建 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:主题的名称,例如 hf-gce-vm-events。Google Cloud
  2. 创建 Pub/Sub 主题:

    gcloud pubsub topics create $PUBSUB_TOPIC
    
  3. 使用 gcloud logging sinks create command 创建日志 接收器,以将审核日志导出到 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 项目的 ID。 Google Cloud
    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,您必须使用所选方法启动 Pub/Sub 事件监听器,并使用命令 hf-gce monitorEvents 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 文件。此文件定义了提供程序可以创建的虚拟机的模板。模板中的属性必须与支持实例组的配置保持一致。

  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. 在相应的请求者实例中,将 gcpgceinst 添加到 providers 参数:

    "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"]}
      

后续步骤