如需将 IBM Symphony 与 Google Kubernetes Engine (GKE) 集成以实现动态资源管理,您必须为 GKE 安装并配置 Symphony 提供程序。借助此提供程序,Symphony 可以将计算资源作为 pod 在 GKE 集群中进行预配和管理,从而通过 Kubernetes 编排实现高效的工作负载伸缩。
如需启用此集成,您需要在集群中安装 Kubernetes 运算符,在 Symphony 主机上安装提供程序插件,并配置 Symphony 的主机工厂服务以与 GKE 通信。
如需详细了解适用于 Google Cloud的 Symphony 连接器,请参阅将 IBM Spectrum Symphony 与Google Cloud集成。
准备工作
如需为 GKE 安装 Symphony 提供程序,您必须拥有以下资源:
- 已启用主机工厂服务的正在运行的 IBM Spectrum Symphony 集群。
- 正在运行的 GKE 集群。如需创建集群,请参阅 GKE 概览。
- 具有相应权限的服务账号。如需了解详情,请参阅所需角色部分。
kubectl命令行工具已安装并配置为与您的 GKE 集群通信。
所需的角色
如需获得安装操作员和管理 Symphony pod 所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:
-
如需管理 Kubernetes 资源,您需要具备以下角色:
Kubernetes Engine Admin (
roles/container.admin)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
安装 Kubernetes 操作器
在安装 GKE 提供程序之前,您必须安装关联的 Kubernetes 操作员。该运算符用于管理 GKE 集群内 Symphony 计算 pod 的生命周期。
构建操作员映像
如需为运算符生成并部署 Kubernetes 清单,您首先需要构建运算符容器映像。清单包含操作员用于管理 Symphony 的自定义资源定义 (CRD)。如需获取映像,您可以从源代码构建它。
如需从源代码构建 Operator 映像,请完成以下步骤:
从 GitHub 克隆
symphony-gcp-connector代码库:git clone https://github.com/GoogleCloudPlatform/symphony-gcp-connector.git导航到
k8s-operator目录:cd symphony-gcp-connector/k8s-operator为映像名称、注册表和标记设置环境变量:
export IMAGE="gcp-symphony-operator" export REGISTRY="IMAGE_REPO" export TAG="TAG"替换以下内容:
IMAGE_REPO:存储运算符映像的映像代码库。例如,您可以使用 Artifact Registry 存储您的运算符映像。如需了解详情,请参阅创建 Docker 代码库。TAG:运算符映像的标记,例如0.0.1。
构建并推送 operator 映像:
bash -c 'docker buildx build --platform linux/amd64 -t $IMAGE:$TAG -t $IMAGE:latest -t $REGISTRY/$IMAGE:$TAG -t $REGISTRY/$IMAGE:latest .' bash -c 'docker push $REGISTRY/$IMAGE:$TAG && docker push $REGISTRY/$IMAGE:latest'
配置 operator 清单
获得运算符映像后,您需要生成并配置 Kubernetes 清单。
如需生成清单,请将
export-manifests命令与运算符映像搭配使用:docker run --rm gcp-symphony-operator:latest export-manifests > manifests.yaml在您选择的文本编辑器中打开
manifests.yaml文件。在
spec.template.spec.containers部分中,找到image字段,并将其值更新为您推送到注册表的映像的完整路径。... containers: - image: IMAGE_REPO/gcp-symphony-operator:TAG name: manager ...替换以下内容:
IMAGE_REPO:您推送了运算符映像的映像仓库的路径。TAG:您在构建运算符映像时为其分配的标记。
可选:您还可以修改
imagePullPolicy值,使其与您的集群管理实践保持一致。
应用 operator 清单
配置清单后,将其应用于 Kubernetes 集群。您可以使用 kubectl 或 Cluster Toolkit 应用清单。
kubectl:如需使用
kubectl应用清单,请运行以下命令:kubectl apply -f manifests.yamlCluster Toolkit:如果您的 GKE 基础架构由 Cluster Toolkit 管理,请向 GKE 蓝图添加
modules/management/kubectl-apply来源以应用清单。以下是一个配置示例,假设manifests.yaml文件与 GKE 蓝图位于同一目录中:- id: symphony_operator_install source: modules/management/kubectl-apply use: [gke_cluster] settings: apply_manifests: - source: $(ghpc_stage("manifests.yaml"))如需了解详情,请参阅 Cluster Toolkit 概览。
加载主机工厂环境变量
在配置或管理宿主工厂服务之前,您必须将 Symphony 环境变量加载到 shell 会话中。在 Symphony 主宿主虚拟机上,运行以下命令:
source INSTALL_FOLDER/profile.platform
将 INSTALL_FOLDER 替换为安装文件夹的路径。默认的 Symphony 安装文件夹路径为 /opt/ibm/spectrumcomputing。不过,如果您将 Symphony 安装在其他位置,则必须使用适合您环境的正确路径。
此命令会执行 profile.platform 脚本,该脚本会导出 $EGO_TOP 和 $HF_TOP 等基本环境变量,并将 Symphony 命令行工具添加到 shell 的 PATH。您必须为每个新的终端会话运行此命令,以确保环境配置正确。
安装提供程序插件
若要将 GKE 提供程序与 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为 GKE 安装提供程序软件包:
sudo yum install -y hf-gcpgke-provider.x86_64
RPM 安装会自动将提供程序可执行文件和脚本放置在 Symphony 主机工厂服务的正确目录中。安装后,提供程序插件的目录结构(对于路径 $HF_TOP/$HF_VERSION/providerplugins/gcpgke)如下所示:
├── bin
│ ├── hf-gke
│ └── README.md
└── 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使用
uvPython 软件包管理器创建 Python 虚拟环境:uv venv激活此虚拟环境:
source .venv/bin/activate安装所需的项目依赖项:
uv pip install .安装 PyInstaller,该工具可将 Python 应用捆绑到独立的可执行文件中:
uv pip install pyinstaller为 Google Kubernetes Engine 集群创建
hf-gkeCLI:uv run pyinstaller hf-gke.spec --clean如需验证安装,请针对可执行文件运行
--help命令。如果您未设置必需的环境变量,可能会看到错误。dist/hf-gke --help如果您手动构建提供程序,请为二进制文件和脚本创建提供程序插件目录:
mkdir -p $HF_TOP/$HF_VERSION/providerplugins/gcpgke/bin mkdir -p $HF_TOP/$HF_VERSION/providerplugins/gcpgke/scripts将
hf-gke二进制文件和脚本复制到提供方插件目录。hf-gke二进制文件位于 PyInstaller 创建的dist/目录中,脚本位于scripts/gcpgke/目录中:cp dist/hf-gke $HF_TOP/$HF_VERSION/providerplugins/gcpgke/bin/ cp scripts/gcpgke/* $HF_TOP/$HF_VERSION/providerplugins/gcpgke/scripts/安装后,提供程序插件的目录结构(路径为
$HF_TOP/$HF_VERSION/providerplugins/gcpgke)如下所示:
├── bin
│ └── hf-gke
└── scripts
├── getAvailableTemplates.sh
├── getRequestStatus.sh
├── getReturnRequests.sh
├── requestMachines.sh
└── requestReturnMachines.sh
启用提供方插件
如需启用 GKE 提供程序插件,您必须在宿主工厂配置中注册该插件。
打开
${HF_TOP}/conf/providerplugins/hostProviderPlugins.json文件。source 命令用于在您的环境中定义
$HF_TOP环境变量。该值是 IBM Spectrum Symphony 主机工厂服务的顶级安装目录的路径。添加
gcpgke提供方插件部分:{ "name": "gcpgke", "enabled": 1, "scriptPath": "${HF_TOP}/${HF_VERSION}/providerplugins/gcpgke/scripts/" }
设置提供方实例
如需为您的环境配置 GKE 提供程序,请创建提供程序实例。
如果您手动构建连接器,请为提供程序实例创建一个目录,例如:
$HF_TOP/conf/providers/gcpgkeinst/。如果您已获取
profile.platform script的来源,则$HF_TOP环境变量已在您的环境中定义。该值是 IBM Spectrum Symphony 主机工厂服务的顶级安装目录的路径。在提供方实例目录 (
$HF_TOP/conf/providers/gcpgkeinst/) 中,创建或配置gcpgkeinstprov_config.json文件。此文件包含提供程序的主要配置。如果您使用 RPM 软件包安装了提供程序插件,则可以复制示例配置文件,然后对其进行自定义:
cp $HF_TOP/conf/providers/gcpgkeinst/gcpgkeinstprov_config.json.dist $HF_TOP/conf/providers/gcpgkeinst/gcpgkeinstprov_config.json如果您是从源代码构建提供程序的,请创建一个
gcpgkeinstprov_config.json文件。
对于此文件,您通常只需要配置
GKE_KUBECONFIG变量,该变量用于定义关联 GKE 集群的标准 kubectl 配置文件的路径。如果您未指定路径,则默认使用提供程序实例目录中的kubeconfig。您必须确保此路径指向相应提供程序实例所使用的 Kubernetes 集群的有效 kubectl 配置文件。下面是一个示例配置:
{ "GKE_KUBECONFIG": "kubeconfig" }支持以下配置变量:
变量名称 说明 默认值 GKE_KUBECONFIGkubectl 命令所用配置文件的路径。 无 GKE_CRD_NAMESPACE*定义要在其中创建所有资源的 Kubernetes 命名空间。 gcp-symphonyGKE_CRD_GROUP*用于标识 GKE 宿主工厂运算符的自定义资源的资源组。 accenture.comGKE_CRD_VERSION*用于标识 GKE 宿主工厂运算符的自定义资源的版本。 v1GKE_CRD_KIND*为定义计算资源(Pod)请求的自定义资源定义指定的名称。 GCP Symphony ResourceGKE_CRD_SINGULAR*在 API 调用中引用 Google Cloud Symphony ResourceCR 的实例时使用。gcp-symphony-resourceGKE_CRD_RETURN_REQUEST_KIND*用于定义返回计算资源(Pod)的请求的自定义资源定义的名称。 Machine Return RequestGKE_CRD_RETURN_REQUEST_SINGULAR*在 API 调用中引用单个 MachineReturnRequest自定义资源实例时使用。machine-return-requestGKE_REQUEST_TIMEOUT向 GKE 控制平面发送的请求等待响应的时长(以秒为单位)。 300LOG_LEVEL控制 GKE 提供程序写入日志文件的日志详细程度。选项包括 CRITICAL、WARNING、ERROR、INFO、DEBUG。WARNING在同一目录中,创建或配置
gcpgkeinstprov_templates.json文件。此文件定义了提供程序可以创建的 pod 的模板。如果您使用 RPM 软件包安装了提供程序插件,则可以复制示例模板文件,然后对其进行自定义:
cp $HF_TOP/conf/providers/gcpgkeinst/gcpgkeinstprov_templates.json.dist $HF_TOP/conf/providers/gcpgkeinst/gcpgkeinstprov_templates.json如果您是从源代码构建提供程序的,请创建一个
gcpgkeinstprov_templates.json文件。模板属性应与 pod 规范中的资源保持一致。以下是一个模板示例:
{ "templates": [ { "templateId": "template-gcp-01", "maxNumber": 5000, "attributes": { "type": [ "String", "X86_64" ], "ncores": [ "Numeric", "1" ], "ncpus": [ "Numeric", "1" ], "nram": [ "Numeric", "2048" ] }, "podSpecYaml": "pod-specs/pod-spec.yaml" } ] }
在同一目录中,创建一个
kubeconfig文件,该文件是 Kubernetes 集群的有效 kubectl 配置文件。在提供程序实例目录中,创建或修改
pod-spec.yaml文件。 此文件充当模板,用于定义在 GKE 集群中创建的 Symphony 计算 Pod 的规范。根据此规范创建的 pod 用作计算节点,需要访问 Symphony 安装。此访问权限可通过包含 Symphony 安装的容器映像提供,也可通过包含安装的共享文件系统装载提供。启动时,Pod 会使用此访问权限加入 Symphony 集群。
创建该文件的步骤取决于您安装提供程序的方式:
如果您是从 RPM 软件包安装的提供程序,请复制安装中包含的示例
pod-spec.yaml.dist文件:cp $HF_TOP/conf/providers/gcpgkeinst/pod-specs/pod-spec.yaml.dist $HF_TOP/conf/providers/gcpgkeinst/pod-specs/pod-spec.yaml如果您是从源代码构建提供程序,请手动创建
pod-specs目录和pod-spec.yaml文件:mkdir -p $HF_TOP/conf/providers/gcpgkeinst/pod-specs touch $HF_TOP/conf/providers/gcpgkeinst/pod-specs/pod-spec.yaml
创建这些文件后,验证您的提供程序实例目录是否如下所示:
├── gcpgkeinstprov_config.json ├── gcpgkeinstprov_templates.json ├── kubeconfig └── pod-specs └── pod-spec.yaml
启用提供方实例
如需激活提供程序实例,请在宿主工厂配置文件中启用它:
打开
$HF_TOP/conf/providers/hostProviders.json文件。添加
gcpgkeinst提供方实例部分:{ "name": "gcpgkeinst", "enabled": 1, "plugin": "gcpgke", "confPath": "${HF_CONFDIR}/providers/gcpgkeinst/", "workPath": "${HF_WORKDIR}/providers/gcpgkeinst/", "logPath": "${HF_LOGDIR}/" }您无需替换此配置中的
${HF_CONFDIR}、${HF_WORKDIR}和${HF_LOGDIR}变量,因为它们是 IBM Spectrum Symphony 主机工厂环境自动定义的标准环境变量。当您通过运行
source command配置 shell 会话时,此脚本会将这些变量设置为指向 Symphony 安装中的正确子目录。然后,宿主工厂服务会使用这些变量在运行时构建完整路径。
启用请求者实例
如需允许特定 Symphony 组件使用 GKE 提供程序来预配资源,请为该请求者启用该提供程序。
打开
$HF_TOP/conf/requestors/hostRequestors.json文件。在相应的请求者实例中,向
providers参数添加gcpgkeinst:"providers": ["gcpgkeinst"],提供方值必须与您在启用提供方实例中使用的提供方名称一致。
启动主机工厂服务
如需应用配置更改,请启动主机工厂服务。在 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 用户的密码。
测试连接器
创建资源请求以测试 GKE 的提供程序。
为此,请使用以下方法之一:
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=SYMPHONY_TEMPLATE_ID PROVIDER_NAME=gcpgkeinst 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:gcpgkeinstprov_templates.json文件中定义的templateId,例如template-gcp-01。SYMPHONY_USER:用于身份验证的 Symphony 用户。SYMPHONY_PASSWORD:Symphony 用户的密码。
如果成功,则输出类似于以下示例:
{"scheduled_request_id":["SD-641ef442-1f9e-40ae-ae16-90e152ed60d2"]}