¿Cómo utiliza el clúster K8s en el IDC local los recursos de computación en la nube sin servidor?

Autor: Zhuang Yu

En el artículo anterior "Cómo agregar rápidamente la capacidad elástica de la nube a los K8 autoconstruidos en respuesta al tráfico de ráfagas" , presentamos cómo agregar nodos de la nube al clúster de K8 en IDC para hacer frente al crecimiento del tráfico comercial, utilizar de manera flexible los recursos de la nube a través de la programación elástica de varios niveles y aumentar la tasa de utilización y reducir los costos de la nube a través del escalado elástico automático.

Este método de agregar nodos directamente es adecuado para escenarios que requieren nodos de configuración personalizados (tiempo de ejecución, kubelet, NVIDIA, etc.) y especificaciones específicas de instancias de ECS. Al mismo tiempo, este método significa que debe mantener el grupo de nodos en la nube usted mismo.

Si no desea mantener el grupo de nodos en la nube, puede elegir el método sin servidor para usar la instancia de contenedor elástico ECI de Alibaba Cloud para ejecutar el Pod comercial y usar los recursos de CPU/GPU en la nube de manera más eficiente y elástica.

descripción general

El uso de los recursos de CPU/GPU en la nube sin servidor todavía está dirigido al problema de que el clúster K8s en el IDC tiene una elasticidad insuficiente, que no puede satisfacer el rápido crecimiento de los negocios, el crecimiento periódico de los negocios y el tráfico comercial repentino.

A través del método sin servidor, los pods comerciales se pueden enviar directamente en el clúster K8s, y los pods se ejecutarán utilizando instancias de contenedores elásticos ECI de Alibaba Cloud. Las instancias de contenedores elásticos ECI se inician rápidamente y son consistentes con el ciclo de vida de los pods comerciales, y se facturan de acuerdo con el tiempo de ejecución de los pods. Por lo tanto, no es necesario crear nodos de nube para el clúster K8s en el IDC, no es necesario planificar la capacidad de los recursos de la nube y no es necesario esperar a que se cree el ECS, lo que logra una elasticidad extrema y ahorra costos de mantenimiento y operación de nodos.

El clúster K8s en IDC utiliza recursos de CPU/GPU en la nube sin servidor, lo que es adecuado para los siguientes escenarios comerciales:

  • Escalado elástico de picos y valles en negocios en línea: industrias como la educación en línea y el comercio electrónico tienen características obvias de cálculo de picos y valles. El uso de Serverless ECI puede reducir significativamente el mantenimiento de los grupos de recursos fijos y reducir los costos informáticos.
  • Informática de datos: utilice ECI sin servidor para alojar escenarios informáticos como Spark, Presto y ArgoWorkflow, y facture según el tiempo de ejecución del Pod, lo que reduce de forma eficaz los costes informáticos.
  • Canalización de CI/CD: Jenkins, Gitlab-Runner.
  • Tareas laborales: tareas cronometradas, IA.

inserte la descripción de la imagen aquí

Demostración: el clúster K8s en IDC utiliza recursos de la nube en modo sin servidor

1. Requisitos previos

El clúster de máquinas registradas ACK One se ha conectado al clúster K8s en IDC, consulte "Elija el método correcto, la administración de múltiples clústeres K8s no es tan difícil" .

2. Instale el componente ack-virtual-node

Registre la consola del clúster a través de ACK One para instalar el componente ack-virtual-node.Después de instalar el componente, verifique el grupo de nodos del clúster a través del kubeconfig del clúster registrado. virtual-kubelet es un nodo virtual conectado a 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. Ejecute pods con ECI sin servidor (tareas de CPU/GPU)

Método 1: configure la etiqueta del pod, agregue la etiqueta alibabacloud.com/eci=true al pod y el pod se ejecutará en el modo ECI sin servidor. En el ejemplo, la instancia GPU ECI se usa para ejecutar la tarea CUDA. No necesita instalar y configurar el controlador y el tiempo de ejecución de NVIDIA para implementar verdaderamente la operación sin servidor.

a. Envíe el Pod y ejecútelo usando Serverless 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. Verifique el pod. El pod se ejecuta en el nodo virtual virtual-kubelet, y el fondo real usa Alibaba Cloud Serverless ECI para ejecutarse.

> 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

Método 2: establecer la etiqueta del espacio de nombres

Establezca la etiqueta alibabacloud.com/eci=true para el espacio de nombres y todos los pods recién creados en el espacio de nombres se ejecutarán en el modo ECI sin servidor.

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

4. Programación flexible de varios niveles

En la demostración anterior, ejecutamos el Pod con Serverless ECI configurando la etiqueta del Pod o el espacio de nombres. Si espera usar los recursos del nodo en el IDC para ejecutar Pods preferentemente durante la ejecución de la aplicación, y luego use Alibaba Cloud Serverless ECI para ejecutar los Pods cuando los recursos del IDC sean insuficientes. Puede utilizar ACK One para registrar la programación elástica multinivel del clúster. Al instalar el componente ack-co-scheduler, puede definir el objeto ResourcePolicy CR y utilizar la función de programación elástica multinivel.

ResourcePolicy CR es un recurso de espacio de nombres, análisis de parámetros importantes:

  • selector: declara que ResourcePolicy actúa en el Pod con key1=value1 en la etiqueta en el mismo espacio de nombres

  • estrategia: selección de estrategia de programación, actualmente solo admite preferencia

  • unidades: unidades de programación definidas por el usuario. Cuando la aplicación se amplía, los recursos se seleccionarán para ejecutarse en el orden de los recursos en unidades; cuando la aplicación se reduce, se reducirá en orden inverso

    • recurso: el tipo de recurso elástico, actualmente admite idc, ecs y eci tres tipos
    • nodeSelector: use la etiqueta del nodo para identificar los nodos bajo la unidad de programación, solo válido para recursos ecs
    • max: el número máximo de instancias implementadas en este grupo de recursos

Proceder de la siguiente:

  1. Defina ResourcePolicy CR para dar prioridad al uso de los recursos del clúster en el IDC y luego use los recursos de Serverless ECI en la nube.
> 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. Cree una implementación de aplicación, inicie 2 copias y cada copia requiere 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. Ejecute el siguiente comando para expandir 4 copias de la aplicación. El clúster K8s en el IDC tiene solo un nodo de 6 CPU y se pueden iniciar un máximo de 2 pods nginx (los recursos del sistema están reservados y no se pueden iniciar 3 pods). Las dos réplicas restantes usan automáticamente Alibaba Cloud Serverless ECI para ejecutar Pods después de que los recursos del nodo IDC son insuficientes.
kubectl scale deployment nginx --replicas 4
  1. Compruebe el estado de ejecución de los pods. Dos pods se ejecutan en nodos en IDC y dos pods se ejecutan en Alibaba Cloud Serverless ECI utilizando nodos virtuales.
> 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

Resumir

Este artículo presenta cómo el clúster K8s en IDC puede usar los recursos informáticos de CPU y GPU de Alibaba Cloud en modo ECI sin servidor basado en el clúster registrado ACK One para hacer frente al crecimiento del tráfico comercial. Este método es completamente sin servidor, no requiere operación y mantenimiento adicional de nodos en la nube y se factura de acuerdo con el tiempo de funcionamiento del Pod, que es flexible y eficiente.

En el futuro, lanzaremos una serie de artículos sobre clústeres registrados en ACK One, que incluyen: respaldo de recuperación ante desastres, administración de seguridad, etc. Bienvenido a unirse a nosotros buscando en la cuenta del grupo DingTalk. (Número de grupo: 35688562)

Documentos de referencia:

[1] Descripción general del clúster de registros

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

[2] Use ECI de contenedor elástico para expandir el clúster

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

[3] Tipos de instancias compatibles con ECI

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

[4] Programación flexible de varios niveles

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

Haga clic aquí para ver más detalles del producto ACK One

Supongo que te gusta

Origin blog.csdn.net/alisystemsoftware/article/details/131875034
Recomendado
Clasificación