Deployment は、ステートレスアプリケーションを管理するための一般的な Kubernetes ワークロードです。指定した数のレプリカ Pod が、定義した状態でクラスター内で常に実行されることを保証します。このトピックでは、Container Service for Kubernetes (ACK) コンソールと kubectl を使用して、ACK クラスターにステートレスアプリケーションを作成する方法を説明します。
事前準備
ワークロードを作成する前に、ワークロードをお読みいただき、基本的な概念と主な考慮事項についてご理解ください。本トピックでは、以下のセクションについて説明します。
Deployment の作成: コンソールと kubectl を使用して Deployment を作成するためのクイックスタートガイドを紹介します。
設定パラメーター: コンソールの設定パラメーターについて説明し、kubectl 用のサンプル YAML ファイルを記載します。
本トピックの例ではパブリックイメージを使用します。パブリックイメージをプルするには、クラスターまたはノードにパブリックインターネットアクセスが必要です。パブリックインターネットアクセスは、次のいずれかの方法で有効にできます。
クラスターのパブリックネットワークアクセスを有効にする (推奨): クラスターがデプロイされている VPC 用に NAT ゲートウェイを作成します。これにより、クラスター内のすべてのリソースがパブリックインターネットにアクセスできるようになります。
ノードに 静的パブリック IP アドレス を割り当てる: パブリック IP アドレスを持つノードはパブリックイメージをプルできます。ただし、ワークロードをデプロイするすべてのノードにパブリック IP アドレスを割り当てる必要があります。
Deployment の作成
コンソールの使用
次の手順は、ワークロードを簡単に作成するための手順です。これらの手順に従って、アプリケーションをすばやくデプロイし、動作を確認できます。基本操作に慣れたら、ワークロードをカスタマイズするには 設定パラメーター をご参照ください。
[アプリケーションの基本情報の設定]
ACK コンソールにログインし、左側のナビゲーションペインでクラスターリストをクリックします。 クラスターリスト ページで、クラスター名をクリックします。 左側のナビゲーションペインで、を選択します。 [デプロイ] ページで、[イメージから作成]をクリックします。

[基本情報] ページで、アプリケーションの基本設定を構成します。次に、[次へ] をクリックします。

[コンテナの設定]
[コンテナ設定] セクションで、[イメージ名] と [ポート] を設定します。その他の設定はオプションです。デフォルト値のままにすることができます。次に、[次へ] をクリックして [詳細設定] ウィザードページを開きます。イメージアドレスは次のとおりです。
重要このイメージをプルするには、クラスターのパブリックインターネットアクセスを有効にする必要があります。 クラスターの作成時に [VPC の SNAT を設定] オプションを選択した場合、パブリックインターネットアクセスはすでに有効になっています。 そうでない場合は、「クラスターのパブリックネットワークアクセスを有効にする」をご参照ください。
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
[詳細設定の構成]
[詳細] ページで、アクセス制御、スケーリング、およびスケジューリングを設定します。[アクセス制御] セクションで、バックエンド Pod の公開方法を設定し、[OK] をクリックします。次に、ページの下部にある [作成] をクリックします。
重要この手順では、ワークロードを公開するために LoadBalancer タイプの Service を作成します。関連付けられた Server Load Balancer (SLB) インスタンスには料金が発生します。詳細については、従量課金をご参照ください。SLB インスタンスが不要になった場合は、不要な課金を避けるため、速やかに解放してください。

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


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

kubectl の使用
ワークロードを作成する前に、kubectl を使用して ACK クラスターに接続してください。詳細については、クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続するをご参照ください。
次の YAML 設定をコピーし、deployment.yaml に保存します。この設定は、Deployment と、外部アクセス用の
LoadBalancerタイプの Service を定義します。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。 --- # Service の定義。 apiVersion: v1 kind: Service metadata: name: nginx-test-svc namespace: default # 名前空間。必要に応じて変更してください。 labels: app: nginx spec: selector: app: nginx # 指定したラベルを持つ Pod を選択します。 ports: - port: 80 # クラスター内で Service によって公開されるポート。 targetPort: 80 # トラフィックの転送先となるコンテナポート。 protocol: TCP # プロトコル。デフォルト値:TCP。 type: LoadBalancer # Service のタイプ。デフォルト値:ClusterIP (内部アクセスのみ)。次のコマンドを実行して、Deployment と Service を作成します:
kubectl apply -f deployment.yaml想定される出力:
deployment.apps/nginx-test created service/nginx-test-svc created次のコマンドを実行して、Service のパブリック 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 1h10mNginx コンテナにアクセスするには、ブラウザーで Service のパブリック IP アドレス (
106.14.**.***) を入力します。
設定パラメーター
コンソールパラメーター
基本情報

パラメーター | 説明 |
[名前] | ワークロードの名前です。Pod 名はこの名前から派生します。 |
[Namespace] | ワークロードが含まれる Namespace です。 |
[レプリカ] | Pod レプリカの数です。デフォルト値: 2。 |
[タイプ] | ワークロードのタイプです。ワークロードタイプの選択方法の詳細については、「ワークロードの作成」をご参照ください。 |
[ラベル] | ワークロードのラベルです。 |
[アノテーション] | ワークロードのアノテーションです。 |
[タイムゾーンの同期] | コンテナがホストノードと同じタイムゾーンを使用するかどうかを指定します。 |
コンテナ設定
詳細設定
設定カード | パラメーター | 説明 |
[アクセス制御] | [Service] | Service は、Pod のグループに対して安定した統一されたレイヤー 4 (トランスポート層) エンドポイントを提供します。これは、ワークロードを公開するために必要なリソースです。Service は、[ClusterIP]、 [NodePort]、 [LoadBalancer] など、複数のタイプをサポートしています。Service を設定する前に、「Service 管理」を参照して基本的な概念を理解してください。 |
[Ingress] | Ingress は、クラスター内の複数の Service に対してレイヤー 7 (アプリケーション層) のエントリポイントを提供し、ドメイン名の一致に基づいてリクエストを異なる Service に転送します。Ingress を使用する前に、Ingress コントローラーをインストールする必要があります。ACK は、さまざまなシナリオに対応するいくつかのオプションを提供しています。詳細については、「NGINX Ingress Controller、ALB Ingress Controller、および MSE Ingress ゲートウェイの比較」をご参照ください。 | |
[スケーリング] | [Horizontal Pod Autoscaler (HPA)] | Horizontal Pod Autoscaler (HPA) は、コンテナのパフォーマンスメトリックに基づいて Pod の数を自動的にスケーリングします。これにより、ビジネス負荷の変動に応じてワークロードが使用する総リソースを調整し、高負荷に対応するためにスケールアウトし、低負荷時にリソースを節約するためにスケールインするのに役立ちます。詳細については、「HorizontalPodAutoscaler を使用して Pod を自動的にスケーリングする」をご参照ください。 |
[CronHPA] | CronHPA は、スケジュールされた時間にワークロードをスケーリングします。これは、昼食後や夕食後のソーシャルメディアプラットフォームのトラフィックピークなど、予測可能で周期的なビジネス負荷の変動があるシナリオに適しています。詳細については、「CronHPA を使用して Pod を自動的にスケーリングする」をご参照ください。 | |
[スケジューリング] | [アップグレード戦略] | 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 # Namespace。要件に応じて変更してください。
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 # 疑似 TTY を割り当てます。
env:
- name: SPECIAL_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: special-config # ConfigMap の名前。
key: SPECIAL_LEVEL # ConfigMap のキー。
securityContext:
privileged: true # true に設定すると特権モードを有効にします。デフォルト値: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 # ホストの /etc/localtime ファイルをコンテナの同じパスにマウントします。
---
# Service の定義。
apiVersion: v1
kind: Service
metadata:
name: nginx-test-svc
namespace: default # Namespace。要件に応じて変更してください。
labels:
app: nginx
spec:
selector:
app: nginx # 指定されたラベルを持つ Pod を選択します。
ports:
- port: 80 # Service がクラスター内で公開するポート。
targetPort: 80 # トラフィックが転送されるコンテナポート。
protocol: TCP # プロトコル。デフォルト値:TCP。
type: ClusterIP # Service のタイプ。デフォルト値:ClusterIP (内部アクセスのみ)。
---
# Ingress の定義。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
namespace: default # Namespace。要件に応じて変更してください。
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-test-svc # バックエンド Service の名前。
port:
number: 80 # バックエンド Service のポート。
tls: # オプション。HTTPS を有効にするために使用されます。
- hosts:
- foo.bar.com # ご使用のドメイン名に置き換えてください。
secretName: tls-secret # TLS 証明書を含む Secret の名前。関連ドキュメント
データベースなど、安定した永続ストレージを必要とするアプリケーションには、StatefulSet を使用します。詳細については、「ステートフルなワークロード (StatefulSet) の作成」をご参照ください。
ワークロードの作成時に問題が発生した場合は、「ワークロードのよくある質問」をご参照ください。
Pod が異常な状態にある場合は、「Pod の例外のトラブルシューティング」をご参照ください。







