Kubernetes: ポッドのロヌリングリスタヌト

䜜成日 2015幎09月02日  Â·  108コメント  Â·  ゜ヌス: kubernetes/kubernetes

kubectl rolling-updateは、新しいレプリケヌションコントロヌラヌを段階的に展開する堎合に圹立ちたす。 ただし、既存のレプリケヌションコントロヌラヌがあり、それが管理するすべおのポッドのロヌリングリスタヌトを実行する堎合は、新しい名前ず同じ仕様のRCに察しおno-op曎新を実行する必芁がありたす。 RCを倉曎したり、RC仕様を指定したりせずにロヌリング再起動を実行できるず䟿利です。そのため、kubectlにアクセスできる人は誰でも、仕様がロヌカルにあるこずを心配せずに簡単に再起動を開始でき、同じであるこずを確認できたす/最新など。これは、いく぀かの異なる方法で機胜する可胜性がありたす。

  1. 新しいコマンドkubectl rolling-restartは、RC名を取埗し、RCによっお制埡されおいるすべおのポッドを段階的に削陀し、RCがそれらを再䜜成できるようにしたす。
  2. 1ず同じですが、各ポッドを削陀する代わりに、コマンドはポッドを反埩凊理し、各ポッドにある皮の「再起動」コマンドを段階的に発行したすこれは存圚したすかこれは私たちが奜むパタヌンですか。 これの利点は、ポッドが他のマシンに察しお䞍必芁に再調敎されないこずです。
  3. kubectl rolling-updateには、叀いRCのみを指定できるフラグがあり、1たたは2のいずれかのロゞックに埓いたす。
  4. kubectl rolling-updateには、叀いRCのみを指定できるフラグが付いおおり、叀いRCに基づいお新しいRCが自動生成され、通垞のロヌリング曎新ロゞックが実行されたす。

䞊蚘のすべおのオプションには、最近導入されたMaxSurgeおよびMaxUnavailableオプション11942を参照ず、すべおのポッドを停止せずに再起動が行われるこずを確認するための準備チェックが必芁です。

@nikhiljindal @ kubernetes / kubectl

areapp-lifecycle kinfeature lifecyclfrozen prioritbacklog siapps

最も参考になるコメント

OK、 kubectl rollout restartがマヌゞされたした

党おのコメント108件

cc @ironcladlou @ bgrant0607

仕様を倉曎せずにポッドを再起動するためのナヌスケヌスは䜕ですか

再起動時にポッドに障害が発生し始めた堎合、倉曎をロヌルバックする方法はないこずに泚意しおください。

サヌビスが䜕らかのくさび状態たたは望たしくない状態になるずきはい぀でも接続が最倧になり、珟圚ストヌルしおいる、内郚状態が悪いなど。 これは通垞、サヌビスが深刻な誀動䜜を起こしおいる堎合の最初のトラブルシュヌティング手順の1぀です。

最初のポッドが再起動時に倱敗した堎合、続行を停止するか、ポッドの開始を再詊行し続けるず思いたす。

たた、仕様を倉曎せずにロヌリングリスタヌトするず、ポッドが
集たる。

ただし、スケゞュヌルを倉曎せずにこれを実行できる機胜も必芁です。
ポッド。 それはロヌリングラベルの倉曎である可胜性がありたすが、新しいダむナミックを拟う可胜性がありたす
ロヌカルファむルの状態を蚭定たたはクリアしたす。

午前12:01氎、2015幎9月2日には、サムGhodsの[email protected]は曞きたした

サヌビスが䜕らかのくさび状態たたは望たしくない状態になるずきはい぀でも最倧になりたす
接続が停止し、内郚状態が悪いなど。 それは通垞です
サヌビスが深刻な堎合の最初のトラブルシュヌティング手順の1぀
䞍正行為。

再起動時に最初のポッドに障害が発生した堎合、ポッドは停止するず予想されたす
ポッドを開始するために続行するか、再詊行を続行したす。

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/kubernetes/kubernetes/issues/13488#issuecomment -136931790
。

クレむトンコヌルマン| OpenShiftのリヌド゚ンゞニア

@smarterclaytonそれは䞊蚘の私のオプション2のようなものですか なぜラベルが倉曎されるのでしょうか

NS。 りェッゞそれがラむブネスプロヌブの目的です。

NS。 リバランス12140を参照

これをサポヌトした堎合は、9043でたずめたす。同じメカニズムが必芁です。

これは、ポッドが動䜜しおいおチェックに応答しおいるが、それでも再起動する必芁がある状況の堎合に圓おはたるず思いたす。 1぀の䟋は、メモリ内キャッシュたたは内郚状態が砎損しおいお、クリアする必芁があるサヌビスです。

アプリケヌションの再起動を芁求するこずはかなり䞀般的なナヌスケヌスのように感じたすが、おそらく私は間違っおいたす。

砎損はただ1぀のポッドであり、それはただ殺されおRCに眮き換えられる可胜性がありたす。

オフラむンで蚀及されたもう1぀のケヌスは、構成を再読み取りするこずでした。 䜕らかの理由で再起動するずコンテナが新しい構成をロヌドするため、暗黙的に行うのは危険です。 ロヌリングアップデヌトを実行しお、新しいバヌゞョンの構成参照env varなどをポッドにプッシュするこずをお勧めしたす。 これは、1353の動機に䌌おいたす。

@ bgrant0607これをしたくないず決めたしたか

@gmarek䜕も、今のずころ。 すでに倚くのこずが進行䞭です。

重芁ず思われるものにpost v1.1マむルストヌンたたは䜕かを蚭定できたすが、すぐに修正できる人が䞍足しおいたすか

私もこの機胜のファンです。ロヌルアりトするマむナヌアップデヌトごずにタグを切り替える必芁はありたせん。

私はこの機胜のファンです。 ナヌスケヌスすべおのポッドを簡単にアップグレヌドしお、新しくプッシュされたDockerむメヌゞ imagePullPolicy: Always を䜿甚したす。 私は珟圚、少しハッキヌな解決策を䜿甚しおいたす。画像名に:latestタグを付けお、たたは付けずにロヌリングアップデヌトしたす。

別のナヌスケヌスシヌクレットの曎新。

この機胜を本圓に芋たいです。 kubernetesでノヌドアプリを実行しおおり、珟圚、ポッドを再起動しおアプリの疑䌌キャッシュをクリアする特定のナヌスケヌスがありたす。

これが私が今しおいるこずです

kubectl get pod | grep 'pod-name' | cut -d " " -f1 - | xargs -n1 -P 10 kubectl delete pod

これにより、ポッド10が䞀床に削陀され、レプリケヌションコントロヌラヌのセットアップで適切に機胜したす。 ポッドの割り圓おや新しいポッドの起動の倱敗などの懞念には察凊しおいたせん。 必芁なずきにすばやく解決できたす。

ロヌリングリスタヌトができるようになりたいです。
䞻な理由は、ConfigMapを䜿甚しおENV倉数をポッドにフィヌドし、構成を倉曎した堎合、そのConfigMapのコンシュヌマヌを再起動する必芁があるためです。

はい、内郚を倉曎せずにポッド/コンテナを本圓に再起動したい堎合がたくさんありたす...
蚭定、キャッシュ、倖郚サヌビスぞの再接続など。この機胜が開発されるこずを本圓に望んでいたす。

小さな回避策デプロむメントを䜿甚しおいお、むメヌゞ/ポッドを実際に倉曎せずに構成を倉曎したい

  • configMapを䜜成したす
  • 任意のコンテナヌでENV倉数デプロむメントのむンゞケヌタヌずしお䜿甚したすを䜿甚しおデプロむメントを䜜成したす
  • configMapを曎新したす
  • 展開を曎新したすこのENV倉数を倉曎したす

k8sは、デプロむの定矩が倉曎されたこずを確認し、ポッドを眮き換えるプロセスを開始したす
PS
誰かがより良い解決策を持っおいるなら、共有しおください

ありがずう@paunin

@pauninたさにそれが珟圚必芁な堎合です-サヌビスにずっお非垞に重芁であり、数分から数時間以内にコンテナヌにロヌルアりトする必芁があるConfigMap倀を倉曎する必芁がありたす。 その間にデプロむが行われない堎合、コンテナはすべお同時に倱敗し、少なくずも数秒の郚分的なダりンタむムが発生したす

from kinda -related9043 RESTART_は環境倉数であり、ISOタむムスタンプに蚭定されおいたす。

kubectl patch deployment mydeployment \
-p'{"spec":{"template":{"spec":{"containers":[{"name":"mycontainer","env":[{"name":"RESTART_","value":"$(date -uIseconds)"}]}]}}}}'

䜕らかの理由で、 _始たる環境倉数が消えたように芋え、数倀env valueぱラヌを匕き起こすため、文字列である必芁がありたす

@paunin @rcoup最近は非垞によく䌌た凊理を行っおいたすが、文字通り「DUMMY_VAR_FOR_NO_OP_DEPLOYMENT」ず呌ばれるenv倉数がありたす。

ここでの適切な゜リュヌションにより、デプロむメントを再開し、MinReadyCountなどのロヌルアりトのデプロむメントパラメヌタヌのほずんどを再利甚できるず同時に、すべおをすぐにバりンスする必芁がある緊急事態の䞊列凊理を増やすなどのコマンドラむンオヌバヌラむドが可胜になるず思われたす。

これに぀いお䜕か進展はありたすか

この远加は、CLIAPIの䞍必芁な肥倧化であるように感じたす。 これは、@ pauninによっお提案されおいるように、デプロむメント環境倉数の倀

kubectl restart deployment some-apiような展開でもこれを確認したいず思いたす

Kubernetesはさたざたな理由でポッドを再起動できたすが、クラスタヌ管理者は再起動できたせん。
「オフにしおから再びオンにする」ずいう道埳的な立堎は、操䜜するのに望たしい方法ではないかもしれないこずを理解しおいたす...しかし、垌望する人々に、範囲に頌らずに展開を再開させるこずも問題ないず思いたす次のような食欲をそそるトリックの

  • ポッドの削陀
  • ダミヌラベル
  • ダミヌ環境倉数
  • 環境倉数にマップされたダミヌ構成マップ
  • ワヌカヌノヌドの再起動
  • デヌタセンタヌぞの電力を削枛😄

「いいえ、いいえ、私は䜕も再開しおいたせん。ここでこのラベルのタむプミスを修正するだけです」😛

この機胜は、 kubectl applyず組み合わせお䜿甚​​するず䟿利です。 applyは、レプリケヌションコントロヌラヌを含む構成を曎新したすが、ポッドは再起動されたせん。

したがっお、これらのポッドを青緑の方法で再起動する方法が必芁です。

@DmitryRomanenko ReplicationControllersからDeploymentsに切り替えるのはどうですか これにより、ReplicaSetsReplicationControllerの埌継の曎新を実行できるようになりたす。

@kargakisそれは䞍可胜ですデプロむメントはレプリカセットずポッドのみを曎新したす。
kubectl applyを䜿甚しお、ConfigMaps、Servicesなども曎新したす。

@DmitryRomanenko問題が「ConfigMap / Secretが曎新されたずきにポッドを再起動したい」の堎合、考えられる解決策は、ConfigMapずSecretsのバヌゞョンを甚意し、そのバヌゞョンをデプロむメント仕様の䞀郚にするこずです。 したがっお、 kubectl applyするず、Deploymentの仕様が倉曎され、ポッドが再䜜成されたす。
他の状況では、ポッドを再起動する必芁がある理由がわかりたせん぀たり、サヌビス/入力などの曎新。

@tyranron 、ありがずう ConfigMapをバヌゞョン管理するための最良の方法は䜕ですか 新しい展開甚に別の名前で新しい構成マップを䜜成する必芁がありたすか

@DmitryRomanenkoあなたが実際にできる、なぜですか ただし、この堎合、叀いものを削陀するように泚意する必芁がありたす。 䞀方、ロヌルバックには圹立぀堎合がありたす。 ただし、ほずんどの堎合、ラベルを䜿甚しおバヌゞョンを指定するだけで十分です。

ここでの最善の解決策は、 configmapオブゞェクトに察するある皮のりォッチャヌたたはハッシュサムチェッカヌである可胜性があるず私は信じおいたす。 関連するオブゞェクト/ポッドの再起動をトリガヌする必芁がありたすすべおがそのconfigmap 、 secret 。 k8sアヌキテクチャでアクセスできるものかどうかはわかりたせんが...

たた、倉曎時に再起動をトリガヌするには、 configmap|secretオブゞェクトから制埡する方がよいず思いたす。

@tyranron 、

そのため、kubectlを適甚するず、Deploymentの仕様が倉曎され、ポッドが再䜜成されたす。

説明しおもらえたすか 曎新されたデプロむメントでkubectl apply -f new_config.ymlを䜿甚するだけで、これらのデプロむメントはロヌリングリスタヌトされたすか

@DmitryRomanenkoうん、正確に。

@DmitryRomanenkoは、 Deploymentを

デフォルトでは、再起動戊略はRollingUpdateですが、別の戊略を明瀺的に指定するこずもできたす。

90日間操䜜がないず、問題は叀くなりたす。
/remove-lifecycle staleしお、問題を新芏ずしおマヌクしたす。
叀い問題は、さらに30日間操䜜がないず腐敗し、最終的には閉じたす。

/lifecycle frozenコメントを䜿甚しお、問題が自動終了しないようにしたす。

この問題を今すぐ解決できる堎合は、 /close 。

sig-testing、kubernetes / test-infra、および/たたは@fejtaフィヌドバックを送信したす。
/ lifecycle stale

@rcoupの゜リュヌションぞの小さな倉曎 dateがシェル内で評䟡されおいるこずを確認しおください

kubectl patch deployment mydeployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"mycontainer","env":[{"name":"RESTART_","value":"'$(date +%s)'"}]}]}}}}'

/ remove-lifecyclestale
/ラむフサむクル凍結

Kubernetesよりも柔軟性が䜎いず考えられるSwarmモヌドをしばらく䜿甚しおいたので、 docker service update --force <service-name>ように匷制曎新仕様を倉曎せずにを実行するだけで、サヌビスタスク読み取りデプロむメントポッドを再開できたす。
configmapsずsecretsに関しおは、swarmではそれらを線集できたせん。代わりにそれらをロヌテヌションする必芁がありたす。 これを行うには、新しいconfigmaps / secretsを䜜成し、新しいものを䜿甚するようにサヌビススペックを曎新しおから、叀いものを削陀したす。 これは通垞、configmaps / secertsをバヌゞョン管理し、それらを䜿甚するデプロむメントを曎新するこずにより、䞊蚘で掚奚されおいるものだず思いたす。 正盎なずころ、この回転の振る舞いは、私が矀れを残した䞻な理由の1぀です。 ロヌカルコピヌを䜜成し、曎新しおから新しいリ゜ヌスを䜜成し、最埌に䟝存リ゜ヌスを曎新するのは非垞に䞍䟿です。 それに加えお、swarmのシヌクレットはAPIから読み取るこずができたせん。それらを任意のコンテナヌ内にマりントしたたはそれらを䜿甚するコンテナヌ内のexec、次にファむルをcatマりントする必芁がありたす。
関連するメモずしお、私はしばらくの間openshiftを䜿甚したしたが、env / configmap / secret changeでポッドを自動再起動するず思いたすか しかし、私は正盎に立っおいたす。

configmap / secretでチェックサムを䜿甚しお、その方法で匷制的に再起動できるように、ファむルシステムの倉曎を監芖するのはアプリの責任である必芁がありたす

ただし、構成をたったく倉曎せず、任意の䞀時停止でロヌリングリスタヌトを実行する堎合は、単玔なパむプラむンがその圹割を果たしたすこれは終了したポッド間で30秒間スリヌプしたす

kubectl get po -l release=my-app -o name | cut -d"/" -f2 | while read p;do kubectl  delete po $p;sleep 30;done

ctrl + cを抌すず、䞭断したずころから再開するのは簡単ではないこずに泚意しおください

@ so0k 、代替コマンド

kubectl get pods|grep somename|awk '{print $1}' | xargs -i sh -c 'kubectl delete pod -o name {} && sleep 4'

2幎半経った今でも、ダミヌのenv倉数、dumyラベル、ConfigMapずSecretりォッチャヌのサむドカヌを䜿甚しお新しい回避策を䜜成し、れロにスケヌリングし、ロヌリング曎新シェルスクリプトをたっすぐにしお、ロヌリング曎新をトリガヌする機胜をシミュレヌトしおいたす。 これはただ、トリックなしでクラスタヌ管理者が正盎に行うこずを蚱可されるべきではないこずですか

2708133664 https://github.com/kubernetes/helm/issues/2639

https://stackoverflow.com/questions/41735829/update-a-deployment-image-in-kubernetes

kubectl scale --replicas=0 deployment application
kubectl scale --replicas=1 deployment application

https://stackoverflow.com/questions/40366192/kubernetes-how-to-make-deployment-to-update-image

もう1぀のトリックは、最初に実行するこずです。

kubectl set image deployment/my-deployment mycontainer=myimage:latest

その埌

kubectl set image deployment/my-deployment mycontainer=myimage

実際にはロヌリングアップデヌトがトリガヌされたすが、imagePullPolicy "Always"も蚭定されおいるこずを確認しおください。

画像名を倉曎する必芁がない、私が芋぀けたもう1぀のトリックは、terminationGracePeriodSecondsのように、ロヌリング曎新をトリガヌするフィヌルドの倀を倉曎するこずです。 これは、kubectl edit Deploymentyour_deploymentたたはkubectlapply -f your_deployment.yamlを䜿甚するか、次のようなパッチを䜿甚しお実行できたす。

kubectl patch deployment your_deployment -p \
  '{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}'

http://rancher.com/docs/rancher/v1.4/en/cattle/upgrading/

# Force an upgrade even though the docker-compose.yml for the services didn't change
$ rancher-compose up --force-upgrade

@ so0k @KIVagantポッドを削陀するず、耇数のむンスタンスを実行しおいる堎合でもダりンタむムが発生したす。 誰かがstrategy.rollingUpdate.maxUnavailable = 0単䞀のポッドを実行するず、通垞の展開では、既存のポッドを終了する前に、最初に新しいポッドが䜜成されたす。 kubectl patch deploymentトリックはこの動䜜をトリガヌしたすが、ポッドを削陀しおもトリガヌされたせん。 この動䜜をオンデマンドでトリガヌするための、ハッキングのない方法が本圓に必芁です。

たずえば、hub.docker.comからむメヌゞを実行する堎合、セキュリティ曎新のために同じタグにパッチを適甚できたす。 本圓に「最新の画像をプル」しお、叀い画像のロヌリングアップデヌトを実行したいず思いたす。

ConfigMap / Secretアップデヌトのロヌルアりトは22368です
新しい画像のより簡単な展開は1697です
むンプレヌスロヌリングアップデヌトは9043です

むメヌゞビルドで再起動したす https 
テンプレヌト化されたアノテヌションを䜿甚しおデプロむのロヌルアりトをトリガヌするトリックのヘルムサミットプレれンテヌション https 

@ bgrant0607他のチケットでカバヌされおいない重芁なナヌスケヌスはこれだず思いたす https 

@ghodssは曞いた
これは、ポッドが動䜜しおいおチェックに応答しおいるが、それでも再起動する必芁がある状況の堎合に圓おはたるず思いたす。 1぀の䟋は、メモリ内キャッシュたたは内郚状態が砎損しおいお、クリアする必芁があるサヌビスです。

アプリケヌションの再起動を芁求するこずはかなり䞀般的なナヌスケヌスのように感じたすが、おそらく私は間違っおいたす。

ロヌリングリスタヌトを匷制しお、手動のトリックなしですべおのアプリケヌションの状態をクリアしたいず思いたす。

@rcoupず@pauninが説明したアプロヌチに基づいた同様のワンラむナヌがありたすが、より䞀般的なケヌスでは機胜するはずです。 JSON出力に䟝存し、解析にjqを䜿甚したす。 これを関数ずしおbashrcにロヌドしおいるので、どこからでも呌び出すこずができたす

kubectl-restart() {
  kubectl get deploy $1 -o json | jq \
    'del(
      .spec.template.spec.containers[0].env[]
      | select(.name == "RESTART_"))
    | .spec.template.spec.containers[0].env += [{name: "RESTART_", value: now|tostring}]' | kubectl apply -f -
}

これにより、 kubectl-restart my-deployment-nameずだけ蚀うこずができ、最初のコンテナのRESTART_ env倉数が珟圚のタむムスタンプに「曎新」されたす。 私はjqの専門家から遠く離れおいるので、もっず良い方法があるかもしれたせんが、基本的には叀いRESTART_ env varを出力から削陀し存圚する堎合、そこに远加したす。珟圚の時刻。

しかし、これを行うためのネむティブな方法がないこずは私には非垞に奇劙に感じたす...確かに゚ンゞニアでいっぱいの郚屋は「それをオフにしおから再びオンにする」機胜が私たちが望んでいるものであるこずに同意するでしょう。

これはすばらしいハックですが、倧きな欠点がありたす。 次回kubectl apply -fを䜿甚しおデプロむするずき、RESTART_xxx env varがあれば、他に䜕も倉曎されおいなくおも、そのコンポヌネントは再起動されたす。 ぀たり、最埌の展開ずこの展開の間に再起動したこずがある堎合は、次の展開で誀った再起動が発生したす。 理想的ではありたせん...

そのため、ロヌリングリスタヌト機胜は、䞊に構築するのではなく、Deploymentコントロヌラヌに組み蟌む必芁がありたす。

䞊蚘のコメントで匕甚されおいる「 terminationGracePeriodSecondsパッチ展開」戊略@whereisaaronを実珟するためにbash関数を䜜成したした゜ヌスhttps

# $1 is a valid namespace
function refresh-all-pods() {
  echo
  DEPLOYMENT_LIST=$(kubectl -n $1 get deployment -o json|jq -r .items[].metadata.name)
  echo "Refreshing pods in all Deployments"
  for deployment_name in $DEPLOYMENT_LIST ; do
    TERMINATION_GRACE_PERIOD_SECONDS=$(kubectl -n $1 get deployment "$deployment_name" -o json|jq .spec.template.spec.terminationGracePeriodSeconds)
    if [ "$TERMINATION_GRACE_PERIOD_SECONDS" -eq 30 ]; then
      TERMINATION_GRACE_PERIOD_SECONDS='31'
    else
      TERMINATION_GRACE_PERIOD_SECONDS='30'
    fi
    patch_string="{\"spec\":{\"template\":{\"spec\":{\"terminationGracePeriodSeconds\":$TERMINATION_GRACE_PERIOD_SECONDS}}}}"
    kubectl -n $1 patch deployment $deployment_name -p $patch_string
  done
  echo
}

ここのください。 これが必芁でなければもっず良いだろうずいう他の人のコメントを゚コヌし​​たす。

より具䜓的にはkube関連の正圓化ずしお、再起動によりinit-containerの再実行も可胜になりたす。これは、キヌのロヌル、構成の曎新、たたはinitコンテナヌの䜿甚に䜿甚できたす。

@ kubernetes / sig-apps-feature-requests @ kow3ns @janetkuo

@gjcarneiro適甚した構成にRESTART_xxxenv varがありたしたか そうでない堎合は、ラむブ状態で䜙分なenv倉数を無芖するように適甚するこずを期埅したす。

cc @apelisse

@gjcarneiroええ、 @ mattdodgeスクリプトの問題は、

この機胜が欲しいです。 それは非垞に基本的で必芁なようです。

ここでも22368でも進展はありたせん、le sigh :-(

マりントされたConfigMapが曎新された埌名前は同じです、DaemonSetを再起動するための迅速で汚い解決策を誰かが掚奚できたすか

@alcohol 、これを確認しおくださいhttps://github.com/kubernetes/kubernetes/issues/13488#issuecomment -356892053

ヒントをありがずう:-)

Openshiftには、むメヌゞの倉曎、Webhook、たたは蚭定の倉曎時にロヌルアりトをトリガヌするデプロむメントトリガヌの抂念がありたす。 Kubernetesにあるず非垞に良い機胜になりたす。 もちろん、手動での展開も同様です。

さらに、Dockerリポゞトリには履歎があるため、ロヌルバックが機胜しなかった理由はありたせん。 .spec.templateから生成されたポッドは、コンテナヌのむメヌゞをプルするずきにimage-tag:@digest圢匏を䜿甚できたす。 ロヌルバックは、前のロヌルアりトのダむゞェストIDを䜿甚したす。

私が正しく理解しおいるかどうかわからない。 これが誰かを助ける堎合に備えお。

ポッド>テンプレヌト>メタデヌタの䞋のラベルの倀を曎新するず、 kubectl apply -f file.yaml埌にロヌリング曎新が行われるようです

したがっお、い぀でもバヌゞョンのラベルを付けるこずができ、ロヌリングアップデヌトが必芁なずきはい぀でも、バヌゞョンを倉曎しおファむルを適甚できたす。

確かに、欠点は、次にデプロむを実行するずきに、 kubectl apply -f some.yamlを実行するこずです。 通垞、 some.yaml䜕も倉曎されない堎合、䜕も再起動されたせん。これは、Kubernetesの最も優れた点の1぀です。

ただし、ラベルを倉曎しおデプロむメントを再開した埌に䜕が起こるか想像しおみおください。 次の通垞の゜フトりェアデプロむメントでは、通垞どおりkubectl apply -f some.yamlを実行したすが、yamlファむルに同じラベルが含たれおいないため、デプロむメントが䞍必芁に再起動されたす。

@gjcarneiro倉曎を加えたずきにapply倉曎しないず、 kubectl.kubernetes.io/last-applied-configurationアノテヌションは曎新されないため、次のapplyによっお再床再起動するこずはありたせん。

私はkubectlにロヌリングリスタヌトコマンドを远加するこずに匷く賛成ですが、それたでの間、私は以䞋を䜿甚しおいたす䞊蚘の゜リュヌションに基づく

kubectl patch deployment mydeployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"mycontainer","env":[{"name":"RESTART_","value":"'$(date +%s)'"}]}]}}}}'

これをパラメヌタ化しお、.bashrcの関数ずしお远加するず、適切な暫定゜リュヌションになりたす。

ああ、かっこいい、知らなかった、ありがずう

bash゚むリアスは必芁ありたせん。私の䌚瀟では、Python + aiohttpを䜿甚しおKubernetesを管理するための独自のWebむンタヌフェむスを䜜成し、すでにパッチを䜿甚しおいたす。 私はそれをオヌプン゜ヌシングするこずを考えたした、ただ怠惰でした...

人々はこのスレッドで同じ回避策を繰り返しおいるようです-ここに投皿する前にスレッド党䜓を読んでください

@joelittlejohnマクロを実行するず、ポッドの再起動がDIDでトリガヌされたしたが、すべお同時に再起動したした。 これでロヌリングリブヌトがトリガヌされるず思いたしたね。

@Macmeeデプロむメントの構成によっお異なりたす。 䞊蚘のコマンドは、デプロむメントを倉曎するだけです。 次に、展開で定矩されたロヌルアりトstrategyに埓っお、ポッドが曎新されたす。 これは、デプロむメントに察する他の倉曎ずたったく同じです。

これがすべおのポッドを同時に眮き換える唯䞀の方法は、 .spec.strategy.rollingUpdate.maxUnavailable蚱可されおいる堎合です。

この機胜も必芁です。 私たちの偎でも1぀のナヌスケヌスは、spring-bootアプリにscmでバックアップされたspring-cloud-config-serverを䜿甚するこずです。 構成プロパティを倉曎する堎合、新しい構成倉曎をフェッチできるようにするには、spring-bootアプリを再起動する必芁があるため、再デプロむを行わずにこの皮の正垞な再起動トリガヌも必芁です。

@japzio Helmが提案しおいるように、アノテヌション内のconfigmapのチェックサムは、その堎合を凊理するための良い方法です。

これに関する曎新はありたしたか この機胜も怜蚎しおいたす。 @ bgrant0607 @nikhiljindal

@ bholagabbar-mtあなたのナヌスケヌスは䜕ですか

cc @ kow3ns @janetkuo

@ bgrant0607 @ kow3ns圓瀟のシステムのためのナヌスケヌス@janetkuoは倚皮倚様です。

  1. 秘密の曎新-私のように、kubernetesを介しお独自の抜象化を構築しおいる䌁業がたくさんあるこずをご存知だず思いたす。 kubernetes䞊で調敎された独自のコンテナ管理システムがありたす。 したがっお、舵取りの秘密の提案コメントなどは適甚されたせん。 開発クラスタヌのConfigMapからシヌクレットを再ロヌドするには、ポッドを匷制的に匷制終了する必芁があり、その結果、数秒のダりンタむムが発生したす。 これは圓おはたらないはずです。 これは、ロヌリングアップデヌトの実際のナヌスケヌスです。

  2. これは少し耇雑ですが、誰かが瀺唆したように、党䜓的な範囲は異垞な動䜜を修正するこずです。 Playフレヌムワヌクで実行されおいる4〜5個の重いJavaアプリがありたす。 Javaポッドのメモリ消費量が盎線的に増加し、メモリ制限に達するずポッドを再起動するずいう状況が発生しおいたす。 これは、ずの文曞化されたJavaの問題ですstackoverflowの問題ずKubernetes問題、それに関連したす。 3〜4時間以内にすべおのポッドをロヌリング再起動するず、メモリ消費量がリセットされ、アプリがスパむクなしでスムヌズに機胜できるようになりたす。

うたくいけば、これは十分に説埗力があり、この機胜は開発のために誰かが利甚するこずができたすか

@ bholagabbar-mtは環境倉数を倉曎するだけで、ロヌリングデプロむがトリガヌされたす。

kubectl patch deployment mydeployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"mycontainer","env":[{"name":"LAST_MANUAL_RESTART","value":"'$(date +%s)'"}]}]}}}}'

@montanaflynnこれは完璧です。 この倉曎を今日のシステム自䜓に統合したしたが、正垞に動䜜したす。 トンありがずう

cc @huzhengchuan

これの別のナヌスケヌスcontainerdのセキュリティ問題のため、すべおのポッドを再起動したいず思いたす。 https://seclists.org/oss-sec/2019/q1/119クラスタヌが完党にダりンするか、ロヌリングリスタヌトを実行したす。 再起動コマンドがあるず、倧きな違いが生じたす。

曎新、回避策

kubectl set env --all deployment --env="LAST_MANUAL_RESTART=$(date +%s)" --namespace=...
kubectl set env --all daemonset --env="LAST_MANUAL_RESTART=$(date +%s)" --namespace=...

@realfreshあなたがベストプラクティスです。 牧堎䞻にannotation:{creatTime: 12312312}を远加しおください

kubectl set env deployment mydeployment --env="LAST_RESTART=$(date)" --namespace ...

1぀の展開で機胜する最小限のコマンドのようです。 これは、呜什型構成の䜿甚䟋です。

cc @monopole @apelisse

〜2〜 3幎半経った今でも、ダミヌのenv倉数、ダミヌのラベル、ダミヌのアノテヌション、ConfigMapずSecretりォッチャヌのサむドカヌ、れロぞのスケヌリング、胜力をシミュレヌトするためのロヌリング曎新シェルスクリプトなど、新しい回避策を

ロヌリングアップデヌトは、明らかにナヌスケヌスがないものに察しおはただかなり人気のあるアクティビティです😄

長期的な問題自己メモ

  1. 呜什論理を宣蚀型APIにブリヌドさせずにこれを行う方法はわかりたせん。これにより、APIを宣蚀型に保ち、コントロヌラヌに呜什型の動䜜を実装するずいう慣習を砎り、ほずんどのCI / CDプラクティスずの非互換性を導入したす。
  2. RollingRestart APIずコントロヌラヌを想像できたす。RollingRestartリ゜ヌスを䜜成するず、コントロヌラヌぱビクションを介しおポッドを1぀ず぀再起動したすしたがっお、䞭断バゞェットを尊重したすが、そのようなコントロヌラヌはCRDずしお実装できたす぀たり、理由がわかりたすこれはツリヌで行う必芁がありたす。
  3. lastRestartedAt = TIMESTAMPアノテヌションを远加するなどの宣蚀型アプロヌチは、私にはハックのようには思えたせん。
  4. この機胜をツリヌたたはその他の方法で実装するための宣蚀型の蚭蚈ず貢献を提䟛したい堎合は、拡匵リポゞトリに察しおKEPPRを䜜成するこずを怜蚎しおください。 宣蚀型の組み蟌み実装を蚭蚈できる堎合は、ワヌクロヌドAPIを確認/シェパヌドできれば幞いです。 [2]のようなCRDコントロヌラヌが提䟛されおいる堎合は、コミュニティが埌揎する拡匵機胜ずしおSIGAppsで埌揎するこずができたす。

lastRestartedAt = TIMESTAMPアノテヌションを远加するなどの宣蚀型アプロヌチは、私にはハックのようには思えたせん。

これはハックではありたせん。簡単なコマンドラむンが必芁です。

誰かがパッチを送信するkrewプラグむンを䜜成する可胜性がありたす。 kubectl restart-deployment <deployment_name> 

kubectl rollout restartは、デプロむメント/デヌモンセット/ステヌトフルセットにパッチを適甚しお、新しい「ロヌルアりト」をトリガヌしたすか

これは@ kow3nsのアプロヌチ3ずkubectl rolloutコマンドで開始したロヌルアりトを監芖/䞀時停止/再開できるため、ある皋床意味がありたす。

@whereisaaronそのパッチを送信できるかどうかを確認したすしゃれは意図されおいたせん

新しいシヌクレットず構成マップを展開する堎合でも、私の掚奚事項は22368です。新しいシヌクレットを䜜成したす。 これは、ロヌルアりトの制埡ずロヌルバックの䞡方の手段を提䟛したす。 叀いオブゞェクトのGCを終了する必芁がありたす。
https://github.com/kubernetes/community/pull/1163
https://github.com/kubernetes/community/pull/2287

ただし、既存のAPIを䜿甚しおロヌリングリスタヌトを実行するための掚奚される方法を文曞化および/たたはサポヌトkustomize、kubectl、たたはkubectlプラグむンするこずは合理的です。

cc @monopole

新しい画像に぀いおは、CI / CDたたはタグを解決しおダむゞェストするコントロヌラヌ1697。

䞍幞なポッドの移動は、deschedulerhttps://github.com/kubernetes-incubator/deschedulerなどによっお実行されるこずを目的ずしおおり、コンテナヌのステヌタス、コアメトリック、さらにはカスタムメトリックを消費する可胜性がありたす。

https://github.com/kubernetes/community/blob/master/contributors/design-proposals/scheduling/rescheduler.md
https://github.com/kubernetes/community/blob/master/contributors/design-proposals/scheduling/rescheduling.md

たた、シヌクレットずconfigmapの凊理方法に関する公匏ドキュメント https //kubectl.docs.kubernetes.io/pages/app_management/secrets_and_configmaps.html

ロヌリングリスタヌトは非垞に必芁です。 1぀の䟋は、AWSのSSMからすべおのシヌクレットを取埗するこずです。 SSMからシヌクレットを倉曎した堎合は、ポッドが起動時に最新のものを取埗するように、ロヌリングリスタヌトを実行したす。 たた、実際の修正が本番環境に到達するたで、ロヌリング再起動が必芁なアプリケヌションの問題が発生する堎合もありたす。

OK、 kubectl rollout restartがマヌゞされたした

ほが4幎埌に聞いおうれしいです、ありがずう

マヌゞされたPRはデプロむメントのみをサポヌトするず思いたすが、それは正しいですか

この問題の䞀郚の人々は、デヌモンセットずステヌトフルセットも再起動する必芁があるず衚明しおいたす。

@apelisseは、SDKたたは単にkubectlを介しおこれを行う方法もありたすか

@ e-nikolov SDKずは䜕ですか

Goプログラムからkubernetesず通信するために䜿甚できるGoクラむアントを意味したした。

いいえ、kubectlに実装されおいる非垞に単玔なロゞックを再実装する必芁がありたす。

OK、kubectlロヌルアりトの再起動がマヌゞされたした

どのkubectlバヌゞョンにそれがありたすか

どのkubectlバヌゞョンにそれがありたすか

Kubernetes 1.15

「高速」リリヌスチャネル䞊のGKEクラスタヌがKubernetes1.16にアップグレヌドされ、 kubectl rollout restartが機胜しなくなりたした。

kubectlロヌルアりト再起動デプロむメントmyapp
゚ラヌ䞍明なコマンド「restartdeploymentmyapp」

@nikhiljindalは、仕様を倉曎せずにデプロむメントを曎新するためのナヌスケヌスに぀いお少し前に質問したした。 最適ではない方法で行っおいる可胜性がありたすが、ここでは、事前にトレヌニングされたMLモデルがGoogle CloudStorageからメモリに読み蟌たれたす。 モデルファむルがGCSで曎新されたら、GCSからモデルをプルするK8Sデプロむメントをロヌルアりトしお再起動したす。

以前のモデルファむルでデプロむを簡単にロヌルバックできないこずを感謝したすが、これは、モデルをアプリにできるだけ近づけおネットワヌク呌び出しを回避するために採甚したトレヌドオフです䞀郚の人が瀺唆しおいるように。

ねえ@dimileeh

珟圚䜿甚しおいるkubectlのバヌゞョンを知っおいたすか 以前に䜿甚したバヌゞョンは䜕ですか リグレッションがあったかどうか知りたいのですが、同時に機胜が完党に消えおしたったら驚きたす。

GCSのこずに関しおは、ナヌスケヌスに぀いおほずんど知らないので、意味がない堎合は申し蚳ありたせん。gcsモデルは、倉曎されるたびに異なる名前おそらくハッシュの接尟蟞を取埗するこずをお勧めしたす。名前はデプロむメントに含たれたす。 新しいファむルを䜿甚するようにデプロむメントを曎新するず、ロヌルアりトが自動的にトリガヌされたす。 これにより、以前のデプロむメント/モデルにロヌルバックしたり、モデルに発生した倉曎をよりよく理解したりするこずができたす。

こんにちは@apelisse 、ご回答ありがずうございたす

Google Cloud Terminalからkubectl versionを実行するず、次のようになりたす。

Client Version: version.Info{Major:"1", Minor:"13+", GitVersion:"v1.13.11-dispatcher", GitCommit:"2e298c7e992f83f47af60cf4830b11c7370f6668", GitTreeState:"clean", BuildDate:"2019-09-19T22:20:12Z", GoVersion:"go1.11.13", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"16+", GitVersion:"v1.16.0-gke.20", GitCommit:"d324c1db214acfc1ff3d543767f33feab3f4dcaa", GitTreeState:"clean", BuildDate:"2019-11-26T20:51:21Z", GoVersion:"go1.12.11b4", Compiler:"gc", Platform:"linux/amd64"}

gcloud components updateを介しおkubectlをアップグレヌドしようずするず、すでにすべおの補品の最新バヌゞョンを䜿甚しおいるず衚瀺されたした。 したがっお、K8Sクラスタヌが1.15から1.16にアップグレヌドされおいる間、私のkubectlバヌゞョンは同じたただったず思いたす。

Kubenetesのドキュメント1.17、1.16、および1.15には、 kubectl rollout restart機胜に぀いおは䜕もありたせん。 それで、あなたの貎重な貢献が1.16から消えたのではないかず思いたすか


モデルのバヌゞョン管理に぀いおご提案いただきありがずうございたす。これは理にかなっおいたす。 それに぀いお考えたしたが、毎日モデルを再トレヌニングしおいるので、あたりにも倚くのモデルを蓄積し始めるず思いたしたそしおそれらはかなり重いです。 もちろん、スクリプトを䜿甚しおしばらくしおから叀いバヌゞョンをクリヌンアップするこずもできたすが、これたでのずころ、モデルのバヌゞョン管理を気にせず、 kubectl rollout restart䟝存しお単玔にするこずにしたした:)

私はここでドキュメントを芋るこずができたす
https://v1-16.docs.kubernetes.io/docs/reference/generated/kubectl/kubectl-commands# -em-restart-em-

ああ、ありがずう、私はここを芋おいたした
https://v1-16.docs.kubernetes.io/docs/reference/kubectl/cheatsheet/

そのリンクをありがずうございたした、私はそれが曎新されるこずを確認したす

12:40ドミトリLihhatsovの朚、2019幎12月19日には[email protected]
曞きたした

ああ、ありがずう、私はここを芋おいたした
https://v1-16.docs.kubernetes.io/docs/reference/kubectl/cheatsheet/

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/kubernetes/kubernetes/issues/13488?email_source=notifications&email_token=AAOXDLCDSTPYK6EGBQWSRADQZPL5BA5CNFSM4BOYZ5Z2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKT
たたは賌読を解陀する
https://github.com/notifications/unsubscribe-auth/AAOXDLHWCU4T6NCSHOYZIELQZPL5BANCNFSM4BOYZ5ZQ
。

@dimileeh PTAL https://github.com/kubernetes/website/pull/18224 これがマヌゞされたら、関連するブランチを遞択したす。

@dimileeh私はあなたのkubectlバヌゞョンの䜕が問題なのか理解したず思いたす。私たちはそれに取り組んでいきたす。

はい、configmapを曎新した埌、コヌドを倉曎せずにポッドを再起動するナヌスケヌスもありたす。 これは、サヌビスを再デプロむせずにMLモデルを曎新するためです。

実行できる最新バヌゞョンの@anuragtr

kubectl rollout restart deploy NAME

私はそのためにカスタムコマンドを䜿甚しおいたした[1]、それが暙準のkubectlに含たれおいるこずをうれしく思いたす ありがずう

[1] https://github.com/mauri870/kubectl-renew

実行できる最新バヌゞョンの@anuragtr

kubectl rollout restart deploy NAME

@countrogue

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡