0

Kubernetesデプロイメントを使用し、セマンティック タグ名でコンテナー イメージを参照したいと考えています。例: application:latest, application:testing, application:production.

これを設定するのは簡単imagePullPolicy: Alwaysで、コンテナ仕様内で、次のような方法で新しいバージョンをすばやくプッシュすることもできます。

 $ REPLICAS=$(kubectl get deployment application --template="{{.spec.replicas}}")
 $ kubectl scale --replicas=0 deployment application
 deployment "application" scaled
 $ kubectl scale --replicas=$REPLICAS deployment application
 deployment "application" scaled

欠点は、新しいポッドの準備が整う前にすべてのポッドが強制終了されることです。したがって、私はローリングアップデートを開始しようとしています。

1 つの解決策は、セマンティック タグ名を削除し、sth を使用することです。のようにapplication:v123。しかし、私は自分のスクリプトをシンプルに保ち、セマンティック名を維持したいと考えています。それを行う方法はありますか?

...

編集/更新...これは私のdeployment.yaml構成がどのように見えるかです:

apiVersion: extensions/v1beta1
 kind: Deployment
 metadata:
   name: nginx-deployment
 spec:
   replicas: 3
   template:
     metadata:
       labels:
         app: application
     spec:
       containers:
       - name: application
         image: application:latest
         imagePullPolicy: Always

基本的には常に同じままですが、関連するコンテナー イメージはバックグラウンドで更新されます。

...

乾杯

4

2 に答える 2

0

申し訳ありませんが、おそらく質問を誤解しましたが、使用しないのはなぜですか

kubectl 適用 -f

(参照はこちら

次に、展開設定の速度を決定できます

  • 最大サージ
  • 最大利用不可

展開ファイルで。(ここを参照

于 2016-10-27T12:12:56.520 に答える
0

これは、1 つのセマンティック タグを使用して行うことはできないようです。これが私が2つ以上のタグで使い始めたものです。

1) 現在デプロイされているものを把握します。

 DEPLOYED_IMAGE=$(kubectl get deployment/nginx-deployment -o jsonpath="{.spec.template.spec.containers[0].image}")

2) 未使用のタグを見つけます。

if [[ "$DEPLOYED_IMAGE" =~ :green$ ]]; then 
   IMAGE="application:latest-blue"
else 
   IMAGE="application:latest-green"
fi

3) 新しいタグを使用してイメージをビルドします。

docker build -t $IMAGE .
docker push $IMAGE

4) 展開する

kubectl set image deployment/nginx-deployment application=$IMAGE

5) デプロイが完了するまで待ちます

kubectl rollout status deployment nginx-deployment -w
于 2017-01-13T08:40:26.397 に答える