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

Elastic Container Instance:VNodeへのPodのスケジュール

最終更新日:Dec 28, 2024

データセンターまたはAlibaba Cloud Elastic Compute Service (ECS)インスタンスにセルフマネージドKubernetesクラスターがある場合、実際のノードと仮想ノード (VNode) の両方を使用します。この場合、nodeSelectorフィールドとtolerationsフィールドを設定するか、nodeNameフィールドを指定して、PodをVNodeにスケジュールできます。その後、Podをエラスティックコンテナインスタンスとして実行できます。このトピックでは、VNodeにPodをスケジュールする方法について説明します。

スケジューリング方法の概要

VNodeはネイティブのKubernetesノードと同等です。Kubernetesクラスターが実際のノードとVNodeの両方を使用する場合、次のいずれかの方法を使用してPodをVNodeにスケジュールできます。

説明

以下の方法を使用するには、既存のリソースを変更する必要があります。これらの変更により、システムに脆弱性が発生する可能性があります。eci-profileコンポーネントをデプロイすることをお勧めします。eci-profileを使用すると、セレクターフィールドで指定された条件を満たすPodがVNodeに自動的にスケジュールされるように設定できます。詳細については、eci-profileを使用してPodをVNodeにスケジュールするを参照してください。

  • nodeSelectorフィールドとtolerationsフィールドを設定する

    デフォルトでは、VNodeはラベルとテイントで設定されています。したがって、nodeSelectorとtolerationsを設定してPodをVNodeにスケジュールし、Podをエラスティックコンテナインスタンスとして実行できます。

  • nodeNameフィールドを指定する

    nodeNameフィールドを指定して、Podを指定されたVNodeにスケジュールし、Podをエラスティックコンテナインスタンスとして実行できます。

方法1: nodeSelectorフィールドとtolerationsフィールドを設定する

デフォルトでは、VNodeは次のコードに示すように、ラベルとテイントで設定されています。

...
  labels:
    k8s.aliyun.com/vnode: "true"
...
  taints:
  - effect: NoSchedule
    key: k8s.aliyun.com/vnode
    value: "true"

したがって、nodeSelectorフィールドとtolerationsフィールドを設定してPodをVNodeにスケジュールし、Podをエラスティックコンテナインスタンスとして実行できます。次の操作を実行します。

  1. 次の内容をdeploy-vnode-test1.yamlファイルとして保存します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: vnode-nginx-test1
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: uid
      template:
        metadata:
          labels:
            app: uid
        spec:
          nodeSelector:     # nodeSelectorを設定します。
            k8s.aliyun.com/vnode: "true"
          tolerations:      # tolerationsを設定します。
          - key: k8s.aliyun.com/vnode
            operator: "Equal"
            value: "true"
            effect: "NoSchedule"
          containers:
          - name: nginx
            image: registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2
  2. デプロイメントを作成します。

    kubectl apply -f deploy-vnode-test1.yaml

方法2: nodeNameフィールドを指定する

nodeNameフィールドを指定して、PodをVNodeにスケジュールできます。次の操作を実行します。

  1. 次のコマンドを実行して、VNodeをクエリします。

    kubectl get nodes

    コマンド出力からVNodeの名前を取得します。デフォルトでは、VNodeの名前の形式は<region>.<VNode ID>です。出力例:

    NAME                                    STATUS   ROLES                  AGE    VERSION
    cn-hangzhou.vnd-2ze2qhf8lmp5kgsx****    Ready    agent                  132m   v1.20.6
    k8s-master                              Ready    control-plane,master   169m   v1.20.6
  2. 次の内容をdeploy-vnode-test2.yamlファイルとして保存します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: vnode-nginx-test2
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: uid
      template:
        metadata:
          labels:
            app: uid
        spec:
          containers:
          - name: nginx
            image: registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2
          nodeName: cn-hangzhou.vnd-2ze2qhf8lmp5kgsx****   # VNodeの名前を指定します。
  3. デプロイメントを作成します。

    kubectl apply -f deploy-vnode-test2.yaml