本文档介绍了如何为 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 Instance Admin (v1) (
roles/compute.instanceAdmin.v1) -
Service Account User (
roles/iam.serviceAccountUser)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
准备 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 主题和订阅:
在 Symphony 主宿主机上,设置以下环境变量:
export GCP_PROJECT=PROJECT_ID export PUBSUB_TOPIC=PUBSUB_TOPIC替换以下内容:
PROJECT_ID:您的 Google Cloud 项目的 ID。PUBSUB_TOPIC:Google Cloud 主题的名称,例如hf-gce-vm-events。
创建 Pub/Sub 主题:
gcloud pubsub topics create $PUBSUB_TOPIC使用 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"此命令的输出包含您将在下一步中使用的服务账号。
向上一步中的服务账号授予 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替换为日志接收器创建输出中的服务账号名称。创建订阅以接收日志:
gcloud pubsub subscriptions create ${PUBSUB_TOPIC}-sub \ --topic=${PUBSUB_TOPIC}验证您的服务账号是否具有订阅相应订阅的正确权限:
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 主宿主机上按照以下步骤操作:
为 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安装 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 可执行文件,请按以下步骤操作:
从 GitHub 克隆
symphony-gcp-connector代码库:git clone https://github.com/GoogleCloudPlatform/symphony-gcp-connector.git前往项目中的
hf-provider目录:cd PROJECT_ROOT/hf-provider将
PROJECT_ROOT替换为包含 hf-provider 目录的顶级目录的路径,例如/home/user/symphony-gcp-connector。如果您尚未安装
uv,请使用以下命令进行安装:pip install uv使用
uv创建 Python 虚拟环境:uv venv激活此虚拟环境:
source .venv/bin/activate安装所需的项目依赖项:
uv pip install .安装 PyInstaller,该工具可将 Python 应用捆绑到独立的可执行文件中:
uv pip install pyinstaller为 Compute Engine 集群创建
hf-gceCLI:uv run pyinstaller hf-gce.spec --clean如需验证安装,请针对可执行文件运行
--help命令。如果您未设置必需的环境变量,可能会看到错误。dist/hf-gce --help将可执行文件复制到提供程序插件
bin目录:mkdir -p ${HF_TOP}/${HF_VERSION}/providerplugins/gcpgce/bin cp dist/hf-gce ${HF_TOP}/${HF_VERSION}/providerplugins/gcpgce/bin/将脚本复制到提供程序插件
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 提供程序插件,请在宿主工厂配置中注册该插件:
打开
$HF_TOP/conf/providerplugins/hostProviderPlugins.json文件。当您使用 source 命令时,
$HF_TOP环境变量会在您的环境中定义。该值是 IBM Spectrum Symphony 主机工厂服务的顶级安装目录的路径。添加
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 提供程序,请创建提供程序实例。
为提供程序实例设置目录:
如果您从源代码构建了提供程序,则必须手动创建目录和配置文件:
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
在
$HF_TOP/conf/providers/gcpgceinst/目录中,创建或修改gcpgceinstprov_config.json文件。此文件包含提供程序的主要配置。提供程序支持以下配置变量。 您必须在此配置中指定没有默认值的变量。变量名称 说明 默认值 HF_DBDIR相应提供程序存储其状态数据库的位置。 在 HostFactory 环境中定义为 $HF_DBDIR。HF_TEMPLATES_FILENAME模板文件的名称。 gcpgceinstprov_templates.jsonGCP_CREDENTIALS_FILEGoogle Cloud 服务账号凭据文件的位置。 如果您未指定此值,应用将使用默认凭据。 GCP_PROJECT_IDGoogle Cloud 项目的 ID。 无 GCP_INSTANCE_PREFIX要附加到此提供程序创建的所有主机前面的字符串。 sym-LOGFILE提供程序将日志发送到的日志文件的位置。 一个具有生成名称的文件,位于由 HostFactory 环境变量 HF_PROVIDER_LOGDIR定义的目录中。LOG_LEVELPython 日志级别 WARNINGPUBSUB_TIMEOUT如果最新的 Pub/Sub 事件早于此时长(以秒为单位),Pub/Sub 监听器会断开连接。此超时时间仅在自动启动 Pub/Sub 事件监听器时适用。否则,监听器会无限期运行,并且管理员必须控制生命周期。 600PUBSUB_TOPICPub/Sub 主题的名称。此变量仅用于向后兼容。 hf-gce-vm-eventsPUBSUB_SUBSCRIPTION要监控的 Pub/Sub 订阅的名称(用于监控虚拟机事件)。 hf-gce-vm-events-subPUBSUB_LOCKFILE用于指示 Pub/Sub 事件监听器是否处于活动状态的文件的名称。 /tmp/sym_hf_gcp_pubsub.lockPUBSUB_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。
在同一目录中,创建或修改
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。
- 如果您使用 RPM 进行安装,请使用您在上一步中创建的
创建这些文件后,请验证您的提供程序实例目录是否与以下示例类似:
├── gcpgceinstprov_config.json └── gcpgceinstprov_templates.json
启用提供方实例
如需激活提供程序实例,请在宿主工厂配置文件中启用它:
打开
$HF_TOP/conf/providers/hostProviders.json文件。添加
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 提供程序来预配资源,请为该请求者启用该提供程序。
打开
$HF_TOP/conf/requestors/hostRequestors.json文件。在相应的请求者实例中,向
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 创建资源请求,请按以下步骤操作:
查找宿主工厂 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如需使用 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_ID:gcpgceinstprov_templates.json文件中定义的templateId,例如template-gcp-01。SYMPHONY_USER:用于身份验证的 Symphony 用户。SYMPHONY_PASSWORD:Symphony 用户的密码。
如果成功,则输出类似于以下示例:
{"scheduled_request_id":["SD-641ef442-1f9e-40ae-ae16-90e152ed60d2"]}