このドキュメントでは、GDC の VM ランタイムを使用して動作する仮想マシン(VM)の高可用性ポリシーを構成する方法について説明します。
GDC の 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