Aggiornamento # 2: kubernetes 1.5 sarà disponibile con una versione molto migliore di kubectl rollout status
e migliorare ancora di più nel 1.6, eventualmente sostituendo mia abitudine soluzione/script disposti sotto.
Update # 1: ho girato la mia risposta in un script hosted on Github che ha ricevuto un numero limitato di PR miglioramento ormai.
risposta originale:
Prima di tutto, credo che il comando kubectl
che hai non è corretto: Sostituisce tutti gli spazi bianchi da virgole, ma poi cerca di ottenere il 4 ° campo dopo la separazione da spazi bianchi.
Per verificare che una distribuzione (o il suo aggiornamento) sia stata eseguita su tutti i pod, penso che dovresti controllare se il numero di repliche disponibili corrisponde al numero di repliche desiderate. Ovvero, se le colonne AVAILABLE
e DESIRED
nell'output kubectl
sono uguali. Mentre si potrebbe ottenere il numero di repliche disponibili (il 5 ° colonna) attraverso
kubectl get deployment nginx | tail -n +2 | awk '{print $5}'
e il numero di repliche desiderato (2 ° colonna) attraverso
kubectl get deployment nginx | tail -n +2 | awk '{print $2}'
un modo più pulito è quello di utilizzare L'output di jsonpath di kubectl
, specialmente se si desidera prendere in considerazione i requisiti di generazione che la documentazione ufficiale menziona.
Ecco uno script di bash rapido che ho scritto che si aspetta venga assegnato il nome di implementazione sulla riga di comando, attende che la generazione osservata diventi quella specificata, quindi attende che le repliche disponibili raggiungano il numero di quelle specificate :
#!/bin/bash
set -o errexit
set -o pipefail
set -o nounset
deployment=
get_generation() {
get_deployment_jsonpath '{.metadata.generation}'
}
get_observed_generation() {
get_deployment_jsonpath '{.status.observedGeneration}'
}
get_replicas() {
get_deployment_jsonpath '{.spec.replicas}'
}
get_available_replicas() {
get_deployment_jsonpath '{.status.availableReplicas}'
}
get_deployment_jsonpath() {
local readonly _jsonpath="$1"
kubectl get deployment "${deployment}" -o "jsonpath=${_jsonpath}"
}
if [[ $# != 1 ]]; then
echo "usage: $(basename $0) <deployment>" >&2
exit 1
fi
readonly deployment="$1"
readonly generation=$(get_generation)
echo "waiting for specified generation ${generation} to be observed"
while [[ $(get_observed_generation) -lt ${generation} ]]; do
sleep .5
done
echo "specified generation observed."
readonly replicas="$(get_replicas)"
echo "specified replicas: ${replicas}"
available=-1
while [[ ${available} -ne ${replicas} ]]; do
sleep .5
available=$(get_available_replicas)
echo "available replicas: ${available}"
done
echo "deployment complete."
fonte
2016-05-26 23:55:03
Ottima risposta. Grazie! – devth
Aggiornato dalla risposta con un riferimento al molto migliorato 'stato di lancio di kubectl' in 1.5/1.6. –
Eccellente, grazie per l'aggiornamento! – devth