Installer Rancher 2.x via KOPS sur AWS

Avant tout une passion

Installer Rancher 2.x via KOPS sur AWS

Introduction

En ce moment, beaucoup d’articles sortent et ressortent sur l’orchestrateur Rancher. Pour ma part, je l’avais déjà utilisé dans sa version 1.6 il y a plus de 3 ans quand celui-ci tournait sur Docker avec son moteur d’orchestration maison (cattle).

Pour sa version 2, Rancher a changé de cap et a décidé de passer par Kubernetes. Et depuis peu, Rancher est compatible avec la plupart des gestionnaires de cloud dérivés de Kubernetes (EKS chez Amazon, AKS chez Azure, …)

Dans la plupart des articles traitant de sa mise en place, on nous dit d’installer Rancher via son image docker directement sur un serveur. Sauf que, d’après la documentation officielle, ce mode d’installation n’est fait que pour tester Rancher et ne surtout pas l’utiliser en production sous ce mode d’exécution limitée.

Nous allons donc voir comment installer rapidement Rancher, en haute disponibilité au sein d’un cluster tout neuf sous Kubernetes, en utilisant kops. Je m’inspire fortement de la documentation officielle de cet outil pour mon article.

Voici en gros l’architecture que vous aurez, à la fin, dans AWS (version assez simplifiée) :

Pré-requis

Avant de commencer, vous devrez avoir un accès AWS avec les bons droits IAM mis dessus. De plus vous devrez installer sur votre machine kubectl et kops.
Pour les droits IAM, votre utilisateur devra à minima avoir les suivants :

  • AmazonEC2FullAccess
  • AmazonRoute53FullAccess
  • AmazonS3FullAccess
  • IAMFullAccess
  • AmazonVPCFullAccess

De plus, vous devrez avoir, dans Route53, une hosted zone réservée pour votre cluster (par exemple : test-rancher.mondomaine.fr)

Pour finir, vous devrez créer un S3 dédié au stockage de vos settings kops pour votre cluster.

Quand tout ceci est fait, nous pouvons passer à la suite.

Installation de notre cluster Kubernetes

Dans mon exemple, je vais créer mon cluster avec 1 seul master et une seule node. La node sera disponible sur l’une des 3 zones de disponibilité de ue-west-1. À savoir eu-west-1a, eu-west-1b, eu-west-1c. De plus, nous utiliserons des machines en t3a.medium tournant sur la dernière version en date de AWS Linux 2 (celle d’avril 2020).

Exporter le lien vers le bucket S3 dans la variable KOPS_STATE_STORE :

export KOPS_STATE_STORE=s3://votre-bucket-s3

Construire la configuration du cluster. Attention, cette commande ne fait que préparer la publication. Elle ne déploie rien sur AWS.

kops create cluster \
--zones "eu-west-1a,eu-west-1b,eu-west-1c" \
--node-size t3a.medium \
--master-size t3a.medium \
--master-count 1 \
--node-count 1 \
--image ami-06ce3edf0cff21f07 \
test-rancher.mondomaine.fr

Avant de déployer, il faut éditer la configuration de notre Cluster. En effet, en passant par AWS Linux 2, kops 1.16 a un souci pour installer correctement docker au sein des machines. Nous devons donc forcer la version à installer

kops edit cluster test-rancher.mondomaine.fr

Et rajoutez ceci dans la configuration yaml affichée, dans la partie spec comme ceci :

spec:
  docker:
    version: 18.06.3

Maintenant, déployez le tout sur AWS. Ceci va vous créer la VPC, les subnets, les security groups, les autoScalingGroups avec les configurations d’instances, … Vous avez le temps de prendre un café le temps que tout se déploie :

kops update cluster test-rancher.mondomaine.fr --yes

Attendez donc 10 minutes puis commencez à faire cette commande afin de vérifier que tout s’est correctement déployé :

kops validate cluster

Quand tout est bon, on peut passer à la partie kubectl. Et la première chose que l’on va faire, c’est d’installer nginx-ingress afin d’avoir un NLB de déployé au sein de notre architecture pour que les applications HTTP/HTTPS soient disponibles depuis l’extérieur de notre VPC :

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-0.32.0/deploy/static/provider/aws/deploy.yaml

Installation de Rancher

Pour la suite, je pars sur l’installation de la version stable de Rancher. Nous allons le déployer avec la gestion de son certificat TLS via LetsEncrypt. Nous devrons donc installer au départ cert-manager et créer un ClusterIssuer pour permettre de faire le lien avec LetsEncrypt. Voici donc les étapes pour installer cert-manager :

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.0/cert-manager.crds.yaml
kubectl create namespace cert-manager
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install \
  cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --version v0.15.0

Puis, rajoutons maintenant notre Cluster Issuer :

cat <<EOF | kubectl apply -f -
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    # You must replace this email address with your own.
    # Let's Encrypt will use this to contact you about expiring
    # certificates, and issues related to your account.
    email: admin@votre-domaine.net
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      # Secret resource that will be used to store the account's private key.
      name: letsencrypt-prod-account-key
    # Add a single challenge solver, HTTP01 using nginx
    solvers:
    - http01:
        ingress:
          class: nginx
EOF

Et maintenant vient le tour de Rancher :

helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
kubectl create namespace cattle-system
helm install rancher rancher-stable/rancher \
  --namespace cattle-system \
  --set hostname=rancher.test-rancher.mondomaine.fr \
  --set ingress.tls.source=letsEncrypt \
  --set letsEncrypt.email=admin@mondomaine.net

Pendant le déploiement, je vous invite à rajouter les annotations suivante au ingress de rancher pour pouvoir déployer automatiquement son hostname sur Route53 (et faire le lien avec le NLB) :

kubectl annotate ing rancher --namespace cattle-system dns.alpha.kubernetes.io/external='rancher.test-rancher.mondomaine.fr'

Normalement, vous avez juste à attendre un peu, et si vous allez sur votre url https://rancher.test-rancher.mondomaine.fr, vous devriez accéder à la page de configuration de Rancher, avec un certificat validé par LetsEncrypt.

Avant de partir

Quand vous aurez fini de jouer avec Rancher, et que vous voudrez tout supprimer de votre architecture afin d’éviter à paqer ces ressources, pensez bien à faire la commande suivante :

kops delete cluster test-rancher.mondomaine.fr --yes

Attention toutefois, il se peut que des Classic Load Balancer (créés par des LoadBalancers L4 dans Rancher) ne se suppriment pas avec l’architecture. Ne les oubliez pas, ou vous risquez d’avoir une petite surprise en fin de mois.

Conclusion

Vous venez de voir comment il est simple, quand on sait comment faire, de déployer Rancher sur AWS pour gérer plusieurs clusters.

Attention toutefois, ce cluster est à réserver à l’usage exclusif de Rancher. Si vous voulez déployer vos services, des apps Helm, … je vous invite à créer un nouveau Cluster directement depuis Rancher, qui pourra le gérer depuis ce point d’accès.

J’espère que cet article vous aura plus. J’ai essayé de me concentrer ici sur l’installation de Rancher et non sur son utilisation, d’autres articles s’en occupent très bien.

Si vous avez aimé, je vous invite à partager cet article et à me dire en commentaire si vous voulez plus d’articles de ce type pour approfondir l’utilisation de Rancher, ou pour tout ce qui peut concerner AWS

 

Aucun commentaire

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.