0
votes

Kubectl applique le déploiement au groupe de nœuds spécifié - AWS EKS

J'ai créé plusieurs piles (groupes de nœuds) dans mon cluster EKS , et chaque groupe s'exécute sur un type d'instance différent (par exemple, un groupe s'exécute sur des instances GPU). J'ai ajouté une entrée dans mapRoles du fichier aws-auth-cm.yaml pour chacun des groupes de nœuds. Maintenant, je voudrais déployer certains déploiements sur un autre. Les fichiers de déploiement ressemblent à ceci:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-1
spec:
  replicas: 1
  selector:
    matchLabels:
      component: component-1
  template:
    metadata:
      labels:
        component: component-1
    spec:
      containers:
        - name: d1
          image: docker-container
          ports:
            - containerPort: 83

La documentation montre que je peux exécuter la commande standard kubectl apply . Existe-t-il un moyen de spécifier le groupe? Peut-être quelque chose comme

kubectl apply -f server-deployment.yaml -group node-group-1


0 commentaires

3 Réponses :


2
votes

Malheureusement, quelque chose que vous avez mentionné n'existe pas, mais vous pouvez lire sur Affinity et cela devrait résoudre votre problème.

TL; DR vous devez ajouter des étiquettes ou utiliser des étiquettes existantes sur les nœuds et utiliser ces étiquettes pour attribuer des pods aux nœuds corrects.

En supposant que vous ayez l'étiquette beta.kubernetes.io/instance-type=highmem

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-1
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: beta.kubernetes.io/instance-typ
            operator: In
            values:
            - highmem
  replicas: 1
  selector:
    matchLabels:
      component: component-1
  template:
    metadata:
      labels:
        component: component-1
    spec:
      containers:
        - name: d1
          image: docker-container
          ports:
            - containerPort: 83


0 commentaires

1
votes

Vous pouvez utiliser des teintes et des tolérances pour vous assurer que vos pods se retrouvent sur les bons nœuds. Lorsque vous avez des nœuds hétérogènes, c'est une bonne pratique.

Par exemple, dans mon déploiement, nous avons 2 classes de nœuds, ceux qui ont un SSD NVMe attaché et ceux qui n'en ont pas. Ils sont tous deux souillés différemment et les déploiements qui s'exécutent en haut spécifient des tolérances qui garantissent qu'ils ne se retrouvent que sur les nœuds qui ont cette souillure particulière.

Par exemple, le nœud aurait:

spec:
    tolerations:
    - effect: NoSchedule
      key: role
      operator: Equal
      value: gpu-instance

et un pod qui doit planifier sur l'un de ces nœuds doit avoir:

spec:
    ...
    taints:
    - effect: NoSchedule
      key: role
      value: gpu-instance

Une fois que vous avez cette configuration, vous pouvez simplement faire une kubectl apply régulière et les pods seront correctement ciblés sur les nœuds. Notez qu'il s'agit d'une approche plus flexible que les sélecteurs de nœuds et les étiquettes, car elle peut vous offrir un contrôle plus fin et un comportement d'éviction configurable.


2 commentaires

si cette approche est adoptée, rien ne doit être spécifié dans le fichier yaml de déploiement?


Vous devez spécifier la tolérance sous le modèle de pod dans le déploiement YAML.



0
votes

nodeSelector devrait également fonctionner pour cela, tant que vous avez étiqueté vos nœuds

Exemples et plus d'informations ici: https://eksworkshop.com/beginner/140_assigning_pods/node_selector/ et ici https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector


0 commentaires