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

:自己管理型KubernetesクラスターでのサーバーレスコンピューティングにACK仮想ノードを使用する

最終更新日:Mar 27, 2025

ACK仮想ノードを使用すると、Kubernetesは基盤となるインフラストラクチャを管理することなく、クラウドでサーバーレスコンピューティングを使用できます。 このトピックでは、データセンター内のKubernetesクラスターにACK仮想ノードをデプロイする方法について説明します。

概要

ACK仮想ノードを使用すると、自己管理型Kubernetesクラスターは、CPUとGPUの両方を含むクラウド内のエラスティックコンピューティングリソースにアクセスできます。 ACK Virtual Nodeを使用すると、自己管理型Kubernetesクラスターにサーバーレスポッドを作成でき、ビジネスの成長と変動するトラフィック需要に対応してコンピューティングリソースを効果的にスケールできます。

データセンターとAlibaba Cloud仮想プライベートクラウド (VPC) は、Express Connect回線を介して接続されています。 次の図は、ACK仮想ノードの動作を示しています。

image
説明

ACK Virtual Nodeは、サーバーレスポッドごとにクラウド内にエラスティックコンテナインスタンスを作成します。 ノードのメンテナンスは必要ありません。

前提条件

  • Kubernetesクラスターがデプロイされました。 Kubernetesバージョン1.18以降のクラスターを使用することを推奨します。

  • ACK仮想ノードのHelmチャートを使用するResource Access Management (RAM) ユーザーまたはロール用にAccessKeyペアが作成され、Elastic Container Instance APIで操作を呼び出す権限が付与されています。 次のスクリプトは、認可情報の構文を示しています。

[拡張して権限付与情報を表示する]

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "eci:CreateContainerGroup",
                "eci:DeleteContainerGroup",
                "eci:DescribeContainerGroups",
                "eci:DescribeContainerGroupStatus",
                "eci:DescribeContainerGroupEvents",
                "eci:DescribeContainerLog",
                "eci:UpdateContainerGroup",
                "eci:UpdateContainerGroupByTemplate",
                "eci:CreateContainerGroupFromTemplate",
                "eci:RestartContainerGroup",
                "eci:ExportContainerGroupTemplate",
                "eci:DescribeContainerGroupMetric",
                "eci:DescribeMultiContainerGroupMetric",
                "eci:ExecContainerCommand",
                "eci:CreateImageCache",
                "eci:DescribeImageCaches",
                "eci:DeleteImageCache",
                "vpc:DescribeVSwitches"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        }
    ]
}

コンポーネントのインストール

  1. 次のYAMLテンプレートを使用して、my-values.yamlという名前のファイルを作成し、ローカルディレクトリに保存します。

    説明

    次のコードでは、{Region} はエラスティックコンテナインスタンスが存在するリージョンのIDを指します。 データセンターはこのIDにアクセスする必要があります。 たとえば、中国 (張家口) リージョンのIDはcn-Zhangjiakouです。 Elastic Container Instanceが使用可能なリージョンの詳細については、「エンドポイント」をご参照ください。

    virtualNode:
      image:
        repository: registry-{Region}.ack.aliyuncs.com/acs/virtual-nodes-eci
        tag: v2.12.1
    env:
      ECI_REGION: cn-zhangjiakou
      ECI_VSWITCH: vsw-8vb***
      ECI_SECURITY_GROUP: sg-8vb***
      ECI_ACCESS_KEY: yourAccessKeyID
      ECI_SECRET_KEY: yourAccessKeySecret

    次の表に、パラメーターを示します。

    パラメーター

    説明

    必須

    virtualNode.image.repository

    仮想ノードイメージリポジトリのアドレス。

    必須

    registry-cn-zhangjiakou.ack.aliyuncs.com/acs/virtual-nodes-eci

    virtualNode.image.tag

    仮想ノードイメージのタグ。

    必須

    v2.12.1

    env.ECI_REGION

    エラスティックコンテナインスタンスが存在するリージョンのID。

    必須

    cn-zhangjiakou

    env.ECI_VSWITCH

    エラスティックコンテナインスタンスで使用されるvSwitchのID。 複数のIDをコンマ (,) で区切り、サーバーレスポッドに十分なIPアドレスを確保します。

    必須

    vsw-8vb ***

    env.ECI_SECURITY_GROUP

    エラスティックコンテナインスタンスが属するセキュリティグループのID。

    必須

    sg-8vb ***

    env.ECI_ACCESS_KEY

    Alibaba CloudアカウントのAccessKey ID。Elastic Container Instance APIで操作を呼び出す権限があります。

    必須

    yourAccessKeyID

    env.ECI_SECRET_KEY

    Elastic Container Instance APIで操作を呼び出す権限を持つ、Alibaba CloudアカウントのAccessKey Secret。

    必須

    yourAccessKeySecret

    env.KUBERNETES_APISERVER_HOST

    APIサーバーへのアクセスに使用されるエンドポイント。

    選択可能

    192.168.0.1

    env.KUBERNETES_APISERVER_PORT

    内部ネットワークからAPIサーバーにアクセスするためにエンドポイントで使用されるポート。

    選択可能

    6443

    env.ECI_VPC

    エラスティックコンテナインスタンスが存在するVPCのID。

    選択可能

    vpc-8vb ***

    env.ALIYUN_RESOURCEGROUP_ID

    エラスティックコンテナインスタンスが属するリソースグループのID。

    選択可能

    rg-acf ***

  2. 次のコマンドを実行してHelmリポジトリを追加します。

    helm repo add aliyunhub https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
  3. 次のコマンドを実行してack-virtual-nodeをインストールします。

    helm install ack-virtual-node aliyunhub/ack-virtual-node --namespace kube-system --values my-values.yaml
  4. 次のコマンドを実行して、アプリケーションのステータスを確認します。

    kubectl  get no |grep virtual-kubelet

    期待される出力:

    virtual-kubelet-cn-zhangjiakou-c   Ready    agent    10d   v1.18.8

クラウドのサーバーレスコンピューティングで実行するポッドのスケジュール

自己管理型Kubernetesクラスターでは、次の3つの方法のいずれかを使用して、ポッドをエラスティックコンテナーインスタンスにスケジュールできます。

方法1: ポッドにラベルを追加する

  1. 次のコマンドを実行して、指定したラベルを持つポッドにテストケースをデプロイします。

    kubectl apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: nginx
      name: nginx-deployment-pod-label
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            alibabacloud.com/eci: 'true'   # Pods with the specified label can use serverless computing in the cloud.
            app: nginx
        spec:
          containers:
            - image: 'registry.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2'
              imagePullPolicy: IfNotPresent
              name: nginx
              ports:
                - containerPort: 80
                  protocol: TCP
              resources:
                limits:
                  cpu: 500m
    EOF
  2. 次のコマンドを実行して、アプリケーションのステータスを確認します。

     kubectl get pod -owide | grep nginx-deployment-pod-label

    期待される出力:

    nginx-deployment-pod-label-6575548559-7p9hf     1/1     Running   0          33s    192.168.XX.XXX    virtual-kubelet-cn-zhangjiakou-c   <none>           <none>
    nginx-deployment-pod-label-6575548559-tztm6     1/1     Running   0          33s    192.168.XX.XXX    virtual-kubelet-cn-zhangjiakou-c   <none>           <none>

方法2: 名前空間にラベルを追加する

  1. 次のコマンドを実行して、vkという名前空間を作成します。

    kubectl create ns vk
  2. 次のコマンドを実行して、名前空間にラベルalibabacloud.com/eci=trueを追加します。

    kubectl label namespace vk alibabacloud.com/eci=true
  3. 次のコマンドを実行して、指定した名前空間にテストケースをデプロイします。

    kubectl apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: nginx
      name: nginx-deployment-ns-label
      namespace: vk
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
            - image: 'registry.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2'
              imagePullPolicy: IfNotPresent
              name: nginx
              ports:
                - containerPort: 80
                  protocol: TCP
              resources:
                limits:
                  cpu: 500m
    EOF
  4. 次のコマンドを実行して、アプリケーションのステータスを確認します。

    kubectl get po -nvk -owide |grep  nginx-deployment-ns-label

    期待される出力:

    nginx-deployment-ns-label-7bc784448c-5llgb   1/1     Running   0          30s   192.168.XX.XXX   virtual-kubelet-cn-zhangjiakou-c   <none>           <none>
    nginx-deployment-ns-label-7bc784448c-8ns9q   1/1     Running   0          30s   192.168.XX.XXX   virtual-kubelet-cn-zhangjiakou-c   <none>           <none>

方法3: ノード名の指定

  1. 次のコマンドを実行して、指定したノードにテストケースをデプロイします。

    kubectl apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: nginx
      name: nginx-deployment-node-name
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          nodeName: virtual-kubelet-cn-zhangjiakou-c             # Specify the node name is ack-virtual-node.
          containers:
            - image: 'registry.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2'
              imagePullPolicy: IfNotPresent
              name: nginx
              ports:
                - containerPort: 80
                  protocol: TCP
              resources:
                limits:
                  cpu: 500m
    EOF
  2. 次のコマンドを実行して、アプリケーションのステータスを確認します。

    kubectl get pod -owide |grep nginx-deployment-node-name

    出力を期待する:

    nginx-deployment-node-name-864dffd59f-jq58n     1/1     Running   0          23s     192.168.XX.XXX     virtual-kubelet-cn-zhangjiakou-c   <none>           <none>
    nginx-deployment-node-name-864dffd59f-r87zp     1/1     Running   0          23s     192.168.XX.XXX     virtual-kubelet-cn-zhangjiakou-c   <none>           <none>

関連ドキュメント