cegedim.cloud fournit des clusters Kubernetes gérés, avec le plus haut niveau de sécurité et de résilience intégré.
En utilisant ces clusters, vous pouvez déployer vos workloads Kubernetes standards dans les centres de données cegedim.cloud afin de maximiser la disponibilité de vos applications.
cegedim.cloud fournit également une console Rancher, où vous pouvez gérer vos workloads, et configurer les capacités d'observabilité intégrées (Logging et Métrologie) pour la connecter à vos propres plateformes (Grafana, ElasticSearch...).
Les principaux objectifs du projet Container en tant que Service sont :
Capacité à fournir des clusters Kubernetes de dernière génération à la demande.
Application Stateful supportée
Prise en charge des volumes persistants avec Auto-Provisioning et Haute Disponibilité
Respecter les normes réseau, les règles de stockage et de sécurité.
Une sécurité renforcée
Système de surveillance et de métriques intégré à la demande pour chaque application
Prise en charge des règles de réseau dynamiques
Cluster | |
---|---|
Pour plus d'information, veuillez consulter la page K8s - Architecture.
La facturation est mensuelle et basée sur le nombre de nœuds et sur les coûts supplémentaires tel que le stockage et la sauvegarde.
L'estimation des coûts pour un cluster Kubernetes est disponible via votre Service Delivery Manager.
Nœuds
2 - 256
CPU (par nœud)
2 - 16
RAM (par nœud)
6 - 256 Go
Surveillance
Surveillance 24x7
Sauvegarde des nœuds
Sauvegarde ETCD
Toutes les 2 heures avec 7 jours de rétention
Sauvegarde des volumes persistants
Réplication de données (PRA)
Haute disponibilité
Disponibilité
99,9%
Choix de la région
Libre-service
Option
Option
Option
Kubernetes dispose de fonctionnalités et de mécanismes intégrés pour maintenir en bonne santé les nœuds et les workoads kubernetes :
kube-scheduler décide sur quels nœuds placer les pods en fonction des ressources demandées par les pods et des ressources non réservées des nœuds.
kubelet Out-Of-Memory tue les pods qui consomment plus de ressources que les valeurs limitées définies dans la spécification (OOM killed).
Pour quelque raison que ce soit, si le nœud est à court de ressources, kubelet expulse les pods afin d'alléger la pression sur les nœuds (éviction des pods). La décision d'éviction des pods est basée sur la qualité de service des pods.
Gardez à l'esprit que cegedim.cloud fournit des clusters Kubernetes standard avec ces fonctionnalités et a qualifié les documentations officielles de Kubernetes ci-dessous :
Le problème se situe au niveau de l'application dans la vie réelle :
toutes les technologies ne sont pas nativement compatibles avec les conteneurs
les mesures d'utilisation des ressources collectées par le kubelet (ou l'exportateur de nœuds, etc.) ne sont pas en temps réel
les mesures d'utilisation des ressources ne sont pas prises en compte par le planificateur kube
kubelet, en tant que processus Linux, n'est pas toujours le processus le plus prioritaire, en particulier lorsque les nœuds n'ont plus de CPU.
L'incapacité à gérer les contraintes de ressources sur les nœuds par kubelet conduit à des défaillances de nœuds et au redéploiement de toutes les charges de travail correspondantes. Dans le pire des cas, un effet domino sur la défaillance des nœuds peut se produire.
cegedim.cloud fournit une solution de hardening appelée cgdm-hardening :
Un esclave de hardening de pods par nœuds de travail : écrit la consommation de CPU et de RAM dans une base de données centralisée.
Un pod de hardening-maître déployé sur les nœuds maîtres : il lit les métriques dans la base de données et prend des mesures en cas de crise.
L'empreinte de la pile de hardening sur les ressources est très faible
Le pod Hardening-master
peut agir selon deux modes :
Mode préventif (en tant qu'assistant du planificateur kube, mode par défaut) :
Place le taint cegedim.io/overload=true:NoSchedule pour éviter de placer plus de pods sur des nœuds sous pression (85% RAM ou 90% CPU). Lorsque le CPU est inférieur à 85% et que la RAM est inférieure à 80%, l'altération est supprimée.
Mode de protection (en tant qu'assistant du contrôleur de kube) :
Lorsque la consommation de RAM atteint 95 %, il tue les pods les plus récents, l'un après l'autre, pour soulager la pression. Il n'est pas activé par défaut.
Vous ne devez jamais utiliser la wildcard tolérance dans les applications, sinon l'effet préventif de cette solution ne sera pas valable.
Limitation : cette solution ne permet pas de protéger les nœuds qui tombent en panne en raison d'un pic d'utilisation extrêmement élevé du CPU pendant une période de temps très courte.
Le nouveau cluster Kubernetes sera provisionné avec le hardeing préventif activé.
Si les charges de travail déployées par les clients entraînent un grand nombre de défaillances de nœuds (TLS_K8_NODES), le mode de protection sera activé.
Le client peut désactiver ce hardening en créant un ticket requête dans ITCare.
Par conséquent, la vérification TLS_K8_NODES de centreon au niveau du cluster et la vérification de l'état de santé de centreon sur les nœuds de travail seront désactivées.
Cela signifie que les clients doivent redémarrer eux-mêmes les nœuds en cas de crise.
Le client peut réactiver ce hardening en faisant un ticket requête ITCare à tout moment.
Il existe 3 topologies possibles pour le cluster K8s fourni par cegedim.cloud :
Standalone : les charges de travail sont déployées dans un seul centre de données sans plan de reprise après sinistre.
Standard : les charges de travail sont toujours déployées dans un seul centre de données, mais elles sont protégées contre un désastre du centre de données en utilisant un centre de données secondaire comme basculement.
Haute disponibilité : les charges de travail sont déployées dans deux centres de données et aucune interruption des services en cas de sinistre du centre de données ne peut être obtenue avec un déploiement multi-réplica correctement distribué.
cegedim.cloud fournit une topologie de calcul basée sur :
Région : une paire de centres de données
Area : isolation du réseau d'infrastructure entre les locataires
Zones de disponibilité : à l'intérieur d'une zone, infrastructure isolée pour le calcul et le stockage.
Les clusters Kubernetes peuvent être déployés à l'aide de 2 topologies :
En fonction de vos exigences en termes de RTO et de coûts, vous pouvez choisir la topologie la mieux adaptée à vos besoins.
Pour plus de détails sur la topologie de haute disponibilité, veuillez suivre cette page : Haute Disponibilité
cegedim.cloud utilise des clés topologiques standard :
Depuis Kubernetes > 1.20, failure-domain.beta.kubernetes.io/zone est obsolète mais reste disponible en cas de préexistence. Seul topology.kubernetes.io/zone sera officiellement maintenu.
Voici la liste des composants et des outils qui sont déployés dans un cluster standard livré :
Voici un schéma avec tous les composants du réseau expliqués :
Deux pods de 2 namespaces appartenant au même projet Rancher peuvent communiquer entre eux.
Deux pods de 2 namespaces appartenant à deux projets Rancher différents ne peuvent pas communiquer entre eux à moins que l'utilisateur ne définisse une Network Policy dédiée à ce besoin.
Les pods d'un projet Rancher nommé System peuvent communiquer avec les pods d'autres projets Rancher.
Les pods ne peuvent envoyer des requêtes qu'aux serveurs du même VLAN, à moins qu'une règle d'ouverture de réseau spécifique ne soit configurée entre les deux VLANs.
Les pods ne peuvent pas envoyer de requêtes à Internet à moins qu'un proxy ne soit configuré à l'intérieur du pod ou qu'une règle d'ouverture de réseau spécifique ne soit configurée pour le VLAN concerné.
Les requêtes vers le serveur api kube peuvent faire l'objet d'une proxy inverse par l'URL Rancher.
La charge de travail hébergée par les pods ne peut pas être directement accessible depuis l'extérieur du cluster K8S, mais via une couche d'entrée pour le protocole HTTP ou via un service NodePort pour le protocole TCP avec un équilibreur de charge respectif.
nginx est l'ingress controller déployé pour exposer vos workloads. Vous pouvez trouver la documentation pertinente sur le Github officiel à l'adresse :
Deux ingress controllers sont déployés :
Un exposé au réseau interne de Cegedim
ingress controller nginx
écoute sur chaque nœud de travail sur le port :80
il s'agit de la classe d'entrée par défaut (aucune classe d'entrée ne doit être spécifiée).
Un exposé à internet
nginx ingress controller - vous pouvez demander à avoir un ingress controller externe pour nginx.
écoute de chaque nœud de travail sur le port : 8081
cette ingress classe est : nginx-ext
en utilisant l'annotation : kubernetes.io/ingress.class:"nginx-ext"
Un cluster K8s est livré avec :
Un Elastic Secured Endpoint, géré par des appliances F5, exposant la charge de travail K8s au réseau interne de Cegedim (une fois que vous êtes connecté au LAN de Cegedim, soit physiquement, soit par VPN).
Une résolution DNS *.<votreclustername>.ccs.cegedim.cloud
vers ce point d'accès.
Un certificat SSL *.<votreclustername>.ccs.cegedim.cloud
configuré
Vous pouvez utiliser ITCare en cas de besoin d'une configuration spécifique :
Exposition de vos charges de travail à l'Internet ou à un lien privé
Utilisation d'un FQDN spécifique pour déployer votre charge de travail
Utilisation d'un certificat spécifique pour déployer votre charge de travail
Utilisation de Traefik comme fournisseur d'intrusion au lieu de nginx
Ajout d'autres fournisseurs d'entrée
Accès aux ressources en dehors du cluster
Pour plus d'informations concernant le hardening de Kubernetes, nous vous invitons à consulter cette page : Hardening
Pour plus d'informations sur la solution de stockage persistant disponible pour cegedim.cloud de cegedim.cloud, veuillez suivre cette page : Stockage Persistant
cegedim.cloud propose désormais une plateforme de stockage Ceph multi-locataires en tant que fournisseur de CSI avec les spécifications suivantes :
Les données sont répliquées 4 fois et réparties uniformément (à l'aide de Ceph Crush Map) sur 2 centres de données afin de garantir que, dans les scénarios de catastrophe, 2 répliques de données sont toujours disponibles.
Chaque cluster Kubernetes, en tant que client Ceph, dispose de son propre pool de données sur le serveur Ceph et consomme des services avec ses propres identifiants.
Seul le RBD Ceph CSI est fourni pour le moment.
De plus amples informations sur le Ceph CSI sont disponibles via le lien ci-dessous :
cegedim.cloud utilise External Snapshotter pour prendre des clichés et restaurer le PVC de vos clusters Kubernetes.
Toutes les informations relatives à cette application sont disponibles à l'adresse suivante :
Il est recommandé de nommer la classe d'instantanés d'après la classe de stockage. Il suffit d'exécuter la commande ci-dessous pour vérifier :
Pour répertorier tous les CSI disponibles dans un cluster Kubernetes, procédez comme suit :
Voici une correspondance entre la classe de stockage et le CSI :
cegedim.cloud utilise Rancher comme plateforme de gestion de Kubernetes.
Rancher supporte la même authentification SSO que ITCare.
Selon la localisation de votre cluster, Rancher est accessible avec les URL suivantes :
Region | |
---|---|
Dans ITCare, vous pouvez trouver l'URL de votre cluster dans la page de détail de celui-ci :
Rancher demandera une authentification lors de la première connexion : cliquez simplement sur "Login with Keycloak".
Vous serez ensuite redirigé vers la mire de connexion :
Une fois connecté, vous devriez avoir un écran listant tous les clusters auxquels vous avez accès :
Si l'interface se coince après l'authentification, merci d'essayer ces liens :
Si lors de la première connexion vous ne voyez pas votre cluster dans la liste des clusters, vous pouvez vous déconnecter et vous reconnecter.
Vous pouvez gérer vos préférences d'interface utilisateur (thème sombre, nombre de lignes par tableau...) en configurant vos préférences utilisateur. Veuillez vous référer ici à la documentation complète ci-dessous.
Afin de se connecter au cluster en utilisant la CLI, vous avez deux options :
par kubectl
normal à distance
en utilisant rancher online kubectl
.
Les deux sont disponibles en accédant à la page "cluster" dans Rancher.
Il y a deux façons de le faire :
Cliquez sur le nom du cluster dans la liste des clusters.
Cliquez sur le nom du cluster dans le menu supérieur gauche.
Une fois sur la page d'accueil du cluster, vous pouvez télécharger le "KubeConfig File" :
Ou bien juste copier le contenu du "Kubeconfig File" :
Si vous ne disposez pas dekubectl,
nous vous conseillons vivement d'installer kubectl
sur votre poste d'administration en suivant le lien ci-dessous.
Cette configuration peut être mélangée avec d'autres configurations kubectl.
L'authentification peut être partagée avec tout cluster géré par la même instance de rancher.
Une fois sur la page d'accueil du cluster, vous pouvez utiliser le web CLI en cliquant sur l'icône ci-dessous:
Cela devrait lancer un shell web comme celui-ci :
Ce shell est temporaire, tout changement effectué à l'intérieur sera supprimé une fois la fenêtre fermée.
Cette session peut être déconnectée si aucune entrée/sortie n'est observée.
La gestion des jetons est disponible juste en dessous de l'avatar de l'utilisateur :
Il existe deux champs d'application :
no-scope : global scope : utilisé pour interagir avec l'API globale de Rancher
cluster-scoped : jeton dédié à l'accès à un cluster spécifique
Un jeton à portée de cluster est nécessaire pour utiliser helm 3. Cela signifie que vous avez besoin d'un jeton par cluster dans vos pipelines CI/CD
Les jetons peuvent avoir des cycles de vie différents :
Une durée de vie illimitée, il suivra le cycle de vie du compte qui lui est rattaché
Une durée limitée
Vous pouvez utiliser ITCare pour ajouter ou supprimer des nœuds à votre cluster.
Rancher gère les espaces de noms via project, qui est un concept n'existant spécifiquement que dans les clusters Kubernetes gérés par Rancher.
Le projet n'est pas une ressource native de Kubernetes. Par défaut, un cluster Kubernetes est provisionné avec 2 projets :
System : contenant les espaces de noms des composants principaux comme : kube-system, etc.
Default : contenant l'espace de noms "par défaut".
Les utilisateurs sont libres de créer d'autres projets si nécessaire. En se basant sur le niveau du projet, Rancher offre une automatisation intégrée comme : l'octroi de droits d'accès, l'isolation du réseau, etc.
Les utilisateurs sont fortement encouragés à classer les espaces de noms dans un projet.
Passer à la vue projet
Créer un nouvel espace de noms à partir de la vue du projet
Insérez un nom unique et remplissez les autres champs si nécessaire, puis cliquez sur "Créer"
Si vous créez un espace de noms avec le CLI de kubernetes, par exemple kubectl, l'espace de noms créé sera déplacé dans le projet parent de l'espace de noms "default" (qui est, par défaut, le projet nommé Default).
cegedim.cloud recommande et supporte officiellement la gestion des droits d'accès via les groupes AD.
Seuls les groupes AD commençant par G_EMEA_* et G_K8_* sont connus par Rancher.
Par défaut, lors de la création d'un cluster :
Le rôle d'utilisateur standard est donné au groupe G_K8_<NOM_DU_CLUSTER>_USERS qui contient les power users du Cloud associé.
Le rôle d'administrateur est attribué au groupe G_K8_<NOM_DU_CLUSTER>_ADMINS qui est vide par défaut et peut être complété par des utilisateurs compétents et certifiés via un ticket ITCare vers l'équipe de support AD.
Par exemple, l’utilisateur user1@cegedim.com a besoin d’accès standard au cluster test-preprod, il doit faire une demande pour l'ajouter dans le groupe AD nommé G_K8_TEST_PREPROD_USERS.
Lorsque les utilisateurs créent un nouveau projet, en tant que propriétaire par défaut, ils sont libres de lier n'importe quel rôle à n'importe quel groupe AD dans le cadre de ce projet.
Si les rôles prédéfinis de Rancher ne peuvent pas répondre à vos besoins, veuillez contacter les administrateurs de votre cluster pour configurer un rolebinding personnalisé ou un clusterrolebinding.
Dans cette partie, nous supposerons que les droits sont donnés à un groupe et non à un utilisateur.
Pour gérer les droits sur un projet, il existe deux moyens : L'interface utilisateur ou l'API.
L'un des rôles les plus élevés que vous pouvez attribuer est "Project Admin".
Utilisation de l'interface utilisateur
Éditez le projet dont vous êtes propriétaire ou sur lequel vous avez suffisamment de droits accordé par le propriétaire.
Sélectionnez le groupe et le rôle dans la formulaire.
A noter que seuls les groupes préfixés par G_EMEA_* and G_K8_* sont reconnus par Rancher.
Utilisation de l'API
En utilisant l'API, c'est assez simple. Vous aurez d'abord besoin de quelques paramètres :
Obtenir l'ID du projet
Pour obtenir l'ID du projet, vous pouvez utiliser l'explorateur d'API en utilisant simplement le bouton "View in API".
Obtenir l'ID du rôle
Pour obtenir l'ID du rôle, il se peut que vous ne soyez pas autorisé à l'afficher via l'interface utilisateur, mais vous l'obtiendrez via cette requête API :
Donner des autorisations
En utilisant votre clé API, vous pouvez faire une demande POST pour créer le lien de rôle :
Les version api de ressources Kubernetes peuvent être obsolètes, voire supprimés lors de la mise à jour de version Kubernetes.
Il y a une risque de cassure si vous avez des ressources avec une version api supprimé dans la nouvelle version de Kubernetes.
Pour éviter cela, une des solutions est d'utiliser l'outil "kubent" pour vérifier la compatibilité .
Kubent détecte les objets obsolètes du cluster Kubernetes. Vous devez migrer/modifier les ressources identifiés avant la mise à jour de version Kubernetes.
Pour installer kubent :
Pour identifier les objets obsolètes qui vont être supprimés dans la prochain version Kubernetes :
Un exemple de l'output :
Dans ce tutoriel, si votre cluster est planifié pour une mise à jour vers version Kubernetes 1.22, vous devez migrer votre resource ingress nommé "toto" de version api networking.k8s.io/v1beta1
vers networking.k8s.io/v1
avant la mise à jour.
Cette migration peut impliquer une modification des champs supplémentaires de la ressource. Veillez consulter la documentation officielle :
Kubent pourrait échouer de reporter certaine information, e.g. espace de nom de l'ingress, vous pouvez remonter l'issue à l'éditeur : https://github.com/doitintl/kube-no-trouble/issues
Dans cet exemple, nous allons configurer le transfert de logs d'un cluster Kubernetes vers un cluster OpenSearch.
Le cluster OpenSearch est dans cet exemple my-cluster.es.cegedim.cloud
Le nom de la sortie du cluster est my-cluster-output
.
Dans Rancher, sous Logging > ClusterOutput et Logging > Output, modifiez la configuration YAML et changez ceci :
ClusterFlow/ClusterOutput présentent de nombreux problèmes lors de l'envoi de logs à OpenSearch / ELK cluster : Conflit de type de valeur attendue avec la même clé (par exemple, une valeur changée de "long" à "string" sera rejetée par OpenSearch / ELK Cluster).
Cela peut se produire isi vous avez activé Dynatrace.
Voici des exemples complets de la spécification ClusterOutput/Output pour ElasticSearch et OpenSearch :
Il y a deux options :
Migration vers Flow/ClusterOutput : poussera tous les logs des espaces de noms vers le même index OpenSearch.
Migration vers Flow/Output : poussera les logs des espaces de noms séparés vers des index OpenSearch dédiés.
La recommandation est de migrer vers "Flow/Output", et même d'avoir un index OpenSearch dédié pour les applications très importantes.
Créer un fichier avec tous les espaces de noms :
Créer des fichiers K8s YAML pour configurer les logs sur tous les espaces de noms :
Appliquer la configuration :
Créer un fichier avec tous les espaces de noms :
Créer des fichiers K8S YAML :
Appliquer la configuration :
Aucun tampon important ne devrait se produire si tout se passe bien. Vérifions le
Vérifions les 5 dernières lignes du journal de Fluentd :
Jetez un coup d'œil dans /fluentd/log/out
à l'intérieur du pod fluentd
, mais la plupart du temps, ce qui suit vous aidera :
Il est facile d'identifier le pod à l'origine du problème :
Il faut comprendre que l'erreur n'est pas dans Kubernetes, c'est le conteneur qui produit des logs incohérents au format json. Ensuite, OpenSearch rejette les journaux envoyés. Banzai réessayera et tôt ou tard, le débordement arrivera.
Sources :
Une solution à court terme peut être choisie ci-dessous :
Retirer le pod du flux (exclusion du pod) ou désactiver l'ensemble du flux de l'espace de noms concerné.
Nettoyer l'index lié dans le serveur ES
Solution à long terme :
Adapter l'application pour produire un journal plus cohérent
Voir s'il est possible de configurer ES pour qu'il ignore gentiment, mais ne rejette pas, le paquet entier envoyé par Banzai.
Ce guide présente l'ensemble des éléments de configuration nécessaires pour améliorer la disponibilité et la continuité de service de vos applications déployées dans un cluster Kubernetes managés par cegedim.cloud.
Il s'agit d'un guide indispensable pour que votre stratégie de reprise après sinistre réponde aux exigences de cegedim.cloud.
Une fois votre cluster Kubernetes configuré pour fonctionner selon la topologie de haute disponibilité (HA), certaines bonnes pratiques de configuration sont nécessaires pour permettre à vos applications :
pour fonctionner de façon simultanée sur tous les centres de données de la région.
de disposer d'une capacité suffisante dans tous les centres de données en cas de catastrophe sur l'un d'entre eux
Pour rappel, les nœuds des clusters Kubernetes sont répartis dans 3 zones de disponibilité (AZ) et 2 centres de données :
AZ "A" et "B" fonctionnent sur le centre de données primaire.
AZ "C" fonctionne sur le centre de données secondaire.
Pour les services sans état qui prennent en charge la mise à l'échelle, la meilleure pratique consiste à faire fonctionner au moins trois pods :
Ces 3 pods doivent être correctement configurés pour qu'au moins un pod fonctionne sur chaque zone de disponibilité :
Nous utilisons preferedDuringSchedulingIgnoredDuringExecution
et non requiredDuringSchedulingIgnoredDuringExecution
car nous voulons que cette exigence soit "souple" : Kubernetes permettra alors de programmer plusieurs pods sur la même AZ si vous exécutez plus de répliques que d'AZ, ou en cas de défaillance d'une zone.
Dans kube 1.20, failure-domain.beta.kubernetes.io/zone
sera déprécié, la nouvelle clé de topologie sera topologie.kubernetes.io/zone
Si vous utilisez la topologie de cluster haute disponibilité, votre objectif est de déployer des applications résilientes en cas de panne du centre de données.
Cette page décrit quelques bonnes pratiques pour déterminer le dimensionnement des nœuds de travail pour chaque zone de disponibilité où vos charges de travail sont exécutées.
Pour rappel, Kubernetes Cluster est déployé dans 3 zones de disponibilité, et 2 centres de données. Dans le pire des cas, une seul zone de disponibilité fonctionnera si le centre de données primaire subit un sinistre majeur.
C'est l'hypothèse à prendre en compte pour déterminer le dimensionnement "nominal", que l'on peut appeler "Si le centre de données primaire tombe en panne, de quelle capacité de CPU / RAM ai-je besoin pour continuer à faire fonctionner mon application ?".
Pour déterminer cette capacité, puis les nœuds de travail déployés dans la zone de disponibilité "C" (combien, et avec quelles ressources), vous aurez besoin de 3 paramètres :
Vous avez alors deux possibilités pour calculer la taille :
Au niveau de la granularité "Cluster Level": si vous débutez le processus et que vos charges de travail ne sont pas aussi complexes ou variables, utilisez cette option :
Déterminer un MBCO global pour les déploiements croisés
Additionner toutes les demandes de ressources des pods pour obtenir un numéro unique.
Additionner toutes les ressources utilisées par les pods pour obtenir un nombre unique.
Au niveau de la granularité "Pod Level" : Si vous voulez que le dimensionnement soit parfaitement adapté et que vous en avez le temps, prenez le temps de déterminer ces paramètres pour chaque déploiement de votre cluster Kubernetes, car le MBCO peut varier ! Par exemple :
Une application web nécessitera un MBCO avec 100 %.
Un cache nécessitera un MBCO de 50%.
Une fonctionnalité "agréable à avoir" ou un outil interne peut être à 0 %.
Le calcul au "niveau de cluster" n'est pas assez précis pour être absolument certain que le cluster sera d'une taille appropriée. Il suffit de le savoir et d'évaluer si cela vaut la peine de prendre le risque.
Dans tous les cas, ce dimensionnement doit être réévalué régulièrement, en fonction des nouveaux déploiements ou des redimensionnements que vous effectuez dans vos opérations quotidiennes.
Si vous avez additionné toutes les demandes et l'utilisation, et que vous avez déterminé le MBCO au niveau du "cluster", vous pouvez utiliser cette formule simple pour calculer le dimensionnement requis pour l'AZ "C" dans le centre de données secondaire :
Si vous avez déterminé un MBCO par déploiement, vous devrez calculer votre dimensionnement avec une formule plus complexe :
Une fois que vous avez calculé votre MBCO, il est important de tirer parti des capacités de Kubernetes (QoS, notamment PodDisruptionBudget
) pour que votre déploiement suive votre décision.
Utilisez ITCare ou demandez l'aide de notre support pour dimensionner votre cluster.
Au cours de cette phase, vous devrez hiérarchiser vos actifs et définir les composants qui sont essentiels à la disponibilité de vos services.
connaître l'utilisation de vos ressources, une fois le déploiement effectué, il est bon d'observer la consommation de ressources de votre charge de travail.
Dans Kubernetes il y a 3 classes de QoS :
Garantie
Burstable
BestEffort
Pour les charges de travail critiques, vous pouvez utiliser la QOS "garantie", qui définit simplement les limites de ressources égales aux demandes de ressources :
Pour les charges de travail moins critiques, vous pouvez utiliser le QOS "Burstable", qui définira les limites de ressources et les demandes.
Le budget de perturbation des pods vous permettra de configurer votre tolérance aux pannes et le nombre de pannes que votre application peut supporter avant d'être indisponible.
Avec une charge de travail sans état, l'objectif est d'avoir un nombre minimum de pods disponibles à tout moment, pour ce faire vous pouvez définir un simple budget de perturbation des pods :
Avec une charge de travail à état, le but est d'avoir un nombre maximum de pods indisponibles à tout moment, afin de maintenir le quorum par exemple :
Scénarios de trafic élevé :
Topologies | Centre de données des masters | Centre de données des workers | Zones de disponibilité des workers | Zones de disponibilité du cluster | Protection reprise après sinistre | Recovery Time Objective (RTO) |
---|---|---|---|---|---|---|
Topology | EB-EMEA | EB-HDS | ET-EMEA | ET-HDS |
---|---|---|---|---|
Clé | Composant |
---|---|
Composants | Versions |
---|---|
Composant | Version |
---|---|
Nom | Description |
---|---|
EB | ET | |
---|---|---|
CSI Ceph-rbd | |
---|---|
Classes de stockage | CSI |
---|---|
Paramètre | Description |
---|
vous pouvez accéder à vos métriques via l'interface utilisateur de rancher ou via un client comme .
Standard
1
1
2
2
4h
Haute Disponibilité
3
2
3
4
0 - 5 min
Standard
High Availability
topology.kubernetes.io/region
Région
topology.kubernetes.io/zone
Zone de disponibilité
kubernetes.io/hostname
FQDN du noeud
Rancher
2.8.3
Kubernetes
1.28
Ingress controllers
ingress-nginx 1.10.0, traefik 2.11.2, istio 1.20.3
Prometheus
2.42.0
Grafana
9.1.5
Helm
3.13.3
CSI Ceph
3.9.0
Node OS
Ubuntu 22.04
CNI - canal (Calico+Flannel)
3.26.3
Docker
24.0.9
Ceph Cluster
17.2.5
CSI Ceph
3.9.0
cgdm-rwo
Utiliser CSI Ceph rbd pour provisioner des volumes persistants ReadWriteOnce
cgdm-rwo
Ceph RBD
Réplication
x4
x4
Tolérance de panne : Une AZ indisponible
Tolérance de panne : Un DC indisponible
Approvisionnement de nouveaux PV
Remonter le PV existant
Compatible avec toutes les applications K8S
Montage multiple (RWX)
Redimensionnable
Aperçu
Tolérance de panne : perte de 1 AZ
Tolérance de panne : perte de 1 DC
Compatible avec K8S 1.22+
Compatible avec K8S 1.22-
Minimum Business Continuity Objective (MBCO) | Comme le RTO / RPO, le MBCO est un paramètre majeur pour dimensionner votre DRP. En résumé, il s'agit du pourcentage de capacité de votre application déployée qui est nécessaire pour que votre entreprise soit opérationnelle. Selon la taille de vos charges de travail lorsque vous les exécutez dans 3 AZ, la performance que vous jugez suffisante peut être de 30%, 50% ou 100%. Par exemple, si vous avez une application avec 3 répliques de 4GB RAM sur chaque AZ, vous pouvez déterminer le MBCO de manière très différente :
Le choix vous appartient ! |
Pods Ressources Demandes | Comme Kubernetes essaiera de replanifier vos pods en cas de panne, les requêtes sont un paramètre absolument majeur à gérer. Si l'AZ-C n'a pas assez de ressources pour satisfaire toutes les exigences des déploiements de pods souhaités, Kubernetes ne les déploiera pas, et peut-être que vos applications ne seront pas disponibles ! Pour connaître vos demandes, vous pouvez exécuter cette commande :
|
Utilisation des ressources | Déterminer les demandes, c'est bien pour être sûr que Kubernetes déploiera autant de pods que vous le souhaitez, mais qu'en est-il de la capacité réelle utilisée par vos pods ? Il faut également en tenir compte pour avoir une idée des ressources "brutes" dont vos applications ont besoin. Pour le déterminer, vous pouvez exécuter cette commande pour connaître l'utilisation actuelle de votre pod :
|
EB (Boulogne-Billancourt)
ET (Toulouse-Labège)
Les pods sont déployés en utilisant les Kubernetes.