写在前面的话

上一节主要简单的提了一下控制器都有哪些常用的,并且简单的功能是啥,最后一并提了 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 示例

apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-demo
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: erp
release: stable
template:
metadata:
name: deploy-container
namespace: default
labels:
app: erp
release: stable
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
- name: https
containerPort: 443

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

# 创建
kubectl apply -f deploy-demo.yaml # 查看
kubectl get deploy
kubectl get rs
kubectl get pods

结果如图:

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

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

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

kubectl apply -f deploy-demo.yaml

再度应用配置查看:

kubectl get pods -l app=erp -w

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

kubectl get rs -o wide

结果如图:

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

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

kubectl rollout history deployment deploy-demo

结果如图:

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

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

结果如图:

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

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

结果如图:

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

kubectl rollout pause deployment deploy-demo

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

kubectl rollout resume deployment deploy-demo

这里就不做过多演示了。

同样,回滚历史版本:

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. Python3返回函数

    函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = ...

  2. hadoop 完全分布式集群搭建

    1.在伪分布式基础上搭建,伪分布式搭建参见VM上Hadoop3.1伪分布式模式搭建 2.虚拟机准备,本次集群采用2.8.3版本与3.X版本差别不大,端口号所有差别 192.168.44.10 vmho ...

  3. MySQL循环日期

    DROP PROCEDURE IF EXISTS `insertManyDate`$$ CREATE DEFINER=`root`@`%` PROCEDURE `insertManyDate`(IN ...

  4. jquery实现checkbox列表的全选不选

    html代码 <th><input type="checkbox" onclick="selectAll(this);" />全选/取消 ...

  5. requests---HTTPS请求

    做过接口测试的都会发现,现在的接口都是HTTPS协议了,今天就写一篇如何通过request发送https请求,如果不是很了解HTTP协议的同学可以看下我的另外一篇博客什么是HTTP 什么是HTTPS ...

  6. 虚拟机使用配置固定IP

    首先打开虚拟机 打开xshell5连接虚拟机(比较方便,这里默认设置过Linux的ip,只是不固定) 输入ifconfig,可以查看网管相关配置信息: 然后输入    vi /etc/sysconfi ...

  7. Codeforces Round #609 (Div. 2) 题解

    Equation Modulo Equality Long Beautiful Integer Domino for Young K Integers Equation \[ Time Limit: ...

  8. 学习-angular 7入门

    1.安装脚手架:npm install -g @angular/cli 安装之后,输入命令 ng v: Package Version -------------------------------- ...

  9. csp考前

    T1不会太麻烦,不行心里多说几遍"沙比提,沙比提".就做出来了. 后天就要出发了,可是我感觉不到长进---- 可能又学一年是个不明智的想法,退役预定.

  10. Sentinel: 分布式系统的流量防卫兵

    前言 在 Spring Cloud 体系中,熔断降级我们会使用 Hystrix 框架,限流通常会在 Zuul 中进行处理,Zuul 中没有自带限流的功能,我们可以自己做限流或者集成第三方开源的限流框架 ...