Deployment为Pod和ReplicaSets提供声明性更新

示例

---
apiVersion: apps/v1
kind: Deployment
metadata:
     name: deploy-myweb
     namespace: default
spec:
     replicas: 3
     selector:
         matchLabels:
             app: myweb
             tier: frontend
     template:
         metadata:
             namespace: default
             labels:
                 app: myweb
                 tier: frontend
         spec:
             containers:
               - name: container-myweb
                 image: mycloudedu/myweb:v1
                 imagePullPolicy: IfNotPresent

将清单提交给kubernetes集群,将创建定义的Deployment及其管理的ReplicaSet与pod

[root@master kubernetes]# kubectl apply -f deploy-myweb.yaml

验证

[root@master kubernetes]# kubectl get deployment
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
deploy-myweb   3/3     3            3           89s

[root@master kubernetes]# kubectl get rs
NAME                      DESIRED   CURRENT   READY   AGE
deploy-myweb-85996f4d65   3         3         3       111s

[root@master kubernetes]# kubectl get pod
NAME                            READY   STATUS    RESTARTS   AGE
deploy-myweb-85996f4d65-4dr58   1/1     Running   0          6s
deploy-myweb-85996f4d65-8vfhl   1/1     Running   0          6s
deploy-myweb-85996f4d65-qsfmj   1/1     Running   0          6s

这里只阐述几个字段:.spec.replicas、.spec.selector、.spec.strategy、.spec.revisionHistoryLimit、.spec.template五个字段。其他字段跟前两篇文章差不多,这里不作阐述。想了解请点击这里

kubectl explain deployment.spec

replicas    <integer>                          #是指期望值的pod数

selector <Object> -required-              #标签选择器,kubernetes根据这个标签查看有几个pod。符不符ReplicaSet合期望值

strategy <Object>                             #更新pod的策略

template <Object> -required-             #创建pod的模板

revisionHistoryLimit    <integer>         #保存几个历史版本,默认是10个

kubectl explain deployment.spec.selector有两种用法:

matchExpressions  <[]Object>

matchLabels    <map[string]string>

示例一:键与值的关系

matchExpressions:

- key:KEY

operator: (In, NotIn, Exists and DoesNotExist)

values: [VALUES1,VALUES2,…]

示例二:

matchLabels:

KEY:VALUES

kubectl explain deployment.spec.strategy

rollingUpdate <Object>       #当type是RollingUpdate,这个字段才生效

type    <string>                  #类型有两种Recreate与RollingUpdate,默认是RollingUpdate

当type=Recreate时,重新创建pod。当type=RollingUpdata时,重新创建pod是由策略规划。

这里讲解一下type=RollingUpdata。

kubectl explain deployment.spec.strategy.rollingUpdate有两个字段:

maxSurge    <string>              #最多能多几个pod

maxUnavailable    <string>      #最多能少几个pod

示例:

rollingUpdate:

maxSurge: <integer>

maxUnavailable: <integer>

这里template不阐述,说几个注意事项:

1.metadata.name这项可以不定义。因为定义了也不会生效。

2.metadata.labels必须含有selector的标签。

3.spec与pod的spec是一样的,这里就不在说明了。需要了解的查看上面文章。

综合示例

---
apiVersion: apps/v1
kind: Deployment
metadata:
     name: deploy-myweb
     namespace: default
spec:
     replicas: 3
     selector:
         matchLabels:
             app: myweb
             tier: frontend
     strategy:
         type: RollingUpdate
         rollingUpdate:
             maxSurge: 1
             maxUnavailable: 1
     revisionHistoryLimit: 3
     template:
         metadata:
             namespace: default
             labels:
                 app: myweb
                 tier: frontend
         spec:
             containers:
               - name: container-myweb
                 image: mycloudedu/myweb:v1
                 imagePullPolicy: IfNotPresent

验证

[root@master kubernetes]# kubectl describe deploy deploy-myweb

RollingUpdateStrategy:  1 max unavailable, 1 max surge

用打补丁的方式修改策略

[root@master kubernetes]# kubectl patch deployments deploy-myweb -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":2,"maxUnavailable":0}}}}'
deployment.apps/deploy-myweb patched

验证

[root@master kubernetes]# kubectl describe deploy deploy-myweb

RollingUpdateStrategy:  0 max unavailable, 2 max surge

更新版本,定义更新一个版本暂停。是否跟定义更新策略进行更新

[root@master kubernetes]# kubectl set image deployments deploy-myweb container-myweb=mycloudedu/myweb:v2 && kubectl rollout pause deployment/deploy-myweb
deployment.apps/deploy-myweb image updated
deployment.apps/deploy-myweb paused

[root@master ~]# kubectl get pod -w
NAME                            READY   STATUS    RESTARTS   AGE
deploy-myweb-85996f4d65-4dr58   1/1     Running   0          57m
deploy-myweb-85996f4d65-8vfhl   1/1     Running   0          57m
deploy-myweb-85996f4d65-qsfmj   1/1     Running   0          57m
deploy-myweb-7fff44cfb8-cvbxf   0/1     Pending   0          0s
deploy-myweb-7fff44cfb8-h47lb   0/1     Pending   0          0s
deploy-myweb-7fff44cfb8-cvbxf   0/1     Pending   0          0s
deploy-myweb-7fff44cfb8-h47lb   0/1     Pending   0          0s
deploy-myweb-7fff44cfb8-cvbxf   0/1     ContainerCreating   0          0s
deploy-myweb-7fff44cfb8-h47lb   0/1     ContainerCreating   0          0s
deploy-myweb-7fff44cfb8-h47lb   1/1     Running             0          3s
deploy-myweb-7fff44cfb8-cvbxf   1/1     Running             0          3s

原本三个pod还是运行,后面创建一个pod。上面定义的策略是:允许最多多两个,不能减少pod。结论:符合更新策略

取消暂时更新

[root@master kubernetes]# kubectl rollout resume deploy/deploy-myweb
deployment.apps/deploy-myweb resumed

验证

[root@master ~]# kubectl rollout status deploy deploy-myweb
Waiting for deployment "deploy-myweb" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment spec update to be observed...
Waiting for deployment spec update to be observed...
Waiting for deployment "deploy-myweb" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "deploy-myweb" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "deploy-myweb" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "deploy-myweb" rollout to finish: 1 old replicas are pending termination...
deployment "deploy-myweb" successfully rolled out

[root@master kubernetes]# kubectl get deploy -o wide
NAME           READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS        IMAGES                SELECTOR
deploy-myweb   3/3     3            3           65m   container-myweb   mycloudedu/myweb:v2   app=myweb,tier=frontend

查看历史版本

[root@master kubernetes]# kubectl rollout history deployments deploy-myweb
deployment.apps/deploy-myweb
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

回滚历史版本

[root@master kubernetes]# kubectl rollout undo deploy/deploy-myweb --to-revision=1
deployment.apps/deploy-myweb rolled back

验证

[root@master kubernetes]# kubectl get deploy -o wide
NAME           READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS        IMAGES                SELECTOR
deploy-myweb   3/3     3            3           67m   container-myweb  mycloudedu/myweb:v1   app=myweb,tier=frontend

kubernetes资源清单之Deployment的更多相关文章

  1. kubernetes系列06—kubernetes资源清单定义入门

    本文收录在容器技术学习系列文章总目录 1.认识kubernetes资源 1.1 常用资源/对象 workload工作负载型资源:pod,ReplicaSet,Deployment,StatefulSe ...

  2. (四)Kubernetes 资源清单定义

    Kubernetes常用资源对象 依据资源的主要功能作为分类标准,Kubernetes的API对象大体可分为五个类别,如下: 类型 名称 工作负载(Workload) Pod.ReplicaSet.D ...

  3. Kubernetes 学习5 kubernetes资源清单定义入门

    一.kubernetes是有一个restful风格的 API,把各种操作对象都一律当做资源来管理.并且可通过标准的HTTP请求的方法 GET,PUT,DELETE,POST,等方法来完成操作,不过是通 ...

  4. kubernetes 资源清单定义入门

    k8s中的资源 什么叫资源? k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象 在k8s中有哪些资源? 工作负载型资源(workload): Pod ReplicaSet Deploymen ...

  5. 4、kubernetes资源清单快速入门190625

    一.资源清单概念 资源/对象的类型 工作负载型资源:Pod, ReplicaSet, Deployment, StatefulSet, DaemonSet, Job, Cronjob, ... 服务发 ...

  6. kubernetes资源清单之pod

    什么是pod? Pod是一组一个或多个容器(例如Docker容器),具有共享的存储/网络,以及有关如何运行这些容器的规范. Pod的内容始终位于同一地点,并在同一时间安排,并在共享上下文中运行. Po ...

  7. 5、kubernetes资源清单定义入门

    使用配置清单创建资源 定义pod时使用yaml格式 master ~]# kubectl get pod NAME READY STATUS RESTARTS AGE client / Error 1 ...

  8. kubernetes资源清单入门

    创建nginx容器: kubectl run nginx-deploy8 --image=nginx:1.14-alpine --port=80 --replicas=2 deployment &qu ...

  9. kubernetes资源清单之DaemonSet

    什么是 DaemonSet? DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本.当有节点加入集群时,也会为他们新增一个 Pod . 当有节点从集群移除时,这些 Pod 也会被回收 ...

随机推荐

  1. [Feature] Build pipeline

    准备数据集 一.数据集 Ref: 6. Dataset loading utilities[各种数据集选项] 第一部分,加载原始iris数据集的数据: 第二部分,先增加一行,再增加一列: #%% pa ...

  2. MATLAB实现图像的代数运算

    目录 1.使用求补运算对各类图像进行处理 2.利用imlincomb函数将图像的灰度值放大1.5倍 3.利用imlincomb函数计算两幅图像的平均值. 4.图像的加法运算 5.利用imnoise函数 ...

  3. [Agc036D]Do Not Duplicate_链表_贪心_数论

    Do Not Duplicate 题目链接:https://atcoder.jp/contests/agc036/tasks/agc036_b 题解: 首先最后肯定至多只有$n$个数. 我们想处理出来 ...

  4. VMware HorizonView虚拟化桌面TLS问题处理

    问题描述 公司虚拟化桌面环境内,进出口事业部同事在使用"中国贸易单一窗口"登录系统时,其系统本地控件无法启动WSS服务,端口显示使用61231,并反复提示安装控件. 排查过程 首先 ...

  5. 【LOJ】#3034. 「JOISC 2019 Day2」两道料理

    LOJ#3034. 「JOISC 2019 Day2」两道料理 找出最大的\(y_{i}\)使得\(sumA_{i} + sumB_{y_i} \leq S_{i}\) 和最大的\(x_{j}\)使得 ...

  6. 老贾的幸福生活day6 整型和布尔值的转换 字符串讲解 for 循环简介

    整型和布尔值的转换: 整型: python 2 整型 int long(长整型) /获取的是整型 python 3 整型 int 获取的是浮点数(小数) 十进制转二进制: print(bin(36)) ...

  7. 从入门到自闭之Python--MySQL数据库的操作命令

    命令: mysqld install; 配置数据库 net start mysql;启动数据库 mysql -uroot -p; 以root权限启动数据库,-p之后输入密码 mysql -uroot ...

  8. jQuert DOM操作

    DOM操作 1 内部插入 append(content|fn) 向每个匹配的元素内部追加内容 appendTo(content) 把所有匹配的元素追加到另一个指定的元素元素集合中 prepend(co ...

  9. MySQL-复杂查询及条件-起别名-多表查询-04

    目录 基本查询语句及方法 测试数据创建 创建数据库与表 插入表记录数据 数据展示 常见结果排版 另一种结果排版 \G 简单查询语句的书写与执行顺序 查询语句书写 执行顺序 科普-- 起别名 写法 可以 ...

  10. 技能节-AI人脸识别

    我们收到技能节项目的通知是在两周之前,项目要求做个人脸评分系统. 两周时间写一个"人脸评分系统",好像时间比较紧了,还好我们完成了~这个项目是将摄像头捕获到的包含人脸的图像传输到百 ...