Ce document a été traduit à l'aide d'une technologie de traduction automatique. Bien que nous nous efforcions de fournir des traductions exactes, nous ne fournissons aucune garantie quant à l'exhaustivité, l'exactitude ou la fiabilité du contenu traduit. En cas de divergence, la version originale anglaise prévaut et fait foi.

Équilibrage automatique de machine virtuelle (Expérimental)

équilibrage-automatique-de-machine-virtuelle est un produit complémentaire expérimental. Pour plus d’informations sur les fonctionnalités expérimentales, consultez Étiquettes de Fonctionnalités.

Le produit complémentaire équilibrage-automatique-de-machine-virtuelle permet à SUSE Virtualization d’utiliser le Kubernetes Descheduler pour le rééquilibrage des charges de travail des machines virtuelles. Le Kubernetes Descheduler optimise la planification des charges de travail en évacuant les pods qui ne sont pas placés de manière optimale selon les politiques définies par l’administrateur. Cette fonction cruciale améliore l’utilisation des ressources, équilibre les charges de travail entre les nœuds et améliore la performance globale du cluster.

Activation du produit complémentaire

Lorsqu’il est activé, le produit complémentaire déploie le Kubernetes Descheduler dans l’espace de noms kube-system et une configuration associée dans le ConfigMap kube-system/descheduler. Vous pouvez activer le produit complémentaire uniquement lorsque le cluster possède plus d’un nœud.

  1. Sur l’interface SUSE Virtualization, allez dans Produits complémentaires avancés →.

  2. Sélectionnez Kubernetes Descheduler (Expérimental), puis sélectionnez ⋮ → Activer.

Politiques du Kubernetes Descheduler

La configuration contient les plugins suivants :

  • DefaultEvictor : Fournit une configuration d’éviction commune au niveau supérieur.

  • LowNodeUtilization : Surveille l’utilisation des ressources des nœuds et évacue les pods des nœuds surutilisés vers ceux sous-utilisés en fonction des seuils définis.

Avec la configuration par défaut, le Kubernetes Descheduler n’évacue que les pods de machines virtuelles.

Personnalisation des politiques du Kubernetes Descheduler

Sélectionnez ⋮ → Modifier YAML pour personnaliser les politiques du Kubernetes Descheduler selon vos besoins. La configuration est définie au format 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 : À quelle fréquence le Kubernetes Descheduler s’exécute. La valeur par défaut est de 5m (5 minutes).

  • maxNoOfPodsToEvictPerNode : Nombre maximum de pods pouvant être évacués lors d’un cycle de déséchelonnement unique. La valeur par défaut est 5.

  • evictableNamespaces.exclude : Espaces de noms à exclure de l’éviction. Par défaut, les espaces de noms système sont exclus pour protéger les composants critiques du système.

  • targetThresholds : Limite supérieure d’utilisation pour les ressources surveillées. Les nœuds dont l’utilisation dépasse ce seuil sont marqués comme surutilisés, déclenchant l’éviction de pods pour réduire leur charge. Les valeurs par défaut sont automatiquement appliquées pour l’UC (50) et la mémoire (50), mais vous pouvez définir des valeurs pour d’autres ressources surveillées.

  • thresholds : Limite inférieure d’utilisation pour les ressources surveillées. Les pods évacués des nœuds surutilisés ne sont replanifiés que sur des nœuds dont l’utilisation est actuellement inférieure à ce seuil. Les valeurs par défaut sont automatiquement appliquées pour l’UC (30) et la mémoire (30), mais vous pouvez définir des valeurs pour d’autres ressources surveillées.

Désactivation du produit complémentaire

  1. Sur l’interface SUSE Virtualization, allez dans Produits complémentaires avancés →.

  2. Sélectionnez Kubernetes Descheduler (Expérimental), puis sélectionnez ⋮ → Désactiver.

Utilisation des nœuds

Vérifiez les journaux du Kubernetes Descheduler pour obtenir des informations sur l’utilisation des nœuds.

> 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}

Dépannage

Le Kubernetes Descheduler fonctionne sur des pods au lieu de machines virtuelles. Si une machine virtuelle que vous vous attendez à voir évacuée ne l’est pas, vérifiez les journaux du Kubernetes Descheduler.

Exemple :

> 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"

Dans cet exemple, la machine virtuelle a été migrée manuellement, donc la spécification du pod associé contient un sélecteur de nœud restrictif. Le Kubernetes Descheduler ne peut pas évacuer ce pod car le sélecteur de nœud empêcherait le pod d’être exécuté avec succès sur tout autre nœud disponible dans le cluster.