Créer une Web API en C# avec NET Core 3.1 avec Docker et Kubernetes sur Linux Ubuntu

(Cet article est une overview. Tous les détails seront dans l’article en préparation pour Programmez).

Voilà le titre est assez long mais il représente bien le challenge.

Pourquoi ce post ? Je veux maîtriser Kubernetes. On nous baratine avec ça. Donc il faut s’y mettre, pas le choix. Microsoft nous parle de k8s matin midi et soir. Dans Azure, c’est incontournable. OK mais moi je dis plus fort :

  • j’ai le code source de k8s
  • je peux le downloader gratuitement
  • pourquoi j’irais dans Azure et que cela me coûterait mon crédit de 150$ mensuel ?
  • Et si je le faisais tourner sous Linux ? En local ?

Première étape, commander un PC Dell portable pour Ubuntu. ça c’est fait : j’ai un plan ! Un portable Pentium 8 GB de RAM, 1 TB de disk: 330€ euros. J’ai acheté un disque SSD à 50 euros et j’ai remplacé le SATA HD par le SSD et là, c’est machine de compétition pour une somme modique.

Ensuite, il faut aller sur https://ubuntu.com/ downloader Ubuntu 19.10. On télécharge Rufus pour booter sur une clé USB et le tour est joué.

Ensuite il faut installer gcc, g++, go, docker, microk8s et ensuite on joue.

Le support Kubernetes pour Ubuntu est assuré par MicroK8S: https://microk8s.io/ | https://ubuntu.com/kubernetes

MicroK8S est un package Linux fait pour les développeurs:

  • Conformant
  • Istio
  • Storage
  • Clustering BETA
  • Registry
  • GPGPU bindings
  • Dashboard
  • Metrics
  • Automatic Updates
  • Ingress
  • DNS
  • Linkerd, Fluentd
  • Knative
  • Kubeflow
  • Jaeger, Prometheus

L’installation se fait via :

  • sudo snap install microk8s –classic
  • sudo microk8s.status –wait-ready
  • sudo microk8s.enable dns dashboard registry
  • sudo microk8s.enable dns dashboard ingress
  • sudo microk8s.kubectl proxy –accept-hosts=.* –address=0.0.0.0 &
  • sudo microk8s.kubectl -n kube-system edit deploy kubernetes-dashboard -o yaml
  • => ajout de – –enable-skip-login dans spec:containers.args:

Ensuite, il faut installer NET Core 3.1: https://docs.microsoft.com/en-us/dotnet/core/install/linux-package-manager-ubuntu-1904

Avec NET Core installé, on créé une Web API : dotnet new webapi – o App

On build le truc dans une image Docker:

Je build la chose: sudo docker image build –pull -t aspnet3k8s:v1

j’ai pushé l’image dans une registry privée:

  • sudo docker tag aspnet3k8s:v1 localhost:32000/aspnet3k8s
  • sudo docker push localhost:32000/aspnet3k8s

Pour le déploiement de l’image Docker dans Kubernetes, il faut au préalable l’avoir poussée dan une registry privée.

Ensuite on va faire de l’infra as code avec du YAML pour pousser le deploiement dans kubernetes. L’IaC est variabilisée et les valeurs sont les suivantes:

Je fais le déploiement avce helm, le package manager kubernetes:

christophep@christophep-Inspiron-15-3573:~/dev$ helm install aspnet3release4 ./chart/
NAME: aspnet3release4
LAST DEPLOYED: Sat Feb  1 04:21:00 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

On check les status avec :

microk8s.kubectl get all –selector app=aspnet3core

On essaie d’accèder au cluster: ça marche

Le portail Kubernetes nous montre que tout est OK: L’url est http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

Conclusion: Ce PoC montre qu’installer Kubernetes est simple et gratuit pour le développement. Nul n’est besoin d’aller dans Azure et de consommer du crédit en $. Linux fait l’affaire. De plus, avec .NET Core, les développeurs Microsoft ne perdent pas leur bossoles. Le déploiement est fait via de l’infra as code et le paramétrage se fait en ligne de commande. IL y donc du Dev et du Ops.

Leave a Reply

Your email address will not be published. Required fields are marked *