すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ワークロードに関するよくある質問

最終更新日:Sep 02, 2026

ACK クラスターでのワークロードのデプロイと管理に関するよくある質問と回答です。

ACK クラスターでコンテナ化されたアプリケーションをデプロイするにはどうすればよいですか?

コンテナ化されたアプリケーションのデプロイには、次の 4 つのフェーズがあります。

  1. アプリケーションコードを記述する (任意のプログラミング言語で記述できます)。

  2. コンテナイメージをビルドする (Dockerfile を使用します。Dockerfile は、コードとすべての依存関係をポータブルな配信アーティファクトにパッケージ化するテキストファイルです)。コンテナイメージは、JAR、WAR、RPM ファイルなどの従来のパッケージよりも完全です。コンテナランタイムが必要とするすべてのファイルとアプリケーションがバンドルされているためです。このイメージを使用してコンテナを起動すると、アプリケーションが実行されます。詳細な手順については、「Dockerfile を使用したイメージのビルド、パッケージ化、実行」をご参照ください。

  3. イメージをレジストリにプッシュする。Container Registry (ACR) は、イメージを保存、管理、配信、および提供します。ACR には次の 2 つのエディションがあります。詳細については、「ACR とは」をご参照ください。

    • Personal Edition — 個人開発者向け

    • Enterprise Edition — エンタープライズ顧客向け

  4. ACK でワークロードをデプロイする (コンテナ化されたアプリケーションを実行します)。ACK は、コンテナ化されたワークロードのライフサイクル全体を管理します (Pod の特定ノードへのスケジューリング、負荷変化に応じたスケーリングなど)。詳細については、「ワークロード」をご参照ください。

イメージのプルに時間がかかりすぎる、または失敗するのはなぜですか?

プル元に応じて、次の項目を確認してください。

パブリックネットワーク経由でプルする場合

ACR からプルする場合

ACK でアプリケーションの問題をトラブルシューティングするにはどうすればよいですか?

アプリケーションの障害は、通常、Pod、コントローラー (Deployment、StatefulSet、DaemonSet)、または Service に起因します。まず、どのレイヤーに問題があるかを特定してから、次の手順に従ってください。

Pod の確認

Pod レベルの問題を診断する完全なガイドについては、「Pod 異常のトラブルシューティング」をご参照ください。

Deployment の確認

Pod の異常は、Deployment、DaemonSet、StatefulSet、Job などのコントローラーが作成されたときに表面化することがよくあります。Pod レベルの問題を確認した後、Deployment のイベントとログを確認してください。

  1. ACK コンソールにログインします。左側メニューで、ACK コンソール [クラスター] をクリックします。

  2. [クラスター] ページで、クラスター名を見つけてクリックします。左側メニューで、[ワークロード] > [Deployment] を選択します。

  3. [Deployment] ページで、Deployment 名をクリックし、[イベント] または [ログ] をクリックして問題を特定します。

DaemonSet、StatefulSet、Job のプロセスも同じです。

Service の確認

Service は、Pod のグループ間でトラフィックを負荷分散します。Service 関連の問題を特定するには、次の手順に従ってください。

ステップ 1: エンドポイントが存在することを確認する

kubectl を使用してクラスターに接続してから、次のコマンドを実行します。

kubectl get endpoints <service_name>

ENDPOINTS 列のアドレス数は、予想されるレプリカ数と一致する必要があります。たとえば、3 つのレプリカを持つ Deployment は、3 つのアドレスを表示する必要があります。

Service エンドポイントが見つからない場合

Service にエンドポイントアドレスがない場合、Service セレクターが Pod と一致していない可能性があります。次のコマンドを実行して確認してください。

  1. Service YAML でセレクターを見つけます。

    spec:
      clusterIP: 1x.xx.xx.33
      externalTrafficPolicy: Cluster
      ports:
        - name: http
          nodePort: 30040
          port: 30080
          protocol: TCP
          targetPort: 80
      selector:
        app: nginx
      sessionAffinity: None
  2. そのセレクターを使用して Pod をクエリします。

    <app> は、Pod の app ラベルの値です。<namespace> は、Service がある Namespace です。Service がデフォルトの Namespace にある場合は、-n <namespace> を省略してください。
    kubectl get pods -l app=<app> -n <namespace>
  3. 一致する Pod が存在してもエンドポイントがない場合、Service ポートがコンテナポートと一致していない可能性があります。接続性をテストします。

    <ip> と <port> は、ステップ 1 の Service YAML の clusterIP と port の値です。正確なテスト方法は環境によって異なります。
    curl <ip>:<port>

    Service で指定されたコンテナポートが、アプリケーションが実際にリッスンしているポートと同じであることを確認してください。

ネットワーク転送の問題

クライアントが Service にアクセスでき、エンドポイントが正しいにもかかわらず、接続がすぐに切断される場合、トラフィックが Pod に到達していない可能性があります。次の項目を確認してください。

  • Pod は正常ですか? 「Pod 異常のトラブルシューティング」をご参照ください。

  • Pod IP に到達できますか? kubectl get pods -o wide で Pod IP を取得し、任意のノードにログインして ping <pod-ip> を実行し、ネットワーク接続を確認してください。

  • アプリケーションは正しいポートでリッスンしていますか? 任意のノードで curl <pod-ip>:<port> を実行し、Pod 内のコンテナポートが期待どおりに機能していることを確認してください。

Helm を手動で更新するにはどうすればよいですか?

Helm v2 の Tiller サーバー側コンポーネントには、攻撃者がクラスターに不正なアプリケーションをインストールできる既知のセキュリティ脆弱性があります。Helm v3 にアップグレードしてください。「Helm v2 から Helm v3 へのアップグレード」をご参照ください。

中国本土の Container Registry Enterprise Edition インスタンスから中国本土以外の ACK クラスターにイメージをプルするにはどうすればよいですか?

次の Container Registry Enterprise Edition インスタンスを購入してください。

  • 中国本土のリージョンに Standard または Premium インスタンス

  • 中国本土以外のリージョンに Basic インスタンス

次に、同期インスタンスを使用して、中国本土のリージョンから中国本土以外のリージョンにイメージをレプリケートします。「同一アカウントの同期インスタンス」をご参照ください。同期後、中国本土以外のリージョンの Enterprise Edition インスタンスからレジストリアドレスを取得し、ACK でアプリケーションを作成するときに使用します。

ACR Personal Edition は同期速度が遅くなります。自己管理リポジトリの場合、イメージのプルを高速化するために Global Acceleration (GA) を購入する必要があり、コストが増加します。Container Registry Enterprise Edition の使用を推奨します。「課金情報」をご参照ください。

サービスを中断せずにローリングアップデートを実行するにはどうすればよいですか?

ローリングアップデート中に Pod を置き換えると、Pod の変更が Classic Load Balancer (CLB) インスタンスに同期されるまで数秒の遅延が発生します。これにより、一時的に 5XX エラーが発生する可能性があります。グレースフルシャットダウンを設定して、ダウンタイムゼロのローリングアップデートを実現してください。「ダウンタイムゼロのローリングデプロイメントの実装」をご参照ください。

ワークロードのコンテナイメージを取得するにはどうすればよいですか?

前提条件とコンテナイメージのプルに関するガイダンスについては、「イメージのプル」をご参照ください。

コンテナを再起動するにはどうすればよいですか?

Kubernetes は、個々のコンテナを直接再起動することをサポートしていません。代わりに、Pod を削除してください。コントローラー (Deployment、DaemonSet など) が自動的に代替を作成します。

  1. Pod を一覧表示して、再起動する Pod を見つけます。

    kubectl get pods
  2. Pod を削除します。

    kubectl delete pod <pod-name>
  3. 新しい Pod が実行されていることを確認します。

    kubectl get pods

    Pod のステータスが Running であることを確認してください。

本番環境では、Pod を直接操作するのではなく、ReplicaSet や Deployment などの上位レベルのオブジェクトを通じてコンテナを管理してください。これにより、クラスター状態の一貫性が保たれます。

Deployment の Namespace を変更するにはどうすればよいですか?

Deployment を別の Namespace に移動する場合、依存するリソース (PersistentVolumeClaim (PVC)、ConfigMap、Secret) も新しい Namespace に手動で更新する必要があります。

  1. Deployment の設定をエクスポートします。

    kubectl get deploy <deployment-name> -n <old-namespace> -o yaml > deployment.yaml
  2. deployment.yaml を編集し、namespace の値を置き換えます。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      annotations:
      generation: 1
      labels:
        app: nginx
      name: nginx-deployment
      namespace: new-namespace # 新しい Namespace を指定します。
      ... ...
  3. 更新した設定を適用します。

    kubectl apply -f deployment.yaml
  4. Deployment が新しい Namespace で実行されていることを確認します。

    kubectl get deploy -n new-namespace

Pod 情報を実行中のコンテナに公開するにはどうすればよいですか?

ACK は、Kubernetes コミュニティのネイティブ仕様に従っています。次の 2 つの方法がサポートされています。

imagePullSecrets の使用方法

重要
  • パスワードレスプルコンポーネントは、手動で指定した imagePullSecrets フィールドをサポートしていません。

  • Secret は、ワークロードと同じ Namespace に作成する必要があります。

2024 年 9 月 9 日以降に作成された ACR Personal Edition インスタンスは、aliyun-acr-credential-helper をサポートしていません。認証情報を Kubernetes Secret に保存し、imagePullSecrets を使用して参照してください。

ステップ 1: Secret を作成する

kubectl create secret docker-registry image-secret \
  --docker-server=<ACR-registry> \
  --docker-username=<username> \
  --docker-password=<password> \
  --docker-email=<email@example.com>
パラメーター 説明
--docker-server ACR インスタンスのエンドポイント。レジストリアドレスのネットワークタイプ (内部またはパブリック) と一致する必要があります。
--docker-username ACR アクセス認証情報のユーザー名。
--docker-password ACR アクセス認証情報のパスワード。
--docker-email オプション。

ステップ 2: Secret を参照する

次のいずれかの方法を選択してください。

ServiceAccount を使用する

オプション 1: ServiceAccount に追加する

ServiceAccount を使用するすべてのワークロードは、Secret を個別に指定せずにイメージをプルできます。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: default
  namespace: default
imagePullSecrets:
- name: image-secret # ACR Secret を入力します

この ServiceAccount を使用する Deployment は、イメージをプルできます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test
  namespace: default
  labels:
    app: nginx
spec:
  serviceAccountName: default # Namespace のデフォルト ServiceAccount を使用する場合は、指定する必要はありません。
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: <acrID>.cr.aliyuncs.com/<repo>/nginx:latest  # ACRリポジトリのイメージパスに置き換えます

ワークロードで直接使用する

オプション 2: ワークロードで直接指定する

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test
  namespace: default
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      imagePullSecrets:
      - name: image-secret  # 前のステップで作成したSecretの名前を指定します
      containers:
      - name: nginx
        image: <acrID>.cr.aliyuncs.com/<repo>/nginx:latest  # ACRリポジトリのイメージパスに置き換えます

確認

設定を適用した後、Pod が実行されていることを確認します。

kubectl get pods

パスワードレスコンポーネントを設定した後もプルが失敗するのはなぜですか?

パスワードレスプルコンポーネントが正しく設定されていないことが考えられます。次の 2 つの一般的な原因を確認してください。

  • コンポーネント内のインスタンス情報が ACR インスタンスと一致していません。

  • プルに使用されるイメージアドレスが、コンポーネントで設定されたドメイン名と一致していません。

「同一アカウント内でのイメージのプル」に従って設定を確認してください。

設定が正しいにもかかわらずプルが失敗する場合、ワークロード YAML で手動で指定した imagePullSecrets フィールドがパスワードレスコンポーネントと競合している可能性があります。imagePullSecrets フィールドを削除してから、Pod を削除して再作成してください。

ノードプールのイメージ高速化を有効にした後、新しいノードでコンテナの起動に失敗するのはなぜですか?

ノードプールの [コンテナイメージアクセラレーション] を有効にすると、次のエラーが表示されることがあります。

failed to create containerd container: failed to attach and mount for snapshot 46: failed to enable target for /sys/kernel/config/target/core/user_99999/dev_46, failed:failed to open remote file as tar file xxxx

このエラーは、コンテナイメージアクセラレーションでプライベートイメージをプルするには、aliyun-acr-acceleration-suite コンポーネントのインストールと認証情報の設定が必要となるために発生します。「コンテナイメージプル認証情報の設定」をご参照ください。

重要

コンポーネントをインストールしても問題が解決しない場合は、まずコンテナイメージアクセラレーションを無効にしてサービスを復旧させてから、再設定してください。