Kubernetes est aujourd’hui la solution leader sur le marché des orchestrateurs de conteneurs. Sa promesse est de standardiser la façon dont on fait tourner des applications, sans avoir à se soucier de l’infrastructure sous-jacente : bare-metal, cloud public ou privé.

AWS est le leader sur le marché des clouds publics, il est donc important de pouvoir faire tourner Kubernetes facilement dessus. Dans ce post, je vais vous montrer, depuis 0, comment créer un cluster Kubernetes prêt pour la production sur AWS. Dans un post futur, j’expliquerai comment faire tourner une application relativement complexe -Gitlab- en complète haute disponibilité sur ce cluster.

Ce post demande un certain nombre de connaissances à propos d’AWS et de Kubernetes. Vous devriez être à l’aise avec les concepts qui suivent.

Pour AWS :

  • La CLI AWS,
  • Les bases du réseau sur AWS,
  • Les Hosted Zones Route53,
  • Les buckets S3,

Pour Kubernetes :

  • Ce que c’est (duh),
  • kubectl
  • L’architecture basique de Kubernetes.

Kops

Jusqu’ici, faire tourner Kubernetes (K8s) sur AWS a toujours été compliqué et relativement long si on voulait un cluster de production. Le script kube-up.shh, bien que rapide, n’était clairement pas suffisant pour la production : pas de groupes d’auto-scaling, pas de gestion du VPC, etc.

Cela est en train de changer, surtout grâce à Kops. Kops est un outil en cours de développement par le « special interest group » AWS de K8s. Écrit en Go, il est fait pour gérer des clusters Kubernetes. Il permet de créer et personnaliser de bien meilleures installations :

  • Auto-scaling pour les workers (pour du self-healing),
  • Haute-dispo possible pour le(s) master(s),
  • Personnalisation du VPC et des sous-réseaux utilisés,
  • La communication inter-pods est faite avec le routing AWS natif par défaut,
  • Possibilité d’exporter la stack Terraform correspondante au cluster.

Créer un cluster simple avec Kops

Pour les besoins de cet article, je vais créer un cluster simple : 1 master et 3 workers dans 3 Availability  Zones. Voici la procédure avec Kops. Vous avez besoin des choses suivantes :

  • Avoir déclaré un profile AWS dans le fichier ~/.aws/credentials,
  • Avoir créé un bucket S3 pour stocker l’état de Kops,
  • Avoir créé une Hosted Zone Route53 dans le même compte AWS (Kops va créer les enregistrements nécessaires pour le fonctionnement du cluster).

Vous pouvez alors déclarer votre cluster :

export AWS_PROFILE=my-profile
export KOPS_STATE_STORE=s3://my-kops-bucket
kops create cluster --cloud=aws \
  --dns-zone=k8s.myzone.net --master-size=t2.medium \
  --master-zones=eu-west-1a \
  --network-cidr=10.0.0.0/22 --node-count=3 \
  --node-size=m4.large \
  --zones=eu-west-1a,eu-west-1b,eu-west-1c \
  --name=k8s.myzone.net

À ce point, seule la description du cluster est créée, pas le cluster lui-même. Vous pouvez toujours modifier chaque option en éditant le cluster :

kops edit cluster k8s.myzone.net</pre>

Et quand vous avez terminé, vous pouvez lancer réellement la construction du cluster :

kops update cluster k8s.myzone.net --yes</pre>

Après quelques minutes, votre kubectl devrait pouvoir se connecter à votre nouveau cluster :

kubectl get nodes
NAME                                           STATUS    AGE
ip-10---159.eu-west-1.compute.internal       Ready     1d
ip-10---213.eu-west-1.compute.internal       Ready     1d
ip-10--1-105.eu-west-1.compute.internal       Ready     1d
ip-10--1-208.eu-west-1.compute.internal       Ready     1d

Mettre à jour un cluster

Kops permet également de mettre à jour un cluster K8s en production, sans downtime, pour peu que vous ayez une installation multi-masters. Vous devez simplement modifier le paramètre kubernetesVersion:

kops edit cluster k8s.myzone.net</pre>

Quand vous appliquez les changements, Kops fera automatiquement un rolling-upgrade du cluster :

kops update cluster k8s.myzone.net --yes
kops rolling-update cluster k8s.myzone.net --yes

Conclusion

Kops permet de créer et gérer facilement des clusters Kubernetes sur AWS, avec la production pour but. Cette solution est bien plus facile et meilleure que tout ce qui existait auparavant. Elle permet aussi une large palette de personnalisations.

Dans le prochain post, je montrerai comment utiliser les services managés AWS avec Kubernetes pour faire tourner des applications (et leurs données et bases de données) avec de la vraie haute disponibilité.

Auteur : Theo Chamley