ローカル IDC の K8s クラスターはサーバーレス方式でクラウド コンピューティング リソースをどのように使用しますか

著者: 荘宇

前回の記事「バースト トラフィックに対応して、自社構築の K8 にクラウド エラスティック機能を迅速に追加する方法」では、ビジネス トラフィックの増大に対処し、マルチレベルのエラスティック スケジューリングを通じてクラウド リソースを柔軟に使用し、自動エラスティック スケーリングを通じて利用率を高めてクラウド コストを削減するために、IDC の K8s クラスターにクラウド ノードを追加する方法を紹介しました。

ノードを直接追加するこの方法は、カスタム構成ノード (ランタイム、kubelet、NVIDIA など) および特定の ECS インスタンス仕様を必要とするシナリオに適しています。同時に、この方法はクラウド上のノードプールを自分で保守する必要があることを意味します。

クラウド上でノード プールを維持したくない場合は、Alibaba Cloud ECI エラスティック コンテナ インスタンスを使用してビジネス ポッドを実行するサーバーレス方式を選択し、クラウド上の CPU/GPU リソースをより効率的かつ柔軟に使用できます。

概要

クラウド上の CPU/GPU リソースをサーバーレスで利用するということは、IDC 内の K8s クラスターの弾力性が不十分であり、ビジネスの急速な成長、定期的なビジネスの増加、突発的なビジネス トラフィックに対応できないという問題を解決することを目的としています。

サーバーレス方式により、ビジネス ポッドは K8s クラスターに直接送信でき、ポッドは Alibaba Cloud ECI エラスティック コンテナ インスタンスを使用して実行されます。ECI エラスティック コンテナ インスタンスは迅速に起動し、ビジネス ポッドのライフ サイクルと一致し、ポッドの実行時間に応じて課金されます。したがって、IDC で K8s クラスター用のクラウド ノードを作成する必要はなく、クラウド リソースの容量を計画する必要も、ECS の作成を待つ必要もありません。これにより、極めて高い弾力性が実現され、ノードの運用とメンテナンスのコストが節約されます。

IDC の K8s クラスターは、クラウド上の CPU/GPU リソースをサーバーレス方式で使用します。これは、次のビジネス シナリオに適しています。

  • オンライン ビジネスの山と谷の弾力的なスケーリング: オンライン教育や電子商取引などの業界には、明らかな山と谷の計算特性があります。サーバーレス ECI を使用すると、固定リソース プールのメンテナンスが大幅に軽減され、コンピューティング コストが削減されます。
  • データ コンピューティング: サーバーレス ECI を使用して、Spark、Presto、ArgoWorkflow などのコンピューティング シナリオをホストし、ポッドの実行時間に応じて請求することで、コンピューティング コストを効果的に削減します。
  • CI/CDパイプライン:Jenkins、Gitlab-Runner。
  • ジョブタスク: 時間指定タスク、AI。

ここに画像の説明を挿入

デモ - IDC の K8s クラスターはサーバーレス モードでクラウド リソースを使用します

1. 前提条件

ACK One 登録マシン クラスタは IDC の K8s クラスタに接続されています。「正しい方法を選択してください。K8s マルチクラスタ管理はそれほど難しくありません」を参照してください。

2. ack-virtual-node コンポーネントをインストールする

ACK One を使用してクラスター コンソールを登録し、ack-virtual-node コンポーネントをインストールします。コンポーネントをインストールした後、登録されたクラスター kubeconfig を使用してクラスター ノード プールを確認します。virtual-kubelet は、Alibaba Cloud Serverless ECI に接続された仮想ノードです。

kubectl get node
NAME                               STATUS   ROLES    AGE    VERSION
iz8vb1xtnuu0ne6b58hvx0z            Ready    master   4d3h   v1.20.9   //IDC集群节点,示例只有1个master节点,同时也是worker节点,可以运行业务容器
virtual-kubelet-cn-zhangjiakou-a   Ready    agent    99s    v1.20.9。//安装ack-virtual-node组件生产的虚拟节点

3. サーバーレス ECI でポッドを実行する (CPU/GPU タスク)

方法 1:ポッドのラベルを構成し、ラベル alibabacloud.com/eci=true をポッドに追加すると、ポッドはサーバーレス ECI モードで実行されます。この例では、GPU ECI インスタンスを使用して CUDA タスクを実行していますが、実際にサーバーレス操作を実装するために NVIDIA ドライバーとランタイムをインストールして構成する必要はありません。

a. ポッドを送信し、サーバーレス ECI を使用して実行します。

> cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
  labels:
    alibabacloud.com/eci: "true"  # 指定Pod使用Serverless ECI运行
  annotations:
    k8s.aliyun.com/eci-use-specs: ecs.gn5-c4g1.xlarge  # 指定支持的GPU规格,该规格具备1个NVIDIA P100 GPU
spec:
  restartPolicy: Never
  containers:
    - name: cuda-container
      image: acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/cuda10.2-vectoradd
      resources:
        limits:
          nvidia.com/gpu: 1 # 申请1个GPU
EOF

b. ポッドを確認する ポッドは仮想ノード virtual-kubelet 上で実行され、実際のバックグラウンドでは Alibaba Cloud Serverless ECI を使用して実行されます。

> kubectl get pod -o wide
NAME       READY   STATUS      RESTARTS   AGE     IP              NODE                               NOMINATED NODE   READINESS GATES
gpu-pod    0/1     Completed   0          5m30s   172.16.217.90   virtual-kubelet-cn-zhangjiakou-a   <none>           <none>

> kubectl logs gpu-pod
Using CUDA Device [0]: Tesla P100-PCIE-16GB
GPU Device has SM 6.0 compute capability
[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done

方法 2:名前空間ラベルを設定する

名前空間にラベル alibabacloud.com/eci=true を設定すると、名前空間内に新しく作成されたすべてのポッドがサーバーレス ECI モードで実行されます。

kubectl label namespace <namespace-name> alibabacloud.com/eci=true

4. マルチレベルの柔軟なスケジューリング

上記のデモでは、ポッドのラベルまたは名前空間を設定して、サーバーレス ECI でポッドを実行します。アプリケーションの実行中に IDC のノード リソースを使用して Pod を優先的に実行し、IDC リソースが不足したときに Alibaba Cloud Serverless ECI を使用して Pod を実行する場合。ACK One を使用して、クラスターのマルチレベル エラスティック スケジューリングを登録できます。ack-co-scheduler コンポーネントをインストールすることで、ResourcePolicy CR オブジェクトを定義し、マルチレベル エラスティック スケジューリング機能を使用できます。

ResourcePolicy CR は名前空間リソースであり、重要なパラメータ分析です。

  • selector: 同じ名前空間内のラベルで key1=value1 を持つ Pod に対して ResourcePolicy が動作することを宣言します。

  • Strategy: 戦略選択のスケジュール設定。現在は優先のみをサポートします。

  • 単位: ユーザー定義のスケジュール単位。アプリケーションがスケールアップすると、ユニット内のリソースの順序で実行するリソースが選択され、アプリケーションが縮小すると、逆の順序でスケールダウンされます。

    • resource: エラスティック リソースのタイプ。現在、idc、ecs、eci の 3 つのタイプをサポートしています。
    • nodeSelector: ノードのラベルを使用して、スケジューリング ユニットの下のノードを識別します。ecs リソースに対してのみ有効です。
    • max: このリソースのグループにデプロイされるインスタンスの最大数

次のように進めます。

  1. IDC 内のクラスター リソースの使用を優先するように ResourcePolicy CR を定義し、クラウド上のサーバーレス ECI リソースを使用します。
> cat << EOF | kubectl apply -f -
apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
  name: cost-balance-policy
spec:
  selector:
    app: nginx           // 选择应用Pod
  strategy: prefer
  units:
  - resource: idc        //优先使用idc指定使用IDC中节点资源
  - resource: eci        //当idc节点资源不足时,使用Serverless ECI
EOF
  1. アプリケーションのデプロイメントを作成し、2 つのコピーを開始します。各コピーには 2 つの CPU が必要です。
> cat << EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx
      annotations:
        addannotion: "true"
      labels:
        app: nginx      # 此处要与上一步创建的ResourcePolicy的selector相关联。
    spec:
      schedulerName: ack-co-scheduler
      containers:
      - name: nginx
        image: acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/nginx
        resources:
          requests:
            cpu: 2
          limits:
            cpu: 2
EOF
  1. 次のコマンドを実行して、アプリケーションのコピーを 4 つ展開します。IDC 内の K8s クラスターには 6CPU ノードが 1 つだけあり、最大 2 つの nginx ポッドを起動できます (システム リソースが予約されており、3 つのポッドは起動できません)。残りの 2 つのレプリカは、IDC ノードのリソースが不足した後、Alibaba Cloud Serverless ECI を自動的に使用してポッドを実行します。
kubectl scale deployment nginx --replicas 4
  1. ポッドの実行ステータスを確認します。IDC 内のノード上で 2 つのポッドが実行されており、仮想ノードを使用して Alibaba Cloud Serverless ECI 上で 2 つのポッドが実行されています。
> kubectl get pod -o widek get pod -o wideNAME                     READY   STATUS    RESTARTS   AGE     IP              NODE                      nginx-79cd98b4b5-97s47   1/1     Running   0          84s     10.100.75.22    iz8vb1xtnuu0ne6b58hvx0z   nginx-79cd98b4b5-gxd8z   1/1     Running   0          84s     10.100.75.23    iz8vb1xtnuu0ne6b58hvx0z   nginx-79cd98b4b5-k55rb   1/1     Running   0          58s     10.100.75.24    virtual-kubelet-cn-zhangjiakou-anginx-79cd98b4b5-m9jxm   1/1     Running   0          58s     10.100.75.25    virtual-kubelet-cn-zhangjiakou-a

要約する

この記事では、IDC の K8s クラスターが、ACK One 登録済みクラスターに基づいてサーバーレス ECI モードで Alibaba Cloud CPU および GPU コンピューティング リソースを使用して、ビジネス トラフィックの増大に対処する方法を紹介します。この方法は完全にサーバーレスであり、クラウド上のノードの追加の運用とメンテナンスを必要とせず、ポッドの実行時間に応じて課金されるため、柔軟で効率的です。

将来的には、災害復旧バックアップ、セキュリティ管理などを含む、ACK One 登録クラスターに関する一連の記事を開始する予定です。DingTalk グループ アカウントを検索してご参加ください。(グループ番号: 35688562)

参照文書:

[1] レジスタクラスタの概要

https://help.aliyun.com/document_detail/155208.html

[2] エラスティックコンテナECIを利用してクラスタを拡張する

https://help.aliyun.com/document_detail/164370.html

[3] ECIがサポートするインスタンスタイプ

https://help.aliyun.com/document_detail/451262.html

[4] マルチレベルの柔軟なスケジューリング

https://help.aliyun.com/document_detail/446694.html

ACK Oneの商品詳細こちら

おすすめ

転載: blog.csdn.net/alisystemsoftware/article/details/131875034