安装 Google Kubernetes Symphony 提供程序

如需将 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 提供程序,您必须拥有以下资源:

所需的角色

如需获得安装操作员和管理 Symphony pod 所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:

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

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

安装 Kubernetes 操作器

在安装 GKE 提供程序之前,您必须安装关联的 Kubernetes 操作员。该运算符用于管理 GKE 集群内 Symphony 计算 pod 的生命周期。

构建操作员映像

如需为运算符生成并部署 Kubernetes 清单,您首先需要构建运算符容器映像。清单包含操作员用于管理 Symphony 的自定义资源定义 (CRD)。如需获取映像,您可以从源代码构建它。

如需从源代码构建 Operator 映像,请完成以下步骤:

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

    git clone https://github.com/GoogleCloudPlatform/symphony-gcp-connector.git
    
  2. 导航到 k8s-operator 目录:

    cd symphony-gcp-connector/k8s-operator
    
  3. 为映像名称、注册表和标记设置环境变量:

    export IMAGE="gcp-symphony-operator"
    export REGISTRY="IMAGE_REPO"
    export TAG="TAG"
    

    替换以下内容:

    • IMAGE_REPO:存储运算符映像的映像代码库。例如,您可以使用 Artifact Registry 存储您的运算符映像。如需了解详情,请参阅创建 Docker 代码库
    • TAG:运算符映像的标记,例如 0.0.1
  4. 构建并推送 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 清单。

  1. 如需生成清单,请将 export-manifests 命令与运算符映像搭配使用:

    docker run --rm gcp-symphony-operator:latest export-manifests > manifests.yaml
    
  2. 在您选择的文本编辑器中打开 manifests.yaml 文件。

  3. spec.template.spec.containers 部分中,找到 image 字段,并将其值更新为您推送到注册表的映像的完整路径。

    ...
    containers:
    - image: IMAGE_REPO/gcp-symphony-operator:TAG
      name: manager
    ...
    

    替换以下内容:

    • IMAGE_REPO:您推送了运算符映像的映像仓库的路径。

    • TAG:您在构建运算符映像时为其分配的标记。

  4. 可选:您还可以修改 imagePullPolicy 值,使其与您的集群管理实践保持一致。

应用 operator 清单

配置清单后,将其应用于 Kubernetes 集群。您可以使用 kubectlCluster Toolkit 应用清单。

  • kubectl:如需使用 kubectl 应用清单,请运行以下命令:

    kubectl apply -f manifests.yaml
    
  • Cluster 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 主宿主机虚拟机上按照以下步骤操作:

  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. 为 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 可执行文件,请按以下步骤操作:

  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 软件包管理器创建 Python 虚拟环境:

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

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

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

    uv pip install pyinstaller
    
  8. 为 Google Kubernetes Engine 集群创建 hf-gke CLI:

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

    dist/hf-gke --help
    
  10. 如果您手动构建提供程序,请为二进制文件和脚本创建提供程序插件目录:

    mkdir -p $HF_TOP/$HF_VERSION/providerplugins/gcpgke/bin
    mkdir -p $HF_TOP/$HF_VERSION/providerplugins/gcpgke/scripts
    
  11. 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 提供程序插件,您必须在宿主工厂配置中注册该插件。

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

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

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

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

设置提供方实例

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

  1. 如果您手动构建连接器,请为提供程序实例创建一个目录,例如:$HF_TOP/conf/providers/gcpgkeinst/

    如果您已获取 profile.platform script 的来源,则 $HF_TOP 环境变量已在您的环境中定义。该值是 IBM Spectrum Symphony 主机工厂服务的顶级安装目录的路径。

  2. 在提供方实例目录 ($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_KUBECONFIG kubectl 命令所用配置文件的路径。
    GKE_CRD_NAMESPACE* 定义要在其中创建所有资源的 Kubernetes 命名空间。 gcp-symphony
    GKE_CRD_GROUP* 用于标识 GKE 宿主工厂运算符的自定义资源的资源组。 accenture.com
    GKE_CRD_VERSION* 用于标识 GKE 宿主工厂运算符的自定义资源的版本。 v1
    GKE_CRD_KIND* 为定义计算资源(Pod)请求的自定义资源定义指定的名称。 GCP Symphony Resource
    GKE_CRD_SINGULAR* 在 API 调用中引用 Google Cloud Symphony Resource CR 的实例时使用。 gcp-symphony-resource
    GKE_CRD_RETURN_REQUEST_KIND* 用于定义返回计算资源(Pod)的请求的自定义资源定义的名称。 Machine Return Request
    GKE_CRD_RETURN_REQUEST_SINGULAR* 在 API 调用中引用单个 MachineReturnRequest 自定义资源实例时使用。 machine-return-request
    GKE_REQUEST_TIMEOUT 向 GKE 控制平面发送的请求等待响应的时长(以秒为单位)。 300
    LOG_LEVEL 控制 GKE 提供程序写入日志文件的日志详细程度。选项包括 CRITICALWARNINGERRORINFODEBUG WARNING
  3. 在同一目录中,创建或配置 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"
              }
          ]
      }
      
  4. 在同一目录中,创建一个 kubeconfig 文件,该文件是 Kubernetes 集群的有效 kubectl 配置文件。

  5. 在提供程序实例目录中,创建或修改 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
      
  6. 创建这些文件后,验证您的提供程序实例目录是否如下所示:

    ├── gcpgkeinstprov_config.json
    ├── gcpgkeinstprov_templates.json
    ├── kubeconfig
    └── pod-specs
        └── pod-spec.yaml
    

启用提供方实例

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

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

  2. 添加 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 提供程序来预配资源,请为该请求者启用该提供程序。

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

  2. 在相应的请求者实例中,向 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 创建资源请求,请按以下步骤操作:

    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=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_IDgcpgkeinstprov_templates.json 文件中定义的 templateId,例如 template-gcp-01
      • SYMPHONY_USER:用于身份验证的 Symphony 用户。
      • SYMPHONY_PASSWORD:Symphony 用户的密码。

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

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

后续步骤