高可用性コンポーネントの設定¶
アクティブ/パッシブ高可用性(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インスタンスを実行することをお勧めします。