安装 Google Kubernetes Symphony 提供程序

如需将 IBM Symphony 与 Google Kubernetes Engine (GKE) 集成以实现动态资源管理,您必须为 GKE 安装并配置 Symphony 提供方。借助此提供程序,Symphony 可以将计算资源作为 Pod 在 GKE 集群中进行预配和管理,从而通过 Kubernetes 编排实现高效的工作负载伸缩。

如需启用此集成,您需要在集群中安装 Kubernetes 运算符,在 Symphony 主机上安装提供方插件,并配置 Symphony 的主机工厂服务以与 GKE 通信。

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

准备工作

如需为 GKE 安装 Symphony 提供方,您必须拥有以下资源:

所需的角色

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

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

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

安装 Kubernetes 操作员

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

构建操作员映像

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

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

  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. 构建并推送运算符映像:

    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. 为 Cloud de Confiance by S3NS 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 调用中引用 Cloud de Confiance by S3NS 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"]}
      

后续步骤