ヘルスチェック

ヘルスチェックは、既存のクラスタのオペレーションのテストとモニタリングの方法です。ヘルスチェックは、単独で定期的に実行されます。bmctl を使用して、オンデマンドでヘルスチェックを実行することもできます。このドキュメントでは、それぞれのチェック、自動的に実行される状況、手動で実行する方法とタイミング、結果の解釈方法について説明します。

チェック対象

Bare Metal の GDCV ヘルスチェックには、次の 2 つのカテゴリがあります。

  • ノードマシンのチェック

  • クラスタ全体のチェック

以下のセクションでは、各カテゴリのチェック項目の概要を説明します。これらのチェックは、定期的なヘルスチェックとオンデマンドの両方のヘルスチェックで使用されます。

ノードマシンのチェック

このセクションでは、ノードマシンのヘルスチェックで評価される内容について説明します。これらのチェックにより、ノードマシンが正しく構成され、クラスタの作成、クラスタのアップグレード、クラスタ オペレーションのための十分なリソースと接続があることを確認します。

これらのチェックは、クラスタの Namespace の管理クラスタで実行される bm-system-NODE_IP_ADDRESS-machine という名前の Bare Metal HealthCheck カスタム リソース(bm-system-192.0.2.54-machine など)に対応しています。ヘルスチェック リソースの詳細については、HealthCheck カスタム リソースをご覧ください。

一般的なマシンチェックは、次のものから構成されます。

  • クラスタマシンが、サポートされているオペレーティング システム(OS)を使用している。

  • OS バージョンがサポートされている。

  • OS はサポートされているカーネル バージョンを使用しています。

  • カーネルで、BPF Just In Time(JIT)コンパイラ オプションが有効(CONFIG_BPF_JIT=y)になっている。

  • Ubuntu の場合、Uncomplicated Firewall(UFW)が無効になっています。

  • ノードマシンが最小 CPU 要件を満たしていること。

  • ノードマシンの CPU リソースが 20% 以上利用できる。

  • ノードマシンが最小メモリ要件を満たしていること。

  • ノードマシンが最小ディスク ストレージ要件を満たしていること。

  • ノードマシンで時刻同期が構成されています。

  • デフォルト ゲートウェイにパケットをルーティングするためのデフォルト ルートはノード内に存在します。

  • ドメイン ネーム システム(DNS)が機能している場合(クラスタがプロキシの背後で実行するように構成されている場合、このチェックはスキップされます)。

  • クラスタがレジストリ ミラーを使用するように構成されている場合、レジストリ ミラーにアクセスできます。

マシンの Google Cloud チェックは、次のもので構成されています。

  • Container Registry の gcr.io に到達可能(クラスタがレジストリ ミラーを使用するように構成されている場合、このチェックはスキップされます)。

  • Google API に到達可能である。

マシンのヘルスチェックは、次のものから構成されます。

  • kubelet はアクティブで、ノードマシンで実行中です。

  • containerd はアクティブで、ノードマシンで実行中です。

  • Container Network Interface(CNI)のヘルス エンドポイントのステータスが正常です。

  • Pod CIDR がノードマシンの IP アドレスと重複しません。

ノードマシンの要件の詳細については、クラスタノード マシンの前提条件をご覧ください。

クラスタ全体のチェック

このセクションでは、クラスタのヘルスチェックで評価される内容について説明します。

ネットワークチェック

次のクライアント側のクラスタノード ネットワーク チェックは、定期的なヘルスチェックの一環として自動的に実行されます。ネットワーク チェックをオンデマンドで実行することはできません。これらのチェックは、クラスタの名前空間の管理クラスタで実行される bm-system-network という名前の Bare Metal HealthCheck カスタム リソースに対応しています。ヘルスチェック リソースの詳細については、HealthCheck カスタム リソースをご覧ください。

  • クラスタでバンドル型ロード バランシングを使用する場合、ロード バランシング ノードプール内のノードにはレイヤ 2 アドレス解決プロトコル(ARP)接続が必要です。VIP の検出には ARP が必要です。

GKE on Bare Metal クラスタのプロトコルとポートの使用については、ネットワーク要件をご覧ください。

プリフライト チェックのネットワーク チェックは、ネットワーク ヘルスチェックとは異なります。プリフライト チェックのネットワーク チェックのリストについては、クラスタ作成のプリフライト チェックまたはクラスタ アップグレードのプリフライト チェックをご覧ください。

Kubernetes

Kubernetes チェックは、プリフライト チェックと定期的なヘルスチェックの一環として自動的に実行されますが、オンデマンドで実行することもできます。リストされたコントロール プレーン コンポーネントのいずれかが欠落していても、これらのヘルスチェックはエラーを返しません。コンポーネントが存在し、コマンド実行時にエラーが発生した場合にのみ、チェックでエラーが返されます。

これらのチェックは、クラスタの Namespace の管理クラスタで実行されている bm-system-kubernetes リソースという名前の Bare Metal HealthCheck カスタム リソースに対応しています。ヘルスチェック リソースの詳細については、HealthCheck カスタム リソースをご覧ください。

  • API サーバーが機能しています。

  • anetd 演算子が正しく構成されている。

  • すべてのコントロール プレーン ノードが動作可能である。

  • 次のコントロール プレーン コンポーネントは正常に動作しています。

    • anthos-cluster-operator

    • controller-manager

    • cluster-api-provider

    • ais

    • capi-kubeadm-bootstrap-system

    • cert-manager

    • kube-dns

アドオン

アドオン チェックは、プリフライト チェックと定期的なヘルスチェックの一環として自動的に実行され、オンデマンドで実行できます。リストされたアドオンのいずれかが見つからない場合、このヘルスチェックはエラーを返しません。このチェックでは、アドオンが存在し、コマンド実行時にエラーが発生した場合にのみ、エラーが返されます。

これらのチェックは、クラスタの Namespace の管理クラスタで実行されている bm-system-add-ons リソースという名前の Bare Metal HealthCheck カスタム リソースに対応しています。ヘルスチェック リソースの詳細については、HealthCheck カスタム リソースをご覧ください。

  • Cloud Logging の Stackdriver コンポーネントと Connect Agent は動作可能です。

    • stackdriver-log-aggregator

    • stackdriver-log-forwarder

    • stackdriver-metadata-agent

    • stackdriver-prometheus-k8

    • gke-connect-agent

HealthCheck カスタム リソース

ヘルスチェックが実行されると、GDCV for Bare Metal は HealthCheck カスタム リソースを作成します。HealthCheck カスタム リソースは永続的で、ヘルスチェックのアクティビティと結果の構造化レコードを提供します。HeathCheck カスタム リソースには、次の 2 つのカテゴリがあります。

  • ベアメタル HealthCheck カスタム リソース(API Version: baremetal.cluster.gke.io/v1): これらのリソースは、定期的なヘルスチェックの詳細を提供します。これらのリソースは、クラスタ Namespace の管理クラスタにあります。Bare Metal HealthCheck リソースは、ヘルスチェック cron ジョブとジョブの作成を担当します。これらのリソースは、最新の結果で一貫して更新されます。

  • Anthos HealthCheck カスタム リソース(API Version: anthos.gke.io/v1): これらのリソースは、ヘルスチェック指標のレポートに使用されます。これらのリソースは、各クラスタの kube-system 名前空間にあります。これらのリソースの更新はベスト エフォートです。一時的なネットワーク エラーなどの問題で更新が失敗した場合、その失敗は無視されます。

次の表に、いずれかの HealthCheck カテゴリ用に作成されるリソースの種類を示します。

ベアメタル ヘルスチェック GKE Enterprise ヘルスチェック 重大度

タイプ: マシン

名前: bm-system-NODE_IP_ADDRESS-machine

タイプ: マシン

名前: bm-system-NODE_IP_ADDRESS-machine

重大

タイプ: ネットワーク

名前: bm-system-network

タイプ: ネットワーク

名前: bm-system-network

重大

タイプ: kubernetes

名前: bm-system-kubernetes

タイプ: kubernetes

名前: bm-system-kubernetes

重大

タイプ: アドオン

名前: bm-system-add-ons

タイプ: アドオン

名前: bm-system-add-ons-add-ons

省略可

HealthCheck ステータスを取得するには:

  1. 定期的なヘルスチェックの結果を読み取るには、関連するカスタム リソースを取得します。

    kubectl get healthchecks.baremetal.cluster.gke.io --kubeconfig ADMIN_KUBECONFIG --all-namespaces
    

    ADMIN_KUBECONFIG は、管理クラスタの kubeconfig ファイルへのパスに置き換えます。

    次のサンプルは、定期的に実行されるヘルスチェックと、最後に実行された際にチェックに合格したかどうかを示しています。

    NAMESPACE               NAME                               PASS    AGE
    cluster-test-admin001   bm-system-192.0.2.52-machine       true    11d
    cluster-test-admin001   bm-system-add-ons                  true    11d
    cluster-test-admin001   bm-system-kubernetes               true    11d
    cluster-test-admin001   bm-system-network                  true    11d
    cluster-test-user001    bm-system-192.0.2.53-machine       true    56d
    cluster-test-user001    bm-system-192.0.2.54-machine       true    56d
    cluster-test-user001    bm-system-add-ons                  true    56d
    cluster-test-user001    bm-system-kubernetes               true    56d
    cluster-test-user001    bm-system-network                  true    56d
    
  2. 特定のヘルスチェックの詳細を読み取るには、kubectl describe を使用します。

    kubectl describe healthchecks.baremetal.cluster.gke.io HEALTHCHECK_NAME --kubeconfig ADMIN_KUBECONFIG --namespace CLUSTER_NAMESPACE
    

    次のように置き換えます。

    • HEALTHCHECK_NAME: ヘルスチェックの名前。
    • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。
    • CLUSTER_NAMESPACE: クラスタの名前空間。

    リソースを確認すると、Status: セクションに次の重要なフィールドが含まれています。

    • Pass: 最後のヘルスチェック ジョブに合格したかどうかを示します。
    • Checks: 最新のヘルスチェック ジョブに関する情報が含まれます。
    • Failures: 最新の失敗したジョブに関する情報が含まれています。
    • Periodic: ヘルスチェック ジョブが最後にスケジュールされ、インストルメント化された時刻などの情報が含まれます。

    次の HealthCheck サンプルは、マシンチェックが成功した例です。

    Name:         bm-system-192.0.2.54-machine
    Namespace:    cluster-test-user001
    Labels:       baremetal.cluster.gke.io/periodic-health-check=true
                  machine=192.0.2.54
                  type=machine
    Annotations:  <none>
    API Version:  baremetal.cluster.gke.io/v1
    Kind:         HealthCheck
    Metadata:
      Creation Timestamp:  2023-09-22T18:03:27Z
      ...
    Spec:
      Anthos Bare Metal Version:  1.15.0
      Cluster Name:               nuc-user001
      Interval In Seconds:        3600
      Node Addresses:
        192.168.1.54
      Type:  machine
    Status:
      Check Image Version:  1.15.0-gke.26
      Checks:
        192.168.1.54:
          Job UID:  345b74a6-ce8c-4300-a2ab-30769ea7f855
          Message:
          Pass:     true
      ...
      Cluster Spec:
        Anthos Bare Metal Version:  1.15.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
      ...
      Conditions:
        Last Transition Time:  2023-11-22T17:53:18Z
        Observed Generation:   1
        Reason:                LastPeriodicHealthCheckFinished
        Status:                False
        Type:                  Reconciling
      Node Pool Specs:
        node-pool-1:
          Cluster Name:  nuc-user001
        ...
      Pass:                  true
      Periodic:
        Last Schedule Time:                    2023-11-22T17:53:18Z
        Last Successful Instrumentation Time:  2023-11-22T17:53:18Z
      Start Time:                              2023-09-22T18:03:28Z
    Events:
      Type    Reason                  Age                  From                    Message
      ----    ------                  ----                 ----                    -------
      Normal  HealthCheckJobFinished  6m4s (x2 over 6m4s)  healthcheck-controller  health check job bm-system-192.0.2.54-machine-28344593 finished
    

    次の HealthCheck サンプルは、マシンチェックに失敗した場合を示しています。

    Name:         bm-system-192.0.2.57-machine
    Namespace:    cluster-user-cluster1
    ...
    API Version:  baremetal.cluster.gke.io/v1
    Kind:         HealthCheck
    ...
    Status:
      Checks:
        192.0.2.57:
          Job UID:  492af995-3bd5-4441-a950-f4272cb84c83
          Message:  following checks failed, ['check_kubelet_pass']
          Pass:     false
      Failures:
        Category:     AnsibleJobFailed
        Description:  Job: machine-health-check.
        Details:       Target: 1192.0.2.57. View logs with: [kubectl logs -n cluster-user-test bm-system-192.0.2.57-machine-28303170-qgmhn].
        Reason:       following checks failed, ['check_kubelet_pass']
      Pass:                  false
      Periodic:
        Last Schedule Time:                    2023-10-24T23:04:21Z
        Last Successful Instrumentation Time:  2023-10-24T23:31:30Z
      ...
    
  3. 指標のヘルスチェックのリストを取得するには、次のコマンドを使用します。

    kubectl get healthchecks.anthos.gke.io --kubeconfig CLUSTER_KUBECONFIG --namespace kube-system
    

    CLUSTER_KUBECONFIG は、ターゲット クラスタ kubeconfig ファイルのパスに置き換えます。

    次のサンプルは、レスポンスの形式を示しています。

    NAMESPACE     NAME                                            COMPONENT   NAMESPACE   STATUS    LAST_COMPLETED
    kube-system   bm-system-10.200.0.3-machine                                            Healthy   56m
    kube-system   bm-system-add-ons-add-ons                                               Healthy   48m
    kube-system   bm-system-kubernetes                                                    Healthy   57m
    kube-system   bm-system-kubernetes-1.15.1-non-periodic                                Healthy   25d
    kube-system   bm-system-network                                                       Healthy   32m
    kube-system   check-kubernetes-20231114-190445-non-periodic                           Healthy   3h6m
    kube-system   component-status-controller-manager                                     Healthy   5s
    kube-system   component-status-etcd-0                                                 Healthy   5s
    kube-system   component-status-etcd-1                                                 Healthy   5s
    kube-system   component-status-scheduler                                              Healthy   5s
    

ヘルスチェック cron ジョブ

定期的なヘルスチェックの場合、各ベアメタル HealthCheck カスタム リソースには、同じ名前を持つ対応する CronJob があります。この CronJob は、対応するヘルスチェックが設定した間隔で実行されるようにスケジュールします。

cron ジョブに関する情報を取得するには:

  1. 特定のクラスタに対して実行された cron ジョブのリストを取得します。

    kubectl get cronjobs --kubeconfig ADMIN_KUBECONFIG --namespace CLUSTER_NAMESPACE
    

    次のように置き換えます。

    • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。
    • CLUSTER_NAMESPACE: クラスタの名前空間。

    次のサンプルは、一般的なレスポンスを示しています。

    NAMESPACE           NAME                           SCHEDULE       SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    cluster-test-admin   bm-system-10.200.0.3-machine   17 */1 * * *   False     0        11m             25d
    cluster-test-admin   bm-system-add-ons              25 */1 * * *   False     0        3m16s           25d
    cluster-test-admin   bm-system-kubernetes           16 */1 * * *   False     0        12m             25d
    cluster-test-admin   bm-system-network              41 */1 * * *   False     0        47m             25d
    

    SCHEDULE 列の値は、スケジュール構文で行われる各ヘルスチェック ジョブのスケジュールを示します。たとえば、bm-system-kubernetes ジョブは毎日(* * *)毎時(*/1)の毎時(17)の 17 分後に実行されます。定期的なヘルスチェックの間隔は編集できませんが、トラブルシューティングを行うときに行うタイミングを知ることは有用です。

  2. 特定の CronJob カスタム リソースの詳細を取得します。

    kubectl describe cronjob CRONJOB_NAME --kubeconfig ADMIN_KUBECONFIG --namespace CLUSTER_NAMESPACE
    

    次のように置き換えます。

    • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。
    • CLUSTER_NAMESPACE: クラスタの名前空間。

    次のサンプルは、成功した CronJob を示しています。

    Name:                          bm-system-network
    Namespace:                     cluster-test-admin
    Labels:                        AnthosBareMetalVersion=1.15.1
                                  baremetal.cluster.gke.io/check-name=bm-system-network
                                  baremetal.cluster.gke.io/periodic-health-check=true
                                  controller-uid=2247b728-f3f5-49c2-86df-9e5ae9505613
                                  type=network
    Annotations:                   target: node-network
    Schedule:                      41 */1 * * *
    Concurrency Policy:            Forbid
    Suspend:                       False
    Successful Job History Limit:  1
    Failed Job History Limit:      1
    Starting Deadline Seconds:     <unset>
    Selector:                      <unset>
    Parallelism:                   <unset>
    Completions:                   1
    Active Deadline Seconds:       3600s
    Pod Template:
      Labels:           baremetal.cluster.gke.io/check-name=bm-system-network
      Annotations:      target: node-network
      Service Account:  ansible-runner
      Containers:
      ansible-runner:
        Image:      gcr.io/anthos-baremetal-release/ansible-runner:1.15.1-gke.5
        Port:       <none>
        Host Port:  <none>
        Command:
          cluster
        Args:
          -execute-command=network-health-check
          -login-user=root
          -controlPlaneLBPort=443
        Environment:  <none>
        Mounts:
          /data/configs from inventory-config-volume (ro)
          /etc/ssh-key from ssh-key-volume (ro)
      Volumes:
      inventory-config-volume:
        Type:      ConfigMap (a volume populated by a ConfigMap)
        Name:      bm-system-network-inventory-bm-system-ne724a7cc3584de0635099
        Optional:  false
      ssh-key-volume:
        Type:            Secret (a volume populated by a Secret)
        SecretName:      ssh-key
        Optional:        false
    Last Schedule Time:  Tue, 14 Nov 2023 18:41:00 +0000
    Active Jobs:         <none>
    Events:
      Type    Reason            Age   From                Message
      ----    ------            ----  ----                -------
      Normal  SuccessfulCreate  48m   cronjob-controller  Created job bm-system-network-28333121
      Normal  SawCompletedJob   47m   cronjob-controller  Saw completed job: bm-system-network-28333121, status: Complete
      Normal  SuccessfulDelete  47m   cronjob-controller  Deleted job bm-system-network-28333061
    

ヘルスチェック ログ

ヘルスチェックが実行されると、ログが生成されます。bmctl でヘルスチェックを実行する場合でも、定期的なヘルスチェックの一環として自動的に実行する場合でも、ログは Cloud Logging に送信されます。ヘルスチェックをオンデマンドで実行する場合、ログファイルは、管理ワークステーションのクラスタ フォルダの log/ ディレクトリ内のタイムスタンプ付きフォルダに作成されます。たとえば、test-cluster という名前のクラスタに対して bmctl check kubernetes コマンドを実行すると、bmctl-workspace/test-cluster/log/check-kubernetes-20231103-165923 のようなディレクトリにログが表示されます。

ローカルでログを表示する

kubectl を使用すると、定期的なヘルスチェックのログを表示できます。

  1. Pod を取得し、関心のある特定のヘルスチェック Pod を見つけます。

    kubectl get pods --kubeconfig ADMIN_KUBECONFIG --namespace CLUSTER_NAMESPACE
    

    次のように置き換えます。

    • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。
    • CLUSTER_NAMESPACE: クラスタの名前空間。

    次のサンプル レスポンスは、ヘルスチェックの Pod を示しています。

    NAME                                                              READY   STATUS      RESTARTS   AGE
    bm-system-10.200.0.4-machine-28353626-lzx46                       0/1     Completed   0          12m
    bm-system-10.200.0.5-machine-28353611-8vjw2                       0/1     Completed   0          27m
    bm-system-add-ons-28353614-gxt8f                                  0/1     Completed   0          24m
    bm-system-check-kernel-gce-user001-02fd2ac273bc18f008192e177x2c   0/1     Completed   0          75m
    bm-system-cplb-init-10.200.0.4-822aa080-7a2cdd71a351c780bf8chxk   0/1     Completed   0          74m
    bm-system-cplb-update-10.200.0.4-822aa082147dbd5220b0326905lbtj   0/1     Completed   0          67m
    bm-system-gcp-check-create-cluster-202311025828f3c13d12f65k2xfj   0/1     Completed   0          77m
    bm-system-kubernetes-28353604-4tc54                               0/1     Completed   0          34m
    bm-system-kubernetes-check-bm-system-kub140f257ddccb73e32c2mjzn   0/1     Completed   0          63m
    bm-system-machine-gcp-check-10.200.0.4-6629a970165889accb45mq9z   0/1     Completed   0          77m
    ...
    bm-system-network-28353597-cbwk7                                  0/1     Completed   0          41m
    bm-system-network-health-check-gce-user05e0d78097af3003dc8xzlbd   0/1     Completed   0          76m
    bm-system-network-preflight-check-create275a0fdda700cb2b44b264c   0/1     Completed   0          77m
    
  2. Pod のログを取得します。

    kubectl logs POD_NAME  --kubeconfig ADMIN_KUBECONFIG --namespace CLUSTER_NAMESPACE
    

    次のように置き換えます。

    • POD_NAME: ヘルスチェック Pod の名前。
    • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。
    • CLUSTER_NAMESPACE: クラスタの名前空間。

    次のサンプルは、ノードマシンのヘルスチェックが成功した Pod ログの一部を示しています。

    ...
    TASK [Summarize health check] **************************************************
    Wednesday 29 November 2023  00:26:22 +0000 (0:00:00.419)       0:00:19.780 ****
    ok: [10.200.0.4] => {
        "results": {
            "check_cgroup_pass": "passed",
            "check_cni_pass": "passed",
            "check_containerd_pass": "passed",
            "check_cpu_pass": "passed",
            "check_default_route": "passed",
            "check_disks_pass": "passed",
            "check_dns_pass": "passed",
            "check_docker_pass": "passed",
            "check_gcr_pass": "passed",
            "check_googleapis_pass": "passed",
            "check_kernel_version_pass": "passed",
            "check_kubelet_pass": "passed",
            "check_memory_pass": "passed",
            "check_pod_cidr_intersect_pass": "passed",
            "check_registry_mirror_reachability_pass": "passed",
            "check_time_sync_pass": "passed",
            "check_ubuntu_1804_kernel_version": "passed",
            "check_ufw_pass": "passed",
            "check_vcpu_pass": "passed"
        }
    }
    ...
    

    次のサンプルは、失敗したノードマシンのヘルスチェックの Pod ログの一部を示しています。このサンプルは、kubelet チェック(check_kubelet_pass)が失敗し、kubelet がこのノードで実行されていないことを示しています。

    ...
    TASK [Reach a final verdict] ***************************************************
    Thursday 02 November 2023  17:30:19 +0000 (0:00:00.172)       0:00:17.218 *****
    fatal: [10.200.0.17]: FAILED! => {"changed": false, "msg": "following checks failed, ['check_kubelet_pass']"}
    ...
    

Cloud Logging でログを確認する

ヘルスチェックのログは Cloud Logging にストリーミングされ、ログ エクスプローラで表示できます。定期的なヘルスチェックは、コンソールログで Pod に分類されます。

  1. Google Cloud コンソールで、[ロギング] メニューの [ログ エクスプローラ] ページに移動します。

    [ログ エクスプローラ] に移動

  2. [クエリ] フィールドに次のベーシック クエリを入力します。

    resource.type="k8s_container"
    resource.labels.pod_name=~"bm-system.*-machine.*"
    
  3. [クエリ結果] ウィンドウに、ノードマシンのヘルスチェックのログが表示されます。

定期的なヘルスチェックのクエリの一覧は次のとおりです。

  • ノードマシン

    resource.type="k8s_container"
    resource.labels.pod_name=~"bm-system.*-machine.*"
    
  • ネットワーク

    resource.type="k8s_container"
    resource.labels.pod_name=~"bm-system-network.*"
    
  • Kubernetes

    resource.type="k8s_container"
    resource.labels.pod_name=~"bm-system-kubernetes.*"
    
  • アドオン

    resource.type="k8s_container"
    resource.labels.pod_name=~"bm-system-add-ons.*"
    

定期的なヘルスチェック

デフォルトでは、定期的なヘルスチェックは 1 時間ごとに実行され、次のクラスタ コンポーネントをチェックします。

クラスタの健全性は、管理クラスタの Bare Metal HealthCheckhealthchecks.baremetal.cluster.gke.io)カスタム リソースで確認できます。ネットワーク、Kubernetes、アドオンのチェックはクラスタレベルのチェックであるため、チェックごとに 1 つのリソースがあります。マシンチェックは、ターゲット クラスタ内の各ノードに対して実行されるため、各ノードにリソースがあります。

  • 特定のクラスタの Bare Metal HealthCheck リソースを一覧表示するには、次のコマンドを実行します。

    kubectl get healthchecks.baremetal.cluster.gke.io --kubeconfig=ADMIN_KUBECONFIG \
        --namespace=CLUSTER_NAMESPACE
    

    次のように置き換えます。

    • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。

    • CLUSTER_NAMESPACE: ヘルスチェックのターゲット クラスタの名前空間。

    次のサンプル レスポンスは、形式を示しています。

    NAMESPACE               NAME                               PASS    AGE
    cluster-test-user001    bm-system-192.0.2.53-machine       true    56d
    cluster-test-user001    bm-system-192.0.2.54-machine       true    56d
    cluster-test-user001    bm-system-add-ons                  true    56d
    cluster-test-user001    bm-system-kubernetes               true    56d
    cluster-test-user001    bm-system-network                  true    56d
    

    healthchecks.baremetal.cluster.gke.ioPass フィールドは、最後のヘルスチェックが成功した(true)か失敗した(false)かを示します。

定期的なヘルスチェックのステータスを確認する方法については、HealthCheck カスタム リソースヘルスチェックのログをご覧ください。

定期的なヘルスチェックを無効にする

デフォルトでは、すべてのクラスタで定期的なヘルスチェックが有効になっています。クラスタの定期的なヘルスチェックを無効にするには、クラスタ リソースの periodicHealthCheck.enable フィールドを false に設定します。

定期的なヘルスチェックを無効にするには:

  1. クラスタ構成ファイルを編集して、periodicHealthCheck.enable フィールドをクラスタ仕様に追加し、その値を false に設定します。

    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-user-basic
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: user-basic
      namespace: cluster-user-basic
    spec:
      type: user
      profile: default
      ...
      periodicHealthCheck:
        enable: false
      ...
    
  2. 次の bmctl update コマンドを実行して、クラスタを更新します。

    bmctl update cluster -c CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
    

    次のように置き換えます。

    • CLUSTER_NAME: 更新するクラスタの名前。

    • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。

  3. 定期的なヘルスチェックが無効になっていることを確認するには、次のコマンドを実行して、対応する healthchecks.baremetal.cluster.gke.io リソースが削除されたことを確認します。

    kubectl get healthchecks.baremetal.cluster.gke.io --kubeconfig=ADMIN_KUBECONFIG \
        --namespace=CLUSTER_NAMESPACE
    

    次のように置き換えます。

    • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。

    • CLUSTER_NAMESPACE: ヘルスチェックのターゲット クラスタの名前空間。

定期的なヘルスチェックを再度有効にする

デフォルトでは、すべてのクラスタで定期的なヘルスチェックが有効になっています。定期的なヘルスチェックを無効にした場合は、クラスタ リソースの periodicHealthCheck.enable フィールドを true に設定することで再び有効にできます。

定期的なヘルスチェックを再度有効にするには:

  1. クラスタ構成ファイルを編集して、periodicHealthCheck.enable フィールドをクラスタ仕様に追加し、その値を true に設定します。

    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-user-basic
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: user-basic
      namespace: cluster-user-basic
    spec:
      type: user
      profile: default
      ...
      periodicHealthCheck:
        enable: true
      ...
    
  2. 次の bmctl update コマンドを実行して、クラスタを更新します。

    bmctl update cluster -c CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
    

    次のように置き換えます。

    • CLUSTER_NAME: 更新するクラスタの名前。

    • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。

  3. 定期的なヘルスチェックが有効になっていることを確認するには、次のコマンドを実行して、対応する healthchecks.baremetal.cluster.gke.io リソースが存在することを確認します。

    kubectl get healthchecks.baremetal.cluster.gke.io --kubeconfig=ADMIN_KUBECONFIG \
        --namespace=CLUSTER_NAMESPACE
    

    次のように置き換えます。

    • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。

    • CLUSTER_NAMESPACE: ヘルスチェックのターゲット クラスタの名前空間。

    (リソースが表示されるまでに数分かかることがあります。)

オンデマンド ヘルスチェック

以降のセクションでは、bmctl check を使用してオンデマンドで実行できるヘルスチェックについて説明します。bmctl check を使用してヘルスチェックを実行する場合、次のルールが適用されます。

  • bmctl check コマンドでユーザー クラスタを確認する場合は、--kubeconfig フラグを使用して管理クラスタの kubeconfig ファイルのパスを指定します。

  • ログは、管理ワークステーションのクラスタログ フォルダ内のタイムスタンプ付きのディレクトリ(デフォルトでは bmctl-workspace/CLUSTER_NAME/log)に生成されます。

  • ヘルスチェックのログは Cloud Logging にも送信されます。ログの詳細については、ヘルスチェック ログをご覧ください。

bmctl コマンドのオプションの詳細については、bmctl コマンド リファレンスをご覧ください。

アドオン

指定したクラスタに対して指定した Kubernetes アドオンが動作可能であることを確認します。

  • クラスタのアドオンを確認するには:

    bmctl check add-ons --cluster CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIG
    

    次のように置き換えます。

    • CLUSTER_NAME: 確認するクラスタの名前。
    • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。

チェックされる項目のリストについては、このドキュメントの「チェック対象の項目」のアドオンをご覧ください。

このチェックにより、管理ワークステーションのクラスタログ フォルダにある check-addons-TIMESTAMP ディレクトリにログファイルが生成されます。ログは Cloud Logging にも送信されます。ログの詳細については、ヘルスチェックのログをご覧ください。

クラスタ

指定したクラスタのすべてのクラスタノード、ノード ネットワーキング、Kubernetes、アドオンを確認します。クラスタ名を指定すると、デフォルトでは bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml のクラスタ構成ファイルを bmctl で検索します。

  • クラスタの状態を確認するには、次のコマンドを実行します。

    bmctl check cluster --cluster CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIG
    

    次のように置き換えます。

    • CLUSTER_NAME: 確認するクラスタの名前。
    • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。

チェックされる項目のリストについては、このドキュメントの「チェック対象の項目」セクションの次のセクションをご覧ください。

このチェックにより、管理ワークステーションのクラスタログ フォルダにある check-cluster-TIMESTAMP ディレクトリにログファイルが生成されます。ログは Cloud Logging にも送信されます。ログの詳細については、ヘルスチェックのログをご覧ください。

構成

クラスタ構成ファイルを確認します。このチェックは、構成ファイルが生成され、編集されてクラスタのクラスタ構成の詳細が指定されていることを前提としています。このコマンドの目的は、構成設定が正しくない、欠落している、または構文エラーがあるかどうかを判断することです。クラスタ名を指定すると、デフォルトで bmctlbmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml のクラスタ構成ファイルを検索します。

  • クラスタ構成ファイルを確認するには、次のコマンドを実行します。

    bmctl check config --cluster CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIG
    

    次のように置き換えます。

    • CLUSTER_NAME: 確認するクラスタの名前。
    • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。

このコマンドは、クラスタ構成ファイルの YAML 構文、Google Cloud アクセス、クラスタ構成ファイルで指定されたサービス アカウントの権限を確認します。

このチェックにより、管理ワークステーションのクラスタログ フォルダにある check-config-TIMESTAMP ディレクトリにログファイルが生成されます。ログは Cloud Logging にも送信されます。ログの詳細については、ヘルスチェックのログをご覧ください。

GCP

すべてのクラスタノード マシンが Container Registry(gcr.io)と Google API エンドポイント(googleapis.com)にアクセスできることを確認します。

  • 必要な Google Cloud リソースへのクラスタ アクセスを確認するには:

    bmctl check gcp --cluster CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIG
    

    次のように置き換えます。

    • CLUSTER_NAME: 確認するクラスタの名前。
    • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス。

このチェックにより、管理ワークステーションのクラスタログ フォルダにある check-gcp-TIMESTAMP ディレクトリにログファイルが生成されます。ログは Cloud Logging にも送信されます。ログの詳細については、ヘルスチェックのログをご覧ください。

Kubernetes

コントロール プレーンで実行されている重要な Kubernetes オペレータの正常性を確認します。このチェックでは、重要なオペレーターが正常に動作していることと、Pod がクラッシュしていないことを確認します。コントロール プレーン コンポーネントのいずれかが欠落していても、このヘルスチェックはエラーを返しません。コンポーネントが存在し、コマンド実行時にエラーが発生した場合にのみ、エラーが返されます。

  • クラスタ内の Kubernetes コンポーネントの正常性を確認するには、次のコマンドを実行します。

    bmctl check kubernetes --cluster CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIG
    

    次のように置き換えます。

    • CLUSTER_NAME: チェックするノードが含まれているクラスタの名前。
    • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス

確認する内容のリストについては、このドキュメントの「チェックする項目」の Kubernetes をご覧ください。

このチェックにより、管理ワークステーションのクラスタログ フォルダにある check-kubernetes-TIMESTAMP ディレクトリにログファイルが生成されます。ログは Cloud Logging にも送信されます。ログの詳細については、ヘルスチェックのログをご覧ください。

ノード

クラスタノード マシンが正しく構成されていること、およびクラスタのアップグレードとクラスタのオペレーションに十分なリソースと接続があることを確認します。

  • クラスタ内のノードマシンの正常性を確認するには:

    bmctl check nodes --cluster CLUSTER_NAME --addresses NODE_IP_ADDRESSES --kubeconfig ADMIN_KUBECONFIG
    

    次のように置き換えます。

    • CLUSTER_NAME: チェックするノードが含まれているクラスタの名前。
    • NODE_IP_ADDRESSES: ノードマシンの IP アドレスのカンマ区切りのリスト。
    • ADMIN_KUBECONFIG: 管理クラスタの kubeconfig ファイルのパス

確認する内容のリストについては、このドキュメントの「チェック」セクションのノードマシンのチェックをご覧ください。

このチェックでは、管理ワークステーションのクラスタログフォルダ内の check-nodes-TIMESTAMP ディレクトリに、各クラスタノード マシンのログファイルが生成されます。ログは Cloud Logging にも送信されます。ログの詳細については、ヘルスチェックのログをご覧ください。

プリフライト

Google Ads API(AdWords API)のbmctlプリフライト チェックを実行するには、クラスタ作成に対するオンデマンド プリフライト チェックの実行および クラスタ アップグレード用のオンデマンド プリフライト チェックを実行するをご覧ください。

VM ランタイムのプリフライト チェック

Google Distributed Cloud の VM ランタイムのプリフライト チェックは、Google Distributed Cloud と VM で VM ランタイムを使用する前に、ノードマシンの前提条件のセットを検証します。Google Distributed Cloud の VM ランタイムのプリフライト チェックが失敗すると、VM の作成はブロックされます。VMRuntime カスタム リソースで spec.enabledtrue に設定されている場合、Google Distributed Cloud の VM ランタイムのプリフライト チェックは自動的に実行されます。

apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
  name: vmruntime
spec:
  enabled: true
...

詳細については、Google Distributed Cloud の VM ランタイムのプリフライト チェックをご覧ください。

次のステップ