Kubernetes: Resource: Deployment

 5th June 2021 at 3:03pm

Deployment 最大的特点是:它可以让升级过程变成 声明式 的(而不是指令式的)。声明式是 k8s 一直强调的哲学。

假如没有 Deployment,你需要使用 ReplicaSetReplicationController。一旦升级时,如果你想实现滚动升级,需要非常麻烦地去建立新的 RS / RC,不停地修改 replicas 值,直到升级完成。Deployment 帮你搞定这个过程。

kubectl 提供了一个命令 rolling-update,但这个命令不是使用 Deployment,而是把上述人工操作的过程,用代码来调用 kube-apiserver 完成。如果 kubectl 中途挂掉,会非常地啰嗦麻烦。

而且 Deployment 还提供了类似发布历史的能力:

$ kubectl rollout history deployment kubia deployments "kubia":

REVISION    CHANGE-CAUSE
2           kubectl set image deployment kubia nodejs=luksa/kubia:v2
3           kubectl set image deployment kubia nodejs=luksa/kubia:v3

发布有异常时,你可以回滚到前一个版本(revision)。你也可以回滚到任何特定版本。保留几个版本,由 revisionHistoryLimit 控制。版本信息存在 RS 中,因此你不要手动删掉 Deployment 建立的 RS。