Kubernetes_Deployment全解析(无状态的Pod)

栏目:影视资讯  时间:2022-11-08
手机版

  前言一、创建Deployment1.1 创建Deployment

  

  

  1.2 Deployment yaml文件

  在该 yaml 文件中:

  创建名为 nginx-deployment(由 .metadata.name 字段标明)的 Deployment。spec 中有三个字段,分别是 replicas 副本数、selector 选择器、template模板,如下:

  (1) 该 Deployment 创建三个(由 .spec.replicas 字段标明)Pod 副本。

  (2) .spec.selector 字段定义了 Deployment 如何查找要管理的 Pod。在这里,你选择在 Pod 模板中定义的标签(app: nginx)。 不过,更复杂的选择规则是也可能的,只要 Pod 模板本身满足所给规则即可。

  (3) template 字段包含以下子字段:Pod 被使用 .metadata.labels 字段打上 app: nginx 标签。Pod 模板规约(即 .template.spec 字段)指示 Pod 运行一个 nginx 容器, 该容器运行版本为 1.14.2 的 nginx Docker Hub 镜像。创建一个容器并使用 .spec.template.spec.containers[0].name 字段将其命名为 nginx。

  1.3 查看当前deploy(get命令和rollout命令)

  查看当前deploy,包括两条命令,如下:

  运行 kubectl get deployments 检查 Deployment 是否已创建。 如果仍在创建 Deployment,则输出类似于:

  

  在检查集群中的 Deployment 时,所显示的字段有:

  (1) NAME 列出了名字空间中 Deployment 的名称。(2) READY 显示应用程序的可用的“副本”数。显示的模式是“就绪个数/期望个数”。(3) UP-TO-DATE 显示为了达到期望状态已经更新的副本数。(4) AVAILABLE 显示应用可供用户使用的副本数。(5) AGE 显示应用程序运行的时间。

  请注意期望副本数是根据 .spec.replicas 字段设置 3。

  

  解释一下,这个 rollout 也是查看命令,只是这个 rollout 命令用得比 get 命令少,rollout 的英文就是 展示 的意思

  

  1.4 查看当前rs(get命令)

  

  ReplicaSet 输出中包含以下字段:

  (1) NAME 列出名字空间中 ReplicaSet 的名称;(2) DESIRED 显示应用的期望副本个数,即在创建 Deployment 时所定义的值。 此为期望状态;(3) CURRENT 显示当前运行状态中的副本个数;(4) READY 显示应用中有多少副本可以为用户提供服务;(5) AGE 显示应用已经运行的时间长度。

  注意 ReplicaSet 的名称始终被格式化为[Deployment名称]-[哈希]。 其中的哈希字符串与 ReplicaSet 上的 pod-template-hash 标签一致。

  1.5 查看当前pod(get命令)

  

  二、更新Deployment

  当前镜像为 1.16.0 ,更新为 1.16.1 ,有两种方式:

  方式1:kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1方式2:kubectl edit deploy xxx 直接修改当前运行的yaml文件

  2.1 通过具体的kubectl命令来更新deploy

  更换镜像之前,如下:

  

  

  

  2.2 通过修改当前运行的yaml文件来更新deploy

  需求:nignx 从 1.16.2 变成 1.17

  方式:kubectl edit deploy xxx 直接修改当前运行的yaml文件

  

  

  三、回滚Deployment3.1 查看版本历史信息

  如果说更新deployment是正向变动,那么回滚Deployment就是反向变动。

  回滚/反向变动都有一个版本的概念,查看版本的命令如下:

  

  3.2 回滚到指定版本

  回滚/反向变动的命令包括回滚到上一版本和回滚到指定版本,如下:

  kubectl rollout undo deployment/nginx-deploymentkubectl rollout undo deployment/nginx-deployment --to-revision=1

  

  

  

  四、缩放Deployment

  缩放包括手动缩放和自动缩放两种方式,命令如下:

  手动缩放:kubectl scale deployment/nginx-deployment --replicas=10自动缩放:kubectl autoscale deployment/nginx-deployment --min=10 --max=15 --cpu-percent=80

  4.1 手动缩放

  

  4.2 自动缩放

  

  五、暂停、恢复 Deployment 的上线过程

  暂停:kubectl rollout pause deployment/nginx-deployment恢复:kubectl rollout resume deployment/nginx-deployment

  5.1 暂停deploy

  

  处于暂停状态无法更新,如下:

  

  kubectl set image deployment/nginx-deployment nginx=nginx:1.17kubectl rollout history deployment/nginx-deploymentkubectl get rs

  暂停 Deployment 上线之前的初始状态将继续发挥作用,但新的更新在 Deployment 上线被暂停期间不会产生任何效果。

  5.2 恢复deploy

  kubectl rollout resume deployment/nginx-deploymentkubectl get rs

  

  六、Deployment 状态6.1 进行中的Deployment

  执行下面的任务期间,Kubernetes 标记 Deployment 为进行中(Progressing)_:

  (1) Deployment 创建新的 ReplicaSet(2) Deployment 正在为其最新的 ReplicaSet 扩容(3) Deployment 正在为其旧有的 ReplicaSet(s) 缩容(4) 新的 Pod 已经就绪或者可用(就绪至少持续了 MinReadySeconds 秒)。

  当上线过程进入“Progressing”状态时,Deployment 控制器会向 Deployment 的 .status.conditions 中添加包含下面属性的状况条目:

  你可以使用 kubectl rollout status 监视 Deployment 的进度。

  6.2 成功的Deployment

  当 Deployment 具有以下特征时,Kubernetes 将其标记为完成(Complete);

  (1) 与 Deployment 关联的所有副本都已更新到指定的最新版本,这意味着之前请求的所有更新都已完成。(2) 与 Deployment 关联的所有副本都可用。(3) 未运行 Deployment 的旧副本。

  当上线过程进入“Complete”状态时,Deployment 控制器会向 Deployment 的 .status.conditions 中添加包含下面属性的状况条目:

  这一 Progressing 状况的状态值会持续为 “True”,直至新的上线动作被触发。 即使副本的可用状态发生变化(进而影响 Available 状况),Progressing 状况的值也不会变化。

  你可以使用 kubectl rollout status 检查 Deployment 是否已完成。 如果上线成功完成,kubectl rollout status 返回退出代码 0。

  6.3 失败的Deployment

  你的 Deployment 可能会在尝试部署其最新的 ReplicaSet 受挫,一直处于未完成状态。 造成此情况一些可能因素如下:

  (1) 配额(Quota)不足(2) 就绪探测(Readiness Probe)失败(3) 镜像拉取错误(4) 权限不足(5) 限制范围(Limit Ranges)问题(6) 应用程序运行时的配置错误

  检测此状况的一种方法是在 Deployment 规约中指定截止时间参数: (.spec.progressDeadlineSeconds)。 .spec.progressDeadlineSeconds 给出的是一个秒数值,Deployment 控制器在(通过 Deployment 状态) 标示 Deployment 进展停滞之前,需要等待所给的时长。

  

  

  总结

  创建deployment并查看deploy、查看rs、查看pod更新deployment:要么通过kubectl命令、要么通过edit deploy xxx来更新回滚deployment:学会查看版本历史信息的两条命令,学会回滚到指定版本缩放deployment:手动缩放+自动缩放暂停deployment+恢复deploymentdeployment的状态

  天天打码,天天进步!!

上一篇:婚姻中的“二八定律”,你中了几条?
下一篇:万万没想到,厨房用了集成灶,体验竟这么爽

最近更新影视资讯