Onboarding sur la PaaS KNS ========================== Bienvenue à bord ! La première étape pour déployer vos applications sur la PaaS Kubernetes **KNS** est de contacter votre commercial référent afin de procéder aux démarches de création de namespaces sur le cluster mutualisé. L'offre est consultable ici: https://www.dri.fr/hebergement-kubernetes Namespaces ++++++++++++ Pour commencer, il faut choisir le nombre de namespaces, nommés selon le format ``----``. Vous pouvez choisir les champs ``environnement`` et ``champ optionnel`` (chiffres et lettres uniquement). Il est recommandé de séparer vos différents environnements (prod, preprod, perf, recette, dev...) dans des namespaces différents, afin de pouvoir faire une séparation au niveau des droits et d'éviter les erreurs humaines ou encore la saturation en ressources par de la hors prod pouvant entraîner un blocage de la prod (les quotas étant pour tout le namespace). A contrario, s'ils ne sont pas gérés par des équipes ou process entièrement différents, il est tout à fait possible de déployer plusieurs composants applicatifs dans le même namespace, voire pour les hors-prod plusieurs instances de l'application pour travailler sur plusieurs versions différentes (branches de fonctionnalités, de corrections de bugs...). Actuellement tous les namespaces seront déployés sur le même cluster Kubernetes. Ceux-ci sont visibles dans la section ``Services`` sur votre page EVA Pilote: .. image:: images/eva-kns.png :align: center Les utilisateurs sont gérables également via cette même section via la création de comptes de services avec des droits admin ou viewer sur le namespace : .. image:: images/kns-users.png :align: center Une fois le compte créé, il est possible de récupérer le kubeconfig de l'utilisateur via l'interface. Gabarits +++++++++++++ Actuellement, voici les gabarits de namespaces disponibles : +---------------+------------+-----------+-----------+-----------+ | Namespace | KNS 4-8 | KNS 8-32 | KNS 16-64 | KNS 32-128| +===============+============+===========+===========+===========+ | CPU | 4 | 8 | 16 | 32 | +---------------+------------+-----------+-----------+-----------+ | RAM (Go) | 8 | 32 | 64 | 128 | +---------------+------------+-----------+-----------+-----------+ | Stockage | 250 Go | 1 To | 2.5 To | 5 To | +---------------+------------+-----------+-----------+-----------+ Les valeurs pour le RAM / CPU correspondent aux `requests `_ Kubernetes. Rappel de la gestion des ressources Kubernetes ---------------------------------------------- **Au niveau du pod :** * Consommation RAM/CPU du pod: ce que le pod utilisé réellement en RAM (Go) ou CPU (coeurs virtuels) * Requests RAM/CPU du pod : les ressources garanties en RAM/CPU pour le pod * Limits RAM/CPU du pod: ce que le pod peut atteindre en best effort Un dépassement de la limite CPU entraîne un throttle du pod (moins de cycles CPU actifs) Un dépassement de la limite RAM entraîne un OOMkill du pod **Au niveau du namespace:** * Consommation RAM/CPU du namespace: le cumul de la consommation RAM/CPU de tous les pods du namespace * Utilisation des requests RAM/CPU du namespace : somme de toutes les requests RAM/CPU des pods du namespace * Utilisation des limits RAM/CPU du namespace : somme de toutes les limits RAM/CPU des pods du namespace * Quota du namespace (requests/limits en RAM/CPU): Max atteignable de l'utilisation des requests/limits en RAM/CPU dans le namespace Une tentative de déploiement de pod qui entraînerait un dépassement du quota sera bloquée. Utilisation de GPU ++++++++++++++++++ L'utilisation de GPU passe par la souscription d'un forfait dédié. Différences notables avec une offre classique +++++++++++++++++++++++++++++++++++++++++++++ Il est important de noter que l'utilisation de Kubernetes (ici en mode Plateforme as a Service) viennent avec une certaine couche d'abstraction fournie par le cluster et les services associés. Ainsi, il ne sera pas possible de se connecter directement aux machines du cluster, le déploiement comme l'administration des applications hébergées passeront par l'API kubernetes, en utilisant la méthode de votre choix (et le kubeconfig récupéré dans l'interface): * la CLI `kubectl `_ directement * les surcouches à la CLI comme `k9s `_, `lens `_ ou `kubie `_ * une des librairie ou plugins disponibles dans votre langage/ habituel * le tout avec éventuellement une surcouche comme ArgoCD, jenkins, gitlab-ci... De la même manière, il faudra convertir vos commandes ``docker`` habituelles ou vos manifestes ``docker-compose`` ou ``docker-swarm`` en **manifestes kubernetes**, avec éventuellement un package helm selon les cas d'usages. N'hésitez pas à nous contacter pour vous faire accompagner sur cette partie ou pour bénéficier de formations afin de réduire la courbe d'apprentissage.