Aller au contenu principal

Administration Guides

Vérifier le bon fonctionnement

Noeuds du cluster

Pour vérifier l'état du service sur les noeuds :

VBF Nodes

Le Status doit être Ready

Pods des services

L'ensemble des pods présent dans ce namespace kosmos-system doivent avoir le STATUS à 1/1 Running ou 0/1 Completed.

VBF Pods

kubelet

Le kubelet est déployé via le process rke2-server sur les masters et le process rke2-agent sur les workers.

On se connecte sur la VM du noeud kubernetes que l'on souhaite vérifier pour connaitre l'état du service (*-server ou *-agent) :

systemctl status rke2-server
● rke2-server.service - Rancher Kubernetes Engine v2 (server)
Loaded: loaded (/usr/local/lib/systemd/system/rke2-server.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2023-04-19 09:39:14 UTC; 5h 51min ago
Docs: https://github.com/rancher/rke2#readme
Process: 1498 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Process: 1436 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
Process: 1415 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service (code=exited, status=0/SUCCESS)
Main PID: 1600
Tasks: 138
Memory: 877.6M
CGroup: /system.slice/rke2-server.service
├─1600 /usr/local/bin/rke2 server
├─1991 containerd -c /var/lib/rancher/rke2/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/rke2/agent/containerd
├─2007 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --alsologtostderr=false --anonymous-auth=false --authenticat>
├─2110 /var/lib/rancher/rke2/services_donnees/v1.23.12-rke2r1-ea17978f3f8a/bin/containerd-shim-runc-v2 -namespace k8s.io -id 5438043a74ed89f3444ecc4ceb41cbeda6e91360ec61b081d58d3df9d8c0cf95 -address /run>
├─2134 /var/lib/rancher/rke2/services_donnees/v1.23.12-rke2r1-ea17978f3f8a/bin/containerd-shim-runc-v2 -namespace k8s.io -id 436c7deb37f0360a8c1fce351d825a1db7ac7448c16f0d4df95fab746ce74a64 -address /run>
├─2135 /var/lib/rancher/rke2/services_donnees/v1.23.12-rke2r1-ea17978f3f8a/bin/containerd-shim-runc-v2 -namespace k8s.io -id 7f7830ba6bf7c9100e23babf6106fcc09c11be091191bda928290bb5f1a034e4 -address /run>
├─2156 /var/lib/rancher/rke2/services_donnees/v1.23.12-rke2r1-ea17978f3f8a/bin/containerd-shim-runc-v2 -namespace k8s.io -id ab4d36b436650ef8cafe2046be73547b28c3d5788da77c58c4be251052b7d4eb -address /run>
├─2498 /var/lib/rancher/rke2/services_donnees/v1.23.12-rke2r1-ea17978f3f8a/bin/containerd-shim-runc-v2 -namespace k8s.io -id 33a4993a380c956342f613ea0066d83deb83cb5c8fa7f9669c82254ed5a2bff5 -address /run>
├─2525 /var/lib/rancher/rke2/services_donnees/v1.23.12-rke2r1-ea17978f3f8a/bin/containerd-shim-runc-v2 -namespace k8s.io -id e7625a367a5b9815867be68ba783acc8bcfe5cfa85f3ddcc97a46f71de8db0cf -address /run>
└─3548 /var/lib/rancher/rke2/services_donnees/v1.23.12-rke2r1-ea17978f3f8a/bin/containerd-shim-runc-v2 -namespace k8s.io -id 9430f96da6432ae66fbb42c94e6d1d18787d20a8f8bcb12efb04f3bfbbc20ae6 -address /run>

Le service doit être active (running)

Vérification des autres services Kubernetes

Les autres services kubernetes sont le réseau (cilium), le dns interne (coredns), les ingress (nginx-ingress), les provisioneurs de volume (ceph-csi), les "cluster policies" (gatekeeper), le gpu (nvidia).

Vérifier avec la commande suivante, que l'ensemble des contrats de déploiement est respecté :

for ns in $(kubectl get namespace --no-headers -o custom-columns=NS:.metadata.name | grep "\-sys\|\-ingress"); do kubectl get deploy,sts,ds -n $ns; done

Exemple d'exécution :

No resources found in cattle-fleet-clusters-system namespace.
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/fleet-agent 1/1 1 1 9d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/fleet-controller 1/1 1 1 41d
deployment.apps/helmops 1/1 1 1 41d
No resources found in cattle-impersonation-system namespace.
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/capi-controller-manager 1/1 1 1 41d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/rancher 3/3 3 3 41d
deployment.apps/rancher-webhook 1/1 1 1 41d
deployment.apps/system-upgrade-controller 1/1 1 1 41d
No resources found in cattle-ui-plugin-system namespace.
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/cdi-apiserver 1/1 1 1 41d
deployment.apps/cdi-deployment 1/1 1 1 41d
deployment.apps/cdi-operator 1/1 1 1 41d
deployment.apps/cdi-uploadproxy 1/1 1 1 41d
deployment.apps/ceph-csi-ceph-csi-rbd-provisioner 3/3 3 3 9d
deployment.apps/gpu-operator 1/1 1 1 41d
deployment.apps/gpu-operator-node-feature-discovery-gc 1/1 1 1 41d
deployment.apps/gpu-operator-node-feature-discovery-master 1/1 1 1 41d
deployment.apps/kube-vip-cloud-provider 1/1 1 1 42d
deployment.apps/topolvm-controller 2/2 2 2 42d
deployment.apps/virt-api 2/2 2 2 41d
deployment.apps/virt-controller 2/2 2 2 41d
deployment.apps/virt-operator 1/1 1 1 41d

NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/ceph-csi-ceph-csi-rbd-nodeplugin 11 11 11 11 11 <none> 9d
daemonset.apps/falco 14 14 14 14 14 <none> 33d
daemonset.apps/gpu-feature-discovery 6 6 6 6 6 nvidia.com/gpu.deploy.gpu-feature-discovery=true 41d
daemonset.apps/gpu-operator-node-feature-discovery-worker 14 14 14 14 14 <none> 41d
daemonset.apps/kube-vip 14 14 14 14 14 <none> 41d
daemonset.apps/monitoring-stack-prometheus-node-exporter 14 14 14 14 14 kubernetes.io/os=linux 39d
daemonset.apps/nvidia-container-toolkit-daemonset 6 6 6 6 6 nvidia.com/gpu.deploy.container-toolkit=true 41d
daemonset.apps/nvidia-dcgm-exporter 6 6 6 6 6 nvidia.com/gpu.deploy.dcgm-exporter=true 41d
daemonset.apps/nvidia-device-plugin-daemonset 6 6 6 6 6 nvidia.com/gpu.deploy.device-plugin=true 41d
daemonset.apps/nvidia-device-plugin-mps-control-daemon 0 0 0 0 0 nvidia.com/gpu.deploy.device-plugin=true,nvidia.com/mps.capable=true 41d
daemonset.apps/nvidia-driver-daemonset-6.8.0-62-generic-ubuntu24.04 6 6 6 0 6 feature.node.kubernetes.io/kernel-version.full=6.8.0-62-generic,nvidia.com/gpu.deploy.driver=true 41d
daemonset.apps/nvidia-mig-manager 0 0 0 0 0 nvidia.com/gpu.deploy.mig-manager=true 41d
daemonset.apps/nvidia-operator-validator 6 6 6 6 6 nvidia.com/gpu.deploy.operator-validator=true 41d
daemonset.apps/topolvm-lvmd-0 11 11 11 11 11 <none> 42d
daemonset.apps/topolvm-node 11 11 11 11 11 <none> 42d
daemonset.apps/virt-handler 11 11 11 11 11 kubernetes.io/os=linux 41d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/argo-cd-argocd-applicationset-controller 1/1 1 1 41d
deployment.apps/argo-cd-argocd-notifications-controller 1/1 1 1 41d
deployment.apps/argo-cd-argocd-redis 1/1 1 1 41d
deployment.apps/argo-cd-argocd-repo-server 1/1 1 1 41d
deployment.apps/argo-cd-argocd-server 1/1 1 1 41d
deployment.apps/cert-manager 1/1 1 1 30d
deployment.apps/cert-manager-cainjector 1/1 1 1 30d
deployment.apps/cert-manager-webhook 1/1 1 1 30d
deployment.apps/clickhouse-operator-altinity-clickhouse-operator 1/1 1 1 42d
deployment.apps/eds-back-kosmos-eds-api-server 1/1 1 1 41d
deployment.apps/eds-back-kosmos-eds-webhook 1/1 1 1 41d
deployment.apps/eds-back-kosmos-mds-ch 1/1 1 1 41d
deployment.apps/eds-back-kosmos-mds-kafka 1/1 1 1 41d
deployment.apps/eds-back-kosmos-mds-opensearch 1/1 1 1 41d
deployment.apps/eds-back-kosmos-mds-pg 1/1 1 1 41d
deployment.apps/eds-back-kosmos-mds-s3 1/1 1 1 41d
deployment.apps/eds-back-kosmos-mds-vs 1/1 1 1 41d
deployment.apps/eds-front-kosmos-eds-ui 1/1 1 1 41d
deployment.apps/eds-front-oauth2-proxy 1/1 1 1 41d
deployment.apps/iad-os-shared 1/1 1 1 41d
deployment.apps/iad-pg-shared 1/1 1 1 41d
deployment.apps/iad-s3-shared 1/1 1 1 41d
deployment.apps/kosmos-cli 1/1 1 1 41d
deployment.apps/portal-back-kosmos-portal-api 1/1 1 1 41d
deployment.apps/portal-back-kosmos-proximg 1/1 1 1 41d
deployment.apps/portal-front-kosmos-kosmos-portal-ui 1/1 1 1 41d
deployment.apps/portal-front-kosmos-oauth2-proxy 1/1 1 1 41d
deployment.apps/sap-back-kosmos-api-server 1/1 1 1 41d
deployment.apps/sap-back-kosmos-controller 1/1 1 1 41d
deployment.apps/sap-back-kosmos-decorator 1/1 1 1 41d
deployment.apps/sap-back-kosmos-logs-server 1/1 1 1 41d
deployment.apps/sap-back-kosmos-plugin-datahub 1/1 1 1 41d
deployment.apps/sap-back-kosmos-plugin-envmanager 1/1 1 1 41d
deployment.apps/sap-back-kosmos-plugin-exposure 1/1 1 1 41d
deployment.apps/sap-back-kosmos-plugin-manager 1/1 1 1 41d
deployment.apps/sap-back-kosmos-plugin-pvmanager 1/1 1 1 41d
deployment.apps/sap-front-kosmos-sap-ui 1/1 1 1 41d
deployment.apps/sap-front-oauth2-proxy 1/1 1 1 41d

NAME READY AGE
statefulset.apps/argo-cd-argocd-application-controller 1/1 41d
statefulset.apps/sap-back-kosmos-api-worker 3/3 41d
No resources found in kosmos-vm-systran namespace.
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/cilium-operator 2/2 2 2 42d
deployment.apps/rke2-coredns-rke2-coredns 3/3 3 3 42d
deployment.apps/rke2-coredns-rke2-coredns-autoscaler 1/1 1 1 42d
deployment.apps/rke2-metrics-server 1/1 1 1 42d

NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/cilium 14 14 14 14 14 kubernetes.io/os=linux 42d
daemonset.apps/rke2-ingress-nginx-controller 14 14 14 14 14 kubernetes.io/os=linux 42d

On voit que tous les "DESIRED" sont égaux aux "CURRENT" pour les "daemonset" ou que les "READY" X/X sont bien respectés pour les "deployment" et les "statefulset".

Interface de supervision pour Kubernetes

Aller dans le portail admin et vérifier la supervision des services kubernetes via Grafana.

Ou bien en se connectant via la console d'administration de kubernetes aussi disponible via le portail amdin si la supervision n'est pas disponible.

Le "control plane"

Vérifier l'état du "control plane".

kubectl cluster-info
kubectl cluster-info dump #Pour avoir beaucoup plus d'information.

Exemple de résultat :

Kubernetes control plane is running at https://kubernetes.technique.artemis:6443
CoreDNS is running at https://kubernetes.technique.artemis:6443/api/v1/namespaces/kube-system/services/rke2-coredns-rke2-coredns:udp-53/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

Vérifier la persistance kubernetes

kubectl exec -it pod/etcd-kubm-k8s00-master-1 -n kube-system -- /bin/sh
sh-4.4$ ETCDCTL_API=3 etcdctl --endpoints 127.0.0.1:2379 --cacert /var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --cert /var/lib/rancher/rke2/server/tls/etcd/server-client.crt --key /var/lib/rancher/rke2/server/tls/etcd/server-client.key -w table --cluster=true endpoint health
sh-4.4$ ETCDCTL_API=3 etcdctl --endpoints 127.0.0.1:2379 --cacert /var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --cert /var/lib/rancher/rke2/server/tls/etcd/server-client.crt --key /var/lib/rancher/rke2/server/tls/etcd/server-client.key -w table --cluster=true endpoint status

Exemple d'affichage pour la partie HEALTH

+--------------------------+--------+-------------+-------+
| ENDPOINT | HEALTH | TOOK | ERROR |
+--------------------------+--------+-------------+-------+
| https://10.10.3.155:2379 | true | 15.540412ms | |
| https://10.10.3.83:2379 | true | 18.54766ms | |
| https://10.10.3.57:2379 | true | 19.070306ms | |
| https://10.10.3.131:2379 | true | 19.427417ms | |
| https://10.10.3.80:2379 | true | 27.754429ms | |
+--------------------------+--------+-------------+-------+

Exemple d'affichage pour la partie STATUS

+--------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+--------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://10.10.3.131:2379 | fe2e72216a2223d | 3.4.13 | 139 MB | false | false | 3651 | 32726291 | 32726291 | |
| https://10.10.3.83:2379 | 35e6882c2b680ad9 | 3.4.13 | 139 MB | false | false | 3651 | 32726291 | 32726291 | |
| https://10.10.3.80:2379 | adda4e8100b99844 | 3.4.13 | 139 MB | false | false | 3651 | 32726291 | 32726291 | |
| https://10.10.3.155:2379 | e19dec06160eae9a | 3.4.13 | 139 MB | false | false | 3651 | 32726291 | 32726291 | |
| https://10.10.3.57:2379 | e729ae6437426769 | 3.4.13 | 139 MB | true | false | 3651 | 32726291 | 32726291 | |
+--------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

Vérifier les ingress

Au-delà de l'état "Running" des pods, vous pouvez utiliser les commandes suivantes :

# Description de l'ingress, vérification des évènements
kubectl describe ingress <ingress-resource-name> -n <namespace-of-ingress-resource>

# Vérification des logs des contrôleurs
kubectl logs -n <namespace> nginx-ingress-controller-xxxxx-yyyy

# Extraction de la configuration
kubectl exec -it -n <namespace-of-ingress-controller> nginx-ingress-controller-67956bf89d-fv58j -- cat /etc/nginx/nginx.conf

Les namespaces des contrôleurs d'ingress sont:

  • kube-system

Page de référence: https://kubernetes.github.io/ingress-nginx/troubleshooting/

Arrêter le service K8S

Stopper les applications métiers

Demander à l'Administrateur applications l'arrêt des applications.

Stopper le cluster kube

Arrêter tout d'abord tous les pods des workers avec les commandes suivantes :

kubectl cordon --all
kubectl get nodes | grep Ready | grep -v master | cut -d' ' -f 1 | xargs kubectl drain --delete-emptydir-data --ignore-daemonsets --force=true --disable-eviction

Arrêter ensuite tous les pods des masters avec la commande suivante :

kubectl get nodes | grep Ready | grep master | cut -d' ' -f 1 | xargs kubectl drain --delete-emptydir-data --ignore-daemonsets --force=true --disable-eviction

Vous pouvez ensuite arrêter les VMs master de kube.

Démarrer le service K8S

Redémarrer les VMs master et VMs (ou serveur) Worker Kubernetes et attendre qu'elles redémarrent.

Vérifier que les noeuds sont bien présents :

kubectl get nodes

Exécuter la commande suivante pour que les noeuds acceptent des nouveaux pods :

kubectl get nodes | grep Ready | cut -d' ' -f 1 | xargs kubectl uncordon

Et si l'on souhaite préciser le noeud k8s, il faut lancer la commande suivante :

kubectl uncordon nomdunoeud

Démarrer/Arrêter un service

Les pods sont automatiquement démarrés après leur déploiement (installation). Ils peuvent néanmoins être arrêtés par la commande kubectl scale et relancer par la même commande (en changeant le nombre de replicas).

Le nombre de replicas dimensionne le nombre de pods qui seront déployés pour ce service.

Exemple avec le service Keycloak


replicas=$(kubectl -n kosmos-iam get sts keycloak-cluster -o jsonpath='{.spec.replicas}' )
kubectl -n kosmos-iam scale sts keycloak-cluster --replicas=0
kubectl -n kosmos-iam scale sts keycloak-cluster --replicas=${replicas}

Redémarrer un service

Pour redémarrer un service sans interruption de service le système de rollout restart de k8s peut être utilisé

kubectl -n kosmos-iam rollout restart sts keycloak-cluster

ou on peut supprimer le pod ciblé (suivant le cas de figure) qui sera relancé automatiquement :

kubectl -n kosmos-iam delete pod keycloak-cluster-0

Augmenter/Diminuer les ressources

les replicas

En ligne de commande

Par exemple, pour passer le nombre de réplicas (pods) de 2 à 3 sur le service Keycloak

kubectl -n kosmos-iam scale sts keycloak-cluster --replicas=3
Modification via la console
  • Depuis le portal d'administration, acceder au portail Rancher.
  • Sélectionner le Deployments ou le StatefulSets de l'application cible
  • Dans le champ recherche sélectionner le namespace du moyen de stockage dont vous souhaitez modifier le nombre de replica

STS Replica Deployments Replica

  • Choisir le nombre de replica attendus à la hausse ou à la baisse suivant le besoin

Les ressources RAM/CPU allouée

En ligne de commande

Pour modifier les ressources de type RAM/CPU il faut éditer le manifest du workload (suivant le composant: sts, deploy ou rs) pour remplacer les valeurs des request/limit du contenneur souhaité

Par exemple, pour augmenter les ressources du container keycloak de tous les pods Keycloak:

kubectl -n kosmos-iam edit sts keycloak-cluster
        resources:
limits:
cpu: "2"
memory: 1536Mi
requests:
cpu: 250m
memory: 512Mi
info

Ce type de modification est réalisable à chaud mais n'est pas persisté. En effet, une reinstallation du service ou un rollover du déploiement reviendra au paramétrage livré.

Passer un worker en mode maintenance

Pour passer un worker en mode maintenance, il faut tout d'abord l'exclure du scheduler de Kubernetes (cordon) puis le vider de ses conteneurs (les pods se réinstancieront sur les autres noeuds). La commande drain réalise les deux actions:

kubectl drain --delete-emptydir-data --ignore-daemonsets --force=true --disable-eviction <nom d'une vm worker>
  • --delete-emptydir-data permet de supprimer des pods qui utilisent des répertoires vides (les données locales seront supprimées lorsque le noeud est drainé).
  • --ignore-daemonsets=true permet d'ignorer les DaemonSets
  • --force permet de supprimer les pods non managés par un Deployment
  • --disable-eviction permet de forcer le drain à utiliser la suppression, même si l'expulsion est prise en charge. Cela contournera la vérification PodDisruptionBudgets.

Une fois cette action effectuée, le worker peut subir n'importe quelle opération de maintenance.

Spécificité topolvm

Apres le drain du noeud, les POD initialement présents sur ce noeud possédant des PVC (Volumes) sont en Pending car leurs PVC sont toujours attachés au noeud initial. Il convient alors de réaliser les actions suivantes pour déplacer les volumes des pods:

  • supprimer le PVC afin qu'un autre PVC s'instancie automatiquement sur le nouveau noeud, créant un nouveau PV (volume) sur ce noeud.
  • arrêter le pod pour "démonter" le volume cible et permettre la copie des données
  • montage, copie des données, démontage
  • relance du pod.

Le script /data/apps/platform-provisioner/scripts/pvc-recovery.sh génère l'ensemble des commandes pour réaliser ces actions pour un namespace et un pod donnés. Usage:

cd /data/apps/platform-provisioner/scripts
./pvc-recovery.sh -n <namespace> -p <pod>

Les commandes générées sont réparties dans 3 scripts à exécuter dans l'ordre:

  • /data/pvc-recovery/pvc-recovery-<namespace>-<pod>/part1.sh
  • /data/pvc-recovery/pvc-recovery-<namespace>-<pod>/part2.sh
  • /data/pvc-recovery/pvc-recovery-<namespace>-<pod>/part3.sh
info

Information importante : la storageClass lvm-provisioner doit obligatoirement être en reclaimPolicy: Retain (et non Delete) afin que le PV d'origine ne soit pas supprimé et reste accessible pour la copie des données.

Sortir un worker du mode maintenance

Il suffit pour cela de replacer le worker dans le scheduling de Kubernetes

kubectl uncordon <nom d'une vm worker>
node/<nom d'une vm worker> uncordoned

Passer un master en mode maintenance

L'opération est la même que pour un worker.

Néanmoins, si vous souhaitez éteindre un master une fois passé en maintenance, il faut faire attention au nombre de master en fonctionnement sur le cluster. La base de données répliquées de Kubernetes, etcd, est installée sur les masters. Etcd demande qu'au moins (N/2)+1 masters (division entière avec arrondi inférieur) soient fonctionnels à tout moment.

Si votre cluster possède 3 masters, le nombre minimum de master est de 2 (3/2+1) et vous pouvez donc en éteindre 1.

Si votre cluster possède 5 masters, le nombre minimum de master est de 3 (5/2+1) et vous pouvez donc en éteindre 1 ou 2, tout en restant en fonctionnement normal.

Sortir un master du mode maintenance

L'opération est la même que pour un worker.

Commandes clés

Il y a plusieurs moyens d'adresser le cluster kuberntes. Soit en ligne de commande dont vous trouverez quelques commandes classiques sur cette page, soit via la console kubernetes disponible dans le portail.

Options valables pour toutes les commandes :

  • -n : permet de spécifier le namespace sur lequel on veut avoir une action
  • -c : permet de spécifier le container du pod sur lequel on veut avoir une action
  • -o=name : Affiche seulement le nom de la ressource et rien de plus
  • -o=wide : Affiche dans le format texte avec toute information supplémentaire, et pour des pods, le nom du noeud est inclus
  • -o=yaml : Affiche un objet de l'API formaté en YAML

Etendre un PVC

Cette procédure permet de modifier la taille d'un PV associé à un pod.

info

On déroule la procédure avec les PV des pods opensearch du namespace kosmos-search en exemple.

Arreter les pods

kubectl -n shared-search scale sts opensearch-cluster-data --replicas=0

Etendre les PVC/PV à 2,3 To

kubectl -n shared-search patch pvc opensearch-cluster-data-opensearch-cluster-data-0 -p '{"spec":{"resources":{"requests":{"storage":"2357Gi"}}}}'
kubectl -n shared-search patch pvc opensearch-cluster-data-opensearch-cluster-data-1 -p '{"spec":{"resources":{"requests":{"storage":"2357Gi"}}}}'
kubectl -n shared-search patch pvc opensearch-cluster-data-opensearch-cluster-data-2 -p '{"spec":{"resources":{"requests":{"storage":"2357Gi"}}}}'

au bout d'un moment la capacité des PV est mise à jour

kubectl get pv | grep shared-search/opensearch-cluster-data

pvc-1d8679d6-bb17-4789-9e51-7360609feb8b 2357Gi RWO Retain Bound shared-search/opensearch-cluster-data-opensearch-cluster-data-2 lvm-provisioner <unset> 56d
pvc-bc5d66dd-16e8-4297-9c77-de06891c53ab 2357Gi RWO Retain Bound shared-search/opensearch-cluster-data-opensearch-cluster-data-0 lvm-provisioner <unset> 56d
pvc-f166c9de-ab92-40ae-a596-06d1f8b8058d 2357Gi RWO Retain Bound shared-search/opensearch-cluster-data-opensearch-cluster-data-1 lvm-provisioner <unset> 56d
info

Les PVC refléteront la nouvelle taille une fois les pods relancés.

Relancer les pods

kubectl -n shared-search scale sts opensearch-cluster-data --replicas=3

Consulter la nouvelle taille des PVC

kubectl -n shared-search get pvc | grep opensearch-cluster-data

Constater que le FS dans les containers a été augmenté depuis un shell dans le pod

df -m | grep data
/dev/mapper/kosmosvg0-9bae69f2--a769--45b2--a44c--9a08fd4cd465 2038 60 1979 3% /usr/share/opensearch/data

Ajout d'un noeud Kubernetes

info

Dans les exemples ci-dessous on considère une plateforme Autonome pour laquelle on ajoute le noeud kubm-k8s00-worker-4. Adapter cet exemple à votre environnement en mimant la configuration des autres noeuds.

  • Dans $WORK_DIR/kube-provisioner/os-provided, ajouter le noeud dans l'inventaire de la plateforme (vi ${INVENTORY_FILE}).
workers:
...
hosts:
...
kubm-k8s00-worker-4:
ansible_host: "{{ lookup('community.general.dig', 'compute04.admin.artemis') }}"
node_ip: "{{ lookup('community.general.dig', 'compute04.technique.artemis') }}"
lvm_disk: /dev/sdb
  • lancer le playbook en ciblant le nouveau serveur
cd $WORK_DIR/kube-provisioner/os-provided
ansible-playbook -i ${INVENTORY_FILE} kube.yaml --limit kubm-k8s00-worker-4
  • Attendre que le nouveau noeud soient Ready et TOUS les pod soient Running ou Completed sur ce noeud
kubectl get node
kubectl get pod -A | grep -Ev "Completed|1/1 *Running|2/2 *Running|3/3 *Running|4/4 *Running"

Suppression complète de Kubernetes

cd $WORK_DIR/kube-provisioner/os-provided
ansible-playbook -i ${INVENTORY_FILE} kube_clean.yaml