Terraform을 사용하여 사용자 클러스터 관리

이 페이지는 플랫폼 관리자용으로 작성되었습니다.

이 페이지에서는 Terraform을 사용하여 사용자 클러스터를 관리하는 방법을 설명합니다.

기본 요건

관리자 클러스터에 액세스할 수 있는 계정이 있어야 합니다. 사용자 클러스터를 관리할 수 있는 권한이 이 계정에 있어야 합니다. 이 계정에는 플랫폼 관리자의 하위 액세스 권한과 apiextensions.k8s.io 그룹의 customresourcedefinitions에 대한 'list' 액세스 권한이 필요합니다. 이 계정을 사용하여 Terraform Kubernetes 공급자를 구성하여 사용자 클러스터 관련 리소스를 관리할 수 있습니다. 계정에 다음과 같은 특정 권한이 있어야 합니다.

  • 관리자 클러스터의 사용자 클러스터 네임스페이스에 대한 전체 액세스 권한(예: cluster-user-cluster2).
  • baremetal.cluster.gke.ioclustersnodepools에 대한 전체 액세스 권한
  • managementcenter.anthos.cloud.google.combootstrapservicebindings, configmanagementfeaturespecs, configmanagementbindings, servicemeshfeaturespecs, servicemeshbindings에 대한 전체 액세스 권한
  • apiextensions.k8s.iocustomresourcedefinitions에 대한 list 액세스 권한
  • Anthos Config Management 및 Anthos Service Mesh를 설치해야 하는 경우 사용자 클러스터에 연결할 사용자 인증 정보를 가져올 수 있도록 관리자 클러스터의 사용자 클러스터 네임스페이스에서 보안 비밀을 가져올 수 있는 액세스 권한이 필요합니다.

Terraform 스크립트 다운로드

Anthos 관리 센터 콘솔의 지원 탭에서 Terraform 스크립트 tarball 파일을 다운로드합니다. 파일에서 스크립트를 추출합니다.

tar xvf terraform-scripts.tar.gz

Terraform 초기화 및 인증 설정

관리자 클러스터 API로 인증하도록 Terraform Kubernetes 공급자를 설정하는 방법은 다양합니다. 공급자 설정에 설명된 사용 사례에 가장 적합한 방법을 선택하세요. 관리자 클러스터에 충분한 권한이 없으면 인프라 운영자에게 문의하세요.

cd cluster
terraform init

(# TODO 인증)을 제공자 설정 인증 방법 중 하나로 바꿉니다.

사용자 클러스터 만들기

  1. cluster/terraform.tfvars에서 모든 변수를 지정합니다. 루트 권한이 없는 경우 login_user_name을 지정해야 합니다. 예:

    admin_cluster_endpoint = "https://10.200.0.100:443"
    cluster_name      = "user-cluster2"
    control_plane_nodes = [
      { "address" = "10.200.0.26" },
      { "address" = "10.200.0.21" },
      { "address" = "10.200.0.22" },
    ]
    control_plane_vip = "10.200.0.110"
    nodepool_nodes = [
      { "address" = "10.200.0.23" },
      { "address" = "10.200.0.25" },
      { "address" = "10.200.0.24" },
    ]
    address_pools = [
      {
        "addresses" = ["10.200.0.111-10.200.0.119"]
        "name"      = "pool1"
      },
    ]
    bootstrap_service            = ["test-bootstrapservice", "test-bootstrapservice-2"]
    anthos_baremetal_version     = "1.9.0"
    
  2. 변경사항을 적용합니다. 명령어가 성공적으로 완료되면 사용자 클러스터가 생성됩니다.

    terraform apply
    

사용자 클러스터 폐기

다음 명령어를 사용하여 사용자 클러스터를 폐기합니다.

terraform destroy

리소스 폐기를 제어하기 위해 대기 시간이 설정됩니다. wait_duration 변수를 업데이트하면 대기 시간을 조정할 수 있습니다. 대기 시간이 발생하는 이유는 Kubernetes 제공자의 기능이 없기 때문입니다(이 기능 요청 참조).

일부 문제로 인해 사용자 클러스터 생성이 대기 중이면 terraform destroy를 사용하지 마세요. 대신 수동으로 설치를 삭제합니다.

  1. terraform 명령어를 중지합니다.

  2. 관리 센터 콘솔에서 사용자 클러스터를 삭제합니다.

  3. terraform.tfstate 파일을 삭제합니다.

Anthos Config Management 및 Anthos Service Mesh 사용 설정

Anthos Config Management 및 Anthos Service Mesh를 사용 설정하려면 다음 단계를 완료하세요.

  1. features Terraform 프로젝트의 Terraform을 초기화합니다.

      cd features
      terraform init
    
  2. 관리자 클러스터에 대한 인증을 설정합니다.

  3. 비공개 키를 /etc/ssh-key/key의 git 저장소에 배치합니다.

  4. activate_acmactivate_asm을 true로 설정하고 모든 관련 변수를 정의합니다. 예:

    cluster_name                 = "user-cluster2"
    admin_cluster_endpoint       = "https://10.200.0.100:443"
    user_cluster_ca_certificate  = ""
    activate_acm                 = true
    version_acm                  = "1.7.1"
    enable_acm_policy_controller = true
    acm_git_repo = {
      git_repo_url    = "git@github.com:example/example.git"
      git_repo_branch = "main"
      git_policy_dir  = "."
      git_secret_type = "ssh"
    }
    activate_asm = true
    version_asm  = "1.9.6-asm.1"
    
  5. 변경사항을 적용합니다.

    terraform apply
    
  6. (선택사항) 필요한 경우 Anthos Service Mesh의 대기 시간을 조정합니다. 대기 시간을 조정하려면 wait_duration 변수를 업데이트하면 됩니다.

Anthos Config Management 및 Anthos Service Mesh 중지

Anthos Config Management를 삭제하기 전에 클러스터의 Anthos Config Management에서 동기화된 모든 리소스를 삭제하는 것이 좋습니다.

tfstate에서 git-creds 보안 비밀 및 config-management-system을 삭제합니다. ConfigManagementBindingConfigManagementFeatureSpec이 삭제된 후 Anthos Config Management 운영자가 사용자 클러스터 내의 리소스를 삭제해야 합니다. 관리 센터에서 Anthos Config Management가 제거된 것으로 즉시 표시되지는 않습니다. 운영자가 모든 항목을 삭제하는 데 5~10분 정도 걸릴 수 있습니다.

terraform state rm kubernetes_namespace.config-management-system
terraform state rm kubernetes_secret.git-creds
terraform destroy

알려진 문제

  • 현재 클러스터를 업데이트할 수 없습니다. 업데이트를 실행할 때 제공자는 1378 문제로 인해 기존 리소스에서 완료자를 삭제하려고 시도합니다.

  • 사용자 클러스터 및 Anthos Service Mesh의 destroy 명령어는 1357 문제로 인해 대기 시간을 사용합니다. 클러스터 크기에 따라 대기 시간을 조정해야 할 수도 있습니다.

  • 클러스터는 관리 센터에 표시되는 것보다 더 빠르게 Teraform에 준비된 상태로 표시됩니다(제공자의 kubernetes_manifest 데이터 지원으로 차단).

  • terraform destroy를 사용하여 Anthos Config Management를 삭제하려면 먼저 tfstate에서 리소스를 삭제해야 합니다. 자세한 내용은 Anthos Config Management 및 Anthos Service Mesh 중지를 참조하세요. 관리 센터에서 Anthos Config Management가 제거된 것으로 즉시 표시되지는 않습니다. 운영자가 모든 항목을 삭제하는 데 5~10분 정도 걸릴 수 있습니다.

  • terraform destroy 명령어는 사용자 클러스터 네임스페이스를 삭제합니다. 플랫폼 관리자는 관리자 클러스터에서 네임스페이스를 삭제할 권한이 없습니다. 따라서 명령어가 실패할 수 있습니다.

제한사항

  • 현재 코드를 사용하면 단일 사용자 클러스터를 만들 수 있습니다.

  • 현재 코드에는 OIDC 구성이 포함되어 있지 않습니다. 이 부분에는 kubernetes_manifest 리소스의 Kubernetes 공급자 패치 기능이 필요합니다.

다음 단계