Container Service for Kubernetes (ACK) クラスターでは、コンソールから StatefulSet を作成できます。この例では、ステートフルな NGINX アプリケーションをデプロイすることで、StatefulSet の機能を示します。
前提条件
kubectl が Kubernetes クラスターに接続されている必要があります。クラスターの kubeconfig を取得して kubectl を使用し、クラスターに接続します。
StatefulSet の機能
StatefulSet は以下の機能を提供します。
|
機能 |
説明 |
|
一貫した Pod アイデンティティ |
順序の保証 (起動およびシャットダウンの順序など) と、スケジューリングに関わらず Pod に維持される一貫したネットワークアイデンティティを提供します。 |
|
安定した永続ストレージ |
VolumeClaimTemplate を使用して、各 Pod 用に PV を作成します。スケールダウンまたはレプリカの削除を行っても、関連するボリュームは削除されません。 |
|
安定したネットワークアイデンティティ |
Pod の |
|
安定した順序 |
レプリカ数が N 個の StatefulSet は、各 Pod に [0, N) の範囲で一意の順序インデックスを割り当てます。 |
手順
ステップ1:アプリケーションの基本情報の設定
ACS コンソール にログインします。左側のナビゲーションペインで、クラスター をクリックします。
クラスター ページで、管理するクラスターを見つけ、その ID をクリックします。クラスター詳細ページの左側のナビゲーションペインで、 を選択します。
ステートフルセット ページで、イメージから作成 をクリックします。
-
基本情報 ページで、アプリケーションを設定します。
パラメーター
説明
[名前]
アプリケーション名を入力します。
[Replicas:]
アプリケーションの Pod 数です。デフォルトは 2 です。
[ワークロード]
ステーフルセット を選択します。
Label
アプリケーションを識別するためのラベルです。
Annotation
アプリケーションのアノテーションです。
インスタンスタイプ
コンピューティングタイプを選択します。詳細については、「ACS Pod インスタンスの概要」をご参照ください。
[QoS タイプ]
コンピューティング能力の QoS タイプを選択します。
-
[次へ] をクリックすると、コンテナー ページが開きます。
ステップ 2:コンテナの設定
Container ページで、コンテナを設定します。
Pod に複数のコンテナを追加するには、コンテナ 1 タブの右側にある Add Container をクリックします。
General セクションで、コンテナの基本設定を完了します。
パラメーター
説明
Image Name
イメージの選択
Select Image をクリックし、必要なイメージを選択します。
Container Registry Enterprise Edition:Container Registry (ACR) にホストされている Enterprise Edition のイメージを選択できます。イメージが属するリージョンおよび ACR インスタンスを選択する必要があります。ACR の詳細については、「Container Registry (ACR) とは」をご参照ください。
Container Registry Personal Edition(有効化が必要):ACR にホストされている Personal Edition のイメージを選択できます。イメージが属するリージョンおよび ACR インスタンスを選択する必要があります。
プロダクトセンター:コンテナ化用のベース OS イメージ、ベース言語イメージ、AI やビッグデータ関連のイメージが含まれています。この例では、中国 (杭州) リージョンのアーティファクトセンターにある Nginx イメージを使用します。詳細については、「アーティファクトセンター」をご参照ください。
(オプション)イメージプルポリシーの設定
Image Pull Policy ドロップダウンリストからイメージプルポリシーを選択します。このパラメーターを設定しない場合、Kubernetes のデフォルトポリシーである IfNotPresent が使用されます。
IfNotPresent:Kubernetes はローカルにイメージが存在しない場合にのみイメージをプルします。
Always:Kubernetes は常にイメージをプルし、ローカルのコピーは無視されます。
Never:Kubernetes はローカルのイメージのみを使用します。
(オプション)イメージプルシークレットの設定
プライベートイメージのセキュリティを確保するために、Set Image Pull Secret をクリックしてシークレットを設定します。
ACR Personal Edition インスタンスの場合、イメージプルシークレットを設定することでイメージをプルできます。シークレットの設定方法の詳細については、「シークレットの管理」をご参照ください。
ACR Enterprise Edition インスタンスの場合、パスワード不要コンポーネントを使用することでシークレットなしでイメージをプルできます。詳細については、「シークレットなしで ACR イメージをプルする」をご参照ください。
Required Resources
コンテナのリソースリクエストとリミットを設定します。
CPU:コンテナの CPU リクエストおよびリミットを指定できます。デフォルトでは、CPU リクエストはリミットと等しくなり、リソースは従量課金となります。YAML ファイルを使用してリクエストとは異なるリミットを設定した場合、リクエスト値は自動的にリミット値に合わせて設定されます。詳細については、「リソース仕様」をご参照ください。
Memory:コンテナのメモリリクエストおよびリミットを指定できます。デフォルトでは、メモリリクエストはリミットと等しくなり、リソースは従量課金となります。YAML ファイルを使用してリクエストとは異なるリミットを設定した場合、リクエスト値は自動的にリミット値に合わせて設定されます。詳細については、「リソース仕様」をご参照ください。
インタラクティブセッション
(オプション)コンテナ起動オプションを設定します。
stdin:コンソール入力をコンテナに送信します。
tty:標準入力コンソールをコンテナのコンソール入力として使用します。
説明通常、stdin と tty の両方を選択します。これにより、端末 (tty) がコンテナの標準入力 (stdin) にバインドされます。たとえば、インタラクティブなプログラムはユーザーからの標準入力を取得し、端末に出力を表示します。
Init Containers
(オプション)このオプションを選択して Init コンテナを作成します。
Init コンテナは、アプリケーションコンテナの起動をブロックまたは遅延させるメカニズムを提供します。Init コンテナが正常に完了すると、Pod 内のアプリケーションコンテナが並行して起動します。たとえば、依存サービスの可用性を確認するために Init コンテナを使用できます。Init コンテナには、アプリケーションイメージに存在しないユーティリティやインストールスクリプトを含めることができ、カーネルパラメータの設定や設定ファイルの生成など、アプリケーションコンテナの実行環境を初期化するために使用できます。詳細については、「Init コンテナ」をご参照ください。
(オプション)Ports セクションで、Add をクリックしてコンテナポートを設定します。
パラメーター
説明
Name
コンテナポートの名前を入力します。
Container Port
アクセス用に公開するコンテナポートを指定します。ポート番号は 1 ~ 65535 の範囲内である必要があります。
Protocol
TCP および UDP がサポートされています。
(省略可)Environments セクションで、Add をクリックして環境変数を設定します。
キーと値のペアで Pod の環境変数を設定し、環境フラグを追加したり、設定を渡したりできます。詳細については、「Pod 環境変数」をご参照ください。
パラメーター
説明
Type
環境変数のタイプを設定します。
Custom
ConfigMaps
Secrets
Value/ValueFrom
ResourceFieldRef
ConfigMap またはシークレット内のすべてのファイルを参照できます。
この例ではシークレットを使用します。Secrets タイプを選択し、対象のシークレットのみを選択した場合、そのシークレット内のすべてのキーと値のペアがデフォルトで参照されます。

対応する YAML でもシークレット全体が参照されます。

Variable Key
環境変数の名前を入力します。
Value/ValueFrom
参照する値を設定します。
(オプション)Health Check セクションで、必要に応じて Liveness、Readiness、および Startup を有効にします。
Liveness プローブ:Liveness プローブはコンテナが実行中かどうかをチェックします。プローブが複数回失敗すると、kubelet がコンテナを再起動します。これにより、コンテナは実行中だが進行できない状態(デッドロックなど)の問題を解決できます。
Readiness プローブ:Readiness プローブはコンテナがトラフィックを受け入れる準備ができているかどうかをチェックします。Pod は readiness プローブが成功した後でのみ、Service のバックエンドとして追加されます。
スタートアッププローブ:これらのプローブはコンテナの起動時のみ実行され、正常に起動したかどうかをチェックします。Liveness プローブ および Readiness プローブ は、スタートアッププローブが成功した後でのみ実行されます。
詳細については、「Liveness、Readiness、および Startup プローブの設定」をご参照ください。
パラメーター
説明
HTTP
コンテナに HTTP GET リクエストを送信します。サポートされるパラメーターは以下のとおりです。
Protocol:HTTP または HTTPS。
Path:HTTP サーバーにアクセスするパス。
Port:コンテナが公開するアクセスポートまたはポート名。ポート番号は 1 ~ 65535 の範囲内である必要があります。
HTTP Header:カスタム HTTP リクエストヘッダー。重複するヘッダーも許可されます。これはキーと値のペアで設定します。
Initial Delay (s):initialDelaySeconds に対応します。コンテナ起動後、最初のプローブを開始するまで待機する秒数です。デフォルト値:3。
Period (s):periodSeconds に対応します。プロービングの間隔(秒単位)です。デフォルト値:10 秒。最小値:1 秒。
Timeout (s):timeoutSeconds に対応します。各プローブのタイムアウト時間(秒単位)です。デフォルト値:1 秒。最小値:1 秒。
Healthy Threshold:障害後にコンテナを正常とマークするために必要な連続成功回数です。デフォルト値:1。最小値:1。Liveness プローブの場合、この値は必ず 1 である必要があります。
Unhealthy Threshold:コンテナを異常とマークするために必要な連続失敗回数です。デフォルト値:3。最小値:1。
TCP
kubelet は、指定されたポートでコンテナ上のソケットを開こうと試みます。接続が確立されると、プローブは成功します。それ以外の場合は失敗します。サポートされるパラメーターは以下のとおりです。
Port:コンテナが公開するアクセスポートまたはポート名。ポート番号は 1 ~ 65535 の範囲内である必要があります。
Initial Delay (s):initialDelaySeconds に対応します。コンテナ起動後、最初のプローブを開始するまで待機する秒数です。デフォルト値:15。
Period (s):periodSeconds に対応します。プロービングの間隔(秒単位)です。デフォルト値:10 秒。最小値:1 秒。
Timeout (s):timeoutSeconds に対応します。各プローブのタイムアウト時間(秒単位)です。デフォルト値:1 秒。最小値:1 秒。
Healthy Threshold:障害後にコンテナを正常とマークするために必要な連続成功回数です。デフォルト値:1。最小値:1。Liveness プローブの場合、この値は必ず 1 である必要があります。
Unhealthy Threshold:コンテナを異常とマークするために必要な連続失敗回数です。デフォルト値:3。最小値:1。
Command
コンテナ内でプローブコマンドを実行して、ヘルスステータスをチェックします。サポートされるパラメーターは以下のとおりです。
Command:コンテナのヘルスをチェックするために使用するプローブコマンド。
Initial Delay (s):initialDelaySeconds に対応します。コンテナ起動後、最初のプローブを開始するまで待機する秒数です。デフォルト値:5。
Period (s):periodSeconds に対応します。プロービングの間隔(秒単位)です。デフォルト値:10 秒。最小値:1 秒。
Timeout (s):timeoutSeconds に対応します。各プローブのタイムアウト時間(秒単位)です。デフォルト値:1 秒。最小値:1 秒。
Healthy Threshold:障害後にコンテナを正常とマークするために必要な連続成功回数です。デフォルト値:1。最小値:1。Liveness プローブの場合、この値は必ず 1 である必要があります。
Unhealthy Threshold:コンテナを異常とマークするために必要な連続失敗回数です。デフォルト値:3。最小値:1。
(オプション)Lifecycle セクションで、コンテナのライフサイクルフックを設定します。
コンテナのライフサイクルに対して、開始実行、Post Start、Pre Stop ハンドラを設定できます。詳細については、「コンテナライフサイクルイベントにハンドラをアタッチする」をご参照ください。
パラメーター
説明
実行の有効化
コンテナの事前開始コマンドとパラメーターを設定します。
起動後処理
コンテナ起動後に実行するコマンドを設定します。
PreStop 処理
コンテナ終了前に実行するコマンドを設定します。
(オプション)Volume セクションで、データボリュームをコンテナにマウントします。
(オプション)Log セクションで、Collection Configuration および Custom Tag 設定を構成します。
パラメーター
説明
収集設定
Logstore:収集されたログを保存するために、Log Service に対応する Logstore が作成されます。
Log Path in Container (Can be set to stdout):Stdout およびテキストログをサポートしています。
Stdout:コンテナの標準出力ログを収集します。
テキストログ:コンテナ内の指定されたパスからログを収集します。この例では、
/var/log/nginx下のすべてのテキストログを収集します。ワイルドカード文字もサポートされています。
カスタムタグ
カスタムタグも設定できます。タグを設定すると、コンテナのログ出力と一緒に収集されます。カスタムタグを使用すると、統計やフィルタリングなどの分析のためにコンテナログにラベルを付けることができます。
Next をクリックして、Advanced ページに進みます。
ステップ 3:高度な設定
Advanced ページで、アクセス、スケーリング、スケジューリングなどの設定を行います。
Access Control セクションで、バックエンド Pod の公開方法を設定します。
この例では、ClusterIP サービスと Ingress を使用して、パブリックにアクセス可能な Nginx アプリケーションを作成します。
サービスの設定:Services の右側にある Create をクリックして、サービス設定パラメーターを設定します。
Ingress の設定:Ingresses の右側にある Create をクリックして、バックエンド Pod のルーティングルールを設定します。
(オプション)Scaling セクションで、アプリケーションの負荷に応じたニーズを満たすために HPA を有効にするかどうかを設定します。
ACS は Horizontal Pod Autoscaler (HPA) をサポートしており、Pod の CPU およびメモリリソース使用量に基づいて Pod 数を自動調整します。
説明自動スケーリングを有効にするには、コンテナの必要なリソースを設定する必要があります。設定しないと、自動スケーリングは機能しません。
パラメーター
説明
Metric
CPU およびメモリをサポートしています。タイプは、必要なリソースで設定したものと同じである必要があります。
トリガー条件
リソース使用率のパーセンテージです。この使用率を超えると、アプリケーションはスケールアウトします。
Max. Replicas
このワークロードがスケールアウトできる Pod の最大数です。
Min. Replicas
このワークロードがスケールインできる Pod の最小数です。
ACS は CronHPA を使用した Pod のスケジュールされたスケーリングをサポートしており、Kubernetes クラスターのスケジュールされたスケーリング(スケールアウトまたはスケールイン)が可能です。スケジュールされたスケーリングを有効にする前に、ack-kubernetes-cronhpa-controller コンポーネントをインストールする必要があります。詳細については、「CronHPA」をご参照ください。
(オプション)Labels,Annotations セクションで、追加 をクリックして、Pod のラベルおよびアノテーションを設定します。
Create をクリックします。
ステップ 4:アプリケーションの表示
作成後、確認ページが表示されます。詳細の表示 をクリックして、StatefulSet の詳細ページを開きます。
または、展開 ページで StatefulSet 名をクリックするか、[操作] 列の [詳細] をクリックします。