2017-11-14 7 views
1

Googleコンピューティングエンジンディスクを使用した永続的なボリュームクレームを使用するデプロイメント構成があります。デプロイメントイメージが更新されると、デプロイメントに添付された永続的なボリュームクレームがエラーをスローする

私は私がイメージを更新する展開するときにクラスタが最新の画像で引っ張るしようとしたが、それはコンテナがこのエラーで状態を作成して立ち往生することをやったときに気づい:

Error from server (BadRequest): container "tita-api" in pod "tita-api-7569bd99d7-z44dg" is waiting to start: ContainerCreating. Checking further i saw the disk resource is used by another node . AttachVolume.Attach failed for volume "app-pv" : googleapi: Error 400: The disk resource 'projects/tita-canary/zones/us-central1-a/disks/app-disk' is already being used by 'projects/tita-canary/zones/us-central1-a/instances/gke-tita-staging-default-pool-2cae0006-sxgk'

私は1.8 kubernetesを使用しています現時点では、この作業を再現するための展開戦略を変更することでしたが、ポッドを更新するのに少し時間がかかりました。ローリングアップデート戦略を使用して作業することが本当に大好きです。

+0

' 'kubectlは何のエラーイベントを表示しますか? -api-7569bd99d7-z44dg'? – Robert

+0

正確な応答で質問を更新しました。上記のplsチェック –

答えて

0

このKubernetes issueで7月14日にサアド・アリのコメントによると、あなたが使用する必要があります:MaxSurge=0MaxUnavailable=1

「ローリングアップデートを行うときに、次のいずれか

i)が使用する 『ことを保証し再作成』戦略を、新しいポッドが作成される前に、古いポッドが殺されている(これはapperently長い時間前に固定されたいくつかのケースでは正しく動作しないバグ#27362があった)

II)MaxSurge=0で「RollingUpdate」戦略を使用し、 MaxUnavailable=1

配備に戦略が指定されていない場合、デフォルトは[RollingUpdate]です。ローリング更新戦略には、maxUnavailableとmaxSurgeという2つのパラメータがあります。指定されていない場合は、それぞれデフォルトで1と1になります。つまり、ローリング更新中には、古いデプロイメントのポッドが少なくとも1つ残っている必要があり、追加の新しいポッド(要求された数のレプリカを超える)を作成できるようになります。この場合、新しいポッドが別のノードにある場合、古いポッドにはディスクが読み書き可能な状態で接続されているため、新しいポッドは起動しません。 "

+0

ローリングアップデート戦略を試しましたが、ローリングアップデート戦略では、コンテナを作成するときに停止してpvcsをマウントできませんでした。私は現在再作成戦略を使用していますが、一時的なダウンタイムが発生します。 –

+0

投稿したエラーによると、配備している新しいPODがPDが接続されていないノードでスケジュールされているようです。したがって、ボリュームをマウントすることはできません。私は "MaxSurge = 0とMaxUnavailable = 1"を使用してロールアップすると考えましたが、あなたはまだダウンタイムを経験するかもしれません(古いPODは新しいものがスパンになる前に殺されるでしょう)。同じノードに新しいデプロイメントを強制するために[Node Selector](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector)を使用すると、うまくいく可能性があります。 – Carlos

関連する問題