このドキュメントでは、Anthos VM ランタイムを使用して実行する仮想マシン(VM)の高可用性ポリシーを構成する方法について説明します。
Anthos VM ランタイムを有効にすると、クラスタは default
という名前の VMHighAvailabilityPolicy オブジェクトを作成します。このオブジェクトは、VM を実行しているクラスタノードで障害が発生した場合のデフォルトの復元戦略を指定します。考えられるデフォルトの復元戦略は次のとおりです。
- Reschedule: 別のクラスタノードで VM のスケジュールを変更します。
- Ignore: 何もしません。
最初は、デフォルトの復元戦略は Reschedule
に設定されています。
次の状況では、Reschedule
のデフォルトの復元戦略が適しています。
クラスタに 2 つ以上のワーカーノードがある。
VM ディスクは、ネットワーク ファイルベースのストレージ クラスを使用してプロビジョニングされる。つまり、ストレージ クラスは、異なるクライアント間で POSIX ファイルロックを調整するネットワーク ファイル システムに基づいている。ネットワーク ファイル システム(NFS)は、ネットワーク ファイルベースのストレージ クラスの例です。
VM がローカル ストレージまたはブロックベースのストレージ システムを使用している場合、デフォルトの復元戦略を Ignore
に設定することをおすすめします。この推奨を行う理由は次のとおりです。
VM がローカル ストレージを使用していて、ノードに障害が発生した場合、保存されたデータを復元して新しいノードに移動することはできません。
VM がブロックベースのストレージ システムを使用している場合、ストレージに十分な接続解除が保証されていない可能性があります。その結果、VM のスケジューリング中にディスクへの同時アクセスとデータの破損が発生する可能性があります。
VMHighAvailabilityPolicy オブジェクトを調べる
VMHighAvailabilityPolicy オブジェクトが存在することを確認します。
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get VMHighAvailabilityPolicy --namespace vm-system
USER_CLUSTER_KUBECONFIG は、ユーザー クラスタ kubeconfig ファイルのパスに置き換えます。
出力には、default
という名前の VMHighAvailabilityPolicy オブジェクトが存在することが示されます。出力で、defaultRecoveryStrategy
の現在の値も確認できます。たとえば、次の出力は defaultRecoveryStrategy
の現在の値が Reschedule
であることを示しています。
vm-system default 5m55s Reschedule 15s 1m30s
VMHighAvailabilityPolicy オブジェクトの詳細ビューを取得します。
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get VMHighAvailabilityPolicy \ --namespace vm-system --output yaml
出力例:
apiVersion: vm.cluster.gke.io/v1alpha1 kind: VMHighAvailabilityPolicy metadata: ... labels: app.kubernetes.io/component: kubevirt app.kubernetes.io/managed-by: virt-operator kubevirt.io: virt-api name: default namespace: vm-system .. spec: defaultRecoveryStrategy: Reschedule nodeHeartbeatInterval: 15s nodeMonitorGracePeriod: 1m30s
デフォルトの復元戦略を変更する
状況によっては、デフォルトの復元戦略を変更することをおすすめします。たとえば、VM でローカル ストレージまたはネットワーク ファイルベース以外のファイル システムを使用している場合は、defaultRecoveryStrategy
の値を Ignore
に変更することをおすすめします。
defaultRecoveryStrategy
の値を変更するには、VMHighAvailabilityPolicy オブジェクトを開いて編集します。
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG edit VMHighAvailabilityPolicy \ default --namespace vm-system
テキスト エディタで、defaultRecoveryStrategy
の値を任意の値(Reschedule
または Ignore
)に変更します。テキスト エディタを閉じます。
VM のデフォルトの復元戦略をオーバーライドする
デフォルトの復元戦略は、クラスタ内で実行されているすべての VM に適用されます。ただし、個々の VM のデフォルトの復元戦略のオーバーライドが必要な場合もあります。
たとえば、ほとんどの VM がネットワークファイルベースのストレージ クラスでプロビジョニングされているものの、一部の VM はブロックベースのストレージ クラスでプロビジョニングされているとします。ブロックベースのストレージを使用する VM ごとに、個々の VM の復元戦略を Ignore
に設定して、デフォルトの復元戦略をオーバーライドすることをおすすめします。
VM のデフォルトの復元戦略をオーバーライドするには、VirtualMachineInstance(VMI)オブジェクトと GVM オブジェクトの両方に vm.cluster.gke.io/vm-ha-recovery-strategy
アノテーションを追加します。
たとえば、次のコマンドは、my-vm
という名前の VM の復元戦略を Ignore
に設定します。
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ annotate vmi my-vm \ vm.cluster.gke.io/vm-ha-recovery-strategy=Ignore --overwrite kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ annotate gvm my-vm \ vm.cluster.gke.io/vm-ha-recovery-strategy=Ignore --overwrite
アノテーションを後で削除する場合は、アノテーション名の末尾にハイフンを使用します。例:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ annotate vmi my-vm \ vm.cluster.gke.io/vm-ha-recovery-strategy- kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ annotate gvm my-vm \ vm.cluster.gke.io/vm-ha-recovery-strategy-
詳細構成
デフォルトの復元戦略を構成するだけでなく、次のように構成できます。
ノード ハートビート間隔: 各クラスタノードごとに送信されるハートビートの間隔
ノードモニターの猶予期間: ノードがハートビートを送信できず、異常であると判断されるまでの最大時間
ほとんどの場合、ハートビート間隔と猶予期間はデフォルト値で十分です。ただし、復元速度とオーバーヘッドのトレードオフを微調整したい場合は、これらの値を調整することもできます。ハートビート間隔を短くすると復元時間が短くなりますが、オーバーヘッドが増加します。大規模なクラスタでは、多数のノードからのハートビートが頻繁に発生すると、Kubernetes API サーバーに許容できない負荷がかかる可能性があるため、ハートビート間隔を長くすることができます。
1 回のハートビートの欠落でノードが異常と判断されるのを避けるために、ハートビート間隔は猶予期間よりも短くします。
kubectl edit
を実行して、VMHighAvailabilityPolicy オブジェクトを編集用に開きます。nodeHeartbeatInterval
と nodeMonitorGracePeriod
を任意の値に設定します。
spec: defaultRecoveryStrategy: Reschedule nodeHeartbeatInterval: 15s nodeMonitorGracePeriod: 1m30s