J'utilise
kubectl scale --replicas=0 -f deployment.yaml
pour arrêter tous mes pods de course. Veuillez me faire savoir s'il existe de meilleures façons de ramener tous les pods en cours d'exécution à zéro en conservant la configuration, les déploiements, etc. intacts, afin que je puisse évoluer plus tard si nécessaire.
Vous faites la bonne action; traditionnellement le verbe scale
est appliqué uniquement au nom de la ressource, comme dans kubectl scale deploy my-awesome-deployment --replicas=0
, ce qui élimine le besoin de toujours pointer sur le fichier spécifique qui décrit ce déploiement, mais il n'y a rien de mal (à ma connaissance) à utiliser le fichier si cela vous convient mieux.
Et c'est parti. Réduit tous les déploiements dans un espace de noms complet:
kubectl get deploy -n <namespace> -o name | xargs -I % kubectl scale % --replicas=0 -n <namespace>
Pour augmenter l'échelle, définissez --replicas=1
(ou tout autre numéro requis) en conséquence
Si vous voulez un patch générique:
namespace=devops-ci-dev
kubectl get deployment -n ${namespace} --no-headers| awk '{print $1}' | xargs -I elhay kubectl patch deployment -n ${namespace} -p '{"spec": {"replicas": 1}}' elhay
Changement namespace=devops-ci-dev
, pour être votre espace de nom.
kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
app-gke 3/3 3 3 13m
kubectl scale deploy app-gke --replicas=5
deployment.extensions/app-gke scaled
kubectl get pods
NAME READY STATUS RESTARTS AGE
app-gke-7b768cd6d7-b25px 2/2 Running 0 11m
app-gke-7b768cd6d7-glj5v 0/2 ContainerCreating 0 4s
app-gke-7b768cd6d7-jdt6l 2/2 Running 0 11m
app-gke-7b768cd6d7-ktx87 2/2 Running 0 11m
app-gke-7b768cd6d7-qxpgl 0/2 ContainerCreating 0 4s
Si vous avez besoin de plus de granularité avec des pipes ou grep, voici une autre solution Shell:
for i in $(kubectl get deployments | grep -v NAME | grep -v app | awk '{print $1}'); do kubectl scale --replicas=2 deploy $i; done