写在前面的话

上一节主要简单的提了一下控制器都有哪些常用的,并且简单的功能是啥,最后一并提了 ReplicaSet 控制器。

但是 ReplicaSet 一般不需要我们直接配置,多以从本节开始,开始学习 K8S 默认的控制器 Deployment。

Deployment 资源清单

和 rs 一样,deployment 我们也可以简写成 deploy,先简单的看下其资源清单的结构,如下表:

deployment
apiVersion       apps/v1 
kind       Deployment
metadata       和其他 metadata 一样,包括 name / labels 等
spec        
  minReadySeconds     最小准备时间
  paused     暂停
  replicas     副本数量
  revisionHistoryLimit     历史版本保存数量,默认 10
  rollbackTo      
    revision   回滚到指定版本 
  selector      
    matchExpressions   标签选择器
    matchLabels   标签选择器(一般用这个)
  strategy      
    rollingUpdate    
      maxSurge 能被同一时间升级允许的最大 Pod 数,可以是数字或百分比
      maxUnavailable 同一时间不允许升级数,可以是数字或者百分比
    type   选择方式,可以是 RollingUpdate(默认)或者 Recreate
  template      
    metadata   Pod 的 metadata
    spec   Pod 的 spec

Deployment 示例

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: deploy-demo
  5. namespace: default
  6. spec:
  7. replicas: 2
  8. selector:
  9. matchLabels:
  10. app: erp
  11. release: stable
  12. template:
  13. metadata:
  14. name: deploy-container
  15. namespace: default
  16. labels:
  17. app: erp
  18. release: stable
  19. spec:
  20. containers:
  21. - name: myapp
  22. image: ikubernetes/myapp:v1
  23. imagePullPolicy: IfNotPresent
  24. ports:
  25. - name: http
  26. containerPort: 80
  27. - name: https
  28. containerPort: 443

运行:我们这里将不再使用 create 根据配置文件创建,而是使用 apply 创建:

  1. # 创建
  2. kubectl apply -f deploy-demo.yaml
  3.  
  4. # 查看
  5. kubectl get deploy
    kubectl get rs
  6. kubectl get pods

结果如图:

我们说过 Deployment 属于 ReplicaSet 的更上层,所以我们创建 Deploy 之后是可以查看到 ReplicaSet 的,而且根据命名的特点我们也可以发现:

Deploy --> ReplicaSet --> Pod 命令属于一级一级的增加。其中 rs 名字后面的随机数其实际是模板名称的 hash 值。

此时我们可以做个升级测试,修改 yaml 中的镜像版本由 v1 改为 v2:

  1. kubectl apply -f deploy-demo.yaml

再度应用配置查看:

  1. kubectl get pods -l app=erp -w

通过该方法我们可以看到整个过程,完成后查看 rs:

  1. kubectl get rs -o wide

结果如图:

可以看到原来 v1 版本的 rs 在运行变成了 0,而 v2 版本的变成了 2,但是 v1 版本的 rs 并未删除。

这是由于我们保存历史版本的原因,也就是:

  1. kubectl rollout history deployment deploy-demo

结果如图:

使用打补丁的方式直接修改 Pod 数量:

  1. kubectl patch deployment deploy-demo -p '{"spec":{"replicas":3}}'

结果如图:

同样,我们可以使用另外的方法更新,比如更新镜像版本:

  1. kubectl set image deployment deploy-demo myapp=ikubernetes/myapp:v3

结果如图:

在更新过程中,我们可以使用 pause 暂停实现金丝雀发布:

  1. kubectl rollout pause deployment deploy-demo

那么他会根据更新策略进行一次更新后暂停,等待下次 resume 后完全更新:

  1. kubectl rollout resume deployment deploy-demo

这里就不做过多演示了。

同样,回滚历史版本:

  1. kubectl rollout undo deployment deploy-demo --to-revision=2

结果如图:

小结

其实对于 Deployment,我们需要记忆的并不多,因为之前的 Pod 和 RS 中已经将底层的知识记了一遍,我们在这里只是相当于在他的外面继续套了一层套子。

【06】Kubernets:资源清单(控制器 - Deployment)的更多相关文章

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

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

  2. kubernetes资源清单之Deployment

    Deployment为Pod和ReplicaSets提供声明性更新 示例 --- apiVersion: apps/v1 kind: Deployment metadata:     name: de ...

  3. 【07】Kubernets:资源清单(控制器 - DaemonSet)

    写在前面的话 前面讲解了 Pod / ReplicaSet / Deployment 的资源清单,我们这里谈一下 DaemonSet 的资源清单. 之前说过,DaemonSet 控制器能够保证资源在每 ...

  4. 【05】Kubernets:资源清单(控制器 - ReplicaSet)

    写在前面的话 从上一章节开始,我们一直在学习关于自主式 Pod 的资源清单编写, 但是自主式 Pod 存在着一个问题,就是和我们直接 docker run 运行 docker 容器一样.如果我们想以集 ...

  5. 6、kubernetes资源清单之Pod控制器190714

    一.Pod控制器的类别 ReplicationController:早期唯一的控制器,已废弃 ReplicaSet:控制Pod满足用户期望副本:标签选择器选择由自己管理的Pod副本:Pod资源模板完成 ...

  6. 【04】Kubernets:资源清单(pod)

    写在前面的话 前面我们提到过,纯手敲 K8S 名称管理 K8S 服务只是作为我们了解 K8S 的一种方案,而我们最终管理 K8S 的方法还是通过接下来的资源清单的方式进行管理. 所以从本章节开始,将会 ...

  7. 1.k8s概述、安装、名词解释、资源清单

    一.k8s概述 1.简介 Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernete ...

  8. k8s学习笔记之四:资源清单定义入门

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

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

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

随机推荐

  1. elasticsearch ik分词

    elasticsearch 默认并不支持中文分词,默认将每个中文字切分为一个词,这明显不符合我们的业务要求.这里就需要用到ik分词插件. 本文主要囊括了以下几部分,ik插件安装.ik用法介绍.自定义词 ...

  2. 用python登录12306 并保存cookie

    一篇拿来记录的文章,是看其他博主写的,想在这记一下 import sys import time import requests from PIL import Image import json i ...

  3. Pyqt5开发一款小工具(翻译小助手)

    翻译小助手 开发需求 首先五月份的时候,正在学习爬虫的中级阶段,这时候肯定要接触到js逆向工程,于是上网找了一个项目来练练手,这时碰巧有如何进行对百度翻译的API破解思路,仿造网上的思路,我摸索着完成 ...

  4. 编译安装PHP以及需要的基本扩展库(php7.4)

    安装配置选项1: ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-curl --with-freety ...

  5. TCP四次握手断开连接(十一)

    建立连接非常重要,它是数据正确传输的前提:断开连接同样重要,它让计算机释放不再使用的资源.如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪 ...

  6. InfoQ一波文章:AdaSearch/JAX/TF_Serving/leon.bottou.org/Neural_ODE/NeurIPS_2018最佳论文

    和 Nested Partition 有相通之处? 伯克利提出 AdaSearch:一种用于自适应搜索的逐步消除方法 在机器学习领域的诸多任务当中,我们通常希望能够立足预先给定的固定数据集找出问题的答 ...

  7. 数据结构——链栈(link stack)

    /* linkStack.c */ /* 链栈 */ #include <stdio.h> #include <stdlib.h> #include <stdbool.h ...

  8. appium--元素等待和屏幕截图

    元素等待 设置元素等待可以更加灵活的指定等待元素的时间,从而增强脚本的健壮性,提高执行效率 强制等待 from time import sleep sleep(5) 隐式等待 隐式等待是针对全部元素设 ...

  9. 复杂模拟 | 1014 模拟K个同时到来的人在N个窗口,每个窗口只能站M个人的银行排队

    这题我以为还是之前银行排队的思路,但是做着做着就做不下去了了.看了答案我才理解到底是什么个思路. 是这样的:不同于之前排队的题,这里的K个人是同时到来的.所以首先应该让K个人的前N*M(也就是黄线内的 ...

  10. Linux性能优化实战学习笔记:第七讲

    一.进程的状态 1.命令查看 top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 28961 root 20 0 43816 3148 ...