Container Compute Service (ACS) では、コンテナイメージ、オーケストレーション YAML テンプレート、または kubectl コマンドラインツールを使用してステートレスアプリケーションを作成できます。このトピックでは、Nginx アプリケーションを例に、ACS クラスターにステートレスアプリケーションを作成する方法を説明します。
コンソール
イメージから作成
手順 1:アプリケーションの基本情報の設定
ACS コンソール にログインします。左側のナビゲーションペインで、クラスター をクリックします。
クラスター ページで、管理するクラスターを見つけ、その ID をクリックします。クラスター詳細ページの左側のナビゲーションペインで、 を選択します。
デプロイメント タブで、イメージから作成 をクリックします。
-
Basic Information ウィザードで、アプリケーションの基本設定をします。
設定項目
説明
[Name:]
アプリケーションの名前を入力します。
[Replicas:]
アプリケーション内の Pod の数です。デフォルト値は 2 です。
[Workloads]
Deployment を選択します。
[Label]
このアプリケーションを識別するラベルを追加します。
[Annotations]
アプリケーションにアノテーションを追加します。
[インスタンスタイプ]
コンピューティングタイプを選択します。コンピューティングタイプの詳細については、「ACS Pod インスタンスの概要」をご参照ください。
[QoS タイプ]
Quality of Service (QoS) クラスを選択します。
-
Next をクリックして、Container ウィザードに進みます。
ステップ 2: コンテナの設定
Container ウィザードページで、コンテナイメージ、リソース、ポート、環境変数、ヘルスチェック、ライフサイクル、ボリューム、およびログを設定します。
ポッドに複数のコンテナを追加するには、[コンテナ 1] タブの横にあるAdd Containerをクリックします。
-
General セクションで、コンテナの基本設定を完了します。
設定項目
説明
[Image Name]
-
イメージを選択
Select Image をクリックして、必要な画像を選択します。
-
[Container Registry Enterprise Edition]: Alibaba Cloud Container Registry (ACR) でホストされているエンタープライズ版のイメージを選択します。イメージが格納されているリージョンと ACR インスタンスを選択する必要があります。ACR の詳細については、「コンテナレジストリとは」をご参照ください。
-
[Container Registry Personal Edition] (最初に有効化する必要があります):ACR でホストされているパーソナル版イメージを選択します。イメージが存在するリージョンと ACR インスタンスを選択する必要があります。
-
[プロダクトセンター]: コンテナ化されたアプリケーションのベース OS イメージ、言語ランタイムイメージ、AI/ビッグデータ関連のイメージが含まれます。この例では、アーティファクトセンターの Nginx イメージを使用します。詳細については、「アーティファクトセンター」をご参照ください。
-
-
(任意) イメージプルポリシーを設定
Image Pull Policy ドロップダウンリストから、プルポリシーを選択します。デフォルトではポリシーは設定されておらず、Kubernetes は IfNotPresent を使用します。
-
[IfNotPresent]: イメージがローカルにすでに存在する場合 (ホストにプル済み)、再度プルされません。それ以外の場合、イメージはプルされます。
-
[Always]: デプロイまたはスケールアウトの際に、ローカルのコピーを無視して常にイメージをプルします。
-
[Never]: ローカルイメージのみを使用します。
-
-
(任意) イメージプルシークレットを設定
プライベートイメージに安全にアクセスするには、Set Image Pull Secret をクリックします。
-
ACR Personal Edition インスタンスの場合、イメージプルシークレットを設定することでコンテナイメージをプルできます。詳細については、「Secret の管理」をご参照ください。
-
ACR Enterprise Edition インスタンスの場合、パスワードレスコンポーネントを使用してパスワードなしでイメージをプルできます。詳細については、「パスワードなしで ACR イメージをプルする」をご参照ください。
-
[Required Resources]
コンテナのリソースクォータを設定します。
[インタラクティブセッション]
(任意) コンテナ起動オプションを設定します。
-
[stdin]: コンソール入力をコンテナに送信します。
-
[tty]: 標準入力コンソールをコンテナのコンソール入力としてアタッチします。
説明通常、[stdin] と [tty] は一緒に選択され、ターミナル (tty) をコンテナの標準入力 (stdin) にバインドします。たとえば、インタラクティブプログラムは stdin からユーザー入力を読み取り、ターミナルに出力を表示します。
[Init Containers]
(任意) このオプションを選択して 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 と Secret は、ファイル全体の参照をサポートしています。
この例では Secret を使用します。Secrets タイプを選択し、対象の Secret を選択すると、その Secret 内のすべてのファイルがデフォルトで参照されます。[シークレット] を選択した後、[変数名] を入力し、右側にある 2 つのドロップダウンリストから対応する Secret 名とキーを選択します。
対応する YAML は Secret 全体を参照します。
envFrom: - secretRef: name: test[Variable Key]
環境変数名を設定します。
[Value/ValueFrom]
参照する変数値を設定します。
-
-
(任意) Health Check セクションで、必要に応じて Liveness、Readiness、および Startup を有効にします。
-
Liveness プローブ: コンテナーが正常に実行されているかどうかを判断するために使用されます。指定された回数のチェックに失敗した場合、kubelet はコンテナーを再起動します。Liveness プローブは、デッドロックなど、コンテナーが実行中の状態のままで応答しなくなる原因となる問題を検出できます。
-
Readiness プローブ: コンテナーがトラフィックを受け入れる準備ができているかどうかを判断するために使用されます。Pod は、readiness プローブが成功した後にのみサービスバックエンドにアタッチされます。
-
Startup プローブ: コンテナーが正常に起動したかどうかをチェックするために、コンテナーの起動時にのみ実行されます。Liveness Probe と Readiness Probe は、startup プローブが成功した後にのみ実行されます。
詳細については、「Liveness プローブ、Readiness プローブ、Startup プローブの設定」をご参照ください。
パラメータ
説明
[HTTP]
コンテナに HTTP GET リクエストを送信します。サポートされるパラメータは次のとおりです。
-
[Protocol]:HTTP または HTTPS。
-
[Path]: HTTP サーバーにアクセスするためのパスです。
-
[Port]: 公開されるコンテナポートまたはポート名。ポート番号は 1~65535 の範囲である必要があります。
-
[HTTP Header]:HTTP リクエストに含めるカスタムヘッダーです。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]
コンテナへの 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 セクションで、コンテナのライフサイクルを設定します。
コンテナのライフサイクルでは、起動前コマンド、起動後ハンドラー、停止前ハンドラーを設定できます。詳細については、「ライフサイクルの設定」をご参照ください。
パラメータ
説明
[実行の有効化]
コンテナのエントリーポイントとして実行するコマンドと引数を指定します。
[起動後処理]
コンテナの起動後に実行するコマンドを指定します。
[PreStop 処理]
コンテナの終了前に実行するコマンドを指定します。
-
(任意) Volume セクションで、コンテナにボリュームをマウントします。
-
(オプション) Log セクションで、Collection Configuration と Custom Tag を設定します。
パラメータ
説明
収集設定
-
[Logstore]: Simple 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 アプリケーションを作成します。
-
Service の設定: Services の横にある Create をクリックして、Service パラメーターを設定します。
-
Ingress の設定: Ingresses の横にある Create をクリックして、バックエンド Pod のルーティングルールを設定します。
-
-
(任意) Scaling セクションで、HPA を有効にして、変動する負荷要求に対応します。
-
Container Compute Service は、Pod の CPU およびメモリ使用量に基づいたオートスケーリングをサポートします。
説明オートスケーリングを有効にするには、コンテナのリソース要求を指定する必要があります。そうしないと、オートスケーリングは機能しません。
設定項目
説明
[Metric]
CPU とメモリをサポートします。リソース要求のタイプと一致する必要があります。
[トリガー条件]
リソース使用率のしきい値。超過すると、システムはスケールアウトします。
[Max. Replicas]
このペイロードタイプでスケールアウトできるコンテナの最大数。
[Min. Replicas]
このペイロードタイプでスケールインする際の下限値。
-
Container Compute Service は、スケジュールされたスケーリング (CronHPA) もサポートしており、特定の時間に Kubernetes クラスターを自動的にスケーリングします。スケジュールされたスケーリングを有効にする前に、ack-kubernetes-cronhpa-controller コンポーネントをインストールしてください。詳細については、「スケジュールされたスケーリング (CronHPA)」をご参照ください。
-
-
(任意) Labels,Annotations セクションで、追加 をクリックして Pod のラベルとアノテーションを設定します。
-
Create をクリックします。
ステップ 4: アプリケーション情報の表示
作成に成功すると、完了ページにリダイレクトされます。View Details をクリックして、デプロイメント詳細ページに移動します。
デプロイメント情報は、Deployments ページでも確認できます。目的のデプロイメントの名前、または Actions 列の Details をクリックして、アプリケーション詳細ページに移動します。
YAML による作成
ACS のオーケストレーションテンプレートでは、アプリケーションに必要なリソースオブジェクトを定義し、ラベルセレクターなどのメカニズムを使用してそれらを完全なアプリケーションに組み合わせます。
この例では、Deployment と Service を含むオーケストレーションテンプレートを使用して Nginx アプリケーションを作成する方法を示します。Deployment は Pod リソースを作成し、Service はそれらの Pod にバインドして、完全な Nginx アプリケーションを形成します。
ACS コンソール にログインします。左側のナビゲーションペインで、クラスター をクリックします。
クラスター ページで、管理するクラスターを見つけ、その ID をクリックします。クラスター詳細ページの左側のナビゲーションペインで、 を選択します。
デプロイメント ページの右上隅にある YAML から作成 をクリックします。
-
Create ページで、テンプレートを設定し、Create をクリックします。
-
[Sample Template]: ACS は、迅速なデプロイに役立つ、さまざまなリソースタイプの Kubernetes YAML サンプルを提供します。 また、Kubernetes 標準に従って独自の YAML を作成することもできます。
-
[Create Workload]: この機能を使用すると、YAML テンプレートをすばやく定義できます。
-
[Use Existing Template]: 既存のオーケストレーションテンプレートをインポートします。
-
[Save Template]: 設定したオーケストレーションテンプレートを保存します。
以下は、Nginx アプリケーションのサンプル YAML です。この例では、Nginx Deployment と CLB タイプの LoadBalancer Service を迅速に作成できます。
説明-
ACS は Kubernetes YAML オーケストレーションをサポートします。1 つのテンプレートで複数のリソースオブジェクトを定義するには、
---区切り文字を使用します。 -
(任意) ボリュームをマウントする場合、マウントディレクトリ内のファイルはデフォルトで上書きされます。既存のファイルを保持するには、
subPathパラメーターを設定します。
-
-
Createをクリックすると、デプロイステータスメッセージが表示されます。
kubectl
kubectl コマンドを使用して、アプリケーションを作成および表示できます。
-
クラスターに接続します。詳細については、「クラスター kubeconfig を取得して kubectl を使用して接続する」または「CloudShell で kubectl を使用して Kubernetes クラスターを管理する」をご参照ください。
-
次のコマンドを実行して、コンテナ (Nginx Web サーバーなど) を起動します。
kubectl create deployment nginx --image=registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest -
次のコマンドを実行して、nginx Deployment の Service を作成します。
--type=LoadBalancerを指定すると、Nginx コンテナにトラフィックをルーティングする Alibaba Cloud SLB が作成されます。kubectl expose deployment nginx --port=80 --target-port=80 --type=LoadBalancer -
次のコマンドを実行して、実行中の nginx Pod を一覧表示します。
kubectl get pod |grep nginx期待される出力:
NAME READY STATUS RESTARTS AGE nginx-2721357637-d**** 1/1 Running 1 9h