データセンターまたは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をエラスティックコンテナインスタンスとして実行できます。次の操作を実行します。
次の内容を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
デプロイメントを作成します。
kubectl apply -f deploy-vnode-test1.yaml
方法2: nodeNameフィールドを指定する
nodeNameフィールドを指定して、PodをVNodeにスケジュールできます。次の操作を実行します。
次のコマンドを実行して、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
次の内容を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の名前を指定します。
デプロイメントを作成します。
kubectl apply -f deploy-vnode-test2.yaml