Karpenter : l’autoscaler Kubernetes nouvelle génération

Comprenez l'architecture de Karpenter v1.9, une nouvelle génération d'autoscaleurs Kubernetes, et découvrez comment il peut améliorer la gestion de vos clusters

Introduction à Karpenter

Karpenter est un autoscaler Kubernetes nouvelle génération qui améliore la performance, la fiabilité et la sécurité de vos applications Kubernetes en exploitant les concepts de NodePool, NodeClass et NodeClaim. Dans cette section, nous allons comprendre l’architecture de Karpenter v1.9 et découvrir comment il peut améliorer la gestion de vos clusters.

Karpenter détecte les pods en attente et déclenche le provisionnement en quelques secondes. Les nœuds sont dimensionnés exactement pour vos pods et disparaissent automatiquement quand ils ne servent plus. Pour déployer Karpenter dans votre cluster Kubernetes, vous devez configurer les ressources clés : NodePool, NodeClass et NodeClaim.

apiVersion: karpenter.k8s.aws/v1
kind: EC2NodeClass
metadata:
  name: default
spec:
  role: "KarpenterNodeRole-my-cluster"
  amiSelectorTerms:
  - alias: al2023@latest
  subnetSelectorTerms:
  - tags:
      karpenter.sh/discovery: "my-cluster"
  securityGroupSelectorTerms:
  - tags:
      karpenter.sh/discovery: "my-cluster"

Ceci est un exemple de configuration d’un EC2NodeClass pour Karpenter. Vous devez adapter cette configuration à vos besoins spécifiques.

Il est important de noter que le temps de provisionnement peut varier en fonction du provider cloud, du bootstrap (OS, runtime, CNI) et des pulls d’images. En pratique, comptez 1 à 4 minutes selon votre environnement.

Voici un tableau résumant les étapes de provisionnement et les temps approximatifs :

ÉtapeTemps approximatif
Détecter les pods en attenteQuelques secondes
Simuler le schedulingQuelques secondes
Créer le NodeClaimQuelques secondes
Appeler le providerQuelques secondes
Provisionner l’instance1-4 minutes

Ressources clés de Karpenter

Les ressources clés de Karpenter sont NodePool, NodeClass et NodeClaim. Dans cette section, nous allons comprendre ces ressources et comment les configurer.

Un NodePool définit un ensemble de nœuds avec des caractéristiques similaires. Un NodeClass définit un type de nœud avec des caractéristiques spécifiques. Un NodeClaim définit une demande de nœud pour un pod spécifique.

RessourceDescription
NodePoolEnsemble de nœuds avec des caractéristiques similaires
NodeClassType de nœud avec des caractéristiques spécifiques
NodeClaimDemande de nœud pour un pod spécifique

Voici un exemple de configuration d’un NodePool :

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: default
spec:
  template:
    spec:
      nodeClassRef:
        group: karpenter.k8s.aws
        kind: EC2NodeClass
        name: default
  requirements:
  - key: kubernetes.io/arch
    operator: In
    values:
    - "amd64"
  - key: karpenter.sh/capacity-type
    operator: In
    values:
    - "on-demand"

Ceci est un exemple de configuration d’un NodePool pour Karpenter. Vous devez adapter cette configuration à vos besoins spécifiques.

Il est important de noter que les ressources clés de Karpenter sont liées entre elles. Un NodePool est associé à un NodeClass, et un NodeClaim est associé à un NodePool.

Scheduling avec Karpenter

Karpenter simule le scheduling pour déterminer les instances nécessaires. Il sélectionne les instances en fonction des caractéristiques des pods. Dans cette section, nous allons comprendre le processus de scheduling avec Karpenter.

Voici les étapes du processus de scheduling avec Karpenter :

  1. Karpenter détecte les pods en attente
  2. Karpenter simule le scheduling pour déterminer les instances nécessaires
  3. Karpenter sélectionne les instances en fonction des caractéristiques des pods
  4. Karpenter crée un NodeClaim pour la demande de nœud
  5. Karpenter appelle le provider pour provisionner l’instance

Voici un exemple de NodeClaim créé automatiquement par Karpenter :

apiVersion: karpenter.sh/v1
kind: NodeClaim
metadata:
  name: default-abc123
labels:
  karpenter.sh/nodepool: default
spec:
  requirements:
  - key: topology.kubernetes.io/zone
    operator: In
    values:
    - "eu-west-2a"
  - key: node.kubernetes.io/instance-type
    operator: In
    values:
    - "t3.medium"

Ceci est un exemple de NodeClaim créé automatiquement par Karpenter. Vous devez adapter cette configuration à vos besoins spécifiques.

Il est important de noter que le processus de scheduling avec Karpenter peut être personnalisé en fonction de vos besoins spécifiques. Vous pouvez configurer les paramètres de scheduling pour optimiser la gestion de vos clusters.

Voici un exemple de configuration de scheduling pour Karpenter :

apiVersion: karpenter.sh/v1
kind: SchedulingConfig
metadata:
  name: default
spec:
  nodeClassRef:
    group: karpenter.k8s.aws
    kind: EC2NodeClass
    name: default
  requirements:
  - key: kubernetes.io/arch
    operator: In
    values:
    - "amd64"
  - key: karpenter.sh/capacity-type
    operator: In
    values:
    - "on-demand"

Ceci est un exemple de configuration de scheduling pour Karpenter. Vous devez adapter cette configuration à vos besoins spécifiques.

Conclusion

En conclusion, Karpenter est un outil puissant pour améliorer la performance, la fiabilité et la sécurité de vos applications Kubernetes. En comprenant les ressources clés de Karpenter et le processus de scheduling, vous pouvez optimiser la gestion de vos clusters et améliorer la qualité de service de vos applications.

Il est important de noter que Karpenter est un outil en constante évolution, et de nouvelles fonctionnalités sont ajoutées régulièrement. Il est recommandé de consulter la documentation officielle de Karpenter pour obtenir les dernières informations sur les fonctionnalités et les configurations disponibles.

Voici un résumé des points clés à retenir :

  • Karpenter est un autoscaler Kubernetes nouvelle génération
  • Les ressources clés de Karpenter sont NodePool, NodeClass et NodeClaim
  • Le processus de scheduling avec Karpenter peut être personnalisé en fonction de vos besoins spécifiques
  • Karpenter est un outil en constante évolution, et de nouvelles fonctionnalités sont ajoutées régulièrement

En suivant ces conseils et en comprenant les ressources clés de Karpenter et le processus de scheduling, vous pouvez optimiser la gestion de vos clusters et améliorer la qualité de service de vos applications.