24

我对 Kubernetes 非常陌生,并且使用 k8s v1.4、Minikube v0.15.0 和 Spotify maven Docker 插件。
我项目的构建过程会创建一个 Docker 镜像,并直接将其推送到 Minikube 的 Docker 引擎中。

pod 是由我创建的 Deployment 创建的(使用副本集),并且策略设置为type: RollingUpdate.

我在文档中看到了这一点:

注意:当且仅当 Deployment 的 pod 模板(即 .spec.template)发生更改时,才会触发 Deployment 的推出。


我正在寻找一种简单的方法/解决方法来自动化流程:构建触发 > 推送新的 Docker 映像(不更改版本) > 部署将更新 pod > 服务将公开新的 pod。

4

3 回答 3

29

当不更改容器图像名称或标签时,您只需将应用程序缩放到 0 并返回到原始大小,例如:

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

如评论中所述ImagePullPolicy: Always,您的配置中已经需要。

更改图像时,我发现这是更新图像的最直接方法

kubectl set image deployment/application app-container=$IMAGE

不更改图像会导致您在出现问题时无能为力。因此,我不建议在开发环境之外使用它。


编辑:小红利——前后保持比例同步可能看起来…… 喜欢:

replica_spec=$(kubectl get deployment/applicatiom -o jsonpath='{.spec.replicas}')
kubectl scale --replicas=0 deployment application
kubectl scale --replicas=$replica_spec deployment application

干杯

于 2017-01-19T09:25:09.757 回答
8

如果您至少有 1.15 版本,请使用以下功能

kubectl rollout restart deployment/deployment-name

在此处阅读有关它的更多信息kubectl rollout restart

于 2020-09-14T21:04:32.743 回答
0

我很好奇您为什么不更改图像版本(:

另一种选择(旁边kubectl rollout restart)是使用kubectl patch

kubectl patch deployment name -p "{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"version\":\"$BUILD_SHA_OR_DATE\"}}}}}}"

使用此命令,您可以灵活地更改部署规范中的特定字段,如标签选择器、pod 标签、环境变量等

(*) 另一个更适合调试但值得一提的选项是检查您的推出的修订历史记录:

$ kubectl rollout history deployment my-dep
deployment.apps/my-dep
 
REVISION  CHANGE-CAUSE
2         <none>
4         <none>
5         <none>
6         <none>
11        <none>
12        <none>

然后通过运行返回到上一个版本:

 $kubectl rollout undo deployment my-dep --to-revision=11

然后回到新的。

(**) CHANGE-CAUSE 是<none>因为您应该使用--record标志运行更新 - 就像这里提到的:

kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 --record

(***) 有关于弃用此标志的讨论。

于 2020-10-20T08:39:41.737 回答