For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/containers-orchestration/managed-kubernetes/label-nodeaffinity-node-pools.md.

Déployer des applications sur des nœuds et des pools de nœuds spécifiques

Voir en Markdown

Découvrez comment déployer vos applications sur des nœuds et des pools de nœuds spécifiques, à l'aide de labels et de NodeAffinity, sur OVHcloud Managed Kubernetes

Objectif

Dans ce tutoriel, nous allons vous montrer comment déployer vos applications sur des Nodes et des Nodes Pools spécifiques, à l'aide des concepts Kubernetes labels et NodeAffinity, sur votre OVHcloud Managed Kubernetes Service.

L'exemple choisi ici tire parti d'une spécificité de facturation OVHcloud : utiliser la facturation mensuelle pour les nœuds que vous prévoyez également de conserver sur le long terme peut réduire vos coûts Kubernetes jusqu'à 50 %. Nous constatons que des clients ayant des workloads variés créent un premier pool de nœuds en facturation mensuelle pour couvrir leurs besoins de calcul de long terme, et ajoutent de l'élasticité au cluster avec un second pool de nœuds utilisant l'autoscaling et la facturation horaire.

Nous allons :

  • créer un cluster Managed Kubernetes
  • créer un pool de nœuds avec 3 nœuds et un mode de facturation « mensuel »
  • créer un autre pool de nœuds avec l'autoscaling activé (0 nœud minimum et 10 maximum), en mode de facturation « horaire »
  • déployer une application sur un pool de nœuds (et des nœuds) spécifique

Prérequis


Accès à l'espace client OVHcloud

  • Lien direct :
  • Pour accéder à vos services : Public Cloud > Sélectionnez votre projet > Managed Kubernetes Service

En pratique

Création du cluster

Accédez à l'interface d'administration de vos clusters OVHcloud Managed Kubernetes en cliquant sur Managed Kubernetes Service dans le menu de gauche, puis cliquez sur Create a cluster.

Ou, si vous avez déjà un cluster, l'interface est légèrement différente : vous devez cliquer sur le bouton Create a Kubernetes cluster.

Sélectionnez un emplacement pour votre nouveau cluster.

Choisissez la version mineure de Kubernetes.

Info

Nous recommandons d'utiliser systématiquement la dernière version stable. Consultez notre page Fin de vie / fin de support pour comprendre notre politique de versions.

Vous pouvez désormais choisir d'intégrer votre cluster Kubernetes à un réseau privé à l'aide du vRack OVHcloud. Pour plus d'informations sur cette option, consultez notre guide Utiliser le vRack.

Pour ce tutoriel, nous allons configurer deux pools de nœuds différents.

Rappel : un pool de nœuds est un groupe de nœuds partageant la même configuration, ce qui vous offre une grande flexibilité dans la gestion de votre cluster.

Info

Consultez le guide Gérer les pools de nœuds pour plus d'informations sur les pools de nœuds.

Pour notre premier pool de nœuds, choisissez une flavor, « B2-7 » par exemple.

À l'étape suivante, définissez la taille du pool de nœuds par défaut : indiquez un nom pour le pool et définissez le nombre de nœuds.

À l'étape suivante, choisissez le mode de facturation Monthly.

Enfin, indiquez un nom pour votre cluster et cliquez sur le bouton Send.

La création du cluster est désormais en cours. Il devrait être disponible en quelques minutes dans votre espace client OVHcloud.

Création du second pool de nœuds

Votre cluster Kubernetes est maintenant opérationnel. Cliquez sur le nom de votre cluster pour ouvrir sa page de détails, puis cliquez sur l'onglet Pools de nœuds.

Nous allons créer notre second pool de nœuds. Cliquez sur le bouton Ajouter un pool de nœuds.

Indiquez ensuite un nom pour votre second pool de nœuds, hourly par exemple.

Sélectionnez une flavor pour votre nouveau pool de nœuds ; nous pouvons choisir « B2-7 » comme pour notre autre pool de nœuds.

À l'étape suivante, définissez la taille de notre second pool de nœuds. Cette fois, nous pouvons activer la fonctionnalité Autoscaling. Définissez dans ce cas la taille minimale et maximale du pool, par exemple 0 en minimum et 10 en maximum.

Info

En activant l'anti-affinité, les nœuds actuels et futurs seront lancés sur des hyperviseurs (serveurs physiques) différents, garantissant une meilleure tolérance aux pannes.

Puis choisissez le mode de facturation Hourly pour ce second pool de nœuds.

La création du pool de nœuds est désormais en cours. Il devrait être disponible en quelques minutes dans votre espace client OVHcloud.

Le second pool de nœuds sera d'abord au statut Installing. Attendez que son statut passe à OK.

Vérifier et préparer nos pools de nœuds

Pour déployer votre application sur votre cluster Kubernetes, consultez notre guide sur la configuration des paramètres par défaut de kubectl.

Une fois que vous pouvez accéder au cluster via la commande kubectl, affichons nos pools de nœuds :

$ kubectl get nodepool
NAME                                            FLAVOR   AUTO SCALED   MONTHLY BILLED   ANTI AFFINITY   DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   MIN   MAX   AGE
hourly                                          b2-7     true          false            false           1         1         1            1           0     10    4m39s
nodepool-cc40f90c-effb-4945-b7b9-05073725d62d   b2-7     false         true             false           3         3         3            3           0     100   164m

Nos deux pools de nœuds existent et nous pouvons voir les différentes configurations et le mode d'autoscaling.

Affichons nos nœuds. Vous devriez avoir 3 nœuds en cours d'exécution dans notre premier pool de nœuds et 1 nœud dans notre pool de nœuds « hourly » :

$ kubectl get node
NAME                                         STATUS   ROLES    AGE     VERSION
hourly-node-8e4db2                           Ready    <none>   3m13s   v1.34.0
nodepool-cc40f90c-effb-4945-b7-node-23e81b   Ready    <none>   161m    v1.34.0
nodepool-cc40f90c-effb-4945-b7-node-4bd23f   Ready    <none>   163m    v1.34.0
nodepool-cc40f90c-effb-4945-b7-node-ef121e   Ready    <none>   161m    v1.34.0

Si vous ne faites rien pendant plusieurs minutes, l'AutoScaling du pool de nœuds « hourly » mettra fin au nœud en raison de l'inactivité :

$ kubectl get node
NAME                                         STATUS   ROLES    AGE     VERSION
nodepool-cc40f90c-effb-4945-b7-node-23e81b   Ready    <none>   3h18m   v1.34.0
nodepool-cc40f90c-effb-4945-b7-node-4bd23f   Ready    <none>   3h20m   v1.34.0
nodepool-cc40f90c-effb-4945-b7-node-ef121e   Ready    <none>   3h18m   v1.34.0

Déploiement de notre application

Le moment est venu de découvrir la puissance des concepts Kubernetes labels et NodeAffinity.

Nous avons un pool de nœuds en facturation « mensuelle » et un autre en facturation « horaire ». L'objectif de disposer de ces deux pools de nœuds est de pouvoir séparer nos besoins selon les types d'applications.

Afin de déployer notre application sur des nœuds spécifiques, nous devons connaître le label du pool de nœuds cible.

Il faut savoir que les nœuds créés par Kubernetes portent dans leur label le nom du pool de nœuds. Grâce à cela, vous pouvez demander à Kubernetes de déployer les applications dans le pool de nœuds souhaité.

Affichons les labels de nos nœuds en cours d'exécution :

$ kubectl get node --show-labels
NAME                                         STATUS   ROLES    AGE     VERSION   LABELS
nodepool-cc40f90c-effb-4945-b7-node-23e81b   Ready    <none>   3h56m   v1.34.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=0da61e94-ce69-4971-b6df-c410fa3659ec,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=GRA7,failure-domain.beta.kubernetes.io/zone=nova,kubernetes.io/arch=amd64,kubernetes.io/hostname=nodepool-cc40f90c-effb-4945-b7-node-23e81b,kubernetes.io/os=linux,node.k8s.ovh/type=standard,node.kubernetes.io/instance-type=0da61e94-ce69-4971-b6df-c410fa3659ec,nodepool=nodepool-cc40f90c-effb-4945-b7b9-05073725d62d,topology.cinder.csi.openstack.org/zone=nova,topology.kubernetes.io/region=GRA7,topology.kubernetes.io/zone=nova
nodepool-cc40f90c-effb-4945-b7-node-4bd23f   Ready    <none>   3h58m   v1.34.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=0da61e94-ce69-4971-b6df-c410fa3659ec,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=GRA7,failure-domain.beta.kubernetes.io/zone=nova,kubernetes.io/arch=amd64,kubernetes.io/hostname=nodepool-cc40f90c-effb-4945-b7-node-4bd23f,kubernetes.io/os=linux,node.k8s.ovh/type=standard,node.kubernetes.io/instance-type=0da61e94-ce69-4971-b6df-c410fa3659ec,nodepool=nodepool-cc40f90c-effb-4945-b7b9-05073725d62d,topology.cinder.csi.openstack.org/zone=nova,topology.kubernetes.io/region=GRA7,topology.kubernetes.io/zone=nova
nodepool-cc40f90c-effb-4945-b7-node-ef121e   Ready    <none>   3h56m   v1.34.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=0da61e94-ce69-4971-b6df-c410fa3659ec,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=GRA7,failure-domain.beta.kubernetes.io/zone=nova,kubernetes.io/arch=amd64,kubernetes.io/hostname=nodepool-cc40f90c-effb-4945-b7-node-ef121e,kubernetes.io/os=linux,node.k8s.ovh/type=standard,node.kubernetes.io/instance-type=0da61e94-ce69-4971-b6df-c410fa3659ec,nodepool=nodepool-cc40f90c-effb-4945-b7b9-05073725d62d,topology.cinder.csi.openstack.org/zone=nova,topology.kubernetes.io/region=GRA7,topology.kubernetes.io/zone=nova

Comme vous pouvez peut-être le constater, nos nœuds en cours d'exécution portent le label nodepool=nodepool-cc40f90c-effb-4945-b7b9-05073725d62d. Le format du label est : nodepool=<name of the nodepool>.

Le moment est venu de déployer une application, uniquement sur notre pool de nœuds hourly, et d'observer le comportement de l'AutoScaling.

Créez un fichier deployment.yaml avec le contenu suivant :

apiVersion: v1
kind: Service
metadata:
  name: hello-world
  labels:
    app: hello-world
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  selector:
    app: hello-world
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-world-deployment
  labels:
    app: hello-world
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hello-world
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
      - name: hello-world
        image: ovhplatform/hello
        ports:
        - containerPort: 80
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: nodepool
                operator: In
                values:
                - hourly
$ kubectl apply -f deployment.yaml
service/hello-world created
deployment.apps/hello-world-deployment created

Lorsque vous appliquez ce manifeste YAML, un Pod sera d'abord à l'état Pending. Un nouveau nœud sera créé. Une fois ce nouveau nœud créé avec succès, le Pod sera démarré sur ce nœud.

$ kubectl get pod -w
NAME                                      READY   STATUS    RESTARTS   AGE
hello-world-deployment-585c6cfcd8-kntp9   0/1     Pending   0          12s
hello-world-deployment-585c6cfcd8-kntp9   0/1     Pending   0          3m3s
hello-world-deployment-585c6cfcd8-kntp9   0/1     ContainerCreating   0          3m29s
hello-world-deployment-585c6cfcd8-kntp9   0/1     ContainerCreating   0          3m41s
hello-world-deployment-585c6cfcd8-kntp9   1/1     Running             0          3m45s

Vous devez attendre plusieurs minutes afin d'obtenir un nouveau nœud correspondant à vos critères.

$ kubectl get node
NAME                                         STATUS   ROLES    AGE   VERSION
hourly-node-d4f9d7                           Ready    <none>   18s   v1.34.0
nodepool-cc40f90c-effb-4945-b7-node-23e81b   Ready    <none>   21h   v1.34.0
nodepool-cc40f90c-effb-4945-b7-node-4bd23f   Ready    <none>   21h   v1.34.0
nodepool-cc40f90c-effb-4945-b7-node-ef121e   Ready    <none>   21h   v1.34.0

Et vous pouvez vérifier sur quel nœud notre application est en cours d'exécution :

$ kubectl get pod -o wide
NAME                                      READY   STATUS    RESTARTS   AGE   IP         NODE                 NOMINATED NODE   READINESS GATES
hello-world-deployment-585c6cfcd8-kntp9   1/1     Running   0          13m   10.2.8.2   hourly-node-d4f9d7   <none>           <none>

Grâce à cette fonctionnalité, vous pouvez choisir et contrôler où vous souhaitez déployer vos applications.

Notez qu'un label donné peut être appliqué à plusieurs pools de nœuds et/ou à des nœuds spécifiques uniquement si cela a un sens pour vous.

Aller plus loin

Dans ce tutoriel, vous avez vu comment créer, dans votre cluster OVHcloud Managed Kubernetes, plusieurs types de pools de nœuds et comment déployer facilement vos applications où vous le souhaitez.

Saviez-vous que vous pouvez également effectuer d'autres opérations sur les nœuds, comme le taint, le drain et le cordon, grâce à la propagation des labels des pools de nœuds vers les nœuds ?

Pour en savoir plus sur l'utilisation pratique de votre cluster Kubernetes, nous vous invitons à consulter notre site de documentation OVHcloud Managed Kubernetes.

  • Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.

  • Échangez avec notre communauté d'utilisateurs.

Cette page vous a-t-elle aidé ?