高可用性コンポーネントの設定¶
アクティブ/パッシブ高可用性(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
--replicas
を2
に設定すると、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
デフォルトでは、minReplicas
とmaxReplicas
はそれぞれ1
と20
に設定されています。何らかの理由でこれらの値が望ましくない場合は、たとえば、次のコマンドを使用してこれらの値をminScale=9
とmaxScale=19
に変更できます。
$ kubectl patch hpa activator -n knative-serving -p '{"spec":{"minReplicas":9,"maxReplicas":19}}'
アクティベータのスケールを特定の値に設定するには、minScale
とmaxScale
を同じ値に設定します。
冗長性を確保し、Knativeサービスを0からスケールアップする必要がある場合に単一障害点を回避するために、本番環境のデプロイメントでは、少なくとも3つのactivator
インスタンスを実行することをお勧めします。