Démantèlement de la zone Loki d'un client#
Préparatifs#
Note
On garde les préparatifs pour pouvoir les réutiliser plus tard.
CLIENT=xxxx # pour obs-pf : CLIENT=pf
ENVS_NG=xxx # exemple : $HOME/git/caascad/terraform/envs-ng
CLUSTER=xxx # pour obs-pf : CLUSTER=kub-9
export VAULT_ADDR=https://vault.infra-prd.caascad.com/
export VAULT_FORMAT=json
vault token lookup > /dev/null 2>&1 || vault login -method oidc
Gestion des silences#
Afin d'éviter d'alerter pendant la période de démantèlement de la zone Loki, il est important de poser des silences sur toute la zone.
Depuis cette URL :
xdg-open 'https://karma-infra.infra-prd.caascad.com/?m='$(echo '{"am":[{"label":"svc-monitoring-stack-corp-prd-1","value":["svc-monitoring-stack-corp-prd-1"]},{"label":"svc-monitoring-stack-corp-prd-2","value":["svc-monitoring-stack-corp-prd-2"]}],"m":[{"n":"obs_client","r":false,"e":true,"v":["CLIENT"]},{"n":"ngot_service","r":false,"e":true,"v":["svc-loki-client-CLIENT"]}],"d":10080,"c":"silence_cop '"$(date "+%d%m%Y" -d "8 day")"' Decom zone Loki for client CLIENT (silence to remove after decom)"}' | sed -e "s/CLIENT/${CLIENT}/g" | base64 -w0)
Depuis cette URL :
xdg-open 'https://karma-infra.infra-prd.caascad.com/?m='$(echo '{"am":[{"label":"svc-monitoring-stack-corp-prd-1","value":["svc-monitoring-stack-corp-prd-1"]},{"label":"svc-monitoring-stack-corp-prd-2","value":["svc-monitoring-stack-corp-prd-2"]}],"m":[{"n":"alertname","r":false,"e":true,"v":["BlackboxMetricsMissing"]},{"n":"instance","r":true,"e":false,"v":["loki.*CLIENT.*"]}],"d":10080,"c":"silence_cop '"$(date "+%d%m%Y" -d "8 day")"' Decom zone Loki for client CLIENT (silence to remove after decom)"}' | sed -e "s/CLIENT/${CLIENT}/g" | base64 -w0)
À la fin du démantèlement il sera nécessaire de supprimer les silences mis en place.
Zone loki-client#
On se positionne sur la branche master :
cd ${ENVS_NG}
git switch master && git pull
nix-shell
On relance les préparatifs :
CLIENT=xxxx # pour obs-pf: CLIENT=pf
ENVS_NG=xxx # exemple: $HOME/git/caascad/terraform/envs-ng
CLUSTER=xxx # pour obs-pf: CLUSTER=kub-9
On supprime la zone Loki :
cd contexts/ngot
trackbone destroy -t purge=true -z "svc-loki-client-${CLIENT}" --non-interactive --detailed-exitcode -n 8 --add-services
Note
Vérifier INFO Trackbone Stats: Succeeded=x Skipped=x Failed=x Disabled=x Total=x.
Si la valeur Failed est plus grande que 0, identifier les configurations en échec et lancer trackbone destroy -t purge=true avec ces configurations.
Datasource Loki#
On supprime la datasource Loki dans Grafana.
-
On prépare la future MR
cd ${ENVS_NG} git switch -c decom-loki-obs-${CLIENT} -
On modifie ngot-zone
zones/ngot_zones/client-<client>.cue:--- a/zones/ngot_zones/client-test05.cue +++ b/zones/ngot_zones/client-test05.cue @@ -67,7 +67,6 @@ _zones: { _datasource_thanos: "\(shortname)": _ _datasource_alertmanager: "\(shortname)": _ - _datasource_loki: "\(shortname)": _ datasources: { _datasource_thanos[shortname] _datasource_alertmanager[shortname] - _datasource_loki[shortname] } } } -
On redéploie Grafana :
cd ${ENVS_NG} generate-static-zones-files cd contexts/ngot trackbone apply -z svc-grafana-client-${CLIENT} -c grafana -
La datasource
lokireste présente dans la database Grafana. Vous devez forcer la suppression :-
éditer la configmap
grafana-obs-${CLIENT}:kswitch svc-grafana-client-${CLIENT} kubectl edit cm grafana-obs-${CLIENT} -n grafana-client-obs-${CLIENT} -
ajouter les lignes suivantes :
data: deleteDatasources: - name: loki orgId: 1 -
redémarrer le pod Grafana :
kubectl delete pod grafana-obs-${CLIENT}-0 -n grafana-client-obs-${CLIENT} -
vérifier que la datasource
lokin'existe plus dans Grafana ; -
redéployer Grafana (pour éviter un drift sur la configmap ci-dessus) :
trackbone apply -z svc-grafana-client-${CLIENT} -c grafana
-
-
vérifier à nouveau que la datasource
lokin'est plus présente dans Grafana.
Vault#
La commande suivante ne doit rien retourner :
for i in $(vault list secret/zones/fe/svc-loki-client-${CLIENT}/ | jq -r '.[]'); do
echo "vault delete secret/zones/fe/svc-loki-client-${CLIENT}/$i";
done
Si cela retourne des lignes de commande, il est nécessaire de les exécuter.
Git#
Loki rules#
Suppression du dossier client dans le repo git loki rules.
git clone git@sourcehub.orange-business.com:cs-factory/loki-client-rules.git /tmp/loki-client-rules
cd /tmp/loki-client-rules
git switch -c decom-obs-${CLIENT}
git rm -r obs-${CLIENT}
git commit -m "Removing Loki Rules Directory for obs-${CLIENT}"
git push origin decom-obs-${CLIENT}
Soumettre la MR pour validation et merger.
Note
Ce repo n'est pas accessible aux clients. On peut utiliser notre compte nominatif.
Variable CI/CD#
Aller dans les variables CI/CD et supprimer les credentials Loki (LOKI_USERNAME et LOKI_PASSWORD):
xdg-open https://sourcehub.orange-business.com/cs-factory/cs-factory-environments/obs-${CLIENT}/-/settings/ci_cd
Suppression du namespace#
kswitch ${CLUSTER}
kubectl delete ns loki-client-obs-${CLIENT}
Post-démantèlement#
-
Suppression de la zone dans Envs-ng
Supprimer la zone
loki-clientdanszones/ngot_zones/client-<client>.cue:--- a/zones/ngot_zones/client-test05.cue +++ b/zones/ngot_zones/client-test05.cue @@ -70,12 +70,4 @@ _zones: { } } } - - // Loki clients services - "svc-loki-client-test05": { - type: "service" - subtype: "loki-client" - parent_zone_name: "kub-10010" - contract_zone_name: "obs-test05" - } }Regénérer les fichiers statiques de zones :
generate-static-zones-files git add gen/ git add zones/ngot_zones/client-${CLIENT}.cue git commit -m "Decom loki ${CLIENT}" git push --set-upstream origin decom-loki-obs-${CLIENT} -
Faire valider la MR. Puis la merger.
-
Après avoir mergé :
git switch master && git pull cd contexts/ngot trackbone apply -z svc-monitoring-stack-corp-prd-1 -c prometheus-rules -c blackbox-exporter-core -t blackbox_exporter_refresh_cache=true --non-interactive --add-services trackbone apply -z svc-monitoring-stack-corp-prd-2 -c prometheus-rules -c blackbox-exporter-core --non-interactive --add-services trackbone apply -z "${CLUSTER}" -c ingress_controller_v2_public --non-interactive -
Vérifier qu'il n'y a pas d'alertes liées à la zone Loki démantelée.
-
Supprimer les silences sur la zone Loki démantelée.
-
Supprimer les PVs Released :
kswitch ${CLUSTER} kubectl get pv | grep ${CLIENT} | grep ReleasedS'il y en a, supprimez-les :
for pv in $(kubectl get pv | grep ${CLIENT} | grep Released | awk '{print $1}'); do kubectl delete pv ${pv} done
Confluence#
Indiquer que Loki n'est plus utilisé dans la page client.
Points de contrôle#
Les points à contrôler sont définis dans le modèle Jira. Voici quelques précisions :
Aucune référence à la zone Loki :
* (on) dans envs-ng
* (on) dans Vault (path: {{zones/fe}})
* (on) dans la documentation
La suppression de la zone Loki est indiquée :
* (on) dans la page client dans Confluence (avec la référence du ticket Jira)
Gitops :
* (on) aucune référence à la zone dans loki-rules
Dans la console FE, aucune ressource liée à la zone Loki :
* (on) buckets S3
Silences :
* (on) absence de silences dans Karma
Cluster :
* (on) absence de PV avec le status {{Released}}
* (on) le namespace {{loki-client-obs-CLIENT}} n'existe plus
Grafana :
* (on) absence de la datasource Loki


