NGINXアプリケーションなど、デプロイメントはデータや状態を保存しません。 ステートレスアプリケーションは、イメージ、オーケストレーションテンプレート、またはkubectlコマンドを使用して作成できます。 プライベートイメージからアプリケーションを作成する場合、Container Service for Kubernetes (ACK) コンソールでプライベートイメージのシークレットを設定し、イメージのセキュリティを確保できます。 このトピックでは、NGINXアプリケーションを例として、イメージ、オーケストレーションテンプレート、およびkubectlコマンドを使用してステートレスアプリケーションを作成する方法について説明します。
前提条件
ACKクラスターが作成されます。 詳細については、「ACK管理クラスターの作成」をご参照ください。
kubectlクライアントがACKクラスターに接続されています。 詳細については、「kubectlを使用したACKクラスターへの接続」をご参照ください。
プライベートイメージリポジトリが作成され、イメージがリポジトリにアップロードされます。 この例では、Container Registryが使用されます。 詳細については、「イメージの管理」をご参照ください。
イメージからのデプロイの作成
ステップ1: 基本設定の設定
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[デプロイメント] ページの右上隅にある [イメージから作成] をクリックします。
On the基本情報ウィザードページで、アプリケーションの基本設定を構成します。
展開を設定する前に、ページの上部のナビゲーションバーで展開が属する名前空間を選択する必要があります。 この例では、default名前空間が選択され、その名前空間にDeploymentが作成されます。
パラメーター
説明
名前
アプリケーションの名前。
レプリカ
アプリケーションに対してプロビジョニングするポッドの数。 デフォルト値:2
タイプ
作成するリソースオブジェクトのタイプ。 有効な値: Deployment、StatefulSet、Job、CronJob、およびDaemonSet。
ラベル
アプリケーションを識別する、アプリケーションに追加されるラベル。
アノテーション
アプリケーションに追加される注釈。
タイムゾーンの同期
ノードとコンテナ間のタイムゾーンを同期するかどうかを指定します。
クリック次へコンテナーウィザードページに移動します。
手順2: コンテナーの設定
[コンテナー] ウィザードページで、コンテナーのイメージ、リソース、ポート、環境変数、ヘルスチェック、ライフサイクル、ボリューム、およびログを設定します。
コンテナーを追加するには、Container1の右側にある [コンテナーの追加] をクリックします。
では、一般セクションで、コンテナーの基本設定を構成します。
パラメーター
説明
イメージ名
セレクト画像
[画像の選択] をクリックして画像を選択できます。 次のタイプの画像がサポートされています。
Container Registry Enterprise Edition: Container Registry Enterprise Editionインスタンスに保存されているイメージを選択します。 イメージが属するリージョンとContainer Registryインスタンスを選択する必要があります。 Container Registryの詳細については、Container Registryとは
Container Registry Personal Edition: Container Registry Personal Editionインスタンスに保存されているイメージを選択します。 イメージが属するリージョンとContainer Registryインスタンスを選択する必要があります。
アーティファクトセンター: アーティファクトセンターには、基本オペレーティングシステムイメージ、基本言語イメージ、およびアプリケーションコンテナ化用のAIおよびビッグデータ関連イメージが含まれています。 この例では、NGINX画像が選択されている。 詳細については、「アーティファクトセンターの概要」をご参照ください。
説明Container Registryのアーティファクトセンターには、Alibaba CloudまたはOpenAnolisによって更新およびパッチ適用される基本イメージがあります。 他の要件や質問がある場合は、DingTalkグループ (ID 33605007047) に参加してテクニカルサポートをリクエストしてください。
プライベートレジストリに保存されている画像のアドレスを入力することもできます。 イメージアドレスは、
domainname/namespace/imagename:tag
の形式で指定する必要があります。画像プルポリシー
画像を取得するためのポリシー。 有効な値:
IfNotPresent: プルするイメージがオンプレミスマシンで見つかった場合、オンプレミスマシンのイメージが使用されます。 それ以外の場合、ACKはイメージレジストリからイメージをプルします。
常に: ACKは、アプリケーションが展開または展開されるたびに、Container Registryからイメージを取得します。
Never: ACKは、オンプレミスマシン上の画像のみを使用します。
説明[イメージプルポリシー] を選択した場合、デフォルトでイメージプルポリシーは適用されません。
Set Image Pull Secret
[イメージプルシークレットの設定] をクリックすると、プライベートレジストリからイメージをプルするためのシークレットを設定できます。
Secretsを使用して、Container Registry Personal Editionインスタンスからイメージをプルできます。 シークレットの設定方法の詳細については、「シークレットの管理」トピックのシークレットの作成セクションを参照してください。
Container Registry Enterprise EditionインスタンスからSecretsを使用せずにイメージをプルできます。 詳細については、「aliyun-acr-credential-helperコンポーネントを使用して、シークレットを使用せずにイメージをプルする」をご参照ください。
リソース制限
アプリケーションが使用できるCPU、メモリ、および一時的なストレージリソースの最大量。 リソース制限は、アプリケーションが過剰な量のリソースを占有することを防止する。 リソース制限の設定方法の詳細については、「リソースプロファイリング」をご参照ください。
必要なリソース
アプリケーション用に予約されているCPU、メモリ、および一時的なストレージリソースの量。 これらのリソースは、アプリケーションのポッド専用であり、他のアプリケーションによってプリエンプトすることはできません。 リソースを予約する方法の詳細については、「リソースプロファイリング」をご参照ください。
コンテナー開始パラメーター
stdin: 開始パラメーターを標準入力 (stdin) としてコンテナーに送信することを指定します。
tty: 仮想ターミナルで定義された開始パラメーターをコンテナーに送信することを指定します。
2つのオプションは通常一緒に使用されます。 この場合、仮想端末 (tty) は、コンテナのstdinに関連付けられる。 例えば、対話型プログラムは、ユーザからstdinを受信し、端末にコンテンツを表示する。
特権コンテナ
[特権コンテナ] を選択すると、コンテナに特権=trueが設定され、特権モードが有効になります。
[特権コンテナ] を選択しない場合、特権=falseがコンテナに設定され、特権モードが無効になります。
コンテナー初期化
initコンテナを作成するには、このオプションを選択します。
Initコンテナーを使用して、アプリケーションコンテナーの起動をブロックまたは延期できます。 initコンテナーの起動後にのみ、ポッド内のアプリケーションコンテナーが同時に起動します。 たとえば、initコンテナーを使用して、アプリケーションが依存するサービスの可用性を確認できます。 アプリケーションイメージによって提供されていないツールまたはスクリプトをinitコンテナーで実行して、アプリケーションコンテナーのランタイム環境を初期化できます。 たとえば、ツールやスクリプトを実行して、カーネルパラメーターを設定したり、設定ファイルを生成したりできます。 詳細については、次をご参照ください: Initコンテナー。
オプション: [ポート] セクションで、[追加] をクリックしてコンテナーポートを追加します。
パラメーター
説明
名前
コンテナーポートの名前。
コンテナポート
公開するコンテナーポートの番号または名前。 ポート番号の有効値: 1 ~ 65535
プロトコル
有効な値: TCPおよびUDP。
オプション: [環境] セクションで、[追加] をクリックして環境変数を追加します。
環境変数は、キーと値のペアで設定できます。 環境変数は、コンテナーにポッド構成を適用するために使用されます。 詳細については、「ポッド変数」をご参照ください。
パラメーター
説明
タイプ
追加する環境変数の型。 有効な値:
カスタム
設定マップ
秘密
値 /ValueFrom
ResourceFieldRef
ConfigMapsまたはSecretsを選択した場合、選択したConfigMapまたはSecretのすべてのデータをコンテナー環境変数に渡すことができます。 この例では、Secretsが選択されています。 [タイプ] ドロップダウンリストから [秘密] を選択し、[値] /[値] ドロップダウンリストから秘密を選択します。 デフォルトでは、選択したシークレットのすべてのデータが環境変数に渡されます。
この場合、アプリケーションのデプロイに使用されるYAMLファイルには、選択したシークレットのすべてのデータを参照する設定が含まれています。
ResourceFieldRefを選択した場合、
resourceFieldRef
パラメーターが指定され、ポッド仕様からリソース値を参照し、リソース値を環境変数としてコンテナーに渡します。 次のYAMLファイルに例を示します。変数キー
環境変数の名前。
値 /ValueFrom
環境変数の値。
オプション: [ヘルスチェック] セクションで、[ライブネス] 、[準備完了] 、[オンデマンドでの起動] を有効にします。
詳細については、「Liveness、Readiness、Startup Probesの設定」をご参照ください。
パラメーター
リクエストタイプ
説明
Liveness: Livenessプローブを使用して、コンテナをいつ再起動するかを判断します。
Readiness: Readinessプローブを使用して、コンテナがトラフィックを受信する準備ができているかどうかを判断します。
スタートアップ: スタートアッププローブは、コンテナをいつ開始するかを決定するために使用されます。
説明スタートアッププローブは、Kubernetes 1.18以降でのみサポートされます。
HTTP
HTTP GETリクエストをコンテナに送信します。 以下のパラメーターを設定できます。
プロトコル: 要求が送信されるプロトコル。 有効な値: HTTPおよびHTTPS。
パス: サーバー上で要求されたHTTPパス。
ポート: 公開するコンテナーポートの番号または名前。 ポート番号の有効値: 1 ~ 65535
HTTPヘッダー: HTTPリクエストのカスタムヘッダー。 ヘッダーの重複は許可されています。 HTTPヘッダーは、キーと値のペアで指定できます。
初期遅延: YAMLファイルのinitialDelaySecondsフィールド。 このフィールドは、コンテナが開始されてから最初のプローブが実行されるまでの待機時間を指定します。 デフォルト値: 3。 単位は秒です。
Period (s): YAMLファイルのperiodSecondsフィールド。 このフィールドは、プローブが実行される間隔を指定します。 デフォルト値は 10 です。 最小値:1 単位は秒です。
Timeout (s): YAMLファイルのtimeoutSecondsフィールド。 このフィールドは、プローブがタイムアウトするまでの期間を指定します。 デフォルト値は 1 です。 最小値:1 単位は秒です。
Healthy Threshold: 失敗したプローブの後にコンテナーが正常と見なされる前に発生する必要がある連続成功の最小数。 デフォルト値は 1 です。 最小値:1 有効性チェックの場合、このパラメーターは1に設定する必要があります。
異常しきい値: コンテナが成功した後に異常と見なされる前に発生しなければならない連続した失敗の最小数。 デフォルト値: 3。 最小値:1
TCP
コンテナにTCPソケットを送信します。 kubeletは指定されたポートでソケットを開こうとします。 接続が確立された場合、コンテナーは正常とみなされます。 さもなければ、容器は不健康とみなされる。 以下のパラメーターを設定できます。
ポート: 開くコンテナポートの番号または名前。 ポート番号の有効値: 1 ~ 65535
初期遅延: YAMLファイルのinitialDelaySecondsフィールド。 このフィールドは、コンテナが開始されてから最初のプローブが実行されるまでの待機時間を指定します。 デフォルト値: 15。 単位は秒です。
Period (s): YAMLファイルのperiodSecondsフィールド。 このフィールドは、プローブが実行される間隔を指定します。 デフォルト値は 10 です。 最小値:1 単位は秒です。
Timeout (s): YAMLファイルのtimeoutSecondsフィールド。 このフィールドは、プローブがタイムアウトするまでの時間を指定します。 デフォルト値は 1 です。 最小値:1 単位は秒です。
Healthy Threshold: 失敗したプローブの後にコンテナーが正常と見なされる前に発生する必要がある連続成功の最小数。 デフォルト値は 1 です。 最小値:1 有効性チェックの場合、このパラメーターは1に設定する必要があります。
異常しきい値: コンテナが成功した後に異常と見なされる前に発生しなければならない連続した失敗の最小数。 デフォルト値: 3。 最小値:1
コマンド
コンテナーでプローブコマンドを実行し、コンテナーのヘルスステータスを確認します。 以下のパラメーターを設定できます。
Command: コンテナーのヘルスステータスを確認するために実行されるプローブコマンドです。
初期遅延: YAMLファイルのinitialDelaySecondsフィールド。 このフィールドは、コンテナが開始されてから最初のプローブが実行されるまでの待機時間を指定します。 既定値:5 単位は秒です。
Period (s): YAMLファイルのperiodSecondsフィールド。 このフィールドは、プローブが実行される間隔を指定します。 デフォルト値は 10 です。 最小値:1 単位は秒です。
Timeout (s): YAMLファイルのtimeoutSecondsフィールド。 このフィールドは、プローブがタイムアウトするまでの時間を指定します。 デフォルト値は 1 です。 最小値:1 単位は秒です。
Healthy Threshold: 失敗したプローブの後にコンテナーが正常と見なされる前に発生する必要がある連続成功の最小数。 デフォルト値は 1 です。 最小値:1 有効性チェックの場合、このパラメーターは1に設定する必要があります。
異常しきい値: コンテナが成功した後に異常と見なされる前に発生しなければならない連続した失敗の最小数。 デフォルト値: 3。 最小値:1
オプション: [ライフサイクル] セクションで、コンテナーのライフサイクルを設定します。
コンテナーのライフサイクルには、開始、開始後、停止前のパラメーターを設定できます。 詳細については、「Container Lifecycle Eventsへのハンドラのアタッチ」をご参照ください。
パラメーター
説明
開始
コンテナーが起動する前に有効になるコマンドとパラメーターを指定します。
起動後
コンテナーの起動後に有効になるコマンドを指定します。
停止前
コンテナーが停止する前に有効になるコマンドを指定します。
オプション: [ボリューム] セクションで、ローカルボリュームまたは永続ボリュームクレーム (PVC) を追加します。
パラメーター
説明
ローカルストレージの追加
[PVタイプ] ドロップダウンリストから、HostPath、ConfigMap、Secret、またはEmptyDirを選択できます。 次に、マウントソースとコンテナパスのパラメーターを設定して、ボリュームをコンテナにマウントします。 詳細については、「Volumes」をご参照ください。
PVCを追加
永続ボリュームクレーム (PVC) を使用して永続ボリューム (PV) をマウントできます。 PVをマウントするPVCを選択する前に、PVCを作成する必要があります。 詳細については、「PVCの作成」をご参照ください。
この例では、ディスクボリュームはコンテナーの /tmpパスにマウントされています。
オプション: [ログ] セクションで、ログ収集を設定し、カスタムタグを追加します。
重要クラスターにSimple Log Serviceエージェントがインストールされていることを確認します。
パラメーター
説明
コレクションの設定
Logstore: 収集したログを保存するためにSimple Log ServiceにLogstoreを作成します。
コンテナー内のログパス: ログデータを収集するためのstdoutまたはコンテナーパスを指定します。
stdoutファイルの収集: stdoutを指定すると、stdoutファイルが収集されます。
Text Logs: コンテナの指定されたパスのログが収集されることを指定します。 この例では、パスとして /var/log/nginxが指定されています。 パスにはワイルドカード文字を使用できます。
カスタムタグ
カスタムタグを追加することもできます。 タグは、ログが収集されるときにコンテナのログに追加されます。 カスタムタグは、収集したログのフィルタリングと分析に役立ちます。
クリック次へをクリックして [高度なウィザード] ページに移動します。
ステップ3: 詳細設定の設定
[詳細設定] ウィザードページで、アクセス制御、スケーリング、スケジューリング、アノテーション、ラベルの設定を行います。
では、アクセス制御セクションでは、バックエンドポッドを公開するためのアクセス制御設定を構成できます。
説明ビジネス要件に基づいて、次のアクセス制御設定を構成できます。
内部アプリケーション: クラスター内でサービスを提供するアプリケーションの場合、ClusterIPまたはNodePortサービスを作成して内部通信を有効にできます。
外部アプリケーション: インターネットに公開されているアプリケーションの場合、次のいずれかの方法を使用してアクセス制御を構成できます。
LoadBalancerサービスを作成します。 サービスを作成するときは、TypeパラメーターをServer Load Balancerに設定します。 サービスのServer Load Balancer (SLB) インスタンスを選択または作成し、サービスを使用してアプリケーションをインターネットに公開できます。
Ingressを作成し、それを使用してアプリケーションをインターネットに公開します。 詳しくは、『ingress-nginx』をご参照ください。
バックエンドポッドをインターネットに公開する方法を指定することもできます。 この例では、NGINXアプリケーションをインターネットに公開するためにClusterIPサービスとIngressが作成されます。
サービスを作成するには、[サービス] の右側にある [作成] をクリックします。 [作成] ダイアログボックスで、パラメーターを設定します。
パラメーター
説明
名前
サービスの名前。
サービスタイプ
サービスのタイプ。 このパラメータは、サービスへのアクセス方法を指定します。 有効な値:
外部トラフィックポリシー
[外部トラフィックポリシー] パラメーターは、サービスタイプパラメーターを [ノードポート] または [Server Load Balancer] に設定した場合にのみ使用できます。 外部トラフィックポリシーの詳細については、「はじめに」トピックの外部トラフィックポリシーの違いをご参照ください。 有効な値:
Local: 現在のノードのポッドにのみトラフィックをルーティングします。
Cluster: トラフィックをクラスター内の他のノードのポッドにルーティングします。
バックエンド
サービスに関連付けるバックエンドアプリケーション。 バックエンドアプリケーションを選択しない場合、Endpointオブジェクトは作成されません。 詳細については、「Services-without-selectors」をご参照ください。
ポートマッピング
サービスポートとコンテナーポート。 サービスポートはYAMLファイルの
port
フィールドに対応し、コンテナーポートはYAMLファイルのtargetPort
フィールドに対応します。 コンテナーポートは、バックエンドポッドで公開されているポートと同じである必要があります。注釈
SLBインスタンスを構成するためにサービスに追加されるアノテーション。 詳細については、「注釈を使用してCLBインスタンスを構成する」および「注釈を使用してNLBインスタンスを構成する」をご参照ください。
重要クラスターのAPIサーバーのSLBインスタンスを再利用しないでください。 そうしないと、クラスターへのアクセスが異常になります。
ラベル
サービスを識別する、サービスに追加されるラベル。
Ingressを作成するには、Ingressの右側にある [作成] をクリックします。 [作成] ダイアログボックスで、パラメーターを設定します。
パラメーター
説明
名前
Ingressの名前。
ルール
Ingressルールは、クラスター内の指定されたサービスへのアクセスを有効にするために使用されます。 詳細については、「NGINX Ingressの作成」をご参照ください。
ドメイン名: Ingressのドメイン名を入力します。
パス: サービスURLを入力します。 デフォルトのパスはルートパス /です。 この例では、デフォルトのパスが使用されます。 各パスはバックエンドサービスに関連付けられています。 SLBは、インバウンドリクエストがドメイン名とパスと一致する場合にのみ、トラフィックをバックエンドサービスに転送します。
サービス: サービスとサービスポートを選択します。
TLS設定: TLSを有効にするには、このチェックボックスをオンにします。 詳細については、「高度なNGINX Ingress設定」をご参照ください。
カナリアリリース
カナリアリリース機能を有効にするかどうかを指定します。 オープンソースソリューションを選択することを推奨します。
Ingressクラス
Ingressのクラス。
アノテーション
カスタム注釈を追加するか、既存の注釈を選択できます。 Ingressアノテーションの詳細については、「アノテーション」をご参照ください。
[注釈の追加] をクリックして注釈を追加します。 無制限の数の注釈を追加できます。
ラベル
Ingressの特性を表すラベル。
[ラベルの追加] をクリックしてラベルを追加します。 無制限の数のラベルを追加できます。
[アクセス制御] セクションで、既存のサービスとIngressを表示できます。 [更新] または [削除] をクリックして、サービスとIngressを更新または削除することもできます。
オプション: [スケーリング] セクションで、HPAとCronHPAをオンデマンドで有効にして、さまざまなアプリケーションの要件を満たします。
HPAは、CPUおよびメモリ使用量メトリックに基づいて、ACKクラスター内のポッド数を自動的にスケーリングできます。
説明HPAを有効にするには、各コンテナーに必要なリソースを設定する必要があります。 そうでない場合、HPAは有効になりません。
パラメーター
説明
メトリック
CPU使用率またはメモリ使用率を選択します。 選択したリソースタイプは、[必須リソース] フィールドで指定したものと同じである必要があります。
Condition
リソース使用量のしきい値。 水平ポッド自動スケーリング (HPA) 機能は、しきい値を超えるとスケールアウトイベントをトリガーします。
最大 レプリカ
アプリケーションをスケーリングできるレプリケートされたポッドの最大数。
最小 レプリカ
実行する必要のあるレプリケートポッドの最小数。
CronHPAは、スケジュールされた時間にACKクラスタをスケーリングすることができる。 CronHPAを有効にする前に、ack-kubernetes-cronhpa-controllerをインストールする必要があります。 CronHPAの詳細については、「CronHPAジョブの作成」をご参照ください。
オプション: [スケジューリング] セクションで、[更新方法] 、[ノードアフィニティ] 、[ポッドアフィニティ] 、および [ポッドアンチアフィニティ] を指定します。 詳細については、「Affinity and anti-affinity」をご参照ください。
説明ノードアフィニティとポッドアフィニティに基づくポッドスケジューリングは、ノードラベルとポッドラベルに依存します。 Kubernetesが提供するノードラベルとポッドラベルを追加して、ノードアフィニティとポッドアフィニティを設定できます。 ノードとポッドにカスタムラベルを追加し、これらのカスタムラベルに基づいてノードアフィニティとポッドアフィニティを構成することもできます。
パラメーター
説明
更新方法
更新方法。 有効な値: ローリングアップデートとOnDelete。 詳細については、「デプロイメント」をご参照ください。
ノードのアフィニティ
ワーカーノードラベルをセレクターとして選択して、Node Affinityパラメーターを設定します。
ノードアフィニティは、必須および優先ルール、およびIn、NotIn、Exists、DoesNotExist、Gt、Ltなどのさまざまな演算子をサポートします。
必須: ポッドスケジューリングに一致する必要があるルールを指定します。 YAMLファイルでは、これらのルールはrequiredDuringSchedulingIgnoredDuringExecutionアフィニティによって定義されます。 これらのルールは、
NodeSelector
パラメーターと同じ効果があります。 この例では、指定されたラベルを持つノードにのみポッドをスケジュールできます。 複数の必須ルールを作成できます。 ただし、そのうちの1つだけを満たす必要があります。オプション: ポッドスケジューリングに一致するオプションのルールを指定します。 YAMLファイルでは、これらのルールはpreferredDuringSchedulingIgnoredDuringExecutionアフィニティによって定義されます。 オプションのルールを指定すると、スケジューラはオプションのルールに一致するノードにポッドをスケジュールしようとします。 オプションのルールに重みを設定することもできます。 複数のノードがルールに一致する場合、重みが最も高いノードが優先されます。 複数のオプションルールを作成できます。 ただし、ポッドをスケジュールする前にすべてを満たす必要があります。
ポッドの親和性
ポッドアフィニティルールは、同じトポロジカルドメイン内の他のポッドに対してポッドをデプロイする方法を指定します。 たとえば、ポッドアフィニティを使用して、互いに通信するサービスをホストなどの同じトポロジカルドメインにデプロイできます。 これにより、これらのサービス間のネットワーク待ち時間が短縮されます。
ポッドアフィニティを使用すると、ポッドのラベルに基づいてポッドをスケジュールできるノードを指定できます。 ポッドアフィニティは、必須および優先ルール、および次の演算子をサポートします:
In、NotIn、Exists、およびDoesNotExist
。必須: ポッドスケジューリングに一致する必要があるルールを指定します。 YAMLファイルでは、これらのルールはrequiredDuringSchedulingIgnoredDuringExecutionアフィニティによって定義されます。 ポッドをノードにスケジュールするには、ノードが必要なルールと一致する必要があります。
名前空間: 必要なルールを適用する名前空間を指定します。 ポッドアフィニティ規則は、ポッドに追加されるラベルに基づいて定義されるため、名前空間にスコープする必要があります。
トポロジカルドメイン: topologyKeyを設定します。 これは、システムがトポロジカルドメインを示すために使用するノードラベルのキーを指定します。 たとえば、パラメーターを
kubernetes.io/hostname
に設定した場合、トポロジはノードによって決定されます。 パラメーターをbeta.kubernetes.io/os
に設定した場合、トポロジはノードのオペレーティングシステムによって決定されます。セレクター: [追加] をクリックしてポッドラベルを追加します。
アプリケーションの表示: [アプリケーションの表示] をクリックし、表示されるダイアログボックスで名前空間とアプリケーションのパラメーターを設定します。 選択したアプリケーションのポッドラベルを表示し、これらのラベルをセレクターとして追加できます。
必須ルール: 既存のアプリケーションのラベル、演算子、およびラベル値を指定します。 この例では、必須ルールは、作成されるアプリケーションが
app:nginx
ラベルでアプリケーションを実行するホストにスケジュールされることを指定します。
オプション: ポッドスケジューリングに一致するオプションのルールを指定します。 YAMLファイルでは、これらのルールはpreferredDuringSchedulingIgnoredDuringExecutionアフィニティによって定義されます。 オプションのルールを指定すると、スケジューラはオプションのルールに一致するノードにポッドをスケジュールしようとします。 オプションのルールに重みを設定できます。 他のパラメーターは、必須ルールのパラメーターと同じです。
説明重み: オプションのルールの重みを1〜100の値に設定します。 スケジューラは、アルゴリズムに基づいてオプションのルールを満たす各ノードの重みを計算し、重みが最も高いノードにポッドをスケジュールします。
ポッドのAnti-affinity
ポッドのアフィニティ防止ルールでは、ラベルが一致するポッドがデプロイされているトポロジカルドメインにポッドをスケジュールしないように指定しています。 Pod anti-affinityルールは、次のシナリオに適用されます。
アプリケーションのポッドを、複数のホストなどの異なるトポロジカルドメインにスケジュールします。 これにより、サービスの安定性を高めることができます。
ポッドにノードへの排他的アクセスを許可します。 これにより、リソースの分離が可能になり、指定されたノードのリソースを他のポッドが共有できなくなります。
ポッドが互いに干渉する可能性がある場合、アプリケーションのポッドを異なるホストにスケジュールします。
説明ポッド対応ルールのパラメーターは、ポッド対応ルールのパラメーターと同じです。 シナリオに基づいてルールを作成します。
寛容
一致するテイントを持つノードにポッドをスケジュールできる許容範囲。 テイントの設定 (キー、値、テイント効果など) と許容範囲の詳細については、Kubernetesの公式ドキュメント「テイントと許容範囲」を参照してください。
仮想ノードへのスケジュール
ポッドを仮想ノードにスケジュールするかどうかを指定します。 ACK Proクラスターのみがこのパラメーターをサポートしています。 クラスターに仮想ノードが含まれていない場合、このパラメーターは使用できません。 ポッドを仮想ノードにスケジュールする方法の詳細については、「ECSインスタンスとエラスティックコンテナインスタンスに基づくリソース割り当ての設定」トピックのエラスティックコンテナインスタンスのみを使用するセクションをご参照ください。
オプション: [ラベル、注釈] セクションで、[追加] をクリックしてポッドにラベルと注釈を追加します。
パラメーター
説明
ポッドラベル
ポッドに追加するラベル。ポッドを識別します。
ポッド注釈
ポッドに追加されるアノテーション。
クリック作成.
ステップ4: アプリケーションの確認
[完了] ウィザードページで、アプリケーションを表示できます。
クリック詳細を表示下作成タスクの送信.
nginx-deploymentの詳細ページが表示されます。
説明次の手順を実行して、Ingressとサービスを作成することもできます。前の図に示すように、アプリケーションの詳細ページの [アクセス方法] タブに移動します。
サービスの右側にある [作成] をクリックして、サービスを作成します。
Ingressの右側にある [作成] をクリックしてIngressを作成します。
左側のナビゲーションウィンドウで、 を選択します。 次に、リストでIngressを見つけることができます。
NGINXウェルカムページにアクセスするには、ブラウザのアドレスバーにIngressのドメイン名を入力します。
次に何をすべきか
ステートレスなアプリケーションの詳細を表示
ACK コンソールの左側のナビゲーションウィンドウで、[クラスター] をクリックします。 アプリケーションがデプロイされているクラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。
を選択します。 [デプロイメント] ページで、デプロイされたアプリケーションの名前をクリックするか、[操作] 列の [詳細] をクリックします。[デプロイメント] リストで、[ラベル] 列をクリックし、ラベルキーとラベル値
を入力し、[OK] をクリックして、指定したラベルを持つアプリケーションを一覧表示します。
アプリケーションの詳細ページで、アプリケーションのYAMLファイルを表示できます。 アプリケーションの変更、スケーリング、再デプロイ、および更新もできます。
API 操作 | 説明 |
編集 | アプリケーションの詳細ページで、ページの右上隅にある [編集] をクリックして、アプリケーションの設定を変更します。 |
Scale | アプリケーションの詳細ページで、ページの右上隅にある [スケール] をクリックして、アプリケーションを必要なポッド数にスケールします。 |
YAMLで表示 | アプリケーションの詳細ページで、[YAMLで表示] をクリックして、YAMLファイルを更新またはダウンロードします。 [名前を付けて保存] をクリックして、ファイルを別の名前で保存することもできます。 |
再デプロイ | アプリケーションの詳細ページで、ページの右上隅にある [再デプロイ] をクリックして、アプリケーションを再デプロイします。 |
更新 | アプリケーションの詳細ページで、ページの右上隅にある [更新] をクリックして、アプリケーションの詳細ページを更新します。 |
既存のデプロイの変更
[デプロイメント] ページで、デプロイを選択し、[操作] 列の [詳細] をクリックして、次の操作を実行します。
API 操作 | 説明 |
YAMLで表示 | アプリケーションのYAMLファイルを表示します。 |
再デプロイ | アプリケーションを再デプロイします。 |
ラベルの編集 | アプリケーションラベルを設定します。 |
注釈の編集 | アプリケーションに注釈を追加します。 |
ノードのアフィニティ | ノード類似性ルールを設定します。 詳細については、「スケジューリング」をご参照ください。 |
スケーリング | スケーリング設定を構成します。 詳細については、「水平ポッド自動スケーリングの実装」および「CronHPAの実装」をご参照ください。 |
寛容 | 許容範囲ルールを設定します。 詳細については、「スケジューリング」をご参照ください。 |
アップグレードポリシー | 更新ポリシーを設定します。
|
クローン | 現在のアプリケーションと同じコンテナー設定を使用して、新しいアプリケーションを作成します。 |
ロールバック | アプリケーションを以前のバージョンにロールバックします。 |
ログ | アプリケーションログを表示します。 |
削除 | アプリケーションを削除します。 |
一括再デプロイアプリケーション
[デプロイメント] ページの下部で、[一括再デプロイ] をクリックして、一度に複数のアプリケーションを再デプロイします。
オーケストレーションテンプレートによる Linux アプリケーションの作成
オーケストレーションテンプレートでは、アプリケーションの実行に必要なリソースオブジェクトを定義し、アプリケーションを構成するリソースオブジェクトを管理するためのラベルセレクタなどのメカニズムを構成する必要があります。
このセクションでは、オーケストレーションテンプレートを使用して、展開とサービスで構成されるNGINXアプリケーションを作成する方法について説明します。 Deploymentはアプリケーションのポッドをプロビジョニングし、Serviceはバックエンドポッドへのアクセスを管理します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
On theデプロイメントページをクリックします。YAMLから作成する右上隅にあります。
パラメーターを設定し、作成.
サンプルテンプレート: ACKは、さまざまなリソースタイプのYAMLテンプレートを提供します。 これにより、リソースオブジェクトのデプロイが簡素化されます。 YAML構文に基づいてカスタムテンプレートを作成し、作成するリソースを定義することもできます。
ワークロードの作成: YAMLテンプレートをすばやく定義できます。
既存のテンプレートを使用: 既存のテンプレートをインポートできます。
テンプレートの保存: 設定したテンプレートを保存できます。
次のサンプルテンプレートは、ACKによって提供されるオーケストレーションテンプレートに基づいています。 このテンプレートを使用して、NGINXアプリケーションを実行する展開を作成できます。
説明ACKはKubernetes YAMLをサポートしています。 3つのハイフン (
---
) を使用してリソースオブジェクトを区切ることができます。 これにより、1つのテンプレートに複数のリソースオブジェクトを定義できます。オプション: デフォルトでは、ボリュームをアプリケーションにマウントすると、マウント対象のファイルが上書きされます。 既存のファイルを上書きしないようにするには、
subPath
パラメーターを追加します。
apiVersion: apps/v1 kind: 配置 メタデータ: name: nginx-deployment-basic labels: アプリ: nginx spec: レプリカ:2 セレクタ: matchLabels: アプリ:nginx template: metadata: labels: アプリ:nginx 仕様: containers: - name: nginx image: nginx:1.7.9 # replace it with your exactly <image_name:tags> ポート: - containerPort: 80 volumeMounts: - name: nginx-log mountPath: /etc/nginx/nginx.conf subPath: nginx.conf# subPathパラメーターを設定します。 volumes: - name: nginx-log configMap: 名前: nginx-conf --- apiVersion: v1 種類: サービス メタデータ: name: my-service1 #TODO: to specify your service name labels: アプリ: nginx spec: セレクタ: app: nginx #TODO: change label selector to match your backend pod ポート: - protocol: TCP name: http port: 30080 #TODO: choose an unique port on each node to avoid port conflict targetPort: 80 type: LoadBalancer ## この例では、型はNodeportからLoadBalancerに変更されます。 --- # マウントされたボリュームのConfigMap。 apiVersion: v1 kind: ConfigMap メタデータ: 名前: nginx-conf namespace: デフォルト データ: nginx.conf: |- ユーザーnginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { /etc/nginx/mime.typesを含めます。 default_type application/octet-stream; log_formatメイン '$remote_addr - $remote_user [$time_local] "$request"' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; 上のsendfile; # tcp_nopush on; keepalive_timeout 65; # gzip on; include /etc/nginx/conf.d/*.conf; }
クリックした後作成、デプロイメントのステータスを示すメッセージが表示されます。
kubectlを使用したアプリケーションの管理
kubectlを使用してアプリケーションを作成したり、アプリケーションポッドを表示したりできます。
kubectlを使用したアプリケーションの作成
次のkubectlコマンドを実行してポッドを起動します。 この例では、NGINX webサーバーが使用されます。
クラスターのKubernetesバージョンが1.18以降の場合は、次のコマンドを実行します。
kubectl create deployment nginx -- imag e=registry.aliyuncs.com/spacexnice/netdia:latest
クラスターのKubernetesバージョンが1.18より前の場合は、次のコマンドを実行します。
kubectl run -it nginx -- imag e=registry.aliyuncs.com/spacexnice/netdia: 最新
次のコマンドを実行してポッドのIngressを作成し、
-- type=LoadBalancer
を指定してAlibaba Cloudが提供するロードバランサーを使用します。kubectl deployment nginx -- port=80 -- target-port=80 -- type=LoadBalancer
kubectlを使用したポッドの表示
次のコマンドを実行して、デフォルトの名前空間で実行中のすべてのポッドを表示します。
kubectl getポッド
期待される出力:
の名前準備ができているステータスの履歴書
nginx-2721357637-d **** 1/1ランニング1 9h
イメージプルシークレットを使用したアプリケーションの作成
ACKでは、ACKコンソールでイメージプルシークレットを使用できます。 イメージプルシークレットを作成するか、既存のイメージプルシークレットを使用できます。
イメージのセキュリティを確保するために、プライベートイメージからアプリケーションを作成するときは、通常、イメージにシークレットを設定する必要があります。 docker-registry Secretを使用して、ACKコンソールでプライベートイメージリポジトリに必要なID認証情報をKubernetesに同期できます。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
On theデプロイメントページで、名前空間を選択し、イメージから作成ページの右上隅にあります。
[基本情報] ウィザードページで、パラメーターを設定します。 詳細については、「基本設定の設定」をご参照ください。
コンテナーを設定します。
次の例では、イメージプルシークレットを設定する方法について説明します。 コンテナ設定の詳細については、「基本的なコンテナ設定」をご参照ください。
On theコンテナウィザードページで、プライベートイメージのアドレスをイメージ名フィールドの
domainname/namespace/imagename
形式を指定します。説明パブリックイメージは秘密を必要としません。
使用するイメージバージョンを [イメージバージョン] フィールドに入力します。
この例では、Tomcatプライベートイメージが使用されています。
クリックセット画像プル秘密表示されるダイアログボックスで、シークレットを作成するか、既存のシークレットを選択します。
[新しい秘密] を選択できます。 [新しいシークレット] を選択した場合、次のパラメーターを設定します。
パラメーター
説明
名前 (regsecret)
シークレットのキー名。The key name of the Secret. カスタム名を入力することができます。
リポジトリドメイン (docker-server)
指定されたDockerリポジトリのアドレス。 Container Registryでイメージリポジトリを使用すると、イメージリポジトリのアドレスが自動的に表示されます。
ユーザー名 (docker-Username)
Dockerリポジトリへのログインに使用されるユーザー名。 Container Registryでイメージリポジトリを使用する場合、アカウント名がユーザー名として使用されます。 Alibaba CloudアカウントとRAM (Resource Access Management) ユーザーがサポートされています。
パスワード (docker-Password)
Dockerリポジトリへのログインに使用されるパスワード。 Container Registryでイメージリポジトリを使用する場合、パスワードはContainer Registryのログインパスワードです。
メール (docker-Email)
メールアドレス。 このパラメーターはオプションです。
[OK] をクリックします。 次に、秘密を見つけることができます。
[既存のシークレット] をクリックすることもできます。 kubectlまたはYAMLファイルを使用して、イメージプルシークレットを事前に作成できます。 詳細については、「」をご参照ください。Kubernetesクラスターでプライベートイメージを使用する方法を教えてください。 プライベートイメージリポジトリを使用したアプリケーションの作成
要件に基づいて他のパラメーターを設定します。 次に、[作成] をクリックします。
詳細については、「詳細設定の設定」をご参照ください。
ACKコンソールの左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。 クラスターの詳細ページが表示されます。
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
On theデプロイメントページでは、作成したアプリケーションのステータスを表示できます。
Tomcatアプリケーションが実行されている場合、これはTomcatプライベートイメージがシークレットで正常にプルされたことを示します。
関連ドキュメント
StatefulSetsの作成方法の詳細については、「StatefulSetを使用してステートフルアプリケーションを作成する」をご参照ください。
アプリケーションで例外が発生した場合は、「アプリケーションに関するFAQ」をご参照ください。
ポッドに例外が発生した場合は、「ポッドのトラブルシューティング」をご参照ください。