ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

kubernetes-Deployment

2020-03-04 21:04:50  阅读:230  来源: 互联网

标签:name kubernetes Deployment 更新 deployment Pod revision


1 Deployment介绍

1.1 相关术语

Pod:每个Pod是一个或一组紧密相关的容器,每个Pod就像是一个独立的逻辑机器,拥有自己的IP、主机名、进程等,运行一个独立的应用程序,是K8S调度的基本单位。
ReplicationController:简称RC,旨在创建和管理一个Pod的多个副本(replicas)。当Pod副本数少于指定数目,RC就会启动运行新的Pod副本;多于指定数目,RC就会杀死多余的Pod副本。
ReplicaSet:是新一代的RC,其相比于RC,Pod选择器的表达能力更强,其选择器可匹配缺少某个标签或特定标签名的Pod。
Deployment:是一种更高阶的资源,用于部署应用程序并以声明的方式升级应用。当创建一个Deployment时,ReplicaSet资源会随之创建,ReplicaSet是新一代的ReplicationController,并推荐使用它替代ReplicationController来复制和管理Pod,在使用Deployment时,实际的Pod是由Deployment的ReplicaSet创建和管理的。

1.2 Deployment的使用机制

使用Deployment机制

2 Deployment使用

2.1 Deployment生命周期

1、创建deployment
$ kubectl create -f xxx.yaml
2、查看当前运行的deployment
$ kubectl get deployment
3、更新deployment
$ kubectl edit deployment/deployment_name
4、删除deployment
$ kubectl delete deployment deployment_name

3 Deployment更新

3.1 更新策略

  在Deployment中,可以通过spec.strategy指定Pod更新的策略,目前支持:Recreate(重建)和RollingUpdate(滚动更新),默认是RollingUpdate。
Recreate:设置spec.strategy.type=Recreate,更新方式为:Deployment在更新Pod时,会先杀掉所有正在运行的Pod,然后创建新的Pod。
RollingUpdate:设置spec.strategy.type=RollingUpdate,更新方式为:Deployment会以滚动的方式来渐变性的更新Pod,即Pod新版本的递增,旧版本的递减的一个过程。

3.2 滚动更新

3.2.1 概念

“滚动”,给人的是一种“圆”的印象,持续,不中断的意思,类似于“持续交付”的理念。RollingUpdate策略指一次仅更新一个Pod,并且逐个更新,而不是一次性将所有的服务都关闭,避免业务中断。

3.2.2 原理

滚动更新流程
1)初始创建Deployment,系统创建了一个ReplicaSet,并按照用户的需求创建了3个Pod副本;
2)当更新Deployment时,系统创建一个新的ReplicaSet,并将其副本数量扩展到1,然后将旧的ReplicaSet缩减为2;
3)系统继续按照相同的更新策略对新旧两个ReplicaSet进行逐个调整。
4)最后,新的ReplicaSet运行了3个新版本的Pod副本,旧的ReplicaSet副本数量则缩减为0。

4 Deployment回滚

4.1 概念

回滚:通过滚动升级的策略可以平滑的升级Deployment,若升级出现问题,需要最快且最好的方式回退到上一次能够提供正常工作的版本。为此K8S提供了回滚机制。
revision:更新应用时,K8S都会记录当前的版次,即为revision,当升级出现问题时,可通过回滚到某个特定的revision,默认配置下,K8S只会保留最近的几个revision,可以通过Deployment配置文件中的spec.revisionHistoryLimit属性增加revision数量。
更新或回滚:每次更新或回滚时,revision都会自增1,回滚可以看作是一次更新,是一次更新为原版本的操作。

4.2 kubectl使用

1、查看修订版本记录
$ kubectl rollout history deployment deployment_name
2、查看某个历史记录的详细信息
$ kubectl rollout history deployment deployment_name --revision=2
其中--revision表示指定修订版本;
3、回滚到上一个版本
$ kubectl rollout undo deployment deployment_name
4、回滚到指定版本
$ kubectl rollout undo deployment deployment_name --to-revision=2
其中,--to-revision表示回滚到指定的修订版本。

4.3 API使用

POST

/apis/apps/v1beta1/namespaces/{namespace}/deployments/{name}/rollback
如:
curl -k -H 'Authorization: Bearer token_xxxx' -H 'Content-Type:application/json' -X POST -d '{
    "kind": "DeploymentRollback",
    "apiVersion": "extensions/v1beta1",
    "name": "deployment_name",
    "rollbackTo": {
        "revision": 2
    }
}' https://localhost:6443/apis/extensions/v1beta1/namespaces/default/deployments/deployment_name/rollback

其中:name和rollbackTo.revision为必须字段,name为资源名称,rollbackTo.revision为回退的版本,若要回退上一个版本,即为0。

标签:name,kubernetes,Deployment,更新,deployment,Pod,revision
来源: https://www.cnblogs.com/Andya/p/12416094.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有