====== Kubernetes ====== Cette section répertorie les informations vis-à-vis de la configuration de Kubernetes dans l'environemment WEBCENTRIC. Kubernetes est une avancé majeur dans l'optimisation des projets informatiques. Il s'agit d'un outil permettant l'orchestration des conteneurs. C'est un terme technique pour dire que c'est une surcouche à Docker permettant de déployer des projets complet, gérer la partie réseau et gérer la charge ainsi que la redondance entre différents serveurs. Grâce à l'orchestration, il est possible de dimensionner automatiquement le nombre de conteneurs pour chaque projet entre les différents serveurs. Ainsi quand un projet prend une charge plus importante, des nouveaux conteneurs sont démarrés sur l'autre serveur pour absorber la charge. La charge étant mieux répartie, il est possible de mettre plusieurs projets en un minimum de serveurs. Kubernetes est une grande avancé aujourd'hui, la technologie serverless va bientôt prendre le pas sur Kubernetes pour encore plus d'optimisation. ===== Utilisation ===== ==== Ligne de commande ==== === Installer le client sur votre poste === Le client en ligne de commande pour Openshift se trouve à l’adresse suivante : [[https://github.com/openshift/origin/releases/tag/v3.11.0]] Disponible pour Linux / Max / Windows. Dans le zip, il y a deux programmes : * oc * kubectl Le programme ''oc'' est une version amélioré de ''kubectl''. [[https://docs.okd.io/latest/cli_reference/differences_oc_kubectl.html|Voir les différences entre les deux]]. Le mieux sur Linux est de copier les deux programmes ''oc'' et ''kubectl'' dans le dossier ''/usr/local/bin''. Pour se connecter, il y a plusieurs moyens : * En ligne de commande via ''oc login'' * En WEB * En ligne de commande via un token et ''kubectl'' Nous recommandons de se connecter via ''oc login'' depuis un poste de travail. Par contre pour un build automatique, nous recommandons d'utiliser kubectl avec un secret. === Se connecter en ligne de commande === oc login https://master1.k8s.wcentric.com:8443 ou oc login https://master.k8s.japan-expo.com:8443 Pour se connecter en token, utiliser '' --token= '' puis le token (pour la production Equinix). Puis entrer les informations d’authentification du réseau d’entreprise. Une fois que vous êtes connecté, choisissez le namespace (ou projet) sur lequel vous souhaitez travailler avec la commande suivante (remplacer ''MyNameSpace'' par le namespace à utiliser) : oc project MyNameSpace Quand vous utiliser la commande oc project seule, vous obtenez la liste de tous les namespace accessibles. Une étoile indique votre namespace par défaut. Vous pouvez ensuite effectuer des commandes sur le Kubernetes comme par exemple : * [[interne:webcentric:kubernetes:mariadb|MariaDB]] ==== Console de gestion web ==== === Catalogue d’application === Vous pouvez déployer des applications rapidement pour faire des tests depuis le catalogue d’applications : [[https://master1.k8s.wcentric.com:8443/console/catalog]] === Console des projets === Vous pouvez gérer les différents projets depuis la console des projets : [[https://master1.k8s.wcentric.com:8443/console/projects]] Cette console permet aussi de consulter les différents éléments des projets (stockage / secrets / configs / routes / droits d’accès / etc…). La console d'un projet est un moyen simple et efficace pour accéder à tous les objets d'un namespace en particulier. === Console de cluster === La console du cluster : [[https://console.k8s.wcentric.com]] Cette console est pour l’administration « bas niveau ». Il y a tous les accès aux différents objets de la base de configuration de Kubernetes. Elle est donc moins facile à utiliser que la console des projets. La console du cluster permet d'avoir une gestion globale de toute l'infrastructure. La plupart des objets de Kubernetes sont accessibles depuis cette console centrale. Certains objets restent néanmoins accessible seulement depuis une les lignes de commandes. === Autres consoles === * Prometheus (monitoring) : [[https://prometheus-k8s-openshift-monitoring.k8s.wcentric.com]] * Alert manager : [[https://alertmanager-main-openshift-monitoring.k8s.wcentric.com]] * Grafana : [[https://grafana-openshift-monitoring.k8s.wcentric.com]] ===== Le fonctionnement ===== Il faut voir plusieurs éléments dans Kubernetes. D'une part les éléments dit d'infrastructure dont le fonctionnement reste totalement abstrait et indépendant de l'utilisation concrète et les éléments propre à la configuration des différents projets. Dans Kubernetes, la base est les espaces de noms (les namespaces). Dans le cadre de openshift, ces espaces de nom sont aussi appelés des projets. Chaque espace de nom sont indépendants, ils ne peuvent communiquer entre eux que si des règles spécifiques ont été appliqués. Un espace de nom permet de regrouper tous les éléments (pod / services / etc.) d'un seul projet. Chaque élément de l'espace de nom a accès aux autres éléments de son espace, mais pas aux éléments des autres espaces. Ils sont utilisés pour correctement isoler plusieurs projets et éviter des failles de sécurité. Un espace de nom est donc un regroupements d'objets, tous nécessaire à une seule et même application. Si un projet nécessite d'utiliser des ressources d'un autre projet (comme une base de donnée), il est conseillé de créer un objet service dans l'espace de nom du projet. Cet objet service peut faire référence à un service externe à Kubernetes ou bien à un service d'un autre espace de nom. ==== Infrastructure ==== Cette section est destiné aux administrateurs systèmes. Dans ce chapitre, nous n'aborderons pas la configuration et l'utilisation de Kubernetes, mais plutôt comment l'infrastructure fonctionne. La partie invisible qui permet le fonctionnement de tout le cluster. === Le système Kubernetes === La base de tout Kubernetes, c'est Docker. Tous les serveurs faisant fonctionner Kubernetes est un simple système avec Docker. Les différentes biques constituant l'infrastructure sont toutes des projets Kubernetes, elles mêmes sous la forme de conteneurs. Chaque serveur constituant l'infrastructure est donc système avec Docker installé. Par mesure d'efficacité, il est possible de constituer son cluster Kubernetes uniquement avec des systèmes optimisés pour Doker tel que [[https://coreos.com/|CoreOS]] ou bien [[http://www.projectatomic.io/|Project Atomic]]. Mais il est aussi possible de partir d'un OS classique en édition minimal tel que [[https://www.centos.org/|CentOS]] et y installer Docker. A noter qu'il n'est pas obligatoire d'utiliser Docker comme engine pour les conteneurs. Il est aussi possible d'utiliser des projets plus stables tel que [[https://cri-o.io/|cri-o]]. De base, Kubernetes ne propose pas de système de déploiement automatisé d'OS. Certains projets permettent le déploiement des OS. Chez Webcentric, nous avons mis en place en interne un système sur mesure pour le déploiement des OS et de OpenShift. === Les distributions et OKD === Un aspect très important sur Kubernetes, c'est qu'il s'agit d'un orchestrateur seulement. Ce n'est pas une solution tout-en-main. Configurer un cluster Kubernetes « bare metal » peut être relativement long et complexe. Pour faire un rapprochement, Kubernetes est un peu comme le noyeau linux. Il est possible d'installer linux « from scratch », mais l'installation est longue et complexe. Par contre il y a des éditeurs qui proposent des solutions de cluster tout-en-main complète, que se soit sur site ou dans le cloud, exactement comme vous avez Debian ou CentOS comme distribution sur Linux. Pour Kubernetes, vous pouvez consulter [[https://kubernetes.io/docs/setup/#production-environment|la liste officielle des distributions]]. Dans le cas de Webcentric, nous nous sommes concentrés sur [[https://www.okd.io/|OKD]]. C'est la version OpenSource de la distribution [[https://www.openshift.com/|OpenShift]], proposée par RedHat. === Les rôles des serveurs === Nous avons vu précédemment que Kubernetes est composé de conteneurs, qui gère d'autres conteneurs. Les différents éléments qui compose le cluster Kubernetes sont donc des conteneurs. Lors de l'installation, il est possible de définir quel serveur va exécuter quel élément qui compose le cluster. ^ Rôle ^ Description ^ | [[.:roles:Ansible]] | Réalise le déploiement du cluster. Ce rôle est one-shot et n'est pas nécessaire pour le fonctionnement. | | [[.:roles:Master]] | Responsable de l'orchestration du cluster. C'est aussi le rôle qui fourni les API de management. | | [[.:roles:Infra]] | Réalise le routage, c'est le point d'entrée du cluster. | | [[.:roles:Etcd]] | Base de donnée contenant toute la configuration d'exploitation. | | [[.:roles:Persistent Storage]] | Stockage persistant des volumes des différents conteneurs. | | [[.:roles:Registry Storage]] | Stockage persistant du docker registry qui permet de garder en cache les différentes images déployés. | | [[.:roles:Compute]] | Nœuds où sont exécutés les différents projets. | En soit, tous les rôles sont des nœuds, avec un sélecteur définissant qu'ils doivent accueillir les pods responsables d'un des éléments d'infrastructure. ==== Les objets ==== === Les charges de calcul === La charge de calcul (la partie exécution) de Kubernetes est constitué de [[.objets:workloads:pods]]. Ces derniers peuvent être créé manuellement, mais sont généralement créé par un contrôleur via des configuration de type [[.:objets:Deployment]], [[.:objets:StatefulSet]] ou [[.:objets:DaemonSet]]. === Le Réseaux === Dans le cluster, des adresses sont définies pour tous les services. Ces adresses sont sous la forme : ''{service}.{nalespace}.svc.cluster.local''. La partie réseau est composée de [[.objets:network:services]] utilisant des [[.:objets:endpoints]]. Pour le trafic HTTP et HTTPS, il existe [[.objets:network:ingress]] qui permet de rediriger la connexion au bon pod suivant le nom d'hôte et gère la partie SSL. C'est une surcouche aux [[.objets:network:services]]. === Le stockage === === Les builds === === Le monitoring === === L'administration === ===== Namespaces (Projets) ===== ==== WBC-Utils ==== Ce namepaces répertorie l'ensemble des applications installé par le système et réseaux comme des services pour les applications. Les applications présentes dans ce namespace sont : {{indexmenu>:webcentric:kubernetes:wbc-utils#1}} ==== Tiller World ==== Namespace utilisé pour le serveur Tiller (utilisé par Helm). Il n'y a pas d'application à proprement parlé dans ce namespace. ==== kube-* ==== Namespaces utilisées par Kubernetes (core). Il est notamment utilisé pour tout ce qui est orchestration et API. Ne pas toucher / modifier / altérer le fonctionnement de ce namespace. ==== openshift-* ==== Namespaces utilisés pour les différentes couches additionnelles réalisées par RedHat. Ces namespaces comprennent : * Le monitoring * Le réseau (Software Defined Network) * La journalisation * Le routage des applications (router) * Les consoles d'administrations * Les services de déploiement et de build Ne pas toucher / modifier / altérer le fonctionnement de ce namespace. ==== app-storage ==== Namespace responsable du stockage persistant. Notamment des noeuds GlusterFS pour l'infrastructure de test en local.