ACK仮想ノードを使用すると、Kubernetesは基盤となるインフラストラクチャを管理することなく、クラウドでサーバーレスコンピューティングを使用できます。 このトピックでは、データセンター内のKubernetesクラスターにACK仮想ノードをデプロイする方法について説明します。
概要
ACK仮想ノードを使用すると、自己管理型Kubernetesクラスターは、CPUとGPUの両方を含むクラウド内のエラスティックコンピューティングリソースにアクセスできます。 ACK Virtual Nodeを使用すると、自己管理型Kubernetesクラスターにサーバーレスポッドを作成でき、ビジネスの成長と変動するトラフィック需要に対応してコンピューティングリソースを効果的にスケールできます。
データセンターとAlibaba Cloud仮想プライベートクラウド (VPC) は、Express Connect回線を介して接続されています。 次の図は、ACK仮想ノードの動作を示しています。
ACK Virtual Nodeは、サーバーレスポッドごとにクラウド内にエラスティックコンテナインスタンスを作成します。 ノードのメンテナンスは必要ありません。
前提条件
Kubernetesクラスターがデプロイされました。 Kubernetesバージョン1.18以降のクラスターを使用することを推奨します。
ACK仮想ノードのHelmチャートを使用するResource Access Management (RAM) ユーザーまたはロール用にAccessKeyペアが作成され、Elastic Container Instance APIで操作を呼び出す権限が付与されています。 次のスクリプトは、認可情報の構文を示しています。
コンポーネントのインストール
次の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 ***
次のコマンドを実行してHelmリポジトリを追加します。
helm repo add aliyunhub https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/次のコマンドを実行してack-virtual-nodeをインストールします。
helm install ack-virtual-node aliyunhub/ack-virtual-node --namespace kube-system --values my-values.yaml次のコマンドを実行して、アプリケーションのステータスを確認します。
kubectl get no |grep virtual-kubelet期待される出力:
virtual-kubelet-cn-zhangjiakou-c Ready agent 10d v1.18.8
クラウドのサーバーレスコンピューティングで実行するポッドのスケジュール
自己管理型Kubernetesクラスターでは、次の3つの方法のいずれかを使用して、ポッドをエラスティックコンテナーインスタンスにスケジュールできます。
方法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次のコマンドを実行して、アプリケーションのステータスを確認します。
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: 名前空間にラベルを追加する
次のコマンドを実行して、vkという名前空間を作成します。
kubectl create ns vk次のコマンドを実行して、名前空間にラベルalibabacloud.com/eci=trueを追加します。
kubectl label namespace vk alibabacloud.com/eci=true次のコマンドを実行して、指定した名前空間にテストケースをデプロイします。
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次のコマンドを実行して、アプリケーションのステータスを確認します。
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: ノード名の指定
次のコマンドを実行して、指定したノードにテストケースをデプロイします。
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次のコマンドを実行して、アプリケーションのステータスを確認します。
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>
関連ドキュメント
サポートされているタイプとGPUアクセラレーションポッドの作成の詳細については、「GPUアクセラレーションECSインスタンスタイプ」をご参照ください。
KubernetesクラスターにプリエンプティブルElastic Container Instanceベースのポッドを作成する方法の詳細については、「プリエンプティブルelastic container instanceの作成」をご参照ください。
一時ストレージが不足し、スケールアップを検討している場合は、「一時ストレージスペースのスケールアップ」をご参照ください。
仮想ノードからメトリックを収集する方法の詳細については、「指定された仮想ノードのメトリックの収集」をご参照ください。
ACK仮想ノードコンポーネントの概要とリリースノートについては、「ACK仮想ノード」をご参照ください。