계층 구조 컨트롤러 설치

계층 구조 컨트롤러를 사용하면 Kubernetes 네임스페이스를 계층 구조로 구성하고 RBAC 및 계층적 리소스 할당량과 같은 정책을 적용할 수 있으며. 관련 네임스페이스에서 워크로드를 관찰할 수 있습니다.

이 페이지에서는 계층 구조 컨트롤러를 설치, 구성, 제거하는 방법을 보여줍니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • 이 안내에서 사용되는 gcloudkubectl 명령어를 제공하는 Google Cloud CLI를 설치하고 초기화합니다. Cloud Shell을 사용하는 경우 Google Cloud CLI가 사전 설치됩니다.

  • Kubernetes 버전 1.16.x 이상을 실행하는 클러스터가 있어야 합니다.

계층 구조 컨트롤러는 구성 동기화와 긴밀하게 협력하도록 설계되어 Git 저장소를 통해 계층적 네임스페이스 및 정책을 관리할 수 있습니다. 이 경우 구성 동기화를 설치할 때 구조화되지 않은 저장소를 선택하는 것이 좋습니다. 이렇게 하면 계층 구조 정책의 이점을 유지하면서 필요에 따라 저장소를 구성할 수 있습니다. 반대로 계층 구조 저장소는 계층 구조 컨트롤러와 충돌할 수 있으므로 두 가지를 함께 사용하지 않는 것이 좋습니다.

또는 구성 동기화 저장소를 구성하지 않고 계층 구조 컨트롤러를 설치할 수 있습니다. 계층적 네임스페이스는 Kubernetes API를 통해 클러스터에서 완전히 정의될 수 있습니다. Git를 사용하지 않는 경우 다음 섹션에 설명된 경우를 제외하고는 어떠한 방식으로도 Operator에 Git 액세스 권한을 부여하거나 구성할 필요가 없습니다.

계층 구조 컨트롤러 사용 설정

계층 구조 컨트롤러를 설치하려면 다음 단계에 따라 정책 컨트롤러, 구성 동기화, 구성 컨트롤러를 구성합니다.

gcloud

모든 선택적인 구성요소를 포함하여 계층 구조 컨트롤러를 설치하려면 다음 단계에 따라 정책 컨트롤러, 구성 동기화, 구성 컨트롤러를 구성합니다. 계층적 관측 가능성 또는 계층적 리소스 할당량을 사용 설정하지 않으려면 표시된 행을 주석 처리합니다.

  1. (선택사항)비공개 클러스터를 사용하는 경우 각 클러스터의 프로젝트에 방화벽 규칙을 추가하여 GKE 클러스터 제어 영역이 포트9443의 계층 구조 컨트롤러 웹훅에 연결할 수 있도록 합니다.

     gcloud compute firewall-rules create allow-cluster-control-plane-tcp-9443 \
       --allow tcp:9443 \
       --network default \
       --source-ranges CONTROL_PLANE_CIDR \
       --target-tags NODE_TAG
    

    다음을 바꿉니다.

    • CONTROL_PLANE_CIDR: GKE 클러스터 제어 영역의 IP 범위(예: 172.16.0.16/28)입니다.
    • NODE_TAG: GKE 클러스터의 모든 노드에 적용되는 태그입니다.
  2. spec.hierarchyController 객체의 다음 값을 gcloud 구성 파일에서 true로 설정합니다.

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      hierarchyController:
        # Set to true to enable hierarchical namespaces
        enabled: true
        # Comment to disable hierarchical quota:
        enableHierarchicalResourceQuota: true
        # Comment to disable hierarchical observability:
        enablePodTreeLabels: true
      # ...other fields...
    
  3. apply-spec.yaml 파일을 적용합니다.

     gcloud beta container fleet config-management apply \
         --membership=CLUSTER_NAME \
         --config=CONFIG_YAML \
         --project=PROJECT_ID
    

    다음을 바꿉니다.

    • CLUSTER_NAME: 이 구성을 적용할 등록된 클러스터를 추가합니다.
    • CONFIG_YAML: apply-spec.yaml 파일의 경로를 추가합니다.
    • PROJECT_ID: 프로젝트 ID를 추가합니다.

    여러 워크로드가 배포되면 계층 구조 컨트롤러를 클러스터에서 사용할 수 있습니다. 완료하는 데 최대 1분이 걸릴 수 있습니다.

kubectl

모든 선택적인 구성요소를 포함하여 계층 구조 컨트롤러를 설치하려면 다음 단계에 따라 정책 컨트롤러, 구성 동기화, 구성 컨트롤러를 구성합니다. 계층적 관측 가능성 또는 계층적 리소스 할당량을 사용 설정하지 않으려면 표시된 행에 댓글을 답니다.

  1. (선택사항)비공개 클러스터를 사용하는 경우 각 클러스터의 프로젝트에 방화벽 규칙을 추가하여 GKE 클러스터 제어 영역이 포트9443의 계층 구조 컨트롤러 웹훅에 연결할 수 있도록 합니다.

     gcloud compute firewall-rules create allow-cluster-control-plane-tcp-9443 \
       --allow tcp:9443 \
       --network default \
       --source-ranges CONTROL_PLANE_CIDR \
       --target-tags NODE_TAG
    

    다음을 바꿉니다.

    • CONTROL_PLANE_CIDR: GKE 클러스터 제어 영역의 IP 범위(예: 172.16.0.16/28)입니다.
    • NODE_TAG: GKE 클러스터의 모든 노드에 적용되는 태그입니다.
  2. 연산자 구성 파일의 spec.hierarchyController 객체에서 enabled 값을 true로 설정합니다.

    # config-management.yaml
    
    apiVersion: configmanagement.gke.io/v1
    kind: ConfigManagement
    metadata:
      name: config-management
    spec:
      # Set to true to enable hierarchical namespaces
      hierarchyController:
        enabled: true
        # Comment to disable hierarhical quota:
        enableHierarchicalResourceQuota: true
        # Comment to disable hierarchical observability:
        enablePodTreeLabels: true
       # ...other fields...
    
  3. 구성을 적용합니다.

      kubectl apply -f config-management.yaml
    

    여러 워크로드가 배포되면 계층 구조 컨트롤러를 클러스터에서 사용할 수 있습니다. 완료하는 데 최대 1분이 걸릴 수 있습니다.

kubectl 플러그인 설치:

kubectl과 같은 Kubernetes 클라이언트 도구를 통해서만 계층 구조 컨트롤러와 상호작용할 수 있습니다. 하지만 오픈소스 kubectl-hns kubectl 플러그인은 여러 작업을 크게 단순화합니다. 이 플러그인은 계층 구조 컨트롤러의 구성요소인 계층적 네임스페이스 컨트롤러(HNC)의 일부입니다.

이 플러그인은 OSS 커뮤니티에서 배포되며 현재 Linux 및 macOS에 사용할 수 있습니다. 워크스테이션에 설치하려면 구성 동기화 문서의 kubectl 플러그인 설치를 참조하세요.

설치 확인

계층 구조 컨트롤러를 설치하면 설치가 완료되었는지 확인할 수 있습니다.

gcloud

다음 명령어를 실행합니다.

gcloud beta container fleet config-management status \
    --project=PROJECT_ID

PROJECT_ID를 프로젝트 ID로 바꿉니다.

다음과 비슷한 출력이 표시됩니다.

Name          ...other columns... Hierarchy_Controller
CLUSTER_NAME  ...other fields ... INSTALLED

설치가 성공하면 Hierarchy_Controller 열의 상태가 INSTALLED입니다. 계층 구조 컨트롤러를 사용 설정한 후 상태가 표시되는 데 몇 분 정도 걸릴 수 있습니다.

kubectl

계층 구조 컨트롤러가 올바르게 설치되었으면 Pod가 실행됩니다. pod를 사용하기 전에 여러 번 다시 시작될 수 있습니다.

계층 구조 컨트롤러 Pod는 hnc-system 네임스페이스에서 실행되므로 다음 명령어를 실행하여 상태를 확인할 수 있습니다.

kubectl get pods -n hnc-system

다음과 비슷한 출력이 표시됩니다.

NAME                                         READY   STATUS    RESTARTS   AGE
gke-hc-controller-manager-6f4dbb484d-t8tdm   2/2     Running   1          1m
hnc-controller-manager-7b75655894-tzqvx      2/2     Running   1          1m

계층 구조 컨트롤러 업그레이드

계층 구조 컨트롤러는 정책 컨트롤러, 구성 동기화, 구성 컨트롤러를 업그레이드할 때마다 업그레이드됩니다. 자세한 내용은 정책 컨트롤러, 구성 동기화, 구성 컨트롤러 업그레이드를 참조하세요.

계층 구조 컨트롤러 제거

클러스터에서 계층 구조 컨트롤러를 제거하려면 다음 단계를 따르세요.

gcloud

계층 구조 컨트롤러를 제거하려면 다음 안내를 따르세요.

  1. apply-spec.yaml 파일에서 계층 구조 컨트롤러 구성을 수정하고 hierarchyController.enabledfalse로 설정합니다.

  2. apply-spec.yaml 파일의 변경사항을 적용합니다.

     gcloud beta container fleet config-management apply \
         --membership=CLUSTER_NAME \
         --config=CONFIG_YAML \
         --project=PROJECT_ID
    

    다음을 바꿉니다.

    • CLUSTER_NAME: 이 구성을 적용할 등록된 클러스터를 추가합니다.
    • CONFIG_YAML: apply-spec.yaml 파일의 경로를 추가합니다.
    • PROJECT_ID: 프로젝트 ID를 추가합니다.

계층 구조 컨트롤러가 hierarchycontroller.configmanagement.gke.io 완료자를 제거하면 제거가 완료됩니다.

kubectl

계층 구조 컨트롤러를 삭제하려면 config-management.yaml 파일에서 정책 컨트롤러, 구성 동기화, 구성 컨트롤러 구성을 수정하고 hierarchyController.enabledfalse로 설정합니다. 정책 컨트롤러, 구성 동기화, 구성 컨트롤러가 hierarchycontroller.configmanagement.gke.io 파이널라이저를 삭제하면 제거가 완료됩니다.

정책 컨트롤러, 구성 동기화, 구성 컨트롤러를 완전히 제거하려면 클러스터에서 정책 컨트롤러, 구성 동기화, 구성 컨트롤러 제거를 참조하세요.

다음 단계