Annuaire d'articles
- Introduction
- 2. Présentation de Kubernetes
- 3. Basculement
- 4. Capacité d'auto-guérison
- 5. Débogage dans Kubernetes
- 6. Améliorer les capacités de basculement et d'auto-rétablissement
-
- 1. Meilleures pratiques et outils
- 2. L'exécution d'applications via Kubernetes conduit à des systèmes plus fiables
- 7. Conclusion
Introduction
1. Présentation de Kubernetes
ubernetes est une plate-forme open source d'orchestration de conteneurs capable de gérer automatiquement le déploiement, la mise à l'échelle et la mise à niveau des conteneurs. Il allège la charge des développeurs et améliore la fiabilité et l'évolutivité des applications. L'une des raisons du succès de Kubernetes est ses capacités de basculement automatisé et d'auto-rétablissement, des fonctionnalités qui en font l'une des plateformes incontournables pour le développement d'applications cloud natives.
2. L'importance des capacités de basculement et d'autoréparation
故障转移功能
Permet à Kubernetes de détecter les défaillances dans les conteneurs, les nœuds, les pods et les environnements de cluster entiers. Une fois qu'une panne est détectée, il redémarre automatiquement les conteneurs ou replanifie les pods pour garantir la disponibilité des applications. Ce mécanisme de basculement automatisé améliore considérablement la fiabilité du système et réduit les temps d'arrêt des applications.
自愈能力
est une autre fonctionnalité importante de Kubernetes qui permet à Kubernetes de réparer automatiquement les nœuds, conteneurs et pods problématiques. Lorsqu'un nœud ou un pod tombe en panne, Kubernetes les supprime automatiquement temporairement du cluster et les recrée pour garantir la disponibilité des applications. De même, lorsque des nœuds ou des conteneurs échouent, Kubernetes peut automatiquement les déplacer vers un autre nœud ou les redémarrer.
Ces fonctionnalités réduisent considérablement le besoin d'intervention manuelle et améliorent considérablement la fiabilité et la disponibilité des applications. Ils peuvent également fournir aux entreprises un meilleur support d'exploitation et de maintenance et réduire les coûts de gestion. En outre, la détection et le transfert automatisés des pannes peuvent également améliorer les capacités d'intégration et de collaboration avec d'autres services, améliorant encore les performances et la fiabilité globales du système.
À l'ère du cloud computing, la fiabilité et l'évolutivité des applications deviennent des impératifs dans l'architecture technique. L'utilisation de Kubernetes peut améliorer considérablement l'efficacité des développeurs et la fiabilité du système, réduisant ainsi les risques de problèmes de panne et d'interruptions de service. Par conséquent, Kubernetes, en tant que système d'orchestration de conteneurs de nouvelle génération, est devenu un élément indispensable des entreprises modernes.
2. Présentation de Kubernetes
1. Architecture Kubernetes
L'architecture Kubernetes comprend les composants suivants :
- Nœud maître :
contrôle l'état et les processus de l'ensemble du cluster et planifie les applications. - Nœuds de travail :
exécutez des instances de conteneur. - etcd :
stocke les informations d'état pour l'ensemble du cluster.
Dans l'architecture Kubernetes, le nœud maître est le composant responsable de la gestion et de la surveillance de l'ensemble du cluster. Il comprend les composants de base suivants :
- Serveur d'API :
expose les informations d'état du cluster et les interfaces qui peuvent être exploitées via l'interface de l'API REST. Toutes les commandes de contrôle Kubernetes sont transmises aux composants correspondants par le serveur API. - etcd :
stocke les informations d'état du cluster. Il s'agit d'un système de stockage clé-valeur hautement fiable et évolutif utilisé par Kubernetes pour stocker la configuration, l'état et les métadonnées de l'ensemble du cluster. - Controller Manager :
surveille l'état du cluster et s'assure que l'état attendu du système est cohérent avec l'état réel. Il atteint cet objectif grâce à plusieurs contrôleurs, tels que le contrôleur de réplication et le contrôleur de point final, etc. - Planificateur :
responsable de l'attribution des applications aux nœuds de travail et de l'organisation de l'emplacement des instances de conteneur en fonction de la politique de planification.
Les nœuds de travail sont des nœuds de calcul dans le cluster Kubernetes qui exécutent des instances de conteneur et sont responsables de la surveillance de ces instances de conteneur. Il comprend les composants suivants :
- kubelet :
surveillez l'état d'exécution des instances de conteneur et signalez les informations d'état au nœud maître. Il analyse également les informations de spécification du conteneur pour s'assurer que le conteneur est correctement configuré et exécute l'application à l'intérieur du conteneur. - kube-proxy :
proxy réseau, responsable de la maintenance des règles réseau du cluster et du routage des requêtes réseau vers l'endroit où elles doivent aller. Il implémente l'équilibrage de charge interne via iptables et répond aux demandes de contrôle de "santé" des équilibreurs de charge externes avec le protocole ICMP.
2. Composants et fonctions de Kubernetes
Kubernetes fournit les composants et fonctionnalités suivants pour une meilleure gestion et un meilleur fonctionnement des applications conteneurisées :
- Pod :
Pod est l'unité la plus basique de Kubernetes, qui est une collection d'un ou plusieurs conteneurs. Le pod a une adresse IP distincte et un environnement indépendant, et l'espace réseau est partagé entre les conteneurs, qui peuvent être partagés via des ressources telles que IPC et Volum. - Service :
le service est un mécanisme de communication réseau entre conteneurs. Il peut mapper un groupe de conteneurs du même type et fournir des fonctions telles que l'équilibrage de charge et la découverte de services. Service fournit différents types de services via ClusterIP, NodePort et LoadBalancer. - Volume :
le volume est l'abstraction de stockage du conteneur, qui peut être utilisée pour les données persistantes ou le stockage partagé. - ReplicaSet :
ReplicaSet garantit que le nombre de pods dans un groupe correspond toujours au nombre spécifié de répliques, ce qui peut être utilisé pour garantir l'auto-réparation et la disponibilité des applications en cas de panne. - Déploiement :
le déploiement est une extension de ReplicaSet, qui fournit des fonctions telles que la mise à niveau progressive et la restauration. - StatefulSet :
StatefulSet est une séquence de pods. Chaque pod possède un identifiant réseau indépendant et est identifiable. Il peut être utilisé pour les applications qui nécessitent un stockage persistant, un déploiement ordonné ou des systèmes de stockage intégrés. - ConfigMap et Secret :
ConfigMap et Secret sont des objets qui séparent les informations de configuration et de mot de passe du code source de l'application, et ils peuvent être montés dans des instances de conteneur sans être exposés aux variables d'environnement ou au code.
En général, Kubernetes fournit de nombreuses fonctions qui facilitent le déploiement, l'exploitation et la maintenance des applications conteneurisées. Avec Kubernetes, vous pouvez facilement faire évoluer les applications, réaliser un équilibrage de charge, garantir une haute disponibilité et effectuer des opérations telles que des mises à jour progressives et des restaurations. En outre, la fonctionnalité et l'efficacité des applications conteneurisées peuvent être encore améliorées grâce à une intégration élevée avec d'autres outils et plates-formes natifs du cloud tels que ISTIO et Operator Framework.
3. Basculement
1. Comment définir le basculement
Le basculement signifie qu'en cas de défaillance d'un système ou d'une application, il transfère ou redistribue automatiquement la charge de travail vers d'autres nœuds ou instances disponibles pour maintenir la disponibilité et la continuité des services. Le basculement est une caractéristique clé du cloud computing et des systèmes distribués, aidant les applications à maintenir leurs fonctionnalités et à assurer un fonctionnement fluide.
Les mécanismes de basculement incluent la coordination et la surveillance de l'état des nœuds d'application et leur restauration automatique à un fonctionnement normal en cas d'échec du maintien de la fiabilité du service. Pour réaliser le basculement, les systèmes et les applications peuvent utiliser des stratégies de sauvegarde et de redondance, telles que le stockage de sauvegarde et les systèmes tolérants aux pannes.
2. Mécanisme de basculement dans Kubernetes
Kubernetes est un système d'orchestration de conteneurs open source qui peut être utilisé pour automatiser le déploiement, la mise à l'échelle et la gestion des applications conteneurisées. Il fournit divers mécanismes de basculement pour garantir que les applications restent disponibles et continuent de fonctionner en cas de panne.
Voici le mécanisme de basculement dans Kubernetes :
2.1 Bilan de santé
Les vérifications de l'état sont au cœur du mécanisme de basculement de Kubernetes. Il vérifie périodiquement l'état de l'application ou du pod à l'intérieur du conteneur pour détecter les échecs ou les plantages à temps, et redémarre ou reconstruit automatiquement les pods défaillants.
Il existe trois types de bilans de santé :
- livenessProbe : vérifie si l'application à l'intérieur du conteneur est active et répond aux requêtes.
- readinessProbe : vérifie si l'application à l'intérieur du conteneur est prête à accepter le trafic réseau.
- startupProbe : vérifie si l'application à l'intérieur du conteneur démarre et attend un certain temps avant que le démarrage ne se termine.
2.2 Pods et ReplicaSets
Pod est la plus petite unité de déploiement de Kubernetes. Il peut contenir un ou plusieurs conteneurs et fournit un environnement de partage de stockage et de ressources réseau.
ReplicaSet est un autre concept important dans Kubernetes. Il est utilisé pour gérer les répliques de pods et s'assurer que le nombre requis de pods est toujours en cours d'exécution.
Si un pod tombe en panne ou est arrêté, le ReplicaSet démarrera automatiquement un nouveau pod pour le remplacer. Cela garantit que les applications de conteneur sont toujours disponibles au moment de l'exécution.
2.3 Contrôleurs et basculement
Dans Kubernetes, un contrôleur est une abstraction de haut niveau utilisée pour gérer les pods et les ReplicaSets et garantir que vos applications se comportent comme prévu. Kubernetes fournit une variété de types de contrôleurs, notamment Deployment, StatefulSet et DaemonSet.
Un contrôleur peut surveiller l'état des pods et des ReplicaSets et les basculer ou les recréer si nécessaire. Par exemple, un contrôleur de déploiement peut augmenter ou réduire automatiquement le nombre de pods pour s'assurer que votre application dispose de suffisamment de ressources.
3. La relation entre les Pods et les ReplicaSets
Le pod est la plus petite unité de déploiement de Kubernetes, qui peut contenir un ou plusieurs conteneurs et fournir un environnement pour partager les ressources de stockage et de réseau. Un ReplicaSet est une abstraction permettant de gérer les répliques de pod et de s'assurer que le nombre requis de pods est en cours d'exécution.
La relation entre Pod et ReplicaSet est la suivante :
- Chaque pod est géré par un ReplicaSet et doit se voir attribuer un ReplicaSet lors de sa création.
- Un ReplicaSet détermine le nombre requis de pods et crée, supprime et reconstruit automatiquement les pods si nécessaire.
- Un ReplicaSet peut instantanément repérer un pod défaillant et le remplacer par un nouveau.
4. Contrôleurs et basculement
Dans Kubernetes, un contrôleur est une abstraction de haut niveau utilisée pour gérer les pods et les ReplicaSets et garantir que vos applications se comportent comme prévu. Kubernetes fournit une variété de types de contrôleurs, notamment Deployment, StatefulSet et DaemonSet.
Le contrôleur peut surveiller l'état des pods et des ReplicaSets et effectuer un basculement ou une recréation si nécessaire. Par exemple, si un pod tombe en panne ou est supprimé, le contrôleur de déploiement peut créer automatiquement un nouveau pod et s'assurer que l'application reste disponible pendant son exécution.
De plus, les contrôleurs peuvent utiliser des capacités de déploiement continu pour s'assurer que les applications sont mises à jour sans interruption de service. Il commute les nouvelles versions des pods en fonction de la disponibilité et des politiques d'équilibrage de charge pour garantir l'absence d'échecs lors des mises à niveau des applications.
4. Capacité d'auto-guérison
1. Comment définir la capacité d'auto-guérison
La capacité d'autoréparation fait référence à la capacité d'un système ou d'une application à se surveiller et à se réparer pour améliorer la disponibilité et la fiabilité du système. Lorsqu'une panne ou une situation anormale se produit, la capacité d'auto-guérison peut automatiquement détecter et traiter le problème, réduisant ainsi le besoin d'intervention manuelle, afin de rétablir rapidement l'état de fonctionnement normal. Cela peut améliorer la disponibilité du système et assurer le fonctionnement continu et stable du système.
Les capacités d'autoréparation sont à la base des applications distribuées modernes. Dans des domaines tels que le cloud computing, la technologie des conteneurs et l'architecture de microservices, les applications complexes et à grande échelle sont devenues la norme. Ces applications contiennent de nombreux composants et services avec des dépendances complexes entre eux. Lorsque l'un des composants ou services tombe en panne, il est susceptible d'affecter le fonctionnement normal de l'ensemble de l'application.
Par conséquent, les capacités d'auto-guérison sont devenues une caractéristique essentielle des applications modernes. Cette capacité peut réduire le besoin d'intervention humaine et améliorer la disponibilité et la stabilité des applications.
2. Mécanisme d'auto-guérison dans Kubernetes
Kubernetes est un système d'orchestration de conteneurs populaire qui fournit une série de mécanismes d'autoréparation pour garantir la disponibilité et la fiabilité des applications de conteneurs. Voici quelques mécanismes d'autoréparation courants de Kubernetes :
2.1 Mise à jour progressive automatique
Les mises à jour continues sont un moyen de mettre à jour les applications dans Kubernetes. Il utilise deux versions de l'application pour mettre à jour progressivement tous les conteneurs afin d'éviter les interruptions et les pannes de service momentanées. Une mise à jour progressive démarre la nouvelle version du conteneur d'application, puis arrête progressivement l'ancienne version jusqu'à ce que tous les conteneurs aient été mis à jour.
2.2 Expansion et contraction automatiques
Kubernetes peut ajuster automatiquement le nombre de répliques en fonction de la charge de l'application pour assurer la disponibilité du système. Lorsque la charge devient élevée, il augmente automatiquement le nombre de répliques ; lorsque la charge devient très faible, il diminue automatiquement le nombre de répliques. Ce mécanisme d'expansion et de contraction adaptatif peut assurer la stabilité et la disponibilité du système.
2.3 Tolérance automatique aux pannes
Kubernetes dispose d'une série de mécanismes de tolérance aux pannes, notamment le redémarrage du pod, le redémarrage du conteneur, le redémarrage du nœud, etc. Ces mécanismes peuvent garantir que l'application peut rapidement revenir à un état normal en cas de panne.
2.4 Configuration de la mise à jour automatique
Kubernetes peut automatiquement mettre à jour la configuration de l'application pour s'assurer que l'application dispose de la dernière configuration au moment de l'exécution. Ce processus de mise à jour est très sûr, car il garantira que tous les pods ont été démarrés avec succès et n'interrompra ni ne perdra aucune requête pendant le processus.
2.5 Réparation automatique
Kubernetes dispose de mécanismes d'auto-réparation capables de détecter et de réparer automatiquement les pannes ou les conditions anormales dans les pods. Ces mécanismes incluent les sondes de vivacité et de préparation, les vérifications de l'état des pods, etc.
3. Surveillance de la santé des pods
La surveillance Pod
de la santé fait référence à la surveillance de la santé de chaque conteneur dans un pod. Lorsqu'un conteneur est anormal, Kubernetes redémarre automatiquement le conteneur ou l'ensemble du pod en fonction de la configuration. Ce mécanisme de surveillance de l'intégrité peut garantir que l'application peut rapidement revenir à un état normal en cas de panne.
Lorsque Kubernetes détermine que le conteneur à l'intérieur du pod est défectueux, il redémarre automatiquement le conteneur via un mécanisme d'auto-réparation pour restaurer autant de conteneurs que possible en fonctionnement normal. Si la récupération n'est pas possible, l'intégralité de l'instance de pod est supprimée. Ce mécanisme évite la nécessité d'une intervention manuelle par le personnel d'exploitation et de maintenance, ce qui rend l'automatisation plus parfaite.
4. Que sont les sondes de vivacité et de préparation
Liveness
La sonde surveille si le conteneur est toujours en cours d'exécution, et si la sonde échoue, Kubernetes tue le conteneur et en redémarre un nouveau. La sonde Liveness est utilisée à l'intérieur du conteneur pour résoudre des problèmes tels que l'animation suspendue du processus et l'impasse. La sonde Liveness détecte l'état d'exécution d'un conteneur en envoyant une requête à la console du conteneur. Si la sonde reçoit une réponse, le conteneur est sain ; sinon, le conteneur peut avoir un problème et doit être redémarré.
Readiness 探针监测容器
Si une demande externe a été reçue. Si la sonde échoue, Kubernetes arrête d'envoyer du trafic vers le conteneur, évitant ainsi d'envoyer des requêtes au conteneur défaillant. La sonde Readiness est utilisée pour résoudre le problème selon lequel le conteneur ne peut pas recevoir de requêtes immédiatement lorsqu'il démarre.
En conclusion, la capacité d'auto-guérison est une caractéristique essentielle des applications modernes. Kubernetes fournit une série de mécanismes d'auto-réparation, y compris la mise à niveau automatique, l'expansion et la contraction automatiques, la tolérance aux pannes automatique, la réparation automatique et la configuration de mise à jour automatique. La surveillance de la santé des pods et les sondes de vivacité et de préparation sont également des mécanismes d'auto-guérison très importants dans Kubernetes. Ces mécanismes peuvent réduire le besoin d'intervention humaine et augmenter la disponibilité et la stabilité des applications.
Le contenu ci-dessus est sorti dans un bloc de code avec la syntaxe marknow
5. Débogage dans Kubernetes
1. Se connecter à Kubernetes
Dans Kubernetes, la journalisation est une partie très importante. De nombreux composants d'un cluster Kubernetes fournissent différents niveaux de journalisation qui peuvent vous dire ce qui se passe dans le cluster et vous aider à trouver d'éventuels problèmes. Voici quelques composants Kubernetes courants et leurs emplacements de journalisation correspondants :
- kube-apiserver : par défaut, l'emplacement de journalisation de kube-apiserver est /var/log/kube-apiserver.log.
- kube-controller-manager : par défaut, l'emplacement de journalisation pour kube-controller-manager est /var/log/kube-controller-manager.log.
- kube-scheduler : par défaut, l'emplacement de journalisation de kube-scheduler est /var/log/kube-scheduler.log.
- kubelet : kubelet affichera les journaux sur stdout et /var/log/kubelet.log.
- kube-proxy : l'emplacement de journalisation par défaut pour kube-proxy est /var/log/kube-proxy.log.
Outre la journalisation des composants ci-dessus, il existe quelques autres emplacements de journalisation à prendre en compte. Par exemple, les applications exécutées dans des conteneurs se connectent généralement à stdout ou stderr, qui sont ensuite collectées par Kubernetes et écrites dans leurs journaux de pod.
Les journaux de pod sont accessibles à l'aide des commandes kubectl, par exemple :
kubectl logs <pod-name>
De plus, il existe des outils qui aident à collecter et à afficher les journaux Kubernetes. Par exemple, Elasticsearch et Kibana peuvent être utilisés pour un diagnostic et une analyse centralisés des journaux Kubernetes.
2. Capacités de basculement de débogage et d'auto-réparation
Kubernetes offre de nombreuses fonctionnalités de basculement et d'autoréparation, notamment :
- Redémarrer automatiquement les conteneurs : si un conteneur tombe en panne, Kubernetes redémarre automatiquement le conteneur, ce qui contribue à maintenir la stabilité de l'application.
- Mise à l'échelle automatique des pods : Kubernetes peut automatiquement mettre à l'échelle les pods en fonction de métriques telles que l'utilisation du processeur pour répondre aux besoins des applications.
- Basculement automatique : si un nœud ou un pod tombe en panne, Kubernetes migrera automatiquement le nœud ou le pod vers d'autres nœuds et restaurera le service à l'application dès que possible.
Cependant, lorsque Kubernetes ne parvient pas à résoudre automatiquement les échecs, les problèmes doivent être suivis et débogués manuellement. Voici quelques conseils de débogage courants :
- Afficher l'état des pods : vous pouvez utiliser la commande kubectl pour afficher l'état des pods, par exemple :
kubectl get pods
Cela répertoriera tous les pods et leur état actuel.
- Afficher les événements : vous pouvez utiliser la commande kubectl pour afficher les événements qui se produisent dans le cluster, par exemple :
kubectl get events
Cela listera tous les événements publiés dans le cluster.
- Exporter les journaux du pod : lorsqu'un pod est dans un état anormal, vous pouvez utiliser la commande kubectl pour exporter les journaux du pod, par exemple :
kubectl logs <pod-name> > pod.log
Cela exportera les journaux du pod dans le fichier pod.log pour une analyse plus facile.
- Débogage du conteneur : vous pouvez utiliser la commande kubectl exec pour exécuter des commandes à l'intérieur du conteneur, par exemple :
kubectl exec <pod-name> <container-name> -- <command>
Cela exécutera la commande à l'intérieur du conteneur.
Dans Kubernetes, la journalisation et le débogage des fonctionnalités de basculement et d'autoréparation sont très importantes. En surveillant les journaux et les événements de votre cluster, vous pouvez rapidement identifier les problèmes et déboguer les applications. Les capacités de basculement automatique et d'autoréparation de Kubernetes peuvent nous aider à maintenir la stabilité des applications, mais lorsque Kubernetes ne peut pas résoudre automatiquement les problèmes, un suivi manuel et un débogage des problèmes sont nécessaires.
6. Améliorer les capacités de basculement et d'auto-rétablissement
1. Meilleures pratiques et outils
Dans Kubernetes, pour améliorer les capacités de basculement et d'autoréparation, les meilleures pratiques et outils suivants peuvent être adoptés :
1.1 Utiliser le bilan de santé :
La configuration de Liveness Probe et de Readiness Probe dans le conteneur peut vérifier périodiquement l'état de santé du conteneur et redémarrer ou arrêter le conteneur en fonction de la situation. Cela permet d'éviter que la défaillance d'un seul conteneur n'entraîne l'arrêt de l'ensemble de l'application.
Pour utiliser les vérifications d'état :
-
Créez un déploiement ou un pod Kubernetes.
-
Définissez des vérifications de l'état dans les déploiements ou les pods.
-
Exécutez le déploiement ou le pod.
1.1.1 Exemple de code pour un déploiement utilisant des vérifications d'état HTTP :
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
spec:
replicas: 3
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
spec:
containers:
- name: example-container
image: example-image
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /healthz
port: 80
periodSeconds: 5
initialDelaySeconds: 15
Dans cet exemple, nous définissons un déploiement nommé example-deployment qui crée trois répliques, chacune contenant un conteneur nommé example-container. Le conteneur utilise image: example-image et il écoute sur le port 80. De plus, nous définissons une vérification de l'état HTTP qui vérifie que le point de terminaison /healthz du conteneur est disponible. Le livenessProbe indique à Kubernetes de vérifier l'état du conteneur toutes les 5 secondes et de ne démarrer que 15 secondes après le démarrage du conteneur.
- Vous pouvez utiliser l'outil de ligne de commande kubectl pour exécuter le déploiement ci-dessus :
kubectl apply -f example-deployment.yaml
À ce stade, Kubernetes créera le déploiement, qui comprend trois pods et un service. Kubernetes commencera alors à vérifier l'état des conteneurs et à les redémarrer s'ils deviennent défectueux.
1.2 Exécutez plusieurs copies :
Kubernetes peut améliorer la disponibilité et la fiabilité des applications en exécutant plusieurs répliques. Cela signifie qu'en cas de défaillance d'un pod, Kubernetes peut automatiquement faire évoluer les répliques et démarrer de nouveaux pods, garantissant ainsi que l'application est toujours opérationnelle dans le cluster.
1.1.2 Étapes de fonctionnement pour exécuter plusieurs répliques à l'aide de Kubernetes :
-
Créez un déploiement ou un StatefulSet.
-
Définissez le nombre de répliques dans le fichier YAML.
-
Exécutez le déploiement ou StatefulSet.
Voici un exemple de code pour un déploiement avec 3 instances dupliquées :
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
spec:
replicas: 3
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
spec:
containers:
- name: example-container
image: example-image
ports:
- containerPort: 80
Dans cet exemple, nous définissons un déploiement appelé example-deployment et spécifions son nombre de répliques à 3 dans la spécification. Ensuite, nous définissons un conteneur appelé example-container qui utilise image: example-image et écoute sur le port 80.
- Vous pouvez utiliser l'outil de ligne de commande kubectl pour exécuter le déploiement ci-dessus :
kubectl apply -f example-deployment.yaml
Kubernetes démarrera 3 répliques, chacune contenant un conteneur d'exemple de conteneur. Ensuite, Kubernetes peut automatiquement transférer la charge de travail afin que l'ensemble de planification s'exécute sans échec. Si l'un des pods ne s'exécute pas normalement, Kubernetes démarrera un nouveau pod pour le remplacer.
C'est ainsi que Kubernetes peut améliorer la disponibilité et la fiabilité des applications simplement en exécutant plusieurs répliques.
1.3 Utiliser l'extension automatique :
Les capacités de mise à l'échelle automatique de Kubernetes peuvent aider à faire face à un trafic élevé, à une simultanéité élevée et à d'autres charges, garantissant que vos applications fonctionnent toujours à des performances optimales.
1.1.3 Étapes d'utilisation de Kubernetes pour étendre automatiquement la capacité :
-
Créez un déploiement ou un StatefulSet.
-
Définissez les seuils de CPU et/ou de mémoire dans un fichier YAML.
-
Configurez les règles de mise à l'échelle automatique.
-
Exécutez le déploiement ou StatefulSet.
Voici un exemple de code pour un déploiement qui évolue automatiquement en fonction de l'utilisation du processeur :
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
spec:
replicas: 3
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
spec:
containers:
- name: example-container
image: example-image
ports:
- containerPort: 80
resources:
limits:
cpu: "500m"
requests:
cpu: "200m"
readinessProbe:
httpGet:
path: /healthz
port: 80
periodSeconds: 5
initialDelaySeconds: 15
livenessProbe:
httpGet:
path: /healthz
port: 80
periodSeconds: 5
initialDelaySeconds: 15
autoscaler:
targetCPUUtilizationPercentage: 80
minReplicas: 3
maxReplicas: 10
Dans cet exemple, nous définissons un déploiement nommé example-deployment et spécifions le nombre de répliques à 3 dans la spécification. Ensuite, nous définissons un conteneur qui utilise image: example-image et écoute sur le port 80. En plus des conteneurs, nous définissons également un objet HorizontalPodAutoscaler, qui configure des règles de mise à l'échelle automatique pour ajuster le nombre de réplicas en fonction de l'utilisation du processeur.
Le champ targetCPUUtilizationPercentage de l'autoscaler définit la valeur cible d'utilisation du processeur sur 80 %, minReplicas définit le nombre minimal d'instances de pod sur 3 et maxReplicas définit le nombre maximal d'instances de pod sur 10. Cela signifie que lorsque l'utilisation du processeur dépasse 80 %, Kubernetes adapte automatiquement le déploiement sur 3 instances de pod pour atteindre un maximum de 10 réplicas.
- Vous pouvez utiliser l'outil de ligne de commande kubectl pour exécuter le déploiement ci-dessus :
kubectl apply -f example-deployment.yaml
Kubernetes lancera 3 répliques et adaptera automatiquement le déploiement à mesure que la charge augmente, garantissant ainsi que votre application fonctionne toujours de manière optimale.
1.4 Version en niveaux de gris :
Le déploiement en niveaux de gris est une méthode d'introduction progressive de nouvelles versions d'une application en production. Cela peut aider à réduire le risque d'échec et à augmenter la disponibilité des applications. Kubernetes fournit certains objets de ressource, tels que Déploiement et Service, qui peuvent être utilisés pour implémenter la version en niveaux de gris.
1.1.4 Étapes de fonctionnement pour l'utilisation de la version en niveaux de gris de Kubernetes :
-
Créez deux déploiements, un pour l'ancienne application et un pour la nouvelle application.
-
Définissez un service sur l'équilibreur de charge et faites-le pointer vers l'ancien pod de déploiement.
-
Testez les fonctionnalités et les performances de la nouvelle application de manière séquentielle en modifiant progressivement le service pour qu'il pointe vers les pods du nouveau déploiement.
Voici un exemple de code publié en niveaux de gris :
apiVersion: apps/v1
kind: Deployment
metadata:
name: old-app
spec:
replicas: 3
selector:
matchLabels:
app: old-app
template:
metadata:
labels:
app: old-app
spec:
containers:
- name: old-app-container
image: old-app-image
ports:
- containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: new-app
spec:
replicas: 1
selector:
matchLabels:
app: new-app
template:
metadata:
labels:
app: new-app
spec:
containers:
- name: new-app-container
image: new-app-image
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: app-service
spec:
type: LoadBalancer
selector:
app: old-app
ports:
- name: http
port: 80
targetPort: 80
Dans cet exemple, nous définissons deux déploiements, un pour l'ancienne application nommée old-app et un pour la nouvelle application nommée new-app. Nous définissons également un service appelé app-service, le définissons comme un type d'équilibreur de charge et le pointons vers le pod de l'ancienne application. Cela dirigera tout le trafic vers les pods de l'ancienne application.
Ensuite, nous pouvons modifier progressivement la définition du service pour pointer vers le pod de la nouvelle application. Vous pouvez le faire avec l'outil de ligne de commande kubectl :
Dans cet exemple, nous définissons deux déploiements, un pour l'ancienne application nommée old-app et un pour la nouvelle application nommée new-app. Nous définissons également un service appelé app-service, le définissons comme un type d'équilibreur de charge et le pointons vers le pod de l'ancienne application. Cela dirigera tout le trafic vers les pods de l'ancienne application.
Ensuite, nous pouvons modifier progressivement la définition du service pour pointer vers le pod de la nouvelle application. Vous pouvez le faire avec l'outil de ligne de commande kubectl :
kubectl apply -f new-service.yaml
Cela utilisera le service de la nouvelle définition pour transférer le trafic vers les pods de la nouvelle application. Au fil du temps, vous pouvez progressivement augmenter le nombre de répliques de la nouvelle application et déplacer le trafic vers la nouvelle application pour tester plus complètement ses performances et ses fonctionnalités.
1.5 Sauvegarde et restauration de la configuration :
Kubernetes prend en charge la sauvegarde et la restauration faciles des configurations d'application en mappant les ConfigMaps et les secrets aux pods. Cela peut aider à éviter les erreurs lors de la restauration.
1.1.5 Étapes de fonctionnement pour utiliser la sauvegarde et la restauration de la configuration Kubernetes :
La sauvegarde et la restauration de la configuration Kubernetes peuvent vous aider à mieux protéger vos données d'application et de configuration en cas de situations inattendues. Voici les étapes pour configurer la sauvegarde et la restauration à l'aide de Kubernetes :
-
Créez des fichiers de configuration.
-
Fichiers de configuration de sauvegarde.
-
Restaurer les fichiers de configuration.
Voici un exemple de fichier de configuration de base :
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
app.properties: |
database.url=jdbc:mysql://localhost/mydb
database.username=admin
database.password=secret
Dans cet exemple, nous définissons un objet ConfigMap nommé app-config. Il contient une paire clé-valeur appelée app.properties qui contient les détails de configuration de l'application, l'URL de la base de données, le nom d'utilisateur et le mot de passe, etc.
Pour sauvegarder les fichiers de configuration, vous pouvez utiliser l'outil de ligne de commande kubectl pour sauvegarder l'objet ConfigMap dans un fichier YAML :
kubectl get configmaps app-config -o yaml > app-config.yaml
Cela exportera l'objet ConfigMap nommé app-config dans le fichier app-config.yaml afin qu'il puisse être restauré ultérieurement. Vous pouvez sauvegarder davantage de ressources, telles que Deployment et StatefulSet, selon vos besoins.
Pour restaurer le fichier de configuration, vous pouvez réimporter le fichier de sauvegarde dans Kubernetes à l'aide de l'outil de ligne de commande kubectl :
kubectl apply -f app-config.yaml
Cela créera un nouvel objet ConfigMap et réimportera les paires clé-valeur définies dans le fichier app-config.yaml dans l'objet.
1.6 Utiliser la classe de stockage :
Kubernetes fournit différents types de classes de stockage, telles que Persistent Volume et StorageClass, qui peuvent être utilisées pour mettre en œuvre un stockage persistant et le partage de données entre conteneurs. Ils aident à protéger les données contre les migrations d'applications et les défaillances de nœuds.
1.1.6 Étapes de fonctionnement pour utiliser Kubernetes afin d'utiliser les classes de stockage :
Voici le processus de fonctionnement de base de l'utilisation des classes de stockage :
- Créez une classe de stockage.
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: my-storage-class
provisioner: my-provisioner
où my-storage-class est le nom de la classe de stockage et my-provisioner est le nom d'un sous-système de volume dynamique.
- Utilisez des classes de stockage dans des pods.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: my-volume
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: my-claim
où my-claim est le nom d'une revendication de volume persistant utilisant la classe de stockage.
- Crée un objet de demande de volume persistant qui utilisera la classe de stockage pour fournir un stockage persistant.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-claim
spec:
storageClassName: my-storage-class
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
où my-claim est le nom de la demande de volume persistant et my-storage-class est le nom de la classe de stockage utilisée.
2. L'exécution d'applications via Kubernetes conduit à des systèmes plus fiables
Kubernetes est une technologie de conteneurisation automatisée qui gère et exécute des applications dans des systèmes distribués. Les principaux avantages de cette technique sont :
- Des fonctionnalités telles que la configuration automatique des nœuds, la découverte de services et la récupération après défaillance.
- Prend en charge l'expansion horizontale, améliorant ainsi la tolérance aux pannes et la capacité de charge du système.
- Le déploiement de code peut être effectué à l'aide de mises à jour continues, évitant ainsi les pannes et les temps d'arrêt des applications.
- Fournit un équilibreur de charge automatisé et une découverte de service pour optimiser le trafic et le routage du réseau.
- Intégrez plusieurs outils de surveillance pour détecter et résoudre les erreurs et les défaillances des applications en temps réel.
7. Conclusion
1. Résumez les points clés
Dans l'ensemble, cet article décrit les nombreuses façons dont Kubernetes peut améliorer les capacités de basculement et d'autoréparation, y compris l'utilisation de vérifications de l'état, l'exécution de plusieurs répliques, la mise à l'échelle automatique et le déploiement en niveaux de gris, et la configuration de la sauvegarde et de la restauration. Ces méthodes sont conçues pour garantir que l'application est toujours disponible et peut automatiquement récupérer des pannes lorsqu'elles se produisent.
Avec le développement du cloud computing et la complexité croissante des applications, il devient de plus en plus important d'améliorer la disponibilité et la résilience des applications. En utilisant ces méthodes fournies par Kubernetes, il peut aider les entreprises à mieux gérer et protéger leurs applications et leurs données, afin de mieux répondre aux besoins et aux exigences des utilisateurs.
2. Penser à l'avenir
À l'avenir, à mesure que la technologie continue de progresser et que les applications évoluent, Kubernetes pourrait devenir de plus en plus intelligent et adopter une approche plus adaptative et d'auto-réparation pour améliorer les capacités de basculement et d'auto-réparation. Il deviendra de plus en plus important pour les entreprises et les particuliers de comprendre et de maîtriser ces méthodes fournies par Kubernetes afin de faire face à l'évolution de l'environnement applicatif et technologique.