|
Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado. |
Balanceo Automático de Máquinas Virtuales (Experimental)
|
balanceo-automático-de-máquinas-virtuales es un complemento experimental. Para más información sobre características experimentales, consulta Etiquetas de Características. |
El complemento balanceo-automático-de-máquinas-virtuales permite a SUSE Virtualization utilizar el Descheduler de Kubernetes para el reequilibrio de las cargas de trabajo de las máquinas virtuales. El Descheduler de Kubernetes optimiza la programación de cargas de trabajo desalojando pods que no están colocados de manera óptima según las políticas definidas por el administrador. Esta función crucial mejora la utilización de recursos, equilibra las cargas de trabajo entre nodos y mejora el rendimiento general del clúster.
Habilitando el complemento
Cuando se habilita, el complemento despliega el Descheduler en el espacio de nombres kube-system y una configuración relacionada en el ConfigMap kube-system/descheduler. Solo puedes habilitar el complemento cuando el clúster tiene más de un nodo.
-
En la interfaz de usuario SUSE Virtualization, ve a Complementos Avanzados →.
-
Selecciona descheduler (Experimental), y luego selecciona ⋮ → Habilitar.
Políticas del Descheduler
La configuración contiene los siguientes complementos:
-
DefaultEvictor: Proporciona una configuración común de desalojo a nivel superior. -
LowNodeUtilization: Monitorea el uso de recursos de los nodos y desaloja pods de nodos sobreutilizados a nodos infrautilizados según los umbrales definidos.
Con la configuración predeterminada, el Descheduler solo desaloja pods de máquinas virtuales.
Personalizando las políticas del Descheduler
Selecciona ⋮ → Editar YAML para personalizar las políticas del Descheduler según tus requisitos. La configuración se define en formato YAML.
- apiVersion: harvesterhci.io/v1beta1
kind: Addon
metadata:
name: descheduler
namespace: kube-system
labels:
addon.harvesterhci.io/displayName: "virtual-machine-auto-balance"
addon.harvesterhci.io/experimental: "true"
spec:
repo: http://harvester-cluster-repo.cattle-system.svc/charts
version: << .DESCHEDULER_CHART_VERSION >>
chart: descheduler
{{- if and .Addons .Addons.descheduler }}
enabled: {{ .Addons.descheduler.Enabled }}
{{- else }}
enabled: false
{{- end }}
valuesContent: |
kind: Deployment
image:
repository: registry.k8s.io/descheduler/descheduler
pullPolicy: IfNotPresent
deschedulingInterval: 5m
replicas: 1
cmdOptions:
v: 3
feature-gates: EvictionsInBackground=true
deschedulerPolicy:
maxNoOfPodsToEvictPerNode: 5
profiles:
- name: default
pluginConfig:
- name: DefaultEvictor
args:
nodeFit: true
ignorePvcPods: false
evictLocalStoragePods: true
labelSelector:
matchExpressions:
- key: "kubevirt.io"
operator: "In"
values:
- "virt-launcher"
- name: LowNodeUtilization
args:
evictableNamespaces:
exclude:
- cattle-dashboards
- cattle-fleet-clusters-system
- cattle-fleet-local-system
- cattle-fleet-system
- cattle-logging-system
- cattle-monitoring-system
- cattle-provisioning-capi-system
- cattle-system
- fleet-local
- harvester-system
- kube-system
- local
- longhorn-system
thresholds:
cpu: 30
memory: 30
targetThresholds:
cpu: 50
memory: 50
plugins:
balance:
enabled:
- LowNodeUtilization
-
deschedulingInterval: Con qué frecuencia se ejecuta el Descheduler. El valor por defecto es5m(5 minutos). -
maxNoOfPodsToEvictPerNode: Número máximo de pods que pueden ser desalojados durante un único ciclo de desprogramación. El valor por defecto es5. -
evictableNamespaces.exclude: Espacios de nombres que se deben excluir del desalojo. Por defecto, los espacios de nombres del sistema están excluidos para proteger componentes críticos del sistema. -
targetThresholds: Límite superior de utilización para los recursos monitorizados. Los nodos cuya utilización exceda este umbral se marcan como sobreutilizados, lo que desencadena el desalojo de pods para reducir su carga. Los valores por defecto se aplican automáticamente para CPU (50) y memoria (50), pero puedes definir valores para otros recursos monitorizados. -
thresholds: Límite inferior de utilización para los recursos monitorizados. Los pods desalojados de nodos sobreutilizados se reprograman solo en nodos cuya utilización esté actualmente por debajo de este umbral. Los valores por defecto se aplican automáticamente para CPU (30) y memoria (30), pero puedes definir valores para otros recursos monitorizados.
Deshabilitando el complemento
-
En la interfaz de usuario SUSE Virtualization, ve a Complementos Avanzados →.
-
Selecciona descheduler (Experimental), y luego selecciona ⋮ → Deshabilitar.
Uso del nodo
Consulta los registros del Descheduler para obtener información sobre el uso del nodo.
> kubectl logs -n kube-system -l app.kubernetes.io/name=descheduler -f
I1209 02:06:21.067225 1 lownodeutilization.go:210] "Node has been classified" category="underutilized" node="hp-131-tink-system" usage={"cpu":"4583m","memory":"3075Mi","pods":"25"} usagePercentage={"cpu":20,"memory":2,"pods":13}
I1209 02:06:21.067328 1 lownodeutilization.go:210] "Node has been classified" category="underutilized" node="hp-121-tink-system" usage={"cpu":"5198m","memory":"4023Mi","pods":"30"} usagePercentage={"cpu":23,"memory":3,"pods":15}
I1209 02:06:21.067355 1 lownodeutilization.go:210] "Node has been classified" category="overutilized" node="hp-119-tink-system" usage={"cpu":"10490m","memory":"109333705514","pods":"81"} usagePercentage={"cpu":46,"memory":81,"pods":41}
Solución de problemas
El Descheduler trabaja con pods en lugar de máquinas virtuales. Si una máquina virtual que esperas que sea desalojada no lo es, consulta los registros del Descheduler.
Ejemplo:
> kubectl logs -n kube-system -l app.kubernetes.io/name=descheduler -f
I1209 02:06:21.068059 1 defaultevictor.go:228] "pod does not fit on any other node because of nodeSelector(s), Taint(s), or nodes marked as unschedulable" pod="default/virt-launcher-vm-3-w866s"
En este ejemplo, la máquina virtual fue migrada manualmente, por lo que la especificación del pod relacionado contiene un selector de nodo restrictivo. El Descheduler no puede desalojar este pod porque el selector de nodo impediría que el pod se ejecute con éxito en cualquier otro nodo disponible en el clúster.