2016-05-25 12 views
7

The status of a deploymentは、展開とを見ることができ、observedGeneration >= generationが展開に成功したことを示します。それは問題ありませんが、新しいコンテナがいつ実際に稼働しているかを知ることに興味があります。すべて私のポッドのサービスにヒットした場合は、最新のデプロイされたコンテナを表すサーバが表示されます。Kubernetesの展開が完了し、すべてのポッドが更新されて利用可能になります。

K8Sスラック部材から別のチップ:

kubectl get deployments | grep <deployment-name> | sed 's/ /,/g' | cut -d ' ' -f 4 

私はErrImagePullその結果、不良画像を展開し、まだ展開は依然として8アップ日付日付レプリカの正しい数を報告した(利用可能なレプリカは7でした)。

答えて

11

更新#2: Kubernetes 1.5はkubectl rollout statusのより良いバージョンに同梱されて、おそらく私のカスタムソリューション/スクリプトは、以下のレイアウト置き換え、さらに1.6で改善されます。

更新#1:私は答えをscript hosted on Githubに変更しましたが、これまでに数多くのPRが改善されました。

オリジナルの答え:それはカンマですべての空白に置き換えられますが、その後の空白で分離した後、第4フィールドを取得しようとします:すべての

まず、私はあなたが得たkubectlコマンドが正しくないと信じています。

デプロイメント(またはアップグレード)によってすべてのポッドに適用されたことを確認するには、使用可能なレプリカの数と目的のレプリカの数が一致するかどうかを確認する必要があります。つまり、出力がkubectlAVAILABLEDESIREDの列が等しいかどうかです。あなたは

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." 
+1

偉大な答え。ありがとう! – devth

+2

1.5/1.6で大幅に改善された 'kubectlロールアウトステータス 'への参照によって回答によって更新されました。 –

+0

更新いただきありがとうございます! – devth

関連する問題