Google Kubernetes Symphony 제공업체 설치

동적 리소스 관리를 위해 IBM Symphony를 Google Kubernetes Engine (GKE)과 통합하려면 GKE용 Symphony 제공자를 설치하고 구성해야 합니다. 이 제공자를 사용하면 Symphony가 GKE 클러스터에서 컴퓨팅 리소스를 포드로 프로비저닝하고 관리할 수 있으므로 Kubernetes 조정을 통해 워크로드를 효율적으로 확장할 수 있습니다.

이 통합을 사용 설정하려면 클러스터에 Kubernetes 연산자를 설치하고, Symphony 기본 호스트에 제공업체 플러그인을 설치하고, GKE와 통신하도록 Symphony의 호스트 팩토리 서비스를 구성합니다.

Google Cloud용 Symphony 커넥터에 대한 자세한 내용은 IBM Spectrum Symphony와Google Cloud통합을 참고하세요.

시작하기 전에

GKE용 Symphony 공급자를 설치하려면 다음 리소스가 있어야 합니다.

필요한 역할

운영자를 설치하고 Symphony 포드를 관리하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

Kubernetes Operator 설치

GKE 제공자를 설치하기 전에 연결된 Kubernetes 연산자를 설치해야 합니다. 연산자는 GKE 클러스터 내에서 Symphony 컴퓨팅 포드의 수명 주기를 관리합니다.

연산자 이미지 빌드

연산자의 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'
    

연산자 매니페스트 구성

운영자 이미지가 있으면 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 값을 수정할 수도 있습니다.

연산자 매니페스트 적용

매니페스트를 구성한 후 Kubernetes 클러스터에 적용합니다. kubectl 또는 Cluster Toolkit을 사용하여 매니페스트를 적용할 수 있습니다.

  • kubectl: kubectl을 사용하여 매니페스트를 적용하려면 다음 명령어를 실행합니다.

    kubectl apply -f manifests.yaml
    
  • Cluster Toolkit: GKE 인프라가 Cluster Toolkit으로 관리되는 경우 GKE 청사진에 modules/management/kubectl-apply 소스를 추가하여 매니페스트를 적용합니다. 다음은 manifests.yaml 파일이 GKE Blueprint와 동일한 디렉터리에 있다고 가정하는 구성의 예입니다.

      -   id: symphony_operator_install
          source: modules/management/kubectl-apply
          use: [gke_cluster]
          settings:
          apply_manifests:
            -   source: $(ghpc_stage("manifests.yaml"))
    

    자세한 내용은 클러스터 툴킷 개요를 참고하세요.

호스트 팩토리 환경 변수 로드

호스트 팩토리 서비스를 구성하거나 관리하려면 셸 세션에 Symphony 환경 변수를 로드해야 합니다. Symphony 기본 호스트 VM에서 다음 명령어를 실행합니다.

source INSTALL_FOLDER/profile.platform

INSTALL_FOLDER을 설치 폴더의 경로로 바꿉니다. 기본 Symphony 설치 폴더 경로는 /opt/ibm/spectrumcomputing입니다. 하지만 다른 곳에 Symphony를 설치한 경우 환경에 맞는 올바른 경로를 사용해야 합니다.

이 명령어는 profile.platform 스크립트를 실행합니다. 이 스크립트는 $EGO_TOP$HF_TOP와 같은 필수 환경 변수를 내보내고 Symphony 명령줄 도구를 셸의 PATH에 추가합니다. 환경이 올바르게 구성되도록 새 터미널 세션마다 이 명령어를 실행해야 합니다.

제공업체 플러그인 설치

GKE 제공자를 Symphony의 호스트 팩토리와 통합하려면 RPM 패키지에서 사전 빌드된 제공자 플러그인을 설치하거나 소스 코드에서 제공자를 빌드하세요.

사전 빌드된 제공업체 플러그인 설치

RPM 패키지를 사용하여 제공업체 플러그인을 설치하려면 Symphony 기본 호스트 VM에서 다음 단계를 따르세요.

  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. Python 애플리케이션을 독립형 실행 파일로 번들링하는 PyInstaller를 설치합니다.

    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 클러스터의 표준 kubectl 구성 파일 경로를 정의하는 GKE_KUBECONFIG 변수만 구성하면 됩니다. 경로를 지정하지 않으면 기본값은 제공업체 인스턴스 디렉터리의 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* 컴퓨팅 리소스 (포드) 요청을 정의하는 맞춤 리소스 정의에 지정된 이름입니다. GCP Symphony Resource
    GKE_CRD_SINGULAR* Google Cloud Symphony Resource CR의 인스턴스를 참조할 때 API 호출에 사용됩니다. gcp-symphony-resource
    GKE_CRD_RETURN_REQUEST_KIND* 컴퓨팅 리소스 (포드)를 반환하는 요청을 정의하는 맞춤 리소스 정의에 지정된 이름입니다. Machine Return Request
    GKE_CRD_RETURN_REQUEST_SINGULAR* 단일 MachineReturnRequest 커스텀 리소스 인스턴스를 참조할 때 API 호출에 사용됩니다. machine-return-request
    GKE_REQUEST_TIMEOUT GKE 컨트롤 플레인에 대한 요청이 응답을 기다리는 시간(초)입니다. 300
    LOG_LEVEL GKE 제공자가 로그 파일에 쓰는 로그 세부정보 수준을 제어합니다. 옵션은 CRITICAL, WARNING, ERROR, INFO, DEBUG입니다. WARNING
  3. 동일한 디렉터리에서 gcpgkeinstprov_templates.json 파일을 만들거나 구성합니다. 이 파일은 제공자가 만들 수 있는 포드의 템플릿을 정의합니다.

    • RPM 패키지를 사용하여 제공업체 플러그인을 설치한 경우 예시 템플릿 파일을 복사한 후 맞춤설정할 수 있습니다.

      cp $HF_TOP/conf/providers/gcpgkeinst/gcpgkeinstprov_templates.json.dist $HF_TOP/conf/providers/gcpgkeinst/gcpgkeinstprov_templates.json
      
    • 소스에서 제공자를 빌드한 경우 gcpgkeinstprov_templates.json 파일을 만듭니다.

      템플릿 속성은 포드 사양의 리소스와 일치해야 합니다. 다음은 템플릿의 예시입니다.

      {
          "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. 동일한 디렉터리에서 Kubernetes 클러스터의 유효한 kubectl 구성 파일인 kubeconfig 파일을 만듭니다.

  5. 제공업체 인스턴스 디렉터리에서 pod-spec.yaml 파일을 만들거나 수정합니다. 이 파일은 GKE 클러스터에 생성되는 Symphony 컴퓨팅 포드의 사양을 정의하는 템플릿 역할을 합니다.

    이 사양에서 생성된 포드는 컴퓨팅 노드 역할을 하며 Symphony 설치에 액세스해야 합니다. 이 액세스는 Symphony 설치가 포함된 컨테이너 이미지를 통해 또는 설치가 포함된 공유 파일 시스템 마운트를 통해 제공될 수 있습니다. 시작 시 포드는 이 액세스를 사용하여 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를 실행하여 셸 세션을 구성하면 이 스크립트가 이러한 변수를 설정하여 Symphony 설치 내의 올바른 하위 디렉터리를 가리킵니다. 그런 다음 호스트 팩토리 서비스는 이러한 변수를 사용하여 런타임에 전체 경로를 구성합니다.

요청자 인스턴스 사용 설정

특정 Symphony 구성요소가 GKE 제공업체를 사용하여 리소스를 프로비저닝하도록 하려면 해당 요청자에 대해 사용 설정하세요.

  1. $HF_TOP/conf/requestors/hostRequestors.json 파일을 엽니다.

  2. 적절한 요청자 인스턴스에서 providers 매개변수에 gcpgkeinst를 추가합니다.

    "providers": ["gcpgkeinst"],
    

    제공자 값은 제공자 인스턴스 사용 설정에서 사용하는 제공자 이름과 일치해야 합니다.

호스트 팩토리 서비스 시작

구성 변경사항을 적용하려면 호스트 팩토리 서비스를 시작합니다. Symphony 기본 호스트 VM에서 클러스터 관리자로 로그인하고 서비스를 시작합니다.

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: 이전 명령어 출력의 기본 호스트 호스트 이름입니다.
      • 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"]}
      

다음 단계