更新#2: Kubernetes 1.5はkubectl rollout status
のより良いバージョンに同梱されて、おそらく私のカスタムソリューション/スクリプトは、以下のレイアウト置き換え、さらに1.6で改善されます。
更新#1:私は答えをscript hosted on Githubに変更しましたが、これまでに数多くのPRが改善されました。
オリジナルの答え:それはカンマですべての空白に置き換えられますが、その後の空白で分離した後、第4フィールドを取得しようとします:すべての
まず、私はあなたが得たkubectl
コマンドが正しくないと信じています。
デプロイメント(またはアップグレード)によってすべてのポッドに適用されたことを確認するには、使用可能なレプリカの数と目的のレプリカの数が一致するかどうかを確認する必要があります。つまり、出力がkubectl
のAVAILABLE
とDESIRED
の列が等しいかどうかです。あなたは
kubectl get deployment nginx | tail -n +2 | awk '{print $5}'
ときれいな方法を使用することです
kubectl get deployment nginx | tail -n +2 | awk '{print $2}'
を介して所望のレプリカ(2列目)の数を介して利用レプリカ(5列)の数を取得することもできますがkubectl
のjsonpath出力。特に、公式ドキュメントにも言及されている生成要件を考慮したい場合。
ここでは、コマンドラインでデプロイメント名を指定し、観測された世代が指定された世代になるのを待ってから、使用可能なレプリカが指定された世代の数に達するのを待ちます:
#!/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."
偉大な答え。ありがとう! – devth
1.5/1.6で大幅に改善された 'kubectlロールアウトステータス 'への参照によって回答によって更新されました。 –
更新いただきありがとうございます! – devth