Deployment (ステートレスワークロードとも呼ばれます) は、Kubernetes で最も一般的なワークロードタイプの 1 つです。Deployment は、指定された数の Pod が、定義した状態でクラスター内で実行されることを保証します。このトピックでは、コンソールと kubectl を使用して Container Service for Kubernetes (ACK) クラスターでステートレスアプリケーションを作成する方法について説明します。
開始する前に
ワークロードを作成する前に、「ワークロード」を読んで、ワークロードの基本と重要な考慮事項を理解してください。このトピックには、次のセクションが含まれています。
Deployment の作成: コンソールと kubectl を使用して Deployment を作成する方法に関するクイックスタートガイドを提供します。
設定項目: コンソールの設定項目に関するドキュメントへのリンクと、kubectl で使用するサンプル YAML ファイルを提供します。
このトピックの例では、パブリックイメージを使用します。パブリックイメージをプルするには、クラスターまたはノードがインターネットにアクセスできる必要があります。
クラスターのインターネットアクセスを有効にする (推奨): クラスターが存在する VPC 用にインターネット NAT ゲートウェイを作成します。これにより、クラスター内のすべてのリソースにインターネットアクセスが提供されます。
ノードに固定パブリック IP アドレスを割り当てる: パブリック IP アドレスを持つノードは、パブリックイメージをプルできます。ただし、ワークロードをデプロイするすべてのノードにパブリック IP アドレスを割り当てる必要があります。
Deployment の作成
コンソールを使用した Deployment の作成
次の手順では、ワークロードを作成するための簡略化されたワークフローについて説明します。これらの手順に従って、ワークロードを迅速にデプロイおよび検証できます。基本操作に慣れたら、「設定項目」を参照してワークロードをカスタマイズしてください。
アプリケーションの基本情報を設定する
Container Service for Kubernetes コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。[クラスター] ページで、対象のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。 [Deployment] ページで、[イメージから作成] をクリックします。

[基本情報] ページで、アプリケーションの基本情報を設定し、[次へ] をクリックして [コンテナー設定] ページに進みます。

コンテナーを設定する
[コンテナー設定] セクションで、[イメージ名] と [ポート] を設定します。その他の設定はオプションです。デフォルト値のままにします。次に、[次へ] をクリックして [詳細設定] ページに進みます。イメージアドレスは以下の通りです。
重要このイメージをプルする前に、クラスターのインターネットアクセスを有効にする必要があります。クラスターの作成時に [VPC の SNAT を設定] でデフォルトの選択を維持した場合、クラスターはすでにインターネットにアクセスできます。そうでない場合は、「クラスターのインターネットアクセスを有効にする」をご参照ください。
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
詳細設定を完了する
[詳細設定] ページで、アクセス、スケーリング、スケジューリング、ラベル、およびアノテーションを設定します。[アクセス設定] セクションで、バックエンド Pod を公開する方法を指定します。[OK] をクリックし、ページの下部にある [作成] をクリックします。
重要このステップでは、ワークロードを公開するために LoadBalancer サービスを作成します。このサービスで使用される SLB インスタンスには料金が発生します。課金の詳細については、「従量課金」をご参照ください。後でこの SLB インスタンスを使用する予定がない場合は、速やかにリリースしてください。

アプリケーションの表示
[作成完了] ページにアプリケーションタスクが表示されます。[アプリケーション作成タスクが送信されました] パネルで、[アプリケーションの詳細を表示] をクリックします。 [アクセス方法] タブをクリックします。新しく作成されたサービス (nginx-test-svc) を見つけ、[外部エンドポイント] 列のリンクをクリックしてサービスにアクセスします。


コンソールで作成したワークロードを [表示]、[編集]、[再デプロイ] できます。

kubectl を使用した Deployment の作成
ワークロードを作成する前に、kubectl を使用してクラスターに接続していることを確認してください。詳細については、「クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。
次の YAML コンテンツをコピーし、deployment.yaml という名前のファイルに保存します。YAML ファイルは、Deployment とそれを公開するための
LoadBalancerサービスを定義します。apiVersion: apps/v1 kind: Deployment # ワークロードタイプ metadata: name: nginx-test namespace: default # 必要に応じて名前空間を変更します labels: app: nginx spec: replicas: 2 # Pod の数を指定します selector: matchLabels: app: nginx template: # Pod 設定 metadata: labels: # Pod ラベル app: nginx spec: containers: - name: nginx # コンテナー名 image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 # 特定のバージョンの Nginx イメージを使用します ports: - containerPort: 80 # コンテナーによって公開されるポート protocol: TCP # プロトコルを TCP または UDP として指定します。デフォルトは TCP です。 --- # サービス apiVersion: v1 kind: Service metadata: name: nginx-test-svc namespace: default # 必要に応じて名前空間を変更します labels: app: nginx spec: selector: app: nginx # ラベルを照合して、サービスが正しい Pod を指すようにします ports: - port: 80 # クラスター内でサービスによって提供されるポート targetPort: 80 # コンテナー内のアプリケーションがリッスンするポート (containerPort) を指します protocol: TCP # プロトコル。デフォルトは TCP です。 type: LoadBalancer # サービスタイプ。デフォルトは内部アクセス用の ClusterIP です。次のコマンドを実行して、Deployment とサービスを作成します。
kubectl apply -f deployment.yaml期待される出力:
deployment.apps/nginx-test created service/nginx-test-svc created次のコマンドを実行して、サービスのパブリック IP アドレスを表示します。
kubectl get svc期待される出力:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 172.16.**.*** <none> 443/TCP 4h47m nginx-test-svc LoadBalancer 172.16.**.*** 106.14.**.*** 80:31130/TCP 1h10mブラウザで、Nginx のパブリック IP アドレス (
106.14.**.***) を入力して、ワークロードの Nginx コンテナーにアクセスします。
設定項目
コンソールの設定項目
基本情報

設定項目 | 説明 |
アプリケーション名 | ワークロードの名前。ワークロードに属する Pod の名前は、この名前に基づいて生成されます。 |
名前空間 | ワークロードが属する名前空間。 |
レプリカ数 | ワークロード内の Pod の数。デフォルトは 2 です。 |
タイプ | ワークロードのタイプ。ワークロードタイプを選択するには、「ワークロードの作成」をご参照ください。 |
ラベル | ワークロードのラベル。 |
アノテーション | ワークロードのアノテーション。 |
タイムゾーン同期 | コンテナーが、それが存在するノードと同じタイムゾーンを使用するかどうかを指定します。 |
コンテナー設定
詳細設定
設定カード | 設定項目 | 説明 |
アクセス設定 | Service | Service は、Pod のグループに対して固定された統一されたレイヤー 4 (トランスポート層) のエントリポイントを提供します。これは、ワークロードを公開するために必要なリソースです。Service は、仮想クラスター IP、ノードポート、ロードバランサー など、複数のタイプをサポートしています。Service を設定する前に、「Service 管理」を参照して Service の基本を理解してください。 |
Ingress | Ingress は、クラスター内の複数の Service に対してレイヤー 7 (アプリケーション層) のエントリポイントを提供し、ドメイン名の一致に基づいてリクエストを異なる Service に転送します。Ingress を使用する前に、Ingress コントローラーをインストールする必要があります。ACK は、さまざまなシナリオに対応するいくつかのオプションを提供しています。「Nginx Ingress、ALB Ingress、MSE Ingress の比較」を参照して選択してください。 | |
スケーリング設定 | メトリックベースのスケーリング | コンテナーのパフォーマンスメトリックを監視して自動スケーリングをトリガーします。メトリックベースのスケーリングは、ビジネス負荷が変動するときにワークロードが使用する総リソースを自動的に調整するのに役立ち、高負荷を処理するためにスケールアウトし、低負荷時にリソースを節約するためにスケールインします。詳細については、「水平ポッド自動スケーリング (HPA) の使用」をご参照ください。 |
スケジュールされたスケーリング | スケジュールされた時間にワークロードのスケーリングをトリガーします。これは、昼食後や夕食後のソーシャルメディアの周期的なトラフィックピークなど、ビジネス負荷が定期的に変化するシナリオに適しています。詳細については、「CronHPA を使用したスケジュールされた水平ポッド自動スケーリング」をご参照ください。 | |
スケジューリング設定 | アップグレード方法 | Pod の設定が変更されたときに、ワークロードが古い Pod を新しい Pod に置き換えるメカニズム。
|
| アフィニティ、アンチアフィニティ、および Toleration の設定は、Pod が特定のノードで実行されることを保証するためのスケジューリングに使用されます。スケジューリング操作は複雑であり、ニーズに基づいて事前の計画が必要です。詳細な操作については、「スケジューリング」をご参照ください。 | |
ラベルとアノテーション | Pod ラベル | このワークロードに属する各 Pod にラベルを追加します。ワークロードや Service を含むクラスター内のさまざまなリソースは、ラベルを介して Pod と一致します。ACK は、 |
Pod アノテーション | このワークロードに属する各 Pod にアノテーションを追加します。ACK の一部の機能はアノテーションを使用します。これらの機能を使用するときに編集できます。 |
サンプルワークロード YAML ファイル
apiVersion: apps/v1
kind: Deployment # ワークロードタイプ
metadata:
name: nginx-test
namespace: default # 必要に応じて名前空間を変更します
labels:
app: nginx
spec:
replicas: 2 # Pod の数を指定します
selector:
matchLabels:
app: nginx
template: # Pod 設定
metadata:
labels: # Pod ラベル
app: nginx
annotations: # Pod アノテーション
description: "This is an application deployment"
spec:
containers:
- name: nginx # イメージ名
image: nginx:1.7.9 # 特定のバージョンの Nginx イメージを使用します
ports:
- name: nginx # 名前
containerPort: 80 # コンテナーによって公開されるポート
protocol: TCP # プロトコルを TCP または UDP として指定します。デフォルトは TCP です。
command: ["/bin/sh"] # コンテナー起動コマンド
args: [ "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY) && exec nginx -g 'daemon off;'"] # 変数を出力し、nginx を起動するコマンドを追加します
stdin: true # 標準入力を有効にします
tty: true # 仮想ターミナルを割り当てます
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config # 設定項目の名前
key: SPECIAL_LEVEL # 設定項目のキー名
securityContext:
privileged: true # true は特権モードを有効にし、false は無効にします。デフォルトは false です。
resources:
limits:
cpu: "500m" # 最大 CPU 使用量、500 ミリコア
memory: "256Mi" # 最大メモリ使用量、256 MiB
ephemeral-storage: "1Gi" # 最大エフェメラルストレージ使用量、1 GiB
requests:
cpu: "200m" # 最小要求 CPU 使用量、200 ミリコア
memory: "128Mi" # 最小要求メモリ使用量、128 MiB
ephemeral-storage: "500Mi" # 最小要求エフェメラルストレージ使用量、500 MiB
livenessProbe: # liveness プローブ設定
httpGet:
path: /
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe: # readiness プローブ設定
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
volumeMounts:
- name: tz-config
mountPath: /etc/localtime
readOnly: true
volumes:
- name: tz-config
hostPath:
path: /etc/localtime # volumeMounts および volumes フィールドを使用して、ホストの /etc/localtime ファイルをコンテナー内の同じパスにマウントします。
---
# サービス
apiVersion: v1
kind: Service
metadata:
name: nginx-test-svc
namespace: default # 必要に応じて名前空間を変更します
labels:
app: nginx
spec:
selector:
app: nginx # ラベルを照合して、サービスが正しい Pod を指すようにします
ports:
- port: 80 # クラスター内のサービスによって提供されるポート
targetPort: 80 # コンテナー内のアプリケーションがリッスンするポート (containerPort) を指します
protocol: TCP # プロトコル。デフォルトは TCP です。
type: ClusterIP # サービスタイプ。デフォルトは内部アクセス用の ClusterIP です。
---
# Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
namespace: default # 必要に応じて名前空間を変更します
annotations:
kubernetes.io/ingress.class: "nginx" # Ingress コントローラーのタイプを指定します
# Alibaba Cloud SLB Ingress コントローラーを使用する場合、次のように指定できます。
# service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "lb-xxxxxxxxxx"
# service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.spec.s1.small"
spec:
rules:
- host: foo.bar.com # ドメイン名に置き換えます
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service # バックエンドサービス名
port:
number: 80 # バックエンドサービスポート
tls: # オプション、HTTPS を有効にする場合
- hosts:
- foo.bar.com # ドメイン名に置き換えます
secretName: tls-secret # TLS 証明書 Secret 名リファレンス
データベースなど、安定した永続ストレージを必要とするアプリケーションには、StatefulSet を使用できます。詳細については、「ステートフルワークロード (StatefulSet) の作成」をご参照ください。
ワークロードの作成時に問題が発生した場合は、「ワークロードに関する FAQ」をご参照ください。
Pod が異常な場合は、「Pod の例外のトラブルシューティング」をご参照ください。







