Utiliser des instantanés d'artefact pour protéger vos grappes de moteurs Kubernetes pour OCI contre les catastrophes

Pour assurer la continuité des activités en cas de sinistre, vous devez mettre en œuvre une stratégie de reprise après sinistre pour les applications exécutées sur une grappe Kubernetes qui assure la protection des données et vous permet de passer rapidement à un système de secours avec une perte minimale de données et de productivité. Malgré l'énorme changement que l'adoption de Kubernetes implique pour l'architecture du système informatique, un système Kubernetes présente des paradigmes de reprise après sinistre similaires à ceux d'une application traditionnelle (Oracle Java SE, Oracle Java EE, etc.). Vous devez maintenir une copie cohérente et aussi à jour que possible de votre système principal dans un emplacement secondaire qui peut reprendre les charges de travail en cas de sinistre entraînant un temps d'arrêt dans la région principale.

Oracle Maximum Availability Architecture (Oracle MAA) fournit des recommandations et des utilitaires qui vous permettent de récupérer dans des scénarios de sinistre affectant un emplacement et forçant la redirection des charges de travail vers un site de réplique. Ce contenu se concentre sur la réplication de configuration Kubernetes pour les applications. Les applications exécutées sur des grappes Kubernetes dépendent de nombreux composants différents à exploiter, notamment les noeuds de plan de contrôle, les noeuds de travail, les équilibreurs de charge et le stockage. En même temps, les données d'exécution générées par les applications exécutées sur Kubernetes présentent les mêmes défis que les applications classiques. Lors de l'exécution, les applications peuvent générer, lire et mettre à jour les données persistantes. Ce livre de jeu de solutions fournit des recommandations pour répliquer la configuration d'une application s'exécutant sur Kubernetes. La protection contre les sinistres des données d'exécution est hors du champ d'application du présent document et doit être traitée exactement de la même manière que dans les applications traditionnelles exécutées sur des serveurs d'applications, notamment :

  • Évitez la persistance polyglotte. L'utilisation de différents types de stockage persistants pour les données d'exécution est presque impossible à résoudre, selon le théorème de cohérence de la disponibilité des sauvegardes (BAC).
  • Utilisez un magasin unique pour tous les différents types de données, microservices et applications avec dépendances, autant que possible.
  • Voir Meilleures pratiques Oracle MAA pour Oracle Database pour la protection contre les sinistres de vos données d'exécution.

En outre, vous devez protéger le plan de contrôle de grappe Kubernetes. Utilisez les instantanés etcd appropriés pour éviter les corruptions, les défaillances et fournir un flashback aux grappes en cours. Bien qu'Oracle MAA fournisse les meilleures pratiques de protection du plan de contrôle contre les sinistres, il n'est pas inclus dans ce document pour décrire les techniques requises dans ce domaine.

Étapes préliminaires

Il existe plusieurs présentations techniques d'Oracle MAA qui décrivent comment configurer un système de récupération après sinistre pour les systèmes intergiciels traditionnels. Ces documents décrivent en détail les exigences de protection en cas de sinistre pour les composants de l'infrastructure externe (tels que le stockage, les équilibreurs de charge et la base de données) utilisés par les applications Kubernetes.

Pour plus de détails, consultez les informations suivantes :

Architecture

Cette architecture présente la topologie du système de récupération après sinistre pour la grappe Kubernetes.

Toutes les informations d'exécution, de configuration et de métadonnées résidant dans la base de données principale sont répliquées de la région 1 vers la région 2 avec Oracle Autonomous Data Guard. La configuration de grappe Kubernetes (K8s) requise est répliquée au moyen d'instantanés ETCD pour la protection du plan de contrôle et d'instantanés YAML pour la protection de la configuration d'application. Vous pouvez utiliser des instantanés d'artefact ou des copies etcd ou des instantanés d'artefact pour la protection de la configuration propre à l'application pour la protection de la configuration propre à l'application. Pour plus de détails, voir Restauration de grappes Kubernetes basée sur des instantanés etcd. Les images utilisées par le conteneur sont hébergées dans des registres, locaux à chaque grappe ou dans des référentiels externes (les images ne sont pas considérées comme une configuration de grappe Kubernetes elles-mêmes).

Note :

La configuration d'Oracle Autonomous Data Guard pour la base de données d'exécution n'est pas incluse dans ce document.
Une description de kubernetes-multiregion-dr.png suit
Description de l'illustration kubernetes-multiregion-dr.png

kubernetes-multirégion-dr-oracle.zip

Cette architecture prend en charge les composants suivants :

  • Région

    Une région Oracle Cloud Infrastructure est une zone géographique localisée qui contient un ou plusieurs centres de données, appelés domaines de disponibilité. Les régions sont indépendantes les unes des autres, et de grandes distances peuvent les séparer (dans différents pays ou continents).

  • Équilibreur de charge

    Oracle Cloud Infrastructure Load Balancing permet une répartition automatisée du trafic d'un point d'entrée unique vers plusieurs serveurs.

  • Passerelle de routage dynamique (DRG)

    La passerelle DRG est un routeur virtuel qui fournit un chemin pour le trafic réseau privé entre les réseaux en nuage virtuels de la même région, entre un VCN et un réseau en dehors de la région, tel qu'un VCN dans une autre région Oracle Cloud Infrastructure, un réseau sur place ou un réseau d'un autre fournisseur de nuage.

  • Data Guard

    Oracle Data Guard et Oracle Active Data Guard fournissent un jeu complet de services qui créent, tiennent à jour, gèrent et surveillent une ou plusieurs bases de données de secours et qui permettent aux bases de données Oracle de production de rester disponibles sans interruption. Oracle Data Guard tient à jour ces bases de données de secours en tant que copies de la base de données de production à l'aide de la réplication en mémoire. Si la base de données de production devient indisponible en raison d'une interruption planifiée ou non planifiée, Oracle Data Guard peut remplacer n'importe quelle base de données de secours par le rôle de production, réduisant ainsi le temps d'arrêt associé à l'interruption. Oracle Active Data Guard offre la possibilité supplémentaire de décharger les charges de travail en lecture principalement vers les bases de données de secours et fournit également des fonctions avancées de protection des données.

  • Oracle Real Application Clusters (Oracle RAC)

    Oracle RAC vous permet d'exécuter une seule base de données Oracle Database sur plusieurs serveurs pour maximiser la disponibilité et permettre une évolutivité horizontale, tout en accédant au stockage partagé. Les sessions utilisateur qui se connectent aux instances Oracle RAC peuvent effectuer un basculement et réexécuter les modifications en toute sécurité lors des pannes, sans apporter de modifications aux applications de l'utilisateur final.

  • Registre

    Oracle Cloud Infrastructure Registry est un registre géré par Oracle qui vous permet de simplifier votre flux de travail, du développement à la mise en production. Le registre vous permet de stocker, de partager et de gérer facilement des artefacts de développement, tels que des images Docker. L'architecture hautement disponible et évolutive d'Oracle Cloud Infrastructure vous permet de déployer et de gérer vos applications en toute confiance.

  • Moteur Kubernetes

    Oracle Cloud Infrastructure Kubernetes Engine pour (Moteur Kubernetes pour OCI ou OKE) est un service entièrement géré, évolutif et hautement disponible que vous pouvez utiliser pour déployer vos applications conteneurisées dans le nuage. Vous indiquez les ressources de calcul dont vos applications ont besoin et Kubernetes Engine les provisionne sur Oracle Cloud Infrastructure dans une location existante. OKE utilise Kubernetes pour automatiser le déploiement, l'ajustement et la gestion des applications conteneurisées sur les grappes d'hôtes.

  • Grappe Kubernetes

    Une grappe Kubernetes est un ensemble de machines qui exécutent des applications en conteneur. Kubernetes fournit une plate-forme portative, extensible et à code source libre pour la gestion des charges de travail et des services conteneurisés dans ces noeuds. Une grappe Kubernetes est formée de noeuds de travail et de noeuds de plan de contrôle.

  • Noeud de travail Kubernetes

    Un noeud de travail Kubernetes est une machine de travail qui exécute des applications conteneurisées dans une grappe Kubernetes. Chaque grappe comporte au moins un noeud de travail.

  • Plan de contrôle Kubernetes

    Un plan de contrôle Kubernetes gère les ressources pour les noeuds de travail et les pods d'une grappe Kubernetes. Les composants du plan de contrôle détectent les événements et y répondent, effectuent la programmation et déplacent les ressources de la grappe.

    Voici les composants du plan de contrôle :
    • kube-apiserver : Exécute le serveur d'API Kubernetes.
    • etcd : Stockage clé-valeur distribué pour toutes les données du cluster.
    • kube-scheduler : Détermine sur quel noeud les nouveaux pods non affectés seront exécutés.
    • kube-controller-manager : exécute les processus du contrôleur.
    • cloud-controller-manager : relie votre grappe à une API propre au nuage.
  • Contrôleur de trafic entrant

    Un contrôleur de trafic entrant est un composant qui s'exécute dans une grappe Kubernetes et gère les ressources de trafic entrant. Il reçoit le trafic du réseau externe, l'achemine vers le service approprié et effectue l'équilibrage de charge et la terminaison SSL. Le contrôleur de trafic entrant s'exécute généralement en tant que pod distinct dans la grappe et peut être ajusté indépendamment des services qu'il gère.

  • API de point d'extrémité KUBE

    L'API KUBE-Endpoint est le composant kube-apiserver du plan de contrôle Kubernetes. Il exécute le serveur d'API Kubernetes.

  • Sauvegarde ETCD

    La sauvegarde ETCD est une sauvegarde du composant etcd du plan de contrôle Kubernetes. etcd contient le magasin clé-valeur réparti pour toutes les données de grappe. Il est important de créer une sauvegarde ETCD pour récupérer les grappes Kubernetes aux fins de récupération après sinistre.

  • Instantanés YAML

    Un instantané YAML est une copie à un instant donné des fichiers (YAML) contenant la définition des artefacts dans une grappe Kubernetes. L'instantané est un fichier TAR que vous pouvez utiliser pour restaurer ces artefacts dans la même grappe Kubernetes ou dans une autre grappe.

Considérations relatives à la protection contre les catastrophes de Kubernetes

Lors de la mise en oeuvre de la protection en cas de sinistre pour Kubernetes, tenez compte des éléments suivants :

  • Récupération après sinistre symétrique : Oracle recommande d'utiliser exactement la même capacité et la même configuration de ressource dans l'instance principale et l'instance secondaire. Les espaces de noms Kubernetes concernés doivent disposer de ressources similaires, telles que le nombre de noeuds de travail (et leur capacité matérielle) et d'autres infrastructures (stockage partagé, équilibreurs de charge, bases de données, etc.). Les ressources dont dépend la grappe Kubernetes dans la région secondaire doivent pouvoir suivre les mêmes charges de travail que la grappe principale. En outre, les deux systèmes doivent être cohérents fonctionnellement avec les mêmes services dont dépend le système restauré, les voitures latérales, les cartes de configuration (CM) doivent être utilisées dans les deux endroits.
  • Les images présentent un paradigme similaire aux fichiers binaires : Les images ne changent pas aussi fréquemment que la configuration de Kubernetes et vous n'avez peut-être pas besoin de mettre à jour les images avec chaque réplication de grappe Kubernetes. Les images utilisées par le système principal doivent être les mêmes que celles utilisées dans le système secondaire ou des incohérences et une défaillance peuvent se produire. Cependant, la réplication d'image est hors de portée de ce livre de jeu. Il existe plusieurs stratégies que vous pouvez utiliser pour maintenir une utilisation cohérente des images entre deux emplacements, notamment :
    • Enregistrer les images dans les noeuds de travail principaux et les charger dans les noeuds de travail secondaires. Cette approche est très facile à mettre en œuvre, mais entraîne des frais généraux de gestion. L'utilisation de registres de conteneurs présente des avantages considérables et l'enregistrement local des images rend plus difficile la gestion des versions et des mises à jour.
    • Les images peuvent résider dans des registres de conteneurs totalement externes dans différentes régions ou centres de données à partir de ceux utilisés par la base principale et la base de secours. Les produits et bibliothèques externes sont gérés par des tiers et leur disponibilité est généralement implicite dans leurs versions.
    • Les images peuvent résider dans des registres de conteneurs situés dans la base principale et la base de secours. Chaque région est mise à jour en parallèle lorsqu'une nouvelle version d'une image est publiée. Cela fournit un meilleur contrôle sur le logiciel utilisé, mais entraîne une surcharge de gestion plus élevée. Il faut dupliquer des images et gérer les données d'identification pour accéder à deux registres différents. Les outils d'intégration et de déploiement continus sont généralement utilisés pour cette approche.

Bien que ce livre de jeu présente un exemple d'utilisation d'Oracle Cloud Infrastructure, les recommandations sont génériques pour les grappes Kubernetes personnalisées installées dans les systèmes sur place. Vous pouvez utiliser les étapes et les scripts fournis entre une grappe Kubernetes principale s'exécutant dans OCI Kubernetes Engine (OKE) et une grappe secondaire s'exécutant dans une grappe Kubernetes sur place ou personnalisée. Vous pouvez également utiliser les étapes et les scripts entre une grappe Kubernetes principale s'exécutant dans OKE et une grappe secondaire s'exécutant également dans OKE, ou entre deux grappes Kubernetes sur place ou personnalisées.

À propos des produits et des rôles requis

Cette solution nécessite les produits et les rôles suivants :

  • Grappe Oracle Cloud Infrastructure Kubernetes Engine (Kubernetes Engine ou OKE)
  • Noeud d'hôte bastion capable de gérer le système kubernetes
  • Oracle Cloud Infrastructure (OCI)

Ce livre de jeu est basé sur l'utilisation de régions et de ressources OCI pour les régions principale et secondaire. Toutefois, cette solution s'applique également aux grappes Kubernetes qui ne se trouvent pas sur OCI.

Il s'agit des rôles nécessaires pour chaque service.

Nom de service : Rôle Requis pour...
Oracle Cloud Infrastructure : admin provisionner et configurer des ressources et des services si vous utilisez une ou plusieurs régions OCI.
Grappe Kubernetes Engine (principale) : administrator exécuter tous les scripts.
Noeuds Kubernetes Engine (principaux) : Utilisateur de système d'exploitation avec autorisations d'exécution et autorisations SSH vers les noeuds secondaires

Exécutez les scripts suivants :

  • maak8-get-all-artifacts.sh
  • maak8DR-apply.sh
Grappe Kubernetes Engine (secondaire) : administrator exécuter tous les scripts.
Noeuds Kubernetes Engine (secondaires) : Utilisateur de système d'exploitation avec autorisations d'exécution

Exécutez les scripts suivants :

  • removeyamlblock.sh
  • apply-artifacts.sh
  • maak8-push-all-artifacts.sh

Voir Produits, solutions et services Oracle pour obtenir ce dont vous avez besoin.