프리플라이트 검사

프리플라이트 검사는 클러스터 생성 또는 업그레이드와 같은 주요 클러스터 작업을 시작하기 전에 문제를 식별하는 데 도움이 되는 예방 조치입니다. 이러한 검사가 작업 전에 자동으로 실행되면 프리플라이트 검사를 모두 통과하지 않는 한 클러스터가 변경되지 않습니다. 주문형으로 프리플라이트 검사를 실행할 수도 있습니다.

이 문서에서는 각각의 검사에 대해 알아보고 각 검사가 자동으로 실행되는 상황, 수동으로 검사를 실행하는 방법과 시기, 결과를 해석하는 방법을 설명합니다.

Google Distributed Cloud에서는 다음과 같은 다양한 상황에서 프리플라이트 검사를 실행할 수 있습니다.

  • Google Distributed Cloud는 bmctl을 사용하여 클러스터와 노드 풀 리소스를 만들거나 업그레이드할 때 프리플라이트 검사를 실행합니다. 검사에 실패하면 아무것도 변경되지 않습니다. 이러한 검사를 우회하거나 명시적으로 실행할 수도 있습니다.

  • 또한 Google Distributed Cloud는 관리자 또는 하이브리드 클러스터가 사용자 클러스터에서 Kubernetes 리소스를 만들거나 업데이트할 때 내부 프리플라이트 검사도 수행합니다. 검사는 변경사항이 영향을 받는 사용자 클러스터에 적용되기 전에 실행됩니다. 검사에 실패하면 아무것도 변경되지 않습니다.

PreflightCheck 커스텀 리소스

프리플라이트 검사가 실행되면 Google Distributed Cloud에서 PreflightCheck 커스텀 리소스를 만듭니다. PreflightCheck 커스텀 리소스는 영구적이며 프리플라이트 검사 활동과 결과에 대한 기록을 제공합니다.

PreflightCheck 커스텀 리소스를 가져오려면 다음 안내를 따르세요.

  1. 특정 클러스터에 대해 실행된 프리플라이트 검사의 목록을 가져옵니다.

    kubectl get preflightchecks --kubeconfig ADMIN_KUBECONFIG --namespace CLUSTER_NAMESPACE
    

    다음을 바꿉니다.

    • ADMIN_KUBECONFIG: 관리자 클러스터 kubeconfig 파일의 경로입니다.
    • CLUSTER_NAMESPACE: 클러스터의 네임스페이스입니다.

    응답에 네임스페이스별로 리소스가 나열됩니다. 모든 네임스페이스에서 kubectl get preflightchecks를 실행하여 전체 목록을 얻을 수 있습니다. 각 리소스의 응답에는 리소스 사용 기간과 프리플라이트 검사의 통과 여부가 표시됩니다. 다음 샘플 응답은 cluster-test-admin001 네임스페이스의 PreflightCheck 리소스를 보여줍니다.

    NAMESPACE              NAME                                PASS    AGE
    cluster-test-admin001   test-admin001                      true    52d
    cluster-test-admin001   test-admin001jkm4q                 true    52d
    cluster-test-admin001   test-admin001k79t7                 true    6d20h
    cluster-test-admin001   upgrade-cluster-20231106-222746    true    6d20h
    
  2. 특정 PreflightCheck 커스텀 리소스의 세부정보를 가져옵니다.

    kubectl describe preflightchecks --kubeconfig ADMIN_KUBECONFIG --namespace CLUSTER_NAMESPACE
    

    다음을 바꿉니다.

    • ADMIN_KUBECONFIG: 관리자 클러스터 kubeconfig 파일의 경로입니다.
    • CLUSTER_NAMESPACE: 클러스터의 네임스페이스입니다.

    다음 샘플 명령어 응답은 클러스터 생성의 일부로 실행된 성공적인 프리플라이트 검사의 PreflightCheck 리소스를 보여줍니다.

    Name:         create-cluster-20230922-175006
    Namespace:    cluster-test-user001
    Labels:       <none>
    Annotations:  <none>
    API Version:  baremetal.cluster.gke.io/v1
    Kind:         PreflightCheck
    Metadata:
      Creation Timestamp:  2023-09-22T17:50:11Z
      Generation:          1
      Resource Version:    6502800
      UID:                 917daf64-963d-44b4-a1f9-c54972a39191
    Spec:
      Check Image Version:  latest
      Config YAML:          ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-test-user
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: test-user001
      namespace: cluster-test-user001
    spec:
      type: user
      profile: default
      anthosBareMetalVersion: 1.16.0
      gkeConnect:
        projectID: clusters-project
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: 192.0.2.53
      ...
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: node-pool-1
      namespace: cluster-test-user001
    spec:
      clusterName: test-user001
      nodes:
      - address: 192.0.2.54
      ...
    Status:
      Checks:
        192.0.2.53:
          Job UID:  d0b5dc1f-9d39-4cc8-b3d2-0841212f7f8c
          Message:
          Pass:     true
        192.0.2.53-gcp:
          Job UID:  b4d96ce5-0d4e-4e3c-97db-6317e0c15fc8
          Message:
          Pass:     true
        192.0.2.54:
          Job UID:  b67cf195-3951-46ad-b91c-0d79025cfc0a
          Message:
          Pass:     true
        192.0.2.54-gcp:
          Job UID:  aed509e2-4bf7-44c4-bfa0-8147ef8ea74e
          Message:
          Pass:     true
        Gcp:
          Job UID:  ac479ac4-e1c4-4681-9f2b-5773069bf6ae
          Message:
          Pass:     true
        Node - Network:
          Job UID:  8a57c4ee-ad17-4560-8809-b117c871ad5d
          Message:
          Pass:     true
        Pod - Cidr:
          Message:
          Pass:     true
      Cluster Spec:
        Anthos Bare Metal Version:  1.16.0
        Bypass Preflight Check:     false
        Cluster Network:
          Bundled Ingress:  true
          Pods:
            Cidr Blocks:
              10.0.0.0/16
          Services:
            Cidr Blocks:
              10.96.0.0/20
      ...
      Completion Time:                 2023-09-22T17:51:22Z
      Conditions:
        Last Transition Time:  2023-10-02T23:59:06Z
        Observed Generation:   1
        Reason:                Reconciling
        Status:                True
        Type:                  Reconciling
      Node Pool Specs:
        node-pool-1:
          Cluster Name:  test-user001
          Nodes:
            Address:         192.0.2.54
        ...
      Pass:                  true
      Start Time:            2023-09-22T17:50:32Z
    Events:                  <none>
    

    앞의 PreflightCheck 커스텀 리소스에서 Status 섹션에는 다음 정보가 포함됩니다.

    • Checks 섹션에는 실행된 개별 프리플라이트 검사 및 통과 여부가 나열됩니다. 이 예시에서는 다음 검사가 실행되었습니다.
      • 192.0.2.53192.0.2.54: IP 주소가 192.0.2.53192.0.2.54인 머신의 노드 검사(OS 구성, 리소스, 소프트웨어 설정)
      • 192.0.2.53-gpc192.0.2.54-gcp: IP 주소가 192.0.2.53192.0.2.54인 머신의 Google Cloud 연결 검사(Container Registry 및 Google API 액세스)
      • Gcp: 클러스터의 Google Cloud 연결 검사
      • Node - Network: 클러스터의 네트워크 검사(연결, etcd 작업, VIP 액세스, 포트 바인딩)
      • Pod - Cidr: 클러스터의 중첩 주소에 대한 포드 IP 주소 검사
    • Cluster Spec 섹션에는 클러스터 구성이 표시됩니다.
    • Pass 필드에는 프리플라이트 검사를 전체적으로 통과했음을 나타내는 true가 표시됩니다.

프리플라이트 검사 로그

bmctl check preflight와 같은 bmctl 명령어의 결과로 프리플라이트 검사가 실행되면 Google Distributed Cloud에서 로그 파일을 만듭니다. 생성되는 항목과 위치는 다음과 같습니다.

  • 프리플라이트 검사 로그는 다음과 같은 이름 지정 패턴 preflight-TIMESTAMP를 사용하여 디렉터리에 생성됩니다.

  • 프리플라이트 디렉터리는 bmctl 작업공간에서 클러스터의 log 디렉터리에 생성됩니다. 기본적으로 log 디렉터리 경로는 bmctl-workspace/CLUSTER_NAME/log입니다.

  • 프리플라이트 로그는 다음 파일로 구성됩니다.

    • 노드 머신 검사의 로그 파일이 클러스터 노드당 하나씩 생성됩니다. 이러한 로그 파일의 이름은 노드의 IP 주소를 사용하여 지정됩니다. 예를 들어 파일 이름은 192.0.2.53일 수 있습니다.

    • Google Cloud 액세스 검사의 로그 파일이 클러스터 노드당 하나씩 생성됩니다. 이러한 로그 파일의 이름은 노드의 IP 주소를 사용하여 지정됩니다. 예를 들어 파일 이름은 192.0.2.53-gcp일 수 있습니다.

    • 클러스터 Google Cloud 액세스 검사에 대한 gcp라는 로그 파일이 생성됩니다.

    • 노드 네트워킹 검사에 대한 node-network라는 로그 파일이 생성됩니다.

프리플라이트 검사가 실패하면 이러한 로그 파일을 사용하여 문제를 식별하고 해결할 수 있습니다.

클러스터 생성에 대한 프리플라이트 검사

클러스터를 만드는 경우 Google Distributed Cloud는 항목이 변경되기 전 프리플라이트 검사를 자동으로 수행합니다.

검사 대상

설치에 대한 프리플라이트 검사에서는 다음을 확인합니다.

  • 노드 머신 검사:

    • 클러스터 머신에서 지원되는 운영체제(OS)를 사용합니다.

    • OS 버전이 지원됩니다.

    • OS에서 지원되는 커널 버전을 사용합니다.

    • Ubuntu의 경우 Uncomplicated Firewall(UFW)이 사용 중지됩니다.

    • Ubuntu의 경우 패키지 관리자 apt가 작동 가능하며 필요한 패키지를 사용할 수 있습니다.

    • Red Hat Enterprise Linux의 경우 패키지 관리자 dnf가 작동 가능하며 필요한 패키지를 사용할 수 있습니다.

    • Red Hat Enterprise Linux의 경우 Podman이 설치되지 않습니다.

    • 노드 머신이 최소 CPU 요구사항을 충족합니다.

    • 노드 머신이 최소 메모리 요구사항을 충족합니다.

    • 노드 머신이 최소 디스크 스토리지 요구사항을 충족합니다.

    • 시간 동기화가 노드 머신에 구성됩니다.

    • kubelet가 활성 상태이며 노드 머신에서 실행 중입니다.

    • containerd가 활성 상태이며 노드 머신에서 실행 중입니다.

    • 패킷을 기본 게이트웨이로 라우팅하는 기본 경로가 노드에 있습니다.

    • DNS(도메인 이름 시스템)가 올바르게 작동합니다. 클러스터가 프록시 뒤에서 실행되도록 구성된 경우 이 검사는 건너뜁니다.

    • 포드 CIDR이 노드 머신 IP 주소와 겹치지 않습니다.

    • 클러스터가 레지스트리 미러를 사용하도록 구성된 경우 레지스트리 미러에 연결할 수 있습니다.

  • Google Cloud에서 각 노드 및 클러스터를 검사합니다.

    • Container Registry, gcr.io, 연결 가능성을 확인합니다. 클러스터가 레지스트리 미러를 사용하도록 구성된 경우 이 검사를 건너뜁니다.

    • Google API에 연결할 수 있습니다.

  • 노드 네트워킹 검사(부하 분산 구성에 따라 다름):

    • Kubernetes API 서버의 VIP에 액세스할 수 있습니다.

    • 부하 분산기 VIP에 액세스할 수 있습니다.

    • 노드가 필요한 포트에서 통신할 수 있습니다.

    • etcd 이벤트 인스턴스가 프로비저닝되고 포트 요구사항이 충족됩니다.

모든 검사를 통과하면 Google Distributed Cloud가 클러스터를 만듭니다. 클러스터 만들기 요구사항에 대한 자세한 내용은 설치 기본 요건 개요를 참조하세요.

클러스터 생성에 대한 주문형 프리플라이트 검사 실행

클러스터를 만들기 전에 개별적으로 프리플라이트 검사를 수행할 수도 있습니다. 클러스터 생성과 같은 주요 클러스터 작업에는 시간이 많이 소요되므로 이러한 검사가 유용할 수 있습니다. 주요 클러스터 작업을 시작하기 전에 문제를 개별적으로 식별하고 해결하면 일정에 도움이 될 수 있습니다.

자체 관리형 클러스터

  • 다음 명령어는 지정된 클러스터 구성 파일을 검증하지만 클러스터 자체를 만들려고 시도하지는 않습니다.

    bmctl check config --cluster CLUSTER_NAME
    

    CLUSTER_NAME을 검사할 구성 파일과 연결된 클러스터의 이름으로 바꿉니다.

  • 다음 명령어는 머신 및 네트워크가 클러스터를 만들 준비가 되었는지 확인합니다.

    bmctl check preflight --cluster CLUSTER_NAME
    

    CLUSTER_NAME을 검사할 클러스터의 이름으로 바꿉니다.

사용자 클러스터

  • 다음 명령어는 지정된 클러스터 구성 파일의 유효성을 검사하지만 클러스터 자체를 만들려고 시도하지 않습니다.

    bmctl check config --cluster CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG
    

    다음을 바꿉니다.

    • CLUSTER_NAME: 검사할 사용자 클러스터의 이름입니다.
    • ADMIN_KUBECONFIG: 연결된 관리자 클러스터 kubeconfig 파일의 경로입니다.
  • 다음 명령어는 머신 및 네트워크가 클러스터를 만들 준비가 되었는지 확인합니다.

    bmctl check preflight --cluster CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG
    

bmctl--kubeconfig--admin-kubeconfig 플래그의 별칭으로 사용하도록 지원합니다.

클러스터 업그레이드에 대한 프리플라이트 검사

클러스터를 업그레이드할 때 Google Distributed Cloud는 변경사항이 적용되기 전에 프리플라이트 검사를 자동으로 실행합니다.

검사 대상

클러스터 업그레이드에 대한 프리플라이트 검사에서는 다음을 확인합니다.

  • 노드 머신 검사:

    • 클러스터 머신에서 지원되는 운영체제(OS)를 사용합니다.

    • OS 버전이 지원됩니다.

    • OS에서 지원되는 커널 버전을 사용합니다.

    • Ubuntu의 경우 Uncomplicated Firewall(UFW)이 사용 중지됩니다.

    • 노드 머신이 최소 CPU 요구사항을 충족합니다.

    • 노드 머신에서 사용 가능한 CPU 리소스가 20% 이상입니다.

    • 노드 머신이 최소 메모리 요구사항을 충족합니다.

    • 노드 머신이 최소 디스크 스토리지 요구사항을 충족합니다.

    • 시간 동기화가 노드 머신에 구성됩니다.

    • 패킷을 기본 게이트웨이로 라우팅하는 기본 경로가 노드에 있습니다.

    • DNS(도메인 이름 시스템)가 올바르게 작동합니다. 클러스터가 프록시 뒤에서 실행되도록 구성된 경우 이 검사는 건너뜁니다.

    • 클러스터가 레지스트리 미러를 사용하도록 구성된 경우 레지스트리 미러에 연결할 수 있습니다.

    * 유지보수 모드인 제어 영역 노드 또는 부하 분산기 노드가 없습니다.

  • Google Cloud에서 각 노드 및 클러스터를 검사합니다.

    • Container Registry, gcr.io, 연결 가능성을 확인합니다. 클러스터가 레지스트리 미러를 사용하도록 구성된 경우 이 검사를 건너뜁니다.

    • Google API에 연결할 수 있습니다.

  • 머신 검사:

    • kubelet가 활성 상태이며 노드 머신에서 실행 중입니다.

    • containerd가 활성 상태이며 노드 머신에서 실행 중입니다.

    • 컨테이너 네트워크 인터페이스(CNI) 상태 엔드포인트 상태가 정상입니다.

    • 포드 CIDR이 노드 머신 IP 주소와 겹치지 않습니다.

  • 노드 네트워킹 검사(부하 분산 구성에 따라 다름):

    • Kubernetes API 서버의 VIP에 액세스할 수 있습니다.

    • 부하 분산기 VIP에 액세스할 수 있습니다.

    • 노드가 필요한 포트에서 통신할 수 있습니다.

    • etcd 이벤트 인스턴스가 프로비저닝되고 포트 요구사항이 충족됩니다.

모든 검사를 통과하면 Google Distributed Cloud가 클러스터를 업그레이드합니다. 클러스터 업그레이드에 대한 자세한 내용은 Google Distributed Cloud 클러스터 업그레이드 권장사항클러스터 업그레이드 수명 주기 및 단계를 참조하세요.

클러스터 업그레이드에 대한 주문형 프리플라이트 검사 실행

bmctl check preflight 명령어를 사용하면 클러스터를 업그레이드하기 전 프리플라이트 검사를 수행할 수 있습니다. 업그레이드를 시작하기 전에 다음 프리플라이트 검사 명령어를 실행하여 클러스터의 업그레이드 준비 상태를 확인할 수 있습니다.

  1. 클러스터 구성 파일에서 클러스터 버전(anthosBareMetalVersion)을 업데이트합니다.

  2. 다음 명령어를 사용하여 클러스터의 업그레이드 준비 상태를 확인하고 프리플라이트 검사를 실행합니다.

    bmctl check preflight --cluster CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIG
    

    다음을 바꿉니다.

    • CLUSTER_NAME: 업그레이드할 클러스터의 이름
    • ADMIN_KUBECONFIG: 관리자 클러스터 kubeconfig 파일의 경로

    클러스터 업그레이드를 테스트하기 위해 이 명령어로 프리플라이트 검사를 만들면 PreflightCheck 커스텀 리소스가 관리자 클러스터에 생성됩니다.

기존 클러스터의 실행 전 내부 검사

Google Distributed Cloud는 기존 클러스터에 Kubernetes 리소스를 적용할 때 내부 프리플라이트 검사를 자동으로 수행합니다. 검사를 명시적으로 우회하지 않는 한 Google Distributed Cloud는 검사에 실패해도 관련 노드를 변경하지 않습니다.

Kubernetes 리소스 적용 시 실행 전 검사 우회

기존 클러스터에 리소스를 적용할 때 내부 프리플라이트 검사를 무시하려면 클러스터 구성 파일에서 BypassPreflightCheck 필드를 true로 설정해야 합니다.

다음은 true로 설정된 bypassPreflightCheck 필드를 보여주는 클러스터 구성 파일의 일부입니다.

apiVersion: v1
kind: Namespace
metadata:
  name: cluster-user1
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: user1
  namespace: cluster-user1
spec:
  type: user
  bypassPreflightCheck: true
  # Anthos cluster version.
  anthosBareMetalVersion: 1.29.100-gke.251
...

최신 프리플라이트 검사 및 상태 점검 실행

bmctl을 사용하여 프리플라이트 또는 상태 점검을 실행할 때 --check-image-version latest 플래그를 명령어에 추가하면 최신 Google Distributed Cloud 패치 버전에서 검사를 수행할 수 있습니다. 이렇게 하면 먼저 클러스터를 만들거나 업그레이드하지 않고도 알려진 문제를 식별할 수 있습니다.

  • 최신 검사 목록을 사용하여 머신 및 네트워크가 클러스터를 만들 준비가 되었는지 확인하려면 다음 안내를 따르세요.

    bmctl check preflight --cluster CLUSTER_NAME --check-image-version latest
    

    CLUSTER_NAME을 검사할 클러스터의 이름으로 바꿉니다.

또한 실제 클러스터의 최신 상태 점검을 수행하여 클러스터가 정상인지 확인할 수 있습니다.

  • 실제 클러스터에서 최신 상태 점검을 수행하려면 다음 안내를 따르세요.

    bmctl check cluster --cluster CLUSTER_NAME --check-image-version latest
    

    CLUSTER_NAME을 검사할 클러스터의 이름으로 바꿉니다.

자동화된 실행 전 검사의 결과 무시

클러스터를 만들거나 업그레이드하기 전에 주문형으로 프리플라이트 검사를 실행하면 자동화된 프리플라이트 검사를 우회할 수 있습니다. 자동화된 프리플라이트 검사를 우회하려면 bmctl create cluster 또는 bmctl upgrade cluster를 실행할 때 선택사항인 --force 플래그를 사용합니다.

다음 단계