{"id":152,"date":"2017-06-05T11:25:08","date_gmt":"2017-06-05T10:25:08","guid":{"rendered":"https:\/\/www.riwan.fr\/?page_id=152"},"modified":"2020-07-02T17:17:30","modified_gmt":"2020-07-02T16:17:30","slug":"kubernetes_projet","status":"publish","type":"page","link":"https:\/\/www.riwan.fr\/index.php\/kubernetes_projet\/","title":{"rendered":"Kubernetes"},"content":{"rendered":"<p><strong>Pr\u00e9sentation<\/strong><\/p>\n<p>Kubernetes (ou K8S) est une plateforme d&rsquo;automatisation rendu open-source par Google. Elle permet, \u00e0 travers Docker, de g\u00e9rer des grappes de containers (appel\u00e9s &lsquo;pods&rsquo;), de les rendre flexibles et &lsquo;scalables&rsquo;.<\/p>\n<p><strong>Contexte<\/strong><\/p>\n<p>Durant ma fin d&rsquo;alternance chez Naitways, on a mis en place et test\u00e9 Kubernetes en interne, puis on a commenc\u00e9 \u00e0 l&rsquo;utiliser en production.<\/p>\n<p>L&rsquo;atout principal de cet outil est une forte r\u00e9duction des co\u00fbts de maintenance et un temps de d\u00e9ploiement r\u00e9duit. Notamment car le CaaS consomme beaucoup moins de ressources en CPU\/RAM qu&rsquo;une VM classique.<\/p>\n<p><strong>Projet<\/strong><\/p>\n<p>Le projet consistait \u00e0 migrer un site web tournant sous apache\/mysql\/php vers notre infrastructure Kubernetes, en ajoutant d&rsquo;autres services, comme un nextcloud ou un phpmyadmin.<\/p>\n<p>Kubernetes se basant sur Docker, la premi\u00e8re \u00e9tape \u00e9tait de trouver des images docker capablent de convenir au besoin. Ici nous avons d\u00e9j\u00e0 un d\u00e9p\u00f4t local contenant des images personnalis\u00e9s apache\/php ainsi que mysql.<\/p>\n<p>Une fois les images r\u00e9cup\u00e9r\u00e9es, en se basant sur les Dockerfile initiaux on a pu g\u00e9n\u00e9rer les fichiers YAML n\u00e9cessaires pour cr\u00e9er l&rsquo;infrastructure sous K8S.<\/p>\n<p>La syntaxe d&rsquo;un fichier YAML pour K8S ressemble \u00e0 ceci :<\/p>\n<p><img src=\"https:\/\/www.riwan.fr\/wp-content\/uploads\/2017\/06\/k8s_yaml.png\" alt=\"K8S YAML\" \/><\/p>\n<p>Pour d\u00e9ployer un environnement sous K8S, il suffit simplement de charger un yaml de ce type via la ligne de commande ou l&rsquo;interface.<\/p>\n<p>Il s&rsquo;agit uniquement du d\u00e9ploiement de l&rsquo;image apache\/php (que l&rsquo;on peut voir dans le kind). Il existe d&rsquo;autres types comme le Service permettant de d\u00e9finir les ports expos\u00e9s, ou l&rsquo;Ingress qui joue le r\u00f4le de reverse-proxy.<\/p>\n<p>Chaque client est dispos\u00e9 dans un &lsquo;namespace&rsquo; qui repr\u00e9sente un environnement isol\u00e9 dans lequel on peut faire communiquer des pods entre eux. Par exemple on va mettre le pod webserver avec le pod database dans le m\u00eame namespace, afin que le serveur web puisse acc\u00e9der aux ressources de la base de donn\u00e9es.<\/p>\n<p>La ligne &lsquo;replicas: 2&rsquo; permet nativemement de faire du load-balancing en dupliquant les containers.<br \/>\nUne autre fonctionnalit\u00e9 de Kubernetes propose de faire du \u00ab\u00a0auto-scaling\u00a0\u00bb. En sp\u00e9cifiant un nombre de r\u00e9pliquas minimum et maximum, Kubernetes va alors d\u00e9ployer des containers en fonction de l&rsquo;utilisation des ressources CPU, de mani\u00e8re \u00e0 se mettre \u00e0 l&rsquo;\u00e9chelle automatiquement.<\/p>\n<p>Les labels sont tr\u00e8s importants car ils nous permettent d&rsquo;identifier les containers et de les lier aux autres. Cela permet \u00e9galement \u00e0 K8S via un reverse proxy (Ingress) de rediriger les flux, en fonction des domaines match\u00e9s dans les labels.<\/p>\n<p>La partie volume permet d&rsquo;avoir un contenu persistent (identique \u00e0 Docker), le code du site \/ configuration d&rsquo;un service ou une base de donn\u00e9es par exemple. Alors que le reste des fichiers d&rsquo;un container est \u00e9ph\u00e9m\u00e8re, il est amen\u00e9 \u00e0 \u00eatre supprim\u00e9 \u00e0 chaque red\u00e9marrage du service.<\/p>\n<p>Lorsque que l&rsquo;environnement \u00e9tait fonctionnel, on a pu importer les codes sources du site ainsi que la base de donn\u00e9es dans les pods respectifs.<\/p>\n<p>De cette mani\u00e8re, le d\u00e9ploiement d&rsquo;un environnement web se fait en r\u00e9alisant des fichiers YAML, qui peuvent par la suite \u00eatre versionn\u00e9s, et r\u00e9utilis\u00e9s en production-ready.<\/p>\n<p><strong>Comp\u00e9tences li\u00e9es<\/strong><\/p>\n<p><span style=\"color: #e96656;\">Kubernetes<\/span><br \/>\n<span style=\"color: #e96656;\">Docker<\/span><br \/>\n<a href=\"https:\/\/www.riwan.fr\/index.php\/linux\/\">GNU\/Linux<\/a><\/p>\n<p><strong><a href=\"https:\/\/www.riwan.fr\/#realisations\">Retour aux r\u00e9alisations<\/a><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pr\u00e9sentation Kubernetes (ou K8S) est une plateforme d&rsquo;automatisation rendu open-source par Google. Elle permet, \u00e0 travers Docker, de g\u00e9rer des grappes de containers (appel\u00e9s &lsquo;pods&rsquo;), de les rendre flexibles et &lsquo;scalables&rsquo;. Contexte Durant ma fin d&rsquo;alternance chez Naitways, on a mis en place et test\u00e9 Kubernetes en interne, puis on a commenc\u00e9 \u00e0 l&rsquo;utiliser en<a href=\"https:\/\/www.riwan.fr\/index.php\/kubernetes_projet\/\">[&#8230;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/www.riwan.fr\/index.php\/wp-json\/wp\/v2\/pages\/152"}],"collection":[{"href":"https:\/\/www.riwan.fr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.riwan.fr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.riwan.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.riwan.fr\/index.php\/wp-json\/wp\/v2\/comments?post=152"}],"version-history":[{"count":11,"href":"https:\/\/www.riwan.fr\/index.php\/wp-json\/wp\/v2\/pages\/152\/revisions"}],"predecessor-version":[{"id":222,"href":"https:\/\/www.riwan.fr\/index.php\/wp-json\/wp\/v2\/pages\/152\/revisions\/222"}],"wp:attachment":[{"href":"https:\/\/www.riwan.fr\/index.php\/wp-json\/wp\/v2\/media?parent=152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}