Alibaba Cloud Container Service for Kubernetes(ACK)コンソールでStatefulSetを使用して、ステートフルアプリケーションを迅速に作成できます。このトピックでは、ステートフルなNGINXアプリケーションの作成方法とStatefulSetの機能について説明します。
前提条件
kubectlクライアントがクラスタに接続されていること。詳細については、クラスタのkubeconfigファイルを取得し、kubectlを使用してクラスタに接続するを参照してください。
背景情報
StatefulSetは、以下の機能を提供します。
機能 | 説明 |
Podの整合性 | Podの整合性により、Podが指定された順序で起動および終了され、ネットワークの整合性が確保されます。Podの整合性は、Podがスケジュールされるノードに関係なく、Podの設定によって決まります。 |
安定した永続ストレージ | VolumeClaimTemplateを使用すると、永続ボリューム(PV)を各Podにマウントできます。レプリケートされたPodにマウントされたPVは、レプリケートされたPodを削除したり、レプリケートされたPodの数をスケールインしたりした後も削除されません。 |
安定したネットワーク識別子 | StatefulSet内の各Podは、StatefulSetの名前とPodの序数から |
安定した順序 | N個のレプリケートされたPodを持つStatefulSetの場合、各Podには0からN-1までの整数の序数が割り当てられます。StatefulSet内でPodに割り当てられた序数は一意です。 |
手順
ステップ1:基本設定
ACKコンソールにログインします。左側のナビゲーションペインで、クラスタをクリックします。
クラスタページで、管理するクラスタを見つけ、そのIDをクリックします。クラスタ詳細ページの左側のナビゲーションペインで、
を選択します。StatefulSetsページで、イメージから作成をクリックします。
基本情報ウィザードページで、基本設定を行います。
パラメータ
説明
名前
アプリケーションの名前を入力します。
レプリカ
アプリケーションにプロビジョニングされるPodの数。デフォルト値:2。
ワークロード
StatefulSetを選択します。
ラベル
アプリケーションにラベルを追加します。ラベルは、アプリケーションを識別するために使用されます。
アノテーション
アプリケーションにアノテーションを追加します。
インスタンスタイプ
使用するインスタンスタイプ。詳細については、ACK Podの概要を参照してください。
Qosタイプ
QoSクラスを選択します。詳細については、コンピューティングパワーQoSを参照してください。
汎用Podは、デフォルトとBestEffort QoSクラスをサポートしています。
パフォーマンス向上Podは、デフォルトQoSクラスのみをサポートしています。
次へをクリックして、コンテナウィザードページに進みます。
ステップ2:コンテナの設定
コンテナウィザードページで、コンテナイメージ、リソース設定、ポート、環境変数、ヘルスチェック、ライフサイクル、ボリューム、およびログを設定します。
コンテナ1タブの右側にあるコンテナを追加をクリックして、さらにコンテナを追加します。
全般セクションで、基本的なコンテナ設定を行います。
パラメータ
説明
イメージ名
イメージを選択
イメージを選択をクリックし、コンテナイメージを選択します。
Container Registry Enterprise Edition:Container Registry Enterprise Editionインスタンスに保存されているイメージを選択します。イメージが属するリージョンとContainer Registryインスタンスを選択する必要があります。Container Registryの詳細については、Container Registryとはを参照してください。
Container Registry Personal Edition:Container Registry Personal Editionインスタンスに保存されているイメージを選択します。Container Registry Personal Editionがアクティブになっていることを確認してください。イメージが属するリージョンとContainer Registryインスタンスを選択する必要があります。
アーティファクトセンター:アーティファクトセンターには、アプリケーションのコンテナ化のための基本オペレーティングシステムイメージ、基本言語イメージ、およびAIおよびビッグデータ関連のイメージが含まれています。この例では、NGINXイメージが選択されています。詳細については、アーティファクトセンターの概要を参照してください。
(オプション)イメージプルポリシーを設定する
イメージプルポリシードロップダウンリストからイメージプルポリシーを選択します。デフォルトでは、KubernetesのIfNotPresentポリシーが使用されます。
ifNotPresent:プルするイメージがオンプレミスマシンで見つかった場合、オンプレミスマシンのイメージが使用されます。それ以外の場合、システムはイメージレジストリからイメージをプルします。
常に:アプリケーションがデプロイまたは拡張されるたびに、システムはレジストリからイメージをプルします。
しない:システムはオンプレミスマシンのイメージのみを使用します。
(オプション)イメージプルシークレットを設定する
イメージプルシークレットを設定をクリックして、プライベートイメージをプルするために使用するシークレットを設定します。
シークレットを使用して、Container Registry Personal Editionインスタンスからイメージをプルできます。シークレットの設定方法の詳細については、シークレットの管理を参照してください。
シークレットを使用せずに、Container Registry Enterprise Editionインスタンスからイメージをプルできます。詳細については、シークレットを使用せずにContainer Registryインスタンスからイメージをプルするを参照してください。
必要なリソース
コンテナのリソースリクエストを指定します。
CPU:コンテナのCPUリクエストとCPU制限を設定できます。デフォルトでは、CPUリクエストはCPU制限と同じです。CPUリソースは従量課金制です。YAMLテンプレートを使用してリソースリクエストとは異なるリソース制限を設定した場合、リソースリクエストはリソース制限の値に自動的に上書きされます。詳細については、リソース仕様を参照してください。
メモリ:コンテナのメモリリクエストとメモリ制限を設定できます。デフォルトでは、メモリリクエストはメモリ制限と同じです。メモリリソースは従量課金制です。YAMLテンプレートを使用してリソースリクエストとは異なるリソース制限を設定した場合、リソースリクエストはリソース制限の値に自動的に上書きされます。詳細については、リソース仕様を参照してください。
コンテナ起動パラメータ
コンテナの起動オプションを指定します。このパラメータはオプションです。
stdin:ACKコンソールの入力をコンテナに渡します。
tty:仮想端末で定義された起動パラメータをACKコンソールに渡します。
説明stdinとttyは一緒に使用されます。この場合、仮想端末(tty)はコンテナのstdinに関連付けられます。たとえば、インタラクティブプログラムはユーザーからstdinを受信し、端末にコンテンツを表示します。
Initコンテナ
このチェックボックスを選択すると、initコンテナが作成されます。このパラメータはオプションです。
Initコンテナを使用して、アプリケーションコンテナの起動をブロックまたは延期できます。Pod内のアプリケーションコンテナは、initコンテナが起動した後にのみ同時に起動します。たとえば、initコンテナを使用して、アプリケーションが依存するサービスの可用性を確認できます。アプリケーションイメージでは提供されていないツールやスクリプトをinitコンテナで実行して、アプリケーションコンテナのランタイム環境を初期化できます。たとえば、ツールやスクリプトを実行して、カーネルパラメータを設定したり、設定ファイルを生成したりできます。詳細については、Initコンテナを参照してください。
オプション:ポートセクションで、追加をクリックしてコンテナポートを追加できます。
パラメータ
説明
名前
コンテナポートの名前を入力します。
コンテナポート
公開するコンテナポートを指定します。ポート番号は1~65535の範囲でなければなりません。
プロトコル
有効な値:TCPおよびUDP。
オプション:環境セクションで、追加をクリックして環境変数を追加できます。
環境ラベルを追加したり、設定を渡したりするために、キーと値のペアで環境変数をPodに追加できます。詳細については、環境変数を通じてPod情報をコンテナに公開するを参照してください。
パラメータ
説明
タイプ
環境変数のタイプを選択します。有効な値:
カスタム
パラメータ
シークレット
値/valuefrom
ResourceFieldRef
ConfigMapまたはシークレットを選択した場合、選択したConfigMapまたはシークレットのすべてのデータをコンテナ環境変数に渡すことができます。
この例では、シークレットが選択されています。タイプドロップダウンリストからシークレットを選択し、値/ValueFromドロップダウンリストからシークレットを選択します。デフォルトでは、選択したシークレットのすべてのデータが環境変数に渡されます。
この場合、アプリケーションのデプロイに使用されるYAMLファイルには、選択したシークレットのすべてのデータを参照する設定が含まれています。
変数キー
環境変数の名前。
値/valuefrom
環境変数の値。
オプション:ヘルスチェックセクションで、ビジネス要件に基づいてliveness、readiness、およびstartupプローブを有効にできます。
Liveness:Livenessプローブは、コンテナをいつ再起動するかを判断するために使用されます。
Readiness:Readinessプローブは、コンテナがトラフィックを受信する準備ができているかどうかを判断するために使用されます。
Startup:Startupプローブは、コンテナをいつ起動するかを判断するために使用されます。
詳細については、Liveness、Readiness、およびStartupプローブの設定を参照してください。
パラメータ
説明
HTTP
コンテナにHTTP GETリクエストを送信します。以下のパラメータを設定できます。
プロトコル:リクエストを送信するプロトコル。有効な値:HTTPおよびHTTPS。
パス:サーバーでリクエストされたHTTPパス。
ポート:コンテナによって公開されるポートの番号または名前。ポート番号は1~65535でなければなりません。
HTTPヘッダー:HTTPリクエストのカスタムヘッダー。重複ヘッダーが許可されます。キーと値のペアでHTTPヘッダーを指定できます。
初期遅延(秒):YAMLファイルのinitialDelaySecondsフィールド。このフィールドは、コンテナの起動後、最初のプローブが実行されるまでの待機時間(秒単位)を指定します。デフォルト値:3。
期間(秒):YAMLファイルのperiodSecondsフィールド。このフィールドは、プローブが実行される時間間隔(秒単位)を指定します。デフォルト値:10。最小値:1。
タイムアウト(秒):YAMLファイルのtimeoutSecondsフィールド。このフィールドは、プローブがタイムアウトするまでの時間(秒単位)を指定します。デフォルト値:1。最小値:1。
正常しきい値:プローブの失敗後、コンテナが正常と見なされるまでに必要な連続成功の最小回数。デフォルト値:1。最小値:1。Livenessプローブの場合、このパラメータは1に設定する必要があります。
異常しきい値:成功後、コンテナが異常と見なされるまでに必要な連続失敗の最小回数。デフォルト値:3。最小値:1。
TCP
コンテナにTCPソケットを送信します。kubeletは、指定されたポートでソケットを開こうとします。接続が確立できる場合、コンテナは正常と見なされます。それ以外の場合、コンテナは異常と見なされます。以下のパラメータを設定できます。
ポート:コンテナによって公開されるポートの番号または名前。ポート番号は1~65535でなければなりません。
初期遅延(秒):YAMLファイルのinitialDelaySecondsフィールド。このフィールドは、コンテナの起動後、最初のプローブが実行されるまでの待機時間(秒単位)を指定します。デフォルト値:15。
期間(秒):YAMLファイルのperiodSecondsフィールド。このフィールドは、プローブが実行される時間間隔(秒単位)を指定します。デフォルト値:10。最小値:1。
タイムアウト(秒):YAMLファイルのtimeoutSecondsフィールド。このフィールドは、プローブがタイムアウトするまでの時間(秒単位)を指定します。デフォルト値:1。最小値:1。
正常しきい値:プローブの失敗後、コンテナが正常と見なされるまでに必要な連続成功の最小回数。デフォルト値:1。最小値:1。Livenessプローブの場合、このパラメータは1に設定する必要があります。
異常しきい値:成功後、コンテナが異常と見なされるまでに必要な連続失敗の最小回数。デフォルト値:3。最小値:1。
コマンド
コンテナでプローブコマンドを実行して、コンテナのヘルスステータスを確認します。以下のパラメータを設定できます。
コマンド:コンテナのヘルスステータスを確認するために実行されるプローブコマンド。
初期遅延(秒):YAMLファイルのinitialDelaySecondsフィールド。このフィールドは、コンテナの起動後、最初のプローブが実行されるまでの待機時間(秒単位)を指定します。デフォルト値:5。
期間(秒):YAMLファイルのperiodSecondsフィールド。このフィールドは、プローブが実行される時間間隔(秒単位)を指定します。デフォルト値:10。最小値:1。
タイムアウト(秒):YAMLファイルのtimeoutSecondsフィールド。このフィールドは、プローブがタイムアウトするまでの時間(秒単位)を指定します。デフォルト値:1。最小値:1。
正常しきい値:プローブの失敗後、コンテナが正常と見なされるまでに必要な連続成功の最小回数。デフォルト値:1。最小値:1。Livenessプローブの場合、このパラメータは1に設定する必要があります。
異常しきい値:成功後、コンテナが異常と見なされるまでに必要な連続失敗の最小回数。デフォルト値:3。最小値:1。
オプション:ライフサイクルセクションで、コンテナのライフサイクルを設定できます。
Start、Post Start、Pre Stopなどのパラメータを指定して、コンテナのライフサイクルを設定できます。詳細については、コンテナライフサイクルイベントにハンドラをアタッチするを参照してください。
パラメータ
説明
開始
コンテナが起動する前に有効になるコマンドとパラメータを指定します。
Post Start
コンテナが起動した後に有効になるコマンドを指定します。
Pre Stop
コンテナを終了するコマンドを指定します。
オプション:ボリュームセクションで、コンテナにマウントするボリュームを設定します。
オプション:ログセクションで、ログ設定を指定し、収集されたログにカスタムタグを追加できます。
パラメータ
説明
収集設定
ログストア:ログサービスにログストアを作成して、収集されたログデータを保存します。
コンテナ内のログパス(stdoutに設定可能):ログを収集するstdoutまたはパスを指定します。
stdoutファイルを収集:stdoutを指定すると、stdoutファイルが収集されます。
テキストログ:コンテナの指定されたパスにあるログが収集されることを指定します。この例では、
/var/log/nginx
がパスとして指定されています。パスにはワイルドカード文字を使用できます。
カスタムタグ
カスタムタグを追加することもできます。タグは、ログが収集されるときにコンテナのログに追加されます。ログの分析とフィルタリングのために、コンテナログにカスタムタグを追加できます。
次へをクリックして、詳細設定ウィザードページに進みます。
ステップ3:詳細設定
詳細設定ウィザードページで、アクセス制御、スケーリング、スケジューリング、アノテーション、およびラベルなどの設定を行います。
アクセス制御セクションで、バックエンドPodを公開するためのアクセス制御設定を行うことができます。
また、バックエンドPodをインターネットに公開する方法を指定することもできます。この例では、ClusterIPサービスとイングレスが作成され、NGINXアプリケーションがインターネットに公開されます。
サービスを作成するには、サービスの右側にある作成をクリックします。作成ダイアログボックスで、パラメータを設定します。
イングレスを作成するには、イングレスの右側にある作成をクリックします。作成ダイアログボックスで、パラメータを設定します。
オプション:スケーリングセクションで、HPAを有効にして、変動するワークロードを処理できます。
Horizontal Pod Autoscaler(HPA)は、CPUおよびメモリ使用率メトリックに基づいて、ACKクラスタ内のPodの数を自動的にスケーリングできます。
説明HPAを有効にするには、コンテナに必要なリソースを設定する必要があります。そうしないと、HPAは有効になりません。
パラメータ
説明
メトリック
CPU使用率またはメモリ使用率を選択します。選択したリソースタイプは、必要なリソースフィールドで指定したものと同じである必要があります。
条件
リソース使用率のしきい値を指定します。HPAは、しきい値を超えるとスケールアウトイベントをトリガーします。
最大レプリカ数
アプリケーションをスケーリングできるレプリケートされたPodの最大数。
最小レプリカ数
実行する必要があるレプリケートされたPodの最小数。
CronHPA は、スケジュールされた時間に ACS クラスタをスケーリングできます。CronHPA を有効にする前に、まず ack-kubernetes-cronhpa-controller をインストールする必要があります。CronHPA の詳細については、CronHPA を参照してください。
オプション:ラベルとアノテーションセクションで、追加をクリックして、Podのラベルとアノテーションを追加できます。
作成をクリックします。
ステップ 4: アプリケーション情報の表示
アプリケーションの作成後、表示されるページの詳細の表示をクリックして、StatefulSet詳細ページに移動します。
ジョブページの情報も表示できます。StatefulSetの名前をクリックするか、アクション列の詳細をクリックして、StatefulSet詳細ページに移動します。