【06】Kubernets:资源清单(控制器 - Deployment)
写在前面的话
上一节主要简单的提了一下控制器都有哪些常用的,并且简单的功能是啥,最后一并提了 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)的更多相关文章
- kubernetes系列06—kubernetes资源清单定义入门
本文收录在容器技术学习系列文章总目录 1.认识kubernetes资源 1.1 常用资源/对象 workload工作负载型资源:pod,ReplicaSet,Deployment,StatefulSe ...
- kubernetes资源清单之Deployment
Deployment为Pod和ReplicaSets提供声明性更新 示例 --- apiVersion: apps/v1 kind: Deployment metadata: name: de ...
- 【07】Kubernets:资源清单(控制器 - DaemonSet)
写在前面的话 前面讲解了 Pod / ReplicaSet / Deployment 的资源清单,我们这里谈一下 DaemonSet 的资源清单. 之前说过,DaemonSet 控制器能够保证资源在每 ...
- 【05】Kubernets:资源清单(控制器 - ReplicaSet)
写在前面的话 从上一章节开始,我们一直在学习关于自主式 Pod 的资源清单编写, 但是自主式 Pod 存在着一个问题,就是和我们直接 docker run 运行 docker 容器一样.如果我们想以集 ...
- 6、kubernetes资源清单之Pod控制器190714
一.Pod控制器的类别 ReplicationController:早期唯一的控制器,已废弃 ReplicaSet:控制Pod满足用户期望副本:标签选择器选择由自己管理的Pod副本:Pod资源模板完成 ...
- 【04】Kubernets:资源清单(pod)
写在前面的话 前面我们提到过,纯手敲 K8S 名称管理 K8S 服务只是作为我们了解 K8S 的一种方案,而我们最终管理 K8S 的方法还是通过接下来的资源清单的方式进行管理. 所以从本章节开始,将会 ...
- 1.k8s概述、安装、名词解释、资源清单
一.k8s概述 1.简介 Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernete ...
- k8s学习笔记之四:资源清单定义入门
第一章.k8s中的资源 1.什么叫资源? k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象 2.在k8s中有哪些资源? 工作负载型资源(workload): Pod ReplicaSet D ...
- Kubernetes 学习5 kubernetes资源清单定义入门
一.kubernetes是有一个restful风格的 API,把各种操作对象都一律当做资源来管理.并且可通过标准的HTTP请求的方法 GET,PUT,DELETE,POST,等方法来完成操作,不过是通 ...
随机推荐
- 使用 docker-compose 运行 MySQL
使用 docker-compose 运行 MySQL 目录结构 . │ .env │ docker-compose.yml │ └─mysql ├─config │ my.cnf │ └─data m ...
- iframe子元素无法全屏
最近做的项目中遇到的问题: 在最新的Chrome浏览器中,全屏功能正常 在旧版本Chrome浏览器中(与最新版版本号相差二十左右),全屏功能无效 在IE11浏览器中,全屏功能无效 反复排查,发现该项目 ...
- MySql常用操作【基础且详细(●'◡'●)】
有那么挺长段时间没有敲代码了,今敲起来竟然有些sql都想不起来了
- 在 Docker 中已运行的 container 如何修改 run 时的 env
https://www.cnblogs.com/xiaouisme/p/9837221.html 首先不推荐这样做,如需修改配置,应删掉重新部署. 其次,可以进行如下操作(未测试,不知道仅重启 con ...
- 苹果审核之遇到IPV6问题被拒的解决方法
情景: 等待苹果审核上线时,发现因为IPV6被拒了.这是悲剧,以下是苹果审核给我的理由: We discovered one or more bugs on Wi-Fi connected to an ...
- Gitlab批量迁移项目
最近接到一个需求,要把一个Gitlab上边的项目全部导入到另外一个Gitlab,借鉴了网上的一个方法,成功实现. 参考链接:https://segmentfault.com/a/11900000159 ...
- 关于微信小程序开发环境苹果IOS真机预览报SSL协议错误问题解决方案
微信小程序开发环境苹果IOS真机预览报SSL协议错误问题 原文来自:https://blog.csdn.net/qq_27626333/articl ...
- 跳表和ConcurrentSkipListMap解析
二分查找和AVL树查找 二分查找要求元素可以随机访问,所以决定了需要把元素存储在连续内存.这样查找确实很快,但是插入和删除元素的时候,为了保证元素的有序性,就需要大量的移动元素了. 如果需要的是一个能 ...
- 201871010123-吴丽丽 《面向对象程序设计(Java)》第十四周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- django学习-安装、创建应用、编写视图
快速安装指南 py -3 -m pip install django >>> import django >>> django.get_version() '2.2 ...