사용자 클러스터 만들기

Google Distributed Cloud에서는 사용자 클러스터가 워크로드를 실행하며, 멀티 클러스터 아키텍처에서는 관리자 클러스터가 사용자 클러스터를 만들고 관리합니다.

관리자 클러스터를 만든 후 bmctl create config 명령어를 호출하면 YAML 파일이 생성되고, 이를 수정하여 사용자 클러스터를 정의할 수 있습니다. 구성을 적용하고 사용자 클러스터를 만들려면 bmctl create cluster 명령어를 사용합니다. bmctl create cluster 명령어로 생성된 사용자 클러스터에 실행 전 검사를 적용할 수 있습니다.

워크로드를 관리자 클러스터와 분리하면 관리자 클러스터에 저장된 SSH 키와 같은 민감한 관리 데이터가 해당 정보에 액세스할 필요가 없는 사용자로부터 보호됩니다. 또한 사용자 클러스터를 서로 분리하면 워크로드에 전체적으로 준수한 보안이 제공됩니다.

기본 요건

  • Cloud Storage에서 최신 bmctl을 다운로드했습니다(gs://anthos-baremetal-release/bmctl/1.30.100-gke.96/linux-amd64/bmctl).
  • 클러스터 API 서버(controlPlaneVIP)에 대한 액세스 권한이 있으며 작동 중인 관리자 클러스터
  • 관리자 클러스터 노드가 타겟 사용자 클러스터의 모든 노드에 네트워크로 연결되어 있습니다.
  • bmctl을 실행하는 워크스테이션은 대상 사용자 클러스터의 모든 노드에 네트워크로 연결되어 있습니다.
  • 관리자 워크스테이션은 각 사용자 클러스터 노드에 대한 SSH 연결을 설정할 수 있습니다.
  • Connect-register 서비스 계정은 Connect에서 사용할 수 있도록 관리자 클러스터에서 구성됩니다.

SELinux 사용 설정

컨테이너 보안을 위해 SELinux를 사용 설정하려면 모든 호스트 머신에서 SELinux가 Enforced 모드로 사용 설정되었는지 확인해야 합니다. Google Distributed Cloud 출시 버전 1.9.0 이상부터는 클러스터 만들기 또는 클러스터 업그레이드 전후에 SELinux를 사용 설정 또는 사용 중지할 수 있습니다. SELinux는 기본적으로 Red Hat Enterprise Linux(RHEL)에서 사용 설정됩니다. SELinux가 호스트 머신에 사용 중지되었거나 확실하지 않으면 SELinux를 사용하여 컨테이너 보안에서 이를 사용 중지하는 방법에 대한 안내를 참조하세요.

Google Distributed Cloud는 RHEL 시스템에서만 SELinux를 지원합니다.

사용자 클러스터 구성 파일 만들기

사용자 클러스터를 만들기 위한 구성 파일은 관리자 클러스터를 만드는 데 사용되는 것과 거의 동일합니다. 유일한 차이점은 로컬 사용자 인증 정보 구성 섹션을 삭제하여 구성이 유효한 Kubernetes 리소스 모음이 된다는 점입니다. 구성 섹션은 파일 상단의 bmctl configuration variables 섹션 아래에 있습니다. 사용자 클러스터 구성의 예시는 클러스터 구성 샘플에서 사용자 클러스터를 참조하세요.

기본적으로 사용자 클러스터는 사용자 클러스터를 관리하는 관리자 클러스터에서 사용자 인증 정보를 상속합니다. 이러한 사용자 인증 정보의 일부 또는 전체를 선택적으로 재정의할 수 있습니다.

  1. bmctl create config 명령어로 사용자 클러스터 구성 파일을 만듭니다.

    bmctl create config -c USER_CLUSTER_NAME
    

    예를 들어 다음을 실행하여 user1이라는 사용자 클러스터의 구성 파일을 만듭니다.

    bmctl create config -c user1
    

    파일은 bmctl-workspace/user1/user1.yaml에 기록됩니다. 파일의 일반적인 경로는 bmctl-workspace/CLUSTER NAME/CLUSTER_NAME.yaml입니다.

  2. 구성 파일을 다음과 같이 변경하여 수정합니다.

    • 구성에서 로컬 사용자 인증 정보 파일 경로를 삭제합니다.

      ...
        gcrKeyPath: (path to GCR service account key)
        sshPrivateKeyPath: (path to SSH private key, used for node access)
        gkeConnectAgentServiceAccountKeyPath: (path to Connect agent service account key)
        gkeConnectRegisterServiceAccountKeyPath: (path to Hub registration service account key)
        cloudOperationsServiceAccountKeyPath: (path to Cloud Operations service account key)
      ...
      
    • admin 대신 user 클러스터 유형을 지정하도록 구성을 변경합니다.

      ...
      spec:
        # Cluster type. This can be:
        #   1) admin:  to create an admin cluster. This can later be used to create
        #   user clusters.
        #   2) user:   to create a user cluster. Requires an existing admin cluster.
        #   3) hybrid: to create a hybrid cluster that runs admin cluster
        #   components and user workloads.
        #   4) standalone: to create a cluster that manages itself, runs user
        #   workloads, but does not manage other clusters.
        type: user
      ...
      
    • gkeConnect.projectID 필드에 프로젝트 ID를 지정하여 Fleet에 클러스터를 등록합니다. 이 프로젝트를 Fleet 호스트 프로젝트라고 합니다.

      ...
      gkeConnect:
         projectID: my-project-123
      ...
      
      • 원하는 경우 gkeConnect.location을 클러스터 사양에 추가하여 Fleet 및 Connect 서비스가 실행되는 Google Cloud 리전을 지정할 수 있습니다. 이 리전 멤버십은 Fleet 서비스 트래픽을 리전으로 제한합니다. 클러스터 사양에 gkeConnect.location을 포함하는 경우 지정하는 리전이 clusterOperations.location에 구성된 리전과 동일해야 합니다. 리전이 동일하지 않으면 클러스터 생성에 실패합니다.
    • GKE On-Prem API가 Google Cloud 프로젝트에 사용 설정된 경우 프로젝트의 모든 클러스터가 clusterOperations.location에 구성된 리전의 GKE On-Prem API에 자동으로 등록됩니다.

      • GKE On-Prem API에서 프로젝트의 모든 클러스터를 등록하려면 시작하기 전에의 단계를 수행하여 프로젝트의 GKE On-Prem API를 활성화하고 사용해야 합니다.

      • GKE On-Prem API에서 클러스터를 등록하지 않으려면 이 섹션을 포함하고 gkeOnPremAPI.enabledfalse로 설정합니다. 프로젝트에 클러스터를 등록하지 않으려면 프로젝트에서 gkeonprem.googleapis.com(GKE On-Prem API의 서비스 이름)을 중지합니다. 자세한 내용은 서비스 사용 중지를 참조하세요.

    • 컨트롤 플레인 노드의 IP 주소를 지정합니다.

      ...
      # Sample control plane config
      controlPlane:
       nodePoolSpec:
         nodes:
         - address: 10.200.0.20
      ...
      
    • 부하 분산기 VIP 및 주소 풀의 관리자 및 사용자 클러스터 사양이 상호 보완적이며 기존 클러스터와 겹치지 않는지 확인합니다. 다음 예시에서는 부하 분산 및 주소 풀을 지정하는 관리자 및 사용자 클러스터 구성의 샘플 쌍을 보여줍니다.

      ...
      # Sample admin cluster config for load balancer and address pools
        loadBalancer:
          vips:
            controlPlaneVIP: 10.200.0.49
            ingressVIP: 10.200.0.50
          addressPools:
          - name: pool1
            addresses:
            - 10.200.0.50-10.200.0.70
      ...
      ...
      # Sample user cluster config for load balancer and address pools
      loadBalancer:
          vips:
            controlPlaneVIP: 10.200.0.71
            ingressVIP: 10.200.0.72
          addressPools:
          - name: pool1
            addresses:
            - 10.200.0.72-10.200.0.90
      ...
      

      나머지 사용자 클러스터 구성 파일은 관리자 클러스터 구성과 동일합니다.

    • 클러스터 노드의 포드 밀도를 지정합니다.

      ...
      # NodeConfig specifies the configuration that applies to all nodes in the cluster.
      nodeConfig:
        # podDensity specifies the pod density configuration.
        podDensity:
          # maxPodsPerNode specifies at most how many pods can be run on a single node.
          maxPodsPerNode: 110
      ...
      

      사용자 클러스터의 경우 maxPodsPerNode에 허용되는 값은 32-250입니다. 지정되지 않은 경우 기본값은 110입니다. 클러스터가 생성된 후에는 이 값을 업데이트할 수 없습니다.

      또한 포드 밀도는 클러스터의 사용 가능한 IP 리소스에 따라서도 제한됩니다. 자세한 내용은 포드 네트워킹을 참조하세요.

사용자 클러스터 만들기

bmctl 명령어를 실행하여 사용자 클러스터 구성을 적용하고 클러스터를 만듭니다.

bmctl create cluster -c USER_CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIG

다음을 바꿉니다.

  • USER_CLUSTER_NAME: 이전 섹션에서 만든 클러스터 이름입니다.
  • ADMIN_KUBECONFIG: 관리자 클러스터 kubeconfig 파일의 경로입니다.

예를 들어 사용자 클러스터 이름이 user1이고 관리자 클러스터 kubeconfig 파일의 경로가 kubeconfig bmctl-workspace/admin/admin-kubeconfig인 경우 명령어는 다음과 같습니다.

bmctl create cluster -c user1 --kubeconfig bmctl-workspace/admin/admin-kubeconfig

샘플 사용자 클러스터 구성

사용자 클러스터 구성의 예시는 클러스터 구성 샘플에서 사용자 클러스터를 참조하세요.