Introduction
Ce document décrit comment mettre en oeuvre la solution de contournement pour les problèmes de redémarrage du pool de périphériques (POD) (pgpool) de l'environnement d'exécution commun (CEE) SMI (Subscriber Microservices Infrastructure).
Conditions préalables
Conditions requises
Cisco vous recommande de prendre connaissance des rubriques suivantes :
- Cisco SMI CEE (Ultra Cloud Core CEE)
- Architecture CNDP (Cloud Native Deployment Platform) 5G ou BM (SMI Bare Metal)
- Dockers et Kubernetes
Components Used
Les informations contenues dans ce document sont basées sur les versions de matériel et de logiciel suivantes :
- SMI 2020.02.2.35
- Kubernetes v1.21.0
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. Si votre réseau est en ligne, assurez-vous de bien comprendre l’incidence possible des commandes.
Informations générales
Qu'est-ce que SMI ?
Cisco SMI est une pile multicouche de technologies et de normes cloud qui permettent d'utiliser des applications de microservices à partir des unités commerciales de Cisco Mobility, Cable, and Broadband Network Gateway (BNG), toutes dotées de fonctions de gestion des abonnés similaires et de spécifications de data store similaires.
Les attributs sont les suivants :
- Pile cloud de couche (technologies et normes) pour fournir des déploiements de haut en bas et prendre en charge l'infrastructure cloud actuelle du client.
- Le CEE est partagé par toutes les applications pour les fonctions non applicatives (stockage de données, déploiement, configuration, télémétrie et alarme). Cela garantit une interaction et une expérience cohérentes pour tous les points de contact et points d'intégration du client.
- Les applications et le CEE sont déployés dans des conteneurs de microservices et connectés à un maillage de service intelligent.
- API exposée pour le déploiement, la configuration et la gestion afin d'activer l'automatisation.
Qu'est-ce que SMI CEE ?
CEE est une solution logicielle développée pour surveiller les applications mobiles et câblées déployées sur le SMI. Le CEE capture les informations (mesures clés) des applications de manière centralisée pour permettre aux ingénieurs de déboguer et de dépanner.
Le CEE est l'ensemble commun d'outils installés pour toutes les applications. Il est équipé d'un Ops Center dédié, qui fournit l'interface utilisateur (CLI) et les API pour gérer les outils de surveillance. Il n'y a qu'un seul CEE disponible pour chaque grappe.
Qu'est-ce que les POD CEE ?
Un POD est un processus qui s'exécute sur votre cluster Kubernetes. Le POD encapsule une unité granulaire appelée conteneur. Un POD contient un ou plusieurs conteneurs.
Kubernetes déploie un ou plusieurs POD sur un noeud unique qui peut être une machine physique ou virtuelle. Chaque POD possède une identité distincte avec une adresse IP interne et un espace de port. Cependant, les conteneurs d'un POD peuvent partager les ressources de stockage et de réseau. CEE a un certain nombre de POD qui ont des fonctions uniques. Pgpool et post-sortie font partie de plusieurs POD CEE.
Qu'est-ce que le POD Pgpool ?
Pgpool gère le pool de ressources Postgres pour la connexion, la réplication, l'équilibrage de charge, etc. Pgpool est un middleware qui fonctionne entre les serveurs PostgreSQL et une base de données PostgreSQL.
Qu'est-ce que Postgres POD ?
Postgres prend en charge la base de données SQL (Structured Query Language) avec redondance pour stocker les alertes et les tableaux de bord Grafana.
Problème
Les POD pgpool redémarrent régulièrement tandis que les POD postgresql s'exécutent sans problème.
Pour afficher les alertes, entrez cette commande :
show alerts active summary | include "POD_|k8s-pod-"
Un exemple d'alerte du CEE est affiché ici.
[pod-name-smf-data/podname] cee# show alerts active summary | include "POD_|k8s-pod-"
k8s-pod-crashing-loop 1d9d2b113073 critical 12-15T21:47:39 pod-name-smf-data-mas
Pod cee-podname/grafana-65cbdb9846-krgfq (grafana) is restarting 1.03 times / 5 minutes.
POD_Restarted 04d42efb81de major 12-15T21:45:44 pgpool-67f48f6565-vjt Container=
k8s_pgpool_pgpool-67f48f6565-vjttd_cee-podname_a9f68607-eac4-40a9-86ef-db8176e0a22a_1474 of pod= pgpool-...
POD_Restarted f7657a0505c2 major 12-15T21:45:44 postgres-0 Container=
k8s_postgres_postgres-0_cee-podname_59e0a768-6870-4550-8db3-32e2ab047ce2_1385 of pod= postgres-0 in name...
POD_Restarted 6e57ae945677 major 12-15T21:45:44 alert-logger-d96644d4 Container=
k8s_alert-logger_alert-logger-d96644d4-dsc8h_cee-podname_2143c464-068a-418e-b5dd-ce1075b9360e_2421 of po...
k8s-pod-crashing-loop 5b8e6a207aad critical 12-15T21:45:09 pod-name-smf-data-mas Pod
cee-podname/pgpool-67f48f6565-vjttd (pgpool) is restarting 1.03 times / 5 minutes.
POD_Down 45a6b9bf73dc major 12-15T20:30:44 pgpool-67f48f6565-qbw Pod= pgpool-67f48f6565-qbw52 in namespace=
cee-podname is DOWN for more than 15min
POD_Down 4857f398a0ca major 12-15T16:40:44 pgpool-67f48f6565-vjt Pod= pgpool-67f48f6565-vjttd in namespace=
cee-podname is DOWN for more than 15min
k8s-pod-not-ready fc65254c2639 critical 12-11T21:07:29 pgpool-67f48f6565-qbw Pod
cee-podname/pgpool-67f48f6565-qbw52 has been in a non-ready state for longer than 1 minute.
k8s-pod-not-ready 008b859e7333 critical 12-11T16:35:49 pgpool-67f48f6565-vjt Pod
cee-podname/pgpool-67f48f6565-vjttd has been in a non-ready state for longer than 1 minute.
Dépannage
À partir du maître Kubernetes, entrez cette commande :
kubectl describe pods -n
postgres-0"
L'exemple de résultat de la description du POD est présenté ici. Le résultat est tronqué.
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 14m default-scheduler Successfully assigned cee-pod-name-l1/postgres-2
to pod-name-master-3
Normal Pulling 14m kubelet Pulling image "docker.10.192.x.x.nip.io/cee-2020.02.2.i38/
smi-libraries/postgresql/2020.02.2/postgres:1.3.0-946d87d"
Normal Pulled 13m kubelet Successfully pulled image "docker.10.192.x.x.nip.io/cee-2020.02.2.i38/
smi-libraries/postgresql/2020.02.2/postgres:1.3.0-946d87d" in 29.048094722s
Warning Unhealthy 12m kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:09:48]
pod is not ready
Warning Unhealthy 10m kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:11:18]
pod is not ready
Warning Unhealthy 10m kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:11:48]
pod is not ready
Warning Unhealthy 9m49s kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:12:18]
pod is not ready
Warning Unhealthy 9m19s kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:12:48]
pod is not ready
Warning Unhealthy 8m49s kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:13:18]
pod is not ready
Warning Unhealthy 8m19s kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:13:48]
pod is not ready
Warning Unhealthy 7m49s kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:14:18]
pod is not ready
Warning Unhealthy 7m19s kubelet Readiness probe failed: [bin][h][ir] >>> [2021-10-11 18:14:48]
pod is not ready
Warning BackOff 6m44s kubelet Back-off restarting failed container
OU
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 13m default-scheduler 0/5 nodes are available: 2 node(s)
didn't match Pod's node affinity/selector, 3 node(s) didn't find available persistent
volumes to bind.
Normal Scheduled 13m default-scheduler Successfully assigned cee-pod-name-l1/postgres-0
to pod-name-master-1
Warning FailedScheduling 13m default-scheduler 0/5 nodes are available: 2 node(s)
didn't match Pod's node affinity/selector, 3 node(s) didn't find available
persistent volumes to bind.
Normal Pulling 13m kubelet Pulling image "docker.10.192.x.x.nip.io/cee-2020.02.2.i38/
smi-libraries/postgresql/2020.02.2/postgres:1.3.0-946d87d"
Normal Pulled 12m kubelet Successfully pulled image "docker.10.192.x.x.nip.io/
cee-2020.02.2.i38/smi-libraries/postgresql/2020.02.2/postgres:1.3.0-946d87d"
in 43.011763302s
Warning Unhealthy 7m20s kubelet Liveness probe failed: [bin][h][imm] >>>
[2021-10-11 18:09:16] My name is pg-postgres-0
Solution de contournement
Note: Cette procédure n'entraîne aucune interruption dans l'application.
Arrêter la CEE
Pour arrêter le CEE, entrez les commandes suivantes à partir du CEE :
[pod-name-smf-data/podname] cee#
[pod-name-smf-data/podname] cee# config terminal
Entering configuration mode terminal
[pod-name-smf-data/podname] cee(config)# system mode shutdown
[pod-name-smf-data/podname] cee(config)# commit
Commit complete.
Attendez que le système passe à 100 %
Supprimer le contenu des dossiers
À partir de master-vip, connectez SSH à chacune des machines virtuelles principales et supprimez le contenu de ces dossiers : /data/cee-podname/data-postgres-[0-2].
Master 1
cloud-user@pod-name-smf-data-master-1:~$ sudo rm -rf /data/cee-podname/data-postgres-0
Master 2
cloud-user@pod-name-smf-data-master-2:~$ sudo rm -rf /data/cee-podname/data-postgres-1
Master 3
cloud-user@pod-name-smf-data-master-3:~$ sudo rm -rf /data/cee-podname/data-postgres-2
Restaurer le CEE
Afin de restaurer le CEE, entrez les commandes suivantes à partir du CEE :
[pod-name-smf-data/podname] cee#
[pod-name-smf-data/podname] cee# config terminal
Entering configuration mode terminal
[pod-name-smf-data/podname] cee(config)# system mode running
[pod-name-smf-data/podname] cee(config)# commit
Commit complete.
Attendez que le système passe à 100 %.
Valider les chèques
Vérifiez les paramètres Kubernetes à partir du maître.
cloud-user@pod-name-smf-data-master-1:~$ kubectl get pods -A -o wide | egrep 'postgres|pgpool'
All pods should display up and running without any restarts
Vérifier que les alertes sont effacées du CEE
Afin de vérifier que les alertes sont effacées du CEE, entrez cette commande :
show alerts active summary | include "POD_|k8s-pod-"
Vous pouvez également entrer cette commande afin de vous assurer qu'il y a une base de données principale et deux bases de données de secours :
echo "0----------------------------------";kubectl
exec -it postgres-0 -n $(kubectl get pods -A | grep postgres | awk '{print $1}' | head -1)
-- /usr/local/bin/cluster/healthcheck/is_major_master.sh;echo "1--------------------------
--------";kubectl exec -it postgres-1 -n $(kubectl get pods -A | grep postgres | awk '{print $1}'
| head -1) -- /usr/local/bin/cluster/healthcheck/is_major_master.sh;echo "2---------------
-------------------"; kubectl exec -it postgres-2 -n $(kubectl get pods -A | grep postgres |
awk '{print $1}' | head -1) -- /usr/local/bin/cluster/healthcheck/is_major_master.sh;
L'exemple de résultat attendu est le suivant :
cloud-user@pod-name-smf-data-master-1:~$ echo "0----------------------------------";kubectl
exec -it postgres-0 -n $(kubectl get pods -A | grep postgres | awk '{print $1}' | head -1)
-- /usr/local/bin/cluster/healthcheck/is_major_master.sh;echo "1--------------------------
--------";kubectl exec -it postgres-1 -n $(kubectl get pods -A | grep postgres | awk '{print $1}'
| head -1) -- /usr/local/bin/cluster/healthcheck/is_major_master.sh;echo "2---------------
-------------------"; kubectl exec -it postgres-2 -n $(kubectl get pods -A | grep postgres |
awk '{print $1}' | head -1) -- /usr/local/bin/cluster/healthcheck/is_major_master.sh;
0----------------------------------
[bin][h][imm] >>> [2021-12-15 22:05:18] My name is pg-postgres-0
[bin][h][imm] >>> My state is good.
[bin][h][imm] >>> I'm not a master, nothing else to do!
1----------------------------------
[bin][h][imm] >>> [2021-12-15 22:05:19] My name is pg-postgres-1
[bin][h][imm] >>> My state is good.
[bin][h][imm] >>> I think I'm master. Will ask my neighbors if they agree.
[bin][h][imm] >>> Will ask nodes from PARTNER_NODES list
[bin][h][imm] >>> Checking node pg-postgres-0
[bin][h][imm] >>>>>>>>> Count of references to potential master pg-postgres-1 is 1 now
[bin][h][imm] >>> Checking node pg-postgres-1
[bin][h][imm] >>> Checking node pg-postgres-2
[bin][h][imm] >>>>>>>>> Count of references to potential master pg-postgres-1 is 2 now
[bin][h][imm] >>> Potential masters got references:
[bin][h][imm] >>>>>> Node: pg-postgres-1, references: 2
[bin][h][imm] >>> I have 2/2 incoming reference[s]!
[bin][h][imm] >>>> 2 - Does anyone have more?
[bin][h][imm] >>> Yahoo! I'm real master...so I think!
2----------------------------------
[bin][h][imm] >>> [2021-12-15 22:05:21] My name is pg-postgres-2
[bin][h][imm] >>> My state is good.
[bin][h][imm] >>> I'm not a master, nothing else to do!