Asociación de varias VNIC secundarias para redes de pod

Descubra cómo conectar y configurar varias VNIC secundarias en nodos de trabajador para redes de pod mediante Kubernetes Engine (OKE). Puede fijar un pod a un único perfil de VNIC secundario mediante un recurso de aplicación o conectar varias interfaces de pod mediante Multus y NetworkAttachmentDefinitions (NAD).

La asociación de varias VNIC secundarias a nodos de trabajador permite segmentar la red de pods entre diferentes subredes y controles de seguridad (por ejemplo, pods front-end en una VNIC/subred/NSG secundaria y pods backend en otro). Cada perfil de VNIC secundario se configura con su propio pool de direcciones IP de pod (controladas por ipCount) y valores de red (como subred y NSG). Opcionalmente, puede asociar un perfil de VNIC secundario a un nombre de Recurso de aplicación para que las cargas de trabajo puedan seleccionar ese perfil de forma explícita.

Si define recursos de aplicación en perfiles de VNIC secundarios, Kubernetes Engine expone esos recursos de aplicación en cada nodo como Recursos ampliados de Kubernetes (por ejemplo, oke-application-resource.oci.oraclecloud.com/<resource-name>), con capacidad de nodo que refleja cuántas IP de pod están disponibles en el perfil de VNIC secundario correspondiente.

Los pods pueden utilizar los recursos de aplicación de la siguiente forma:

  • Un pod puede solicitar un recurso de aplicación único (mediante una solicitud/límite de recurso ampliado) cuando desea que ese pod seleccione un perfil/interfaz de VNIC secundario.

  • Los nodos que exponen los recursos de aplicación están contaminados (con el tinte oci.oraclecloud.com/application-resource-only:NoSchedule) para que los pods que no solicitan explícitamente un recurso de aplicación no se programen en estos nodos. Los pods deben incluir una tolerancia de coincidencia.

  • La programación debe satisfacer el recurso de aplicación solicitado (el nodo debe tener suficiente capacidad para el recurso ampliado solicitado).

  • Si no necesita la fijación aplicada por el programador a un perfil de VNIC secundario específico, no defina un recurso de aplicación en los perfiles de VNIC. Los pod que requieren interfaces adicionales deben utilizar Multus y NetworkAttachmentDefinitions (NAD) para conectar esas interfaces.

El uso de varias VNIC secundarias para redes de pod solo está soportado con el plugin CNI de red de pod nativo de VCN de OCI. No se admiten varias VNIC secundarias para redes de pod cuando se utiliza el plugin flannel CNI para redes de pod. Los límites de VNIC de unidad de computación, la disponibilidad de subred/IP y los límites de reglas de NSG aún se aplican.

Cuando un pod solicita un recurso de aplicación, la programación de pod continúa de la siguiente manera:

  1. Puede crear un pod que solicite un único recurso de aplicación (opcional: solo si desea que el pod se asocie a un perfil de VNIC secundario seleccionable).

  2. La validación de admisión comprueba la especificación del pod, incluyendo si el recurso de aplicación solicitado y la cantidad solicitada son válidos.

  3. El programador de Kubernetes selecciona un nodo que tiene capacidad para el recurso de aplicación solicitado y las IP disponibles en el perfil de VNIC secundario correspondiente.

  4. El plugin CNI de red de pod nativo de VCN de OCI asigna una dirección IP al pod desde el perfil de VNIC secundario seleccionado.

  5. El pod utiliza ese perfil/interfaz seleccionado como su ruta de red principal en este modelo de programación.

Antes de conectar varias VNIC secundarias para redes de pod, asegúrese de lo siguiente:

  • El cluster utiliza redes de pod nativas de VCN.

  • La VCN, las subredes y los NSG están planificados para la segmentación que desee (porque cada perfil de VNIC secundario puede apuntar a una subred y una política de seguridad diferentes).

  • La unidad de computación utilizada para los nodos de trabajador admite el número necesario de asociaciones de VNIC y la densidad de pod esperada.

  • Si necesita pods de varias interfaces, confirme que Multus está desplegado y que los plugins de CNI necesarios están presentes en los nodos de trabajador, y confirme la versión de plugin de CNI nativo de VCN de OCI necesaria para el soporte de varias interfaces en su entorno.

Nota

No combine las anotaciones de red de pod de Multus con solicitudes de recurso de aplicación de nivel de pod en la misma especificación de pod, ya que esto puede crear conflictos de programación y selección de interfaz. Si un pod de varias interfaces necesita seleccionar perfiles de VNIC secundarios específicos, defina esa selección en la configuración de NAD en lugar de utilizar una solicitud de recurso de aplicación de nivel de pod. Por ejemplo, utilice un campo deviceSelector, como deviceSelector.appResource o deviceSelector.interfaceName.

  • Puede conectar varias VNIC secundarias para redes de pod:

    • Al crear un nuevo pool de nodos (al crear un cluster nuevo o al escalar verticalmente un cluster existente).
    • Al actualizar un pool de nodos existente.

    En ambos casos, el tipo de red del cluster debe ser una red de pods nativa de VCN. La red de pods de varias interfaces con Multus también requiere la versión soportada del plugin CNI nativo de la VCN de OCI para su entorno.

    1. Siga las instrucciones para crear o actualizar un pool de nodos gestionado (consulte Creación de un pool de nodos gestionado o Actualización de un pool de nodos gestionado según corresponda).

    2. Al especificar detalles para el pool de nodos:
      1. Opcionalmente, utilice Tipo de inicio de red para seleccionar el tipo de inicio de red para la red de nodos de trabajador. Si no selecciona un valor, se utiliza PARAVIRTUALIZED como valor por defecto.

        En la mayoría de los casos, seleccione PARAVIRTUALIZED. Seleccione VFIO solo cuando la unidad y la imagen seleccionadas admitan redes SR-IOV asistidas por hardware y la carga de trabajo lo requiera. Seleccione E1000 solo cuando sea necesario para la compatibilidad con una imagen o carga de trabajo que no soporta redes paravirtualizadas. El soporte para cada tipo de inicio depende de la unidad de computación y la imagen seleccionadas.

      2. Seleccione Configurar VNIC secundarias para nodos y especifique los detalles para el primer perfil de VNIC secundaria de la siguiente manera:
        • Nombre mostrado de asociación de VNIC: opcional. Especifique un nombre mostrado para la asociación de VNIC. El nombre mostrado ayuda a identificar esta asociación de VNIC en la configuración del pool de nodos.

        • VNIC Display Name (Nombre mostrado de VNIC): opcional. Especifique un nombre mostrado para la VNIC. El nombre mostrado ayuda a identificar la VNIC en los recursos de redes y recursos informáticos.

        • Índice NIC: opcional. Especifique la NIC física que se utilizará para esta asociación de VNIC. Esta opción se suele utilizar en unidades con hardware dedicado cuando desea colocar VNIC en NIC físicas específicas, por ejemplo, para alinear el tráfico de carga de trabajo con el ancho de banda de NIC disponible. Si no especifica un valor, el motor de Kubernetes utiliza la ubicación por defecto para la unidad y configuración seleccionadas.

        • Compartimento de subred de VNIC: especifique el compartimento que contiene la subred para esta VNIC.

        • Subred de VNIC: especifique la subred para esta VNIC. La subred determina la red, la tabla de rutas, las reglas de seguridad y la familia de direcciones IP disponibles para la VNIC. Para las redes de pod, seleccione una subred que tenga suficientes direcciones IP disponibles para el número de IP de pod que desea asignar.

        • Asignar IP pública a VNIC: opcional. Especifique si desea asignar una dirección IPv4 pública a esta VNIC. Esta configuración se aplica solo a la VNIC. Las direcciones IP públicas no se asignan a los pods, independientemente de si la VNIC está en una subred pública o en una subred privada. En la mayoría de los diseños de redes de pod, deje esta opción sin seleccionar. Seleccione esta opción solo si la subred es pública y tiene un requisito específico para que la VNIC tenga una dirección IP pública. Asegúrese de que las tablas de rutas y las reglas de seguridad restringen el acceso correctamente.

        • Asignar dirección IPv6 a VNIC: opcional. Especifique si se debe asignar una dirección IPv6 a esta VNIC. Esta opción solo se aplica si la subred seleccionada admite IPv6.

        • Omitir comprobación de origen/destino: opcional. Especifique si se deben omitir las comprobaciones de origen/destino para esta VNIC. Active esta opción solo para los casos de uso de enrutamiento, reenvío o NAT en los que la VNIC debe enviar o recibir tráfico que no se dirige a una de sus propias direcciones IP.

        • Nº de direcciones IP: especifique el número de direcciones IP de pod que asignar para este perfil de VNIC secundario (ipCount). La combinación de ipCount en todos los perfiles de VNIC secundarios configurados en un nodo puede ser de hasta 256. Asigne un tamaño a este valor con suficiente margen de maniobra para la densidad de pod esperada y considere la capacidad de la subred y los límites de VNIC de unidad de computación.

        • Recursos de aplicación: opcional. Seleccione Agregar recurso de aplicación para agregar un nombre de recurso de aplicación a este perfil de VNIC secundario. Utilice los recursos de aplicación cuando desee que las cargas de trabajo seleccionen este perfil de VNIC explícitamente. Kubernetes Engine expone los recursos de aplicación como recursos ampliados de Kubernetes en los nodos, y un pod puede solicitar un recurso de aplicación para fijar el pod a un perfil seleccionado. Cada pod solo puede solicitar un recurso de aplicación en el modelo de programación a nivel de pod. Si no necesita pods para seleccionar un perfil específico, no defina los recursos de aplicación. Para los pods de varias interfaces que utilizan Multus y NetworkAttachmentDefinitions (NAD), defina la selección de interfaz en la configuración de NAD en lugar de utilizar solicitudes de recursos de aplicación de nivel de pod.

        • Grupo de Seguridad de Red: Opcional. Seleccione Agregar grupo de seguridad de red para asociar uno o más NSG a esta VNIC. Utilice los NSG para controlar el tráfico hacia y desde la VNIC. Aplique reglas con el mínimo de privilegios para que solo se permita el tráfico necesario para la carga de trabajo.

        • Etiquetas de VNIC: opcionales. Seleccione Agregar etiqueta para agregar una o más etiquetas de formato libre o etiquetas definidas a la VNIC. Utilice etiquetas para organizar, realizar un seguimiento y gestionar recursos de VNIC según su estrategia de etiquetado.

    3. Si desea utilizar varios perfiles de VNIC secundaria, seleccione Agregar VNIC e introduzca los detalles de uno o más perfiles de VNIC secundaria adicionales.
  • Puede especificar varias VNIC secundarias para redes de pod al crear o actualizar pools de nodos gestionados. Por ejemplo, mediante el comando oci ce node-pool create, de la siguiente manera (abreviado para facilitar la lectura):

    oci ce node-pool create \
      ... \
      --secondary-vnics '[
        {
          "createVnicDetails": {
            "ipCount": 16,
            "applicationResources": ["ResourceC"],
            "subnetId": "...",
            "assignPublicIp": false
          }
        },
        {
          "createVnicDetails": {
            "ipCount": 16,
            "applicationResources": ["ResourceD"],
            "subnetId": "...",
            "assignPublicIp": false
          }
        }
      ]'

    Para obtener información sobre el uso de la CLI, consulte Interfaz de línea de comandos (CLI). Para obtener una lista completa de los indicadores y las opciones disponibles para los comandos de la CLI, consulte Referencia de la línea de comandos.

  • Puede especificar varias VNIC secundarias para redes de pod al crear o actualizar pools de nodos gestionados mediante las siguientes operaciones:

Despliegue de pods que utilizan varias VNIC secundarias

Al conectar varios perfiles de VNIC secundarios a un pool de nodos, puede desplegar cargas de trabajo de diferentes maneras según si desea que un pod utilice una ruta de red con un solo pin o utilice varias interfaces.

Opción 1: Anclar un pod a un único perfil de VNIC secundario mediante un recurso de aplicación

Utilice esta opción cuando un nodo muestre varios perfiles de VNIC secundarios seleccionables y se deba anclar una carga de trabajo a exactamente uno de ellos.

Paso 1: Verificar los nombres de recursos ampliados y la capacidad en un nodo

Después de que el pool de nodos tenga nodos de trabajador, verifique los nombres y la capacidad del recurso ampliado en un nodo.

  1. Revise los recursos ampliados anunciados del nodo:

    kubectl describe node <node-name>
  2. En la sección Capacity de la salida, identifique los recursos ampliados que corresponden a los recursos de aplicación (por ejemplo, oke-application-resource.oci.oraclecloud.com/frontend) y confirme que tienen una capacidad distinta de cero.
Paso 2: Agregue la tolerancia necesaria a la especificación de pod

Los nodos que exponen los recursos de aplicación están contaminados con oci.oraclecloud.com/application-resource-only:NoSchedule para evitar que los pods sin solicitudes explícitas de recursos de aplicación lleguen a ellos.

Agregue una tolerancia correspondiente a la especificación de pod (en spec.tolerations para un pod o en spec.template.spec.tolerations en un despliegue):

tolerations:
  - key: "oci.oraclecloud.com/application-resource-only"
    operator: "Exists"
    effect: "NoSchedule"

Sin esta tolerancia, el programador rechazará la colocación aunque exista capacidad de recursos.

Paso 3: Solicite exactamente un recurso ampliado (un recurso de aplicación por pod)

En la especificación del pod, solicite el recurso ampliado que corresponda al perfil de VNIC secundario que debe utilizar el pod (por ejemplo, en un despliegue en spec.template.spec.containers[].resources). Solicite y limite exactamente una unidad para que el programador reserve capacidad de forma coherente.

Por ejemplo:

containers:
  - name: myapp
    image: <image>
    resources:
      requests:
        oke-application-resource.oci.oraclecloud.com/frontend: "1"
      limits:
        oke-application-resource.oci.oraclecloud.com/frontend: "1"

Paso 4: (Opcional) Dirija los pools de nodos correctos

Si su organización utiliza una convención de etiqueta/selector de nodo para estos nodos (por ejemplo, gva_vnic: "yes"), inclúyala para que los pods no lleguen a pools de nodos que no tengan los recursos necesarios:

nodeSelector:
  gva_vnic: "yes"

Un nodeSelector es opcional cuando las solicitudes y tolerancias de recurso de aplicación ya restringen la programación. Utilice un nodeSelector solo si ha etiquetado los nodos de destino (por ejemplo, mediante etiquetas de Kubernetes del pool de nodos).

Paso 5: Verificar programación

Después del despliegue:

  1. Introduzca:
    kubectl get pods -o wide
  2. Para un pod de interés, introduzca:
    kubectl describe pod <pod-name>
  3. Confirme que el pod está en ejecución y que no hay errores de programación (por ejemplo, capacidad insuficiente para el recurso solicitado).

Opción 2: Utilizar varias interfaces en un pod (Multus + NAD)

Utilice esta opción cuando un pod deba conectarse a varias interfaces de red. En este modelo, Multus conecta interfaces de pod adicionales y los NAD definen qué interfaz de host (y, opcionalmente, qué perfil de VNIC secundario) debe usar cada interfaz de pod.

Nota

  • No combine anotaciones de red de pod de Multus con solicitudes de recurso de aplicación de nivel de pod en la misma especificación de pod.
  • Si necesita seleccionar por interfaz los perfiles de VNIC secundarios, defina esa selección en el NAD (por ejemplo, mediante deviceSelector).
Paso 1: Instale y verifique Multus (si aún no está instalado)

Instale Multus antes de crear NAD o desplegar pods de varias interfaces. Para obtener información sobre la instalación de Multus, consulte la documentación de Multus-CNI en GitHub.

Siga el proceso estándar de su organización para desplegar Multus y, a continuación, verifique que esté en buen estado:

kubectl get pod -l app=multus -n kube-system
Paso 2: Asegúrese de que los plugins de CNI necesarios están presentes en los nodos de trabajador

Los ejemplos de esta sección utilizan el plugin CNI ipvlan para la interfaz de pod adicional. Asegúrese de que el binario ipvlan esté presente en /opt/cni/bin/ipvlan en cada nodo de trabajador que pueda ejecutar pods de varias interfaces.

Oracle recomienda instalar el plugin ipvlan mediante un script cloud-init del pool de nodos para que el plugin se instale cuando se creen, sustituyan o escalen horizontalmente los nodos. Anclar el plugin a una versión validada para el entorno de destino, en lugar de seguir una ruta de descarga flotante. En el siguiente ejemplo se utiliza la versión v1.9.0.

Por ejemplo:

#!/bin/bash

CNI_VERSION="v1.9.0"
CNI_ARCH="amd64"
CNI_TARBALL="cni-plugins-linux-${CNI_ARCH}-${CNI_VERSION}.tgz"
CNI_URL="https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/${CNI_TARBALL}"
CNI_BIN_DIR="/opt/cni/bin"

wget --fail -O "/tmp/${CNI_TARBALL}" "${CNI_URL}" && \
  tar xvzf "/tmp/${CNI_TARBALL}" -C "${CNI_BIN_DIR}" && \
  rm -f "/tmp/${CNI_TARBALL}"

curl --fail -H "Authorization: Bearer Oracle" -L0 \
  http://169.254.169.254/opc/v2/instance/metadata/oke_init_script \
  | base64 --decode > /var/run/oke-init.sh

bash /var/run/oke-init.sh

Si los nodos de trabajador no pueden acceder a GitHub, almacene provisionalmente el archivo de plugins de CNI necesarios en OCI Object Storage u otra ubicación interna aprobada y actualice la URL de descarga en el script cloud-init.

Paso 3: Identificar los nombres de interfaz de host en un nodo de trabajador

Los NAD deben tener como destino los nombres de interfaz de host reales creados por las VNIC conectadas (por ejemplo, enp1s0, enp2s0). Verifíquelas en un nodo de trabajador mediante el método de acceso estándar de la organización.

Paso 4: Crear NAD que seleccionen interfaces específicas

Crear:

  • un NAD para la red de pod predeterminada (para controlar qué interfaz de host respalda eth0)
  • uno o más NAD para interfaces adicionales (por ejemplo, net1).

La configuración de NAD puede seleccionar un dispositivo mediante deviceSelector (por ejemplo, por interfaceName o por nombre de recurso de aplicación mediante appResource si está soportado en el entorno).

Los siguientes ejemplos de NAD utilizan intencionadamente diferentes espacios de nombres. oci-vcn-native-network se define en kube-system, mientras que ipvlan-network se define en default. Si la carga de trabajo se ejecuta en otro espacio de nombres, cree ipvlan-network en ese espacio de nombres o actualice la anotación de pod para hacer referencia al nombre de NAD totalmente cualificado.

NAD de red predeterminado fijado en enp1s0:

apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
  name: oci-vcn-native-network
  namespace: kube-system
spec:
  config: |
    {
      "name": "oci",
      "cniVersion": "0.3.1",
      "plugins": [
        {
          "cniVersion": "0.3.1",
          "type": "oci-ipvlan",
          "mode": "l2",
          "ipam": {
            "type": "oci-ipam",
            "deviceSelector": {
              "interfaceName": "enp1s0"
            }
          }
        },
        {
          "cniVersion": "0.3.1",
          "type": "oci-ptp",
          "containerInterface": "ptp-veth0",
          "mtu": 9000
        }
      ]
    }

Red secundaria NAD anclada a enp2s0:

apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
  name: ipvlan-network
  namespace: default
spec:
  config: |
    {
      "cniVersion": "0.3.1",
      "plugins": [
        {
          "type": "ipvlan",
          "mode": "l2",
          "master": "enp2s0",
          "ipam": {
            "type": "oci-ipam",
            "deviceSelector": {
              "interfaceName": "enp2s0"
            }
          }
        }
      ]
    }

El NAD por defecto utiliza los plugins oci-ipvlan y oci-ptp específicos de OCI porque esa interfaz participa en la ruta de red por defecto nativa de la VCN de OKE. El NAD adicional utiliza el plugin ipvlan estándar porque Multus está conectando una interfaz adicional en una NIC de host específica, mientras que OCI IPAM aún proporciona la asignación de IP compatible con la subred.

deviceSelector puede tener como destino interfaces con campos como:

{
  "appResource": "blue",
  "interfaceName": "enp2s0",
  "interfaceNamePrefix": "enp",
  "macAddress": "02:00:17:08:E3:07"
}

El bloque deviceSelector permite a OCI IPAM seleccionar la interfaz de destino o la VNIC utilizada para la asignación de IP de pod. Puede seleccionar un dispositivo mediante uno o varios de estos campos:

  • appResource: selecciona el perfil de VNIC de GVA por nombre de recurso de aplicación.

  • interfaceName: selecciona una interfaz de host específica, como enp1s0.

  • interfaceNamePrefix: selecciona una interfaz por prefijo, como enp.

  • macAddress: selecciona una interfaz por dirección MAC.

Cuando se define appResource en el selector de dispositivos NAD, el plugin IPAM de OCI utiliza ese recurso de aplicación para decidir qué perfil de VNIC de GVA debe proporcionar la dirección IP del pod y actuar como dispositivo principal para esa interfaz. Esto permite que diferentes NAD del mismo pod se asignen a diferentes perfiles de VNIC, por ejemplo:

  • NAD1 -> Application Resource: vnic-a

  • NAD2 -> Application Resource: vnic-b

  • NAD3 -> Application Resource: vnic-c

Si un pod utiliza los tres NAD, cada interfaz se puede conectar mediante el perfil de VNIC correspondiente.

En los ejemplos de nombre de interfaz que se muestran en este documento:

  • El NAD oci-vcn-native-network utiliza interfaceName: enp1s0, por lo que el IPAM de OCI asigna la IP de red por defecto del pod desde la interfaz enp1s0 del host.

  • El NAD ipvlan-network utiliza interfaceName: enp2s0 para que OCI IPAM asigne la IP de interfaz adicional desde la interfaz enp2s0 del host.

Esta es también la razón por la que el ejemplo de pod establece:

annotations:
  v1.multus-cni.io/default-network: kube-system/oci-vcn-native-network
  k8s.v1.cni.cncf.io/networks: default/ipvlan-network

La anotación v1.multus-cni.io/default-network garantiza que eth0 utiliza el NAD oci-vcn-native-network. Sin seleccionar explícitamente esa red por defecto, OCI IPAM puede asignar desde cualquier interfaz de host elegible, lo que hace que la interfaz de pod principal sea menos predecible. La configuración del NAD predeterminado garantiza que eth0 utilice la interfaz deseada y la mantiene aislada de la conexión de red adicional.

No combine estas anotaciones de pod de Multus con solicitudes de recurso de aplicación de nivel de pod en la misma especificación de pod. Si un pod de varias interfaces necesita la selección de VNIC de GVA, defina esa selección dentro de la configuración de NAD deviceSelector.appResource para cada interfaz en lugar de utilizar una solicitud de recurso de aplicación de nivel de pod.

Aplique los NAD:

kubectl apply -f oci-vcn-native-network-nad.yaml
kubectl apply -f ipvlan-network.yaml
Paso 5: Desplegar un pod de varias interfaces mediante anotaciones de Multus

Anote el pod para seleccionar el NAD de red predeterminado y conectar NAD de red adicionales, por ejemplo:

metadata:
  annotations:
    v1.multus-cni.io/default-network: kube-system/oci-vcn-native-network
    k8s.v1.cni.cncf.io/networks: default/ipvlan-network
Paso 6: Verificar varias interfaces
  1. Describa el pod y compruebe las anotaciones de estado de red de Multus (si están presentes):
    kubectl describe pod <pod-name>
  2. Si se permite en el entorno, ejecútelo en el pod e inspeccione las interfaces (por ejemplo, ifconfig o ip addr) para confirmar que el pod tiene las interfaces esperadas (eth0, net1, …) y las direcciones IP.

Opción 3: Uso de perfiles de VNIC secundarios sin recursos de aplicación

Si conecta varios perfiles de VNIC secundarios a un pool de nodos y no define recursos de aplicación, las solicitudes de recursos aplicadas por el programador no asocian los pods a un único perfil de VNIC secundario. Esta opción no requiere que los pods soliciten recursos ampliados. Los pod que requieren interfaces adicionales deben utilizar Multus y NetworkAttachmentDefinitions (NAD) para conectar esas interfaces.

Utilice este modelo cuando el objetivo sea ajustar el tamaño de la capacidad total de IP de pod, en lugar de fijar diferentes cargas de trabajo a diferentes perfiles mediante Application Resources. Para los pods de varias interfaces, defina la selección de interfaz en la configuración de NAD, por ejemplo, mediante deviceSelector.interfaceName o deviceSelector.appResource.

Configuración de kubelet max-pods en nodos de trabajador

En la mayoría de los casos, no es necesario que configure kubelet max-pods manualmente para pools de nodos que asocian varios perfiles de VNIC secundarios para redes de pod. Kubernetes Engine define el número máximo de pods por nodo en función de la capacidad de IP de pod disponible en el nodo.

Defina solo un valor max-pods personalizado si tiene un motivo específico para limitar la densidad de pod manualmente. Al seleccionar un valor, asegúrese de que no supere la capacidad de IP de pod disponible en el nodo.

Para verificar el límite de pod efectivo en el cluster, inspeccione los valores de capacidad/asignable informados del nodo (por ejemplo, kubectl describe node <node-name>) y confirme que la densidad de carga de trabajo configurada no excede la capacidad de IP de pod disponible.

Solución de problemas

Pods bloqueados en estado Pendiente

Los pods pueden permanecer en estado Pendiente por varios motivos. Las causas y soluciones comunes incluyen:

  • Causa: Capacidad insuficiente.

    Se produce cuando no hay IP de pod disponibles para el perfil de VNIC secundario seleccionado o cuando no hay capacidad suficiente para el recurso de aplicación solicitado (si el pod utiliza un recurso de aplicación para seleccionar un perfil de VNIC secundario específico).

    Solución: amplíe el pool de nodos, reduzca el número de pods o (para pods de varias interfaces) reduzca el número de asociaciones de red de pod adicionales.

  • Causa: Falta de tolerancia.

    Se produce cuando el pod no tiene la tolerancia necesaria para el mantenimiento de oci.oraclecloud.com/application-resource-only:NoSchedule en los nodos que exponen los recursos de aplicación.

    Solución: agregue la tolerancia que falta.

  • Causa: nombre de recurso incorrecto.

    Se produce cuando el pod solicita un recurso de aplicación (recurso ampliado) que no existe en los nodos de destino.

    Solución: compruebe que los nombres de los recursos de aplicación coincidan con la configuración del pool de nodos (casos y ortografía). Confirme los nombres de recursos disponibles en un nodo ejecutando kubectl describe node <node-name> y comprobando la sección Capacity.

  • Causa: la selección de nodos impide la programación.

    Se produce cuando el pod incluye una nodeSelector u otras restricciones de ubicación que excluyen todos los nodos que tienen la capacidad necesaria.

    Solución: compruebe que las etiquetas de nodo existen y coinciden exactamente, o elimine o ajuste las restricciones de selección de nodo.

Pod rechazado en el momento de la creación

Si la validación de admisión rechaza la creación de pod, utilice el mensaje de rechazo para corregir la especificación del pod. Entre los problemas comunes se incluyen la solicitud de combinaciones o cantidades no admitidas de recursos ampliados, o la especificación de solicitudes o límites que no coinciden con el patrón necesario para la configuración del cluster.

El pod de varias interfaces no obtiene las interfaces esperadas

Un pod de varias interfaces se puede crear correctamente, pero no tiene las interfaces de red, las direcciones IP o la asignación de interfaz a subred esperadas. Por ejemplo, es posible que el pod no tenga una interfaz net1, que la interfaz eth0 no utilice la red predeterminada prevista o que una interfaz adicional reciba una dirección IP de una subred diferente a la esperada.

Las causas comunes incluyen:

  • Multus no se está ejecutando en kube-system.

  • El plugin de CNI necesario, como ipvlan, no está presente en los nodos de trabajador.

  • El NAD hace referencia a un nombre de interfaz de host incorrecto.

  • La anotación de pod hace referencia al nombre o espacio de nombres NAD incorrecto.

  • La selección de interfaz se divide entre las solicitudes de recursos de aplicación de nivel de pod y la configuración de NAD.

Para resolver el problema, compruebe la configuración en el orden en que Kubernetes y Multus la utilizan: configuración de pool de nodos, componentes CNI necesarios en el nodo de trabajador, configuración de NAD y anotaciones de pod.

Confirme que Multus esté instalado y en ejecución, y que los plugins de CNI necesarios estén presentes en cada nodo de trabajador que pueda ejecutar la carga de trabajo. Compruebe que los nombres y espacios de nombres de NAD coincidan con las anotaciones de pod y que los valores deviceSelector del NAD coincidan con los nombres reales de interfaz de nodo de trabajador o los nombres de recurso de aplicación.

No combine solicitudes de recursos de aplicación de nivel de pod con anotaciones de red de pod de Multus en la misma especificación de pod. Si el pod necesita seleccionar perfiles de VNIC secundarios específicos, defina esa selección en la configuración de NAD.

Después de corregir la configuración, vuelva a crear el pod e inspeccione la anotación de estado de red de Multus y las interfaces dentro del pod. Confirme que el pod tiene las interfaces esperadas, como eth0 y net1, y que las direcciones IP se asignan desde las subredes previstas.

Instrucciones Óptimas

Al conectar varias VNIC secundarias para redes de pod, tenga en cuenta las siguientes mejores prácticas:

  • Decida si las cargas de trabajo necesitan una única ruta de red o varias interfaces de pod. Utilice Application Resources para asignar pods a un perfil de VNIC secundario específico cuando las cargas de trabajo deben tener como destino exactamente un perfil. Utilice Multus y NetworkAttachmentDefinitions (NAD) cuando los pods deben conectar varias interfaces.

  • Planifique primero la segmentación de la red (subredes/NSG/zonas de seguridad). Si utiliza recursos de aplicación, asigne cada recurso de aplicación al perfil de VNIC secundario, la subred y los NSG adecuados.

  • Ajuste el tamaño correcto de las asignaciones ipCount y mantenga el margen de maniobra para reducir los fallos de programación. Revise la capacidad de la subred y los límites de VNIC de unidad como parte de la planificación de capacidad.

  • Utilice una nomenclatura coherente para los recursos de aplicación y los nombres mostrados de VNIC. Si utiliza Multus, también utilice una nomenclatura coherente para los NAD y documente qué NAD selecciona qué interfaz de host o perfil de VNIC.

  • Supervisar la capacidad y el estado de programación. Si utiliza recursos de aplicación, supervise el uso de recursos de aplicación y alerte sobre fallos de programación y baja capacidad (por tipo de recurso). Si no utiliza recursos de aplicación, supervise el consumo general de IP de pod y los fallos de programación de pod para el pool de nodos.

  • Aplique el principio de privilegio mínimo a las reglas del NSG para permitir solo el tráfico de red mínimo necesario para que la carga de trabajo funcione y active los logs de flujo de VCN. No combine anotaciones de red de pod de Multus con solicitudes de recurso de aplicación de nivel de pod en la misma especificación de pod; si los pods de varias interfaces requieren la selección de perfil de VNIC, defina la selección en la configuración de NAD.