클러스터 확장 동작 구성

이 페이지에서는 배포의 확장 동작을 지정하는 Game Servers 구성을 만들고 관리하는 방법을 설명합니다. 확장 구성에서는 렐름의 특정 Game Servers 클러스터만 타켓팅하도록 맞춤설정할 수 있습니다.

시작하기 전에

시작하기 전에 Game Servers 개요의 주요 개념을 숙지하는 것이 좋습니다. 또한 다음 태스크를 수행했는지 확인합니다.

  • Game Services API가 사용 설정되어 있는지 확인합니다.
  • Game Services API 사용 설정
  • Cloud SDK가 설치된 셸을 선택하거나 API 클라이언트를 사용하세요.
  • Cloud Shell

    Cloud Shell을 시작하려면 다음 단계를 수행하세요.

    1. Google Cloud Console로 이동합니다.

      Google Cloud Console

    2. Console의 오른쪽 상단에서 Cloud Shell 활성화 버튼을 클릭합니다.

    Console 하단의 프레임에서 Cloud Shell 세션이 열립니다. 이 셸을 사용하여 gcloud 명령어를 실행합니다.

    로컬 셸

    gcloud를 설치하려면 gcloud 명령줄 도구가 포함된 Cloud SDK를 설치합니다.

    gcloud 명령줄 도구에 대해 원하는 기본 프로젝트를 설정했는지 확인합니다. 그렇지 않으면 나중에 각 명령어에 대해 명시적으로 --project 플래그를 지정해야 합니다.

    gcloud config list project
    

    사용할 수 없는 경우 다음 명령어를 실행하여 기본 프로젝트를 설정하고 PROJECT_ID를 원하는 프로젝트 ID로 바꾸세요.

    gcloud config set project PROJECT_ID
    

    다음 명령어를 실행하여 Google Cloud SDK의 버전을 확인합니다. Game Servers에는 306.0.0 이상의 SDK 버전이 필요합니다.

    gcloud version
    

    설치를 업데이트하려면 다음 명령어를 실행합니다.

    gcloud components update
    

    curl / PowerShell

    curl 또는 Windows PowerShell에서 REST API를 사용하려면 다음을 수행합니다.

    1. 서비스 계정 만들기.
    2. 비공개 키를 JSON 파일로 다운로드합니다.
    3. GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 서비스 계정 키가 포함된 JSON 파일의 경로로 설정합니다. 이 변수는 현재 셸 세션에만 적용되므로, 새 세션을 열 경우, 변수를 다시 설정합니다.

    클라이언트 라이브러리

    클라이언트 라이브러리를 사용하여 Google Cloud Game Servers를 프로그래매틱 방식으로 제어할 수 있습니다. 라이브러리 사용 및 인증에 대한 안내는 클라이언트 라이브러리 개요를 참조하세요.

구성 만들기

Game Servers 배포를 생성했는지 확인합니다.

gcloud 명령줄 도구를 사용하여 배포에서 Game Servers 구성을 만들 수 있습니다.

게임 서버 구성을 만들려면 다음 안내를 따르세요.

  1. 다음 플릿 사양을 파일에 복사합니다.

    - name: fleet-spec-1
      fleetSpec:
       replicas: 0
       scheduling: Packed
       strategy:
         type: RollingUpdate
         rollingUpdate:
           maxSurge: 25%
           maxUnavailable: 25%
       template:
         metadata:
           labels:
             gameName: udp-server
         spec:
           ports:
           - name: default
             portPolicy: Dynamic
             containerPort: 7654
             protocol: UDP
           health:
             initialDelaySeconds: 30
             periodSeconds: 60
           sdkServer:
             logLevel: Info
             grpcPort: 9357
             httpPort: 9358
           template:
             spec:
               containers:
               - name: dedicated
                 image: gcr.io/agones-images/udp-server:0.21
                 imagePullPolicy: Always
                 resources:
                   requests:
                     memory: 200Mi
                     cpu: 500m
                   limits:
                     memory: 200Mi
                     cpu: 500m
    
  2. 다음 확장 구성 사양을 파일에 복사합니다.

    - name: scaling-config-1
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            bufferSize: 1
            minReplicas: 0
            maxReplicas: 4
    
  3. 다음 명령어를 실행하고 deploymentIDconfigID 같은 자리표시자 값을 적절한 값으로 바꿉니다.

    gcloud game servers configs create configID --deployment deploymentID --fleet-configs-file fleetSpecFile --scaling-configs-file scalingConfigsFile
    

    변수 자리표시자는 다음 설명에 해당됩니다.

  • configID는 이 구성에 지정할 수 있는 고유 식별자입니다.
  • deploymentID는 배포의 고유 식별자입니다.
  • fleetSpecFile은 Agones 플릿 사양이 포함된 파일의 경로입니다.
  • scalingConfigsFile은 확장 사양이 있는 파일의 경로입니다.

배포 구성 설정

확장 정책으로 Game Servers 구성을 만든 후 Game Servers 배포용으로 출시를 업데이트하여 기본 구성으로 설정합니다.

Game Servers는 모든 클러스터에 확장 동작을 적용합니다.

확장 사양 확인

Game Servers가 구성된 확장을 클러스터에 적용했는지 확인하려면 렐름 내의 각 클러스터에 대해 다음 명령어를 실행합니다. namespace 자리표시자를 Kubernetes 클러스터를 게임 서버 클러스터로 등록할 때 지정한 네임스페이스로 바꿉니다.

   kubectl get fleetautoscaler --namespace namespace
   

변수 자리표시자는 다음 설명에 해당됩니다.

  • namespace는 등록할 때 사용한 네임스페이스입니다.

특정 클러스터만 확장

확장 구성을 렐름의 특정 Game Servers 클러스터로 제한할 수 있습니다. 이렇게 하려면 클러스터에 라벨을 추가한 후 확장 구성에서 라벨이 있는 해당 클러스터만 타겟팅하면 됩니다.

다음 단계를 따르세요.

  1. 라벨을 추가하여 클러스터를 업데이트합니다. 라벨은 key=value 형식의 키-값 쌍입니다. 이 예시에서는 라벨을 --labels=cloud=true로 지정합니다.

    gcloud game servers clusters update gscID --realm=realmID --location=region \
      --update-labels=labels --no-dry-run
    

    다른 변수 자리표시자는 다음 설명에 해당됩니다.

    • gscID는 이 클러스터에 대해 지정할 수 있는 고유 식별자입니다.
    • realmID는 클러스터를 저장할 렐름의 고유 식별자입니다.
    • region은 클러스터의 리전입니다. 상위 렐름과 동일한 리전을 선택합니다.

  2. 구성 만들기 섹션의 단계에 따라 다음을 추가하여 구성을 만듭니다. 확장 구성 사양에 라벨을 추가합니다. 예를 들면 다음과 같습니다.

      - name: scaling-config-1
        fleetAutoscalerSpec:
          policy:
            type: Buffer
            buffer:
              bufferSize: 1
              minReplicas: 0
              maxReplicas: 4
          selectors:
          - labels:
              "cloud": "true"
    
  3. Game Servers 배포의 출시를 업데이트하여 구성을 기본 구성으로 설정합니다.

Game Servers는 확장 구성의 라벨 선택기와 일치하는 라벨이 있는 Game Servers 클러스터에만 확장 구성을 적용합니다. 따라서 이 예시에서는 cloud=true 라벨이 지정된 클러스터는 확장 구성을 가져오고 해당 라벨이 없는 클러스터는 확장 구성을 가져오지 않습니다.

확장 일정 만들기

Game Servers를 사용하면 여러 확장 일정을 구성할 수 있습니다. 시작 및 선택 종료 시간 또는 반복 일정(크론 일정)을 포함하는 여러 확장 일정을 구성할 수 있습니다. 여러 일정과 반복 일정을 결합할 수도 있습니다.

Game Servers는 협정 세계시(UTC)로 시작 및 종료 시간을 평가합니다. 다른 시간대는 UTC 오프셋으로 지원됩니다. 시작 및 종료 시간은 RFC 3339 날짜 문자열로 지정됩니다. Game Servers가 지원하는 가장 낮은 정밀도는 분입니다.

Game Servers는 일치하는 일정을 찾을 때까지 구성에 나열된 순서대로 확장 일정을 평가합니다. 이 섹션에서는 다양한 일정 예약 예시를 설명합니다.

다중 확장 일정 만들기

특별한 이벤트에 대한 다음 확장 일정 사양을 조정할 수 있습니다. 이 예시에서 Game Servers는 다음과 같은 확장 일정을 적용합니다.

  • 2020년 6월 1일 17:00~22:30, 2020년 6월 7일 12:00~18:00 사이에 scaling-config-june1-and-7
  • 2020년 5월 25일~2021년 5월 31일 사이의 다른 모든 기간에 대해 기본 scaling-config-default 구성

    - name: scaling-config-june1-and-7
      schedules:
      - startTime: "2020-06-01T17:00:00Z"
        endTime: "2020-06-01T22:30:00Z"
      - startTime: "2020-06-07T12:00:00Z"
        endTime: "2020-06-07T18:00:00Z"
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            maxReplicas: 100
            minReplicas: 10
            bufferSize: 5
    - name: scaling-config-default
      schedules:
      - startTime: "2020-05-25T00:00:00Z"
        endTime: "2021-05-31T00:00:00Z"
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            maxReplicas: 5
            minReplicas: 1
            bufferSize: 1
    

반복 확장 일정 만들기

다음 예시 사양은 사용량이 많은 시간에 용량 증가를 처리하기 위한 반복 크론 확장 일정을 보여줍니다. 이 예시에서 Game Servers는 다음과 같은 확장 일정을 적용합니다.

  • 평일 17:00~20:00 사이에 scaling-config-weekday-peak
  • 주말 13:00~17:00 사이에 scaling-config-weekend-peak
  • 그 외 모든 시간에 기본 scaling-config-default 구성

    - name: scaling-config-weekday-peak
      schedules:
      - cronJobDuration: 3600s
        cronSpec: '0 17-20 * * 1-5'
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            maxReplicas: 100
            minReplicas: 10
            bufferSize: 5
    - name: scaling-config-weekend-peak
      schedules:
      - cronJobDuration: 3600s
        cronSpec: '0 13-17 * * 0,6'
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            maxReplicas: 150
            minReplicas: 20
            bufferSize: 10
    - name: scaling-config-default
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            maxReplicas: 5
            minReplicas: 1
            bufferSize: 1
    

다중 반복 일정 만들기

확장 사양에는 시작 및 종료 시간 필드와 반복 크론 일정이 모두 포함될 수 있습니다. 이 예시에서 Game Servers는 다음과 같은 확장 일정을 적용합니다.

  • 7월 4일부터 7월 7일까지 9:00~23:00 사이에 scaling-config-july4
  • 매일 17:00~22:00 사이에 scaling-config-peak
  • 그 외 모든 시간에 기본 scaling-config-default 구성

    - name: scaling-config-july4
      schedules:
      - cronJobDuration: 3600s
        cronSpec: '0 9-18 * * *'
        startTime: "2020-07-04T00:00:00Z"
        endTime: "2020-07-07T00:30:00Z"
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            maxReplicas: 150
            minReplicas: 10
            bufferSize: 5
    - name: scaling-config-peak
      schedules:
      - cronJobDuration: 3600s
        cronSpec: '0 17-22 * * *'
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            maxReplicas: 100
            minReplicas: 10
            bufferSize: 5
    - name: scaling-config-default
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            maxReplicas: 40
            minReplicas: 5
            bufferSize: 4
    

다음 단계