やあ、
ここに記載されているように間違った順序でそれを行って申し訳ありません: https :
この問題に対処するために#22439を実行しました(kubectl側)
必要なのは、単一のコマンドラインでデーモンセットを更新できるようにすることです。
基本的にそれは行うことと同等です:
kubectl delete -f dsfile --cascade=false
kubectl create -f dsfile
for pod in pods
kubectl delete pod
wait for delete
編集: @ bgrant0607は、
クライアント側のソリューションに貢献したいのであれば、それは私たちが考えている長期的な方向性ではありませんが(#12143)、新しいコマンドを導入するべきではありません。 代わりに、DaemonSet(および必要に応じてReplicaSetも)でkubectl rolling-update
機能させる必要があります。
https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/rollingupdate.go
rolling-update
はリソースタイプ( replicationcontroller
)を指定しないため、デフォルトでrc
想定する必要があります。 それ以外は、type / name構文を使用して、構文を他のコントローラータイプに自然に拡張できると思います。
例えば:
kubectl rolling-update daemonset/mydaemon --image=image:v2
ただし、コマンド自体を除いて、更新手順でコードを共有することは期待していません。
現在のrolling-updateコマンドは、新しいReplicationControllerを作成し、古いものを縮小しながら徐々に拡大します。 --image
場合、名前を元のRCに戻すために、最後に「削除ダンス」を実行します。元のRCを削除し、同じ名前の別のRCを作成してから、新しいイメージをロールアウトするために使用される一時的なRC。
DaemonSetの場合、kubectlは逆のことを行います。つまり、元のDaemonSetを更新し、ポッドを1つずつ削除して、ポッドを置き換えます。 --image
が指定された場合、それは最後に実行されます。 新しいDaemonSet名が指定された場合(たとえば、 kubectl rolling-update daemonset/mydaemon-v1 -f mydaemon-v2.yaml
)、更新プロセスの最後に新しいDaemonSetが作成され、元の名前が削除されます。 DaemonSetがそれを適切に処理することを確認するか、新しいDaemonSetを作成する前に元のDaemonSetを削除する必要があります(#7402の私の提案と同様)。
cc @mikedanese @davidopp @madhusudancs @janetkuo @kargakis @pwittrock @gmarek
1.6には、DaemonSetのローリングアップグレードが含まれています。
更新していただきありがとうございます! 👍
最も参考になるコメント
1.6には、DaemonSetのローリングアップグレードが含まれています。