k8s入门之Deployment(五)
Deployment控制器通常用来部署无状态的应用,这样可以在任意的节点上扩容或者删除,而不用考虑数据的问题,它可以管理pod对象。
一、多副本
1.使用命令行方式创建Deployment
在dev名称空间下创建3个副本的nginx pod
kubectl create deployment nginx --image=nginx --replicas=3 -n dev
监控创建进度
kubectl get deploy -n dev -w

可以看到副本可用数量从0变到3
2.查看Deployment的描述
kubectl describe deploy nginx -n dev

可以看到NewReplicaSet的名称为nginx-6799fc88d8
3.查看Deployment管理的pod
kubectl get pod -n dev -owide --show-labels

可以看到Name列是ReplicaSet的名称加上一串6位的随机字符串,每个pod都有自己独立的IP。由于只有2台worker节点,其中2个pod被调度到了同一台节点worker02,另一个pod被调度到了worker01。
4.删除Deployment
kubectl delete deploy nginx -n dev
删除Deployment,会把其管理的pod一起删除

5.使用yaml文件创建Deployment
(1)新建dp-nginx.yaml文件,并输入以下内容
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
namespace: dev
spec:
replicas: 3
selector:
# Deployment会匹配与这里设置的相同标签内容的pod
matchLabels:
app: nginx
# pod的模板描述
template:
metadata:
#定义pod的标签
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
(2)创建Deployment对象
kubectl apply -f dp-nginx.yaml
查看创建的结果

二、扩缩容
1.通过命令行扩容
先通过命令自动监听pod的变化
kubectl get pod -n dev -owide -w
再开启一个新的bash会话,通过以下命令扩容(增加副本数量:由3个变成5个)
kubectl scale --replicas=5 deploy/nginx -n dev
在监听bash窗口可以看到扩容过程

2.通过命令行缩容
先通过命令自动监听pod的变化
kubectl get pod -n dev -owide -w
再开启一个新的bash会话,通过命令缩容(减少副本数量:由5个变成2个)
kubectl scale --replicas=2 deploy/nginx -n dev
在监听bash窗口可以看到缩容过程

3.通过yaml文件扩缩容
kubectl edit deployment nginx -n dev
定位到replicase参数所在行,然后修改它的值
三、自愈&故障转移
1.自愈
手动删除某个pod,或者某个pod异常挂掉,k8s会自动创建一个新的pod。
先通过命令自动监听pod的变化
kubectl get pod -n dev -owide -w
再开启一个新的bash会话,手动删除一个pod
kubectl scale --replicas=2 deploy/nginx -n dev
在监听bash窗口可以看到创建过程

2.故障转移
对worker02关机,k8s需要5分钟(可配置)才能感知从而启动自愈功能。
通过命令自动监听pod的变化
kubectl get pod -n dev -owide -w
大概等了5分钟左右的时间,可以看到worker01上启动了2个新的pod。

这个时候如果重新启动worker02,部署在它上面的2个旧pod会立马删除。

四、滚动更新
1.更改镜像版本
把nginx的镜像版本改为1.20
kubectl edit deploy nginx -n dev
# image: nginx:1.20
查看滚动更新状态
kubectl rollout status deploy nginx -n dev

监听pod的创建过程
kubectl get pod -n dev -owide -w

查看新创建的pod描述,确实更新成了新的镜像版本

2.回滚
(1)查看更新历史记录
kubectl rollout history deploy nginx -n dev

(2)查看某个指定版本的历史记录详情
kubectl rollout history deploy nginx -n dev --revision=2

(3)回滚到上次的版本
kubectl rollout undo deploy nginx -n dev
回滚完成之后,查看新pod的描述,发现nginx镜像的版本是最新的

(4)回滚到指定的版本
kubectl rollout undo deploy nginx -n dev --to-revision=2
五、总结
类似 Deployment 这样的一个控制器,实际上都是由上半部分的控制器定义(包括期望状态),加上下半部分的被控制对象的模板组成的

k8s入门之Deployment(五)的更多相关文章
- K8s 入门
中文文档:https://www.kubernetes.org.cn/kubernetes%E8%AE%BE%E8%AE%A1%E6%9E%B6%E6%9E%84 小结大白话 Portainer 挺好 ...
- 反手来个K8S入门到跑路
layout: post title: 反手来个K8S入门到跑路 category: linux date: 2019-06-09 tags: linux k8s 反手来个K8S入门到跑路 前言 放假 ...
- k8s入门你至少需要会哪些
body { margin: 0; overflow: auto; font: normal 14px Verdana; background: rgba(255, 255, 255, 1); pad ...
- WCF入门教程(五)配置文件
WCF入门教程(五)配置文件 服务协定以及实现写好后,需要将相关服务公布出去,就需要HOST来承载,供客户端来调用. 承载服务有两种方式,一种通过配置文件,一种通过代码进行配置.上一章已经介绍了代码方 ...
- k8s入门系列之guestbook快速部署
k8s集群以及一些扩展插件已经安装完毕,本篇文章介绍一下如何在k8s集群上快速部署guestbook应用. •实验环境为集群:master(1)+node(4),详细内容参考<k8s入门系列之集 ...
- Docker入门教程(五)Docker安全
Docker入门教程(五)Docker安全 [编者的话]DockOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第五篇,介绍了Docker的安全问题,依然是老话重谈,入门者可以通 ...
- 无废话ExtJs 入门教程十五[员工信息表Demo:AddUser]
无废话ExtJs 入门教程十五[员工信息表Demo:AddUser] extjs技术交流,欢迎加群(201926085) 前面我们共介绍过10种表单组件,这些组件是我们在开发过程中最经常用到的,所以一 ...
- k8s入门系列之扩展组件(一)DNS安装篇
DNS (domain name system),提供域名解析服务,解决了难于记忆的IP地址问题,以更人性可读可记忆可标识的方式映射对应IP地址. Cluster DNS扩展插件用于支持k8s集群系统 ...
- k8s入门系列之集群安装篇
关于kubernetes组件的详解介绍,请阅读上一篇文章<k8s入门系列之介绍篇> Kubernetes集群安装部署 •Kubernetes集群组件: - etcd 一个高可用的K/V键值 ...
随机推荐
- 4、传统三层架构与DDD分层架构
4.传统三层架构与DDD分层架构 模型是抽象的 现实是形象的 技巧是重要的 思想是永恒的 从传统三层架构与DDD分层架构的编程演变其实是思想的演变. 传统三层架构,即用户界面层UI.业务逻辑层BAL. ...
- Key-Value存储系统简介
Redis是一个Key-Value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序集合).这些数据类 ...
- synchronized已经不在臃肿了,放下对他的成见之初识轻量级锁
前言 物竞天择,适者生存.JDK也在不断的优化中.关于JDK中synchronized锁内部也是不断的优化,前面我们分析了偏向锁用来解决初期问题,随着争抢的不断堆积轻量级锁营运而生. 关注我,一个不断 ...
- Python执行机制
1.4 Python执行机制 Python中IDLE是其自带的集成开发工具(IDE:同时拥有编辑.编译.调试.运行等多种功能的集成工具),并且它也是Python自带的编译器和解释器. 1.4.1 Py ...
- TTL、RS232、RS485、UART、串口的关系和常见半双工、全双工协议
串口(UART口).COM口.USB口.DB9.DB25是指的物理接口形式(硬件) TTL.RS-232.RS-485是指的电平标准(电平信号) 我们单片机嵌入式常用的串口有三种(TTL/RS-2 ...
- sftp服务器搭建以及挂载新硬盘到home目录下
前言 我身边一直有一个空闲不用的硬盘,一直空闲不用,闲暇的时候想到为什么不用起来呢,于是想起来搭建一个sftp服务器,当做云盘用了 搭建sftp服务器 SFTP称作"安全的FTP" ...
- struts2学习二:Tomcat的部署目录和访问路径问题
1:idea中配置tomcat后,那么最终的web工程发布到哪里去了?为什么在访问路径中不加工程名就可以访问? 1.1:因为tomcat有段时间没接触了,先回顾下tomcat的目录结构吧? 如图所示: ...
- Eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?
Zookeeper保证了CP(C:一致性,P:分区容错性),Eureka保证了AP(A:高可用) (1)当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的信息,但不能容忍直接down ...
- Google Translate寻找之旅
须知 网站:https://translate.google.de/ TK对应入口函数:teanslate_m_zh_CN文件/vu函数 TKK对应文件:/index页面,直接搜索TKK值即可 Goo ...
- 区分构造函数注入和 setter 注入?
构造函数注入 setter 注入 没有部分注入 有部分注入 不会覆盖 setter 属性 会覆盖 setter 属性 任意修改都会创建一个新实例 任意修改不会创建一个新实例 适用于设置很多属性 适用于 ...