コンテンツへスキップ

高可用性コンポーネントの設定

アクティブ/パッシブ高可用性(HA)は、Kubernetes APIの標準機能であり、障害が発生した場合でもAPIが稼働し続けることを保証するのに役立ちます。HA展開では、アクティブなコントローラがクラッシュしたり削除されたりした場合、別のコントローラが利用可能になり、利用できなくなったコントローラによってサービスされていたAPIの処理を引き継ぎます。

リーダー選出HAパターンを使用する場合、コントローラのインスタンスは、必要になる前に既にクラスタ内でスケジュールされ、実行されています。これらのコントローラインスタンスは、リーダー選出ロックと呼ばれる共有リソースの使用を競います。いつでもリーダー選出ロックリソースにアクセスできるコントローラのインスタンスは、リーダーと呼ばれます。

リーダー選出は、すべてのKnative Servingコンポーネントでデフォルトで有効になっています。HA機能は、1つのレプリカのみで構成されているすべてのKnative Servingコンポーネントでデフォルトで無効になっています。

リーダー選出の無効化

HAを実現するためにリーダー選出を利用しているコンポーネントの場合、--disable-haフラグを渡すことでこの機能を無効にすることができます。このオプションは、HAが「安定版」に昇格すると廃止されます。

コントロールプレーンのスケーリング

activatorコンポーネントを除いて、knative-serving(またはkourier-system)で実行されている任意のデプロイメントは、次のコマンドでスケールアップできます。

$ kubectl -n knative-serving scale deployment <deployment-name> --replicas=2
  • --replicas2に設定すると、HAが有効になります。
  • デプロイメントのレプリカをさらに増やす必要があるユースケースがある場合は、より大きな値を使用できます。たとえば、3つのcontrollerデプロイメントを最低限必要とする場合は、--replicas=3に設定します。
  • --replicas=1に設定すると、HAが無効になります。

注記

Autoscalerをスケールダウンすると、stable-window値までの期間、一部のリビジョンの正確な自動スケーリング結果が観察されない場合があります。これは、autoscalerポッドが終了するときに、そのポッドに属するリビジョンの所有権が、スタンバイ状態にある他のautoscalerポッドに渡されるためです。これらのリビジョンの所有権を引き継いだautoscalerポッドは、stable-window時間を使用して、これらのリビジョンのスケーリングメトリクス状態を構築します。

データプレーンのスケーリング

activatorコンポーネントのスケールは、Kubernetes HPAコンポーネントによって制御されます。現在のHPAスケール制限と現在のスケールを確認するには、次のコマンドを実行します。

$ kubectl get hpa activator -n knative-serving

出力は次のようになります。

NAME        REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
activator   Deployment/activator   2%/100%   5         15        11         346d

デフォルトでは、minReplicasmaxReplicasはそれぞれ120に設定されています。何らかの理由でこれらの値が望ましくない場合は、たとえば、次のコマンドを使用してこれらの値をminScale=9maxScale=19に変更できます。

$ kubectl patch hpa activator -n knative-serving -p '{"spec":{"minReplicas":9,"maxReplicas":19}}'

アクティベータのスケールを特定の値に設定するには、minScalemaxScaleを同じ値に設定します。

冗長性を確保し、Knativeサービスを0からスケールアップする必要がある場合に単一障害点を回避するために、本番環境のデプロイメントでは、少なくとも3つのactivatorインスタンスを実行することをお勧めします。

サイトトラフィックを理解するために、分析とCookieを使用しています。その目的で、お客様のサイト使用に関する情報はGoogleと共有されます。詳細はこちら。