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 这样的一个控制器,实际上都是由上半部分的控制器定义(包括期望状态),加上下半部分的被控制对象的模板组成的

最新文章

  1. Java8之——简洁优雅的Lambda表达式
  2. 第六章 第一个Linux驱动程序:统计单词个数
  3. 将EnyimMemcached从.NET Core RC1升级至RC2
  4. [2015hdu多校联赛补题]hdu5297 Y sequence
  5. C#部署安装,将用户安装路径记录下写入注册表,并启动
  6. 全面理解面向对象的 JavaScript
  7. 【NOIP2013】【P1441】花匠
  8. SVN备份教程(三)
  9. Java IO之序列化
  10. mysql_study_1
  11. zepto中的属性设置
  12. golang与vscode的安装与配置
  13. token和盐
  14. 关于此实现不是 Windows 平台 FIPS 验证的加密算法的一部分。
  15. 《MySQL技术内幕 InnoDB存储引擎 》学习笔记
  16. java多线程之述解
  17. python Matplotlib数据可视化神器安装与基本应用
  18. Again Array Queries---Lightoj1100(循环暴力)
  19. JS类、对象、方法、prototype、_proto_
  20. 小练习:补数 (Number Complement)

热门文章

  1. Skye无人机刷Betaflight详细图文教程
  2. Minikube使用文档
  3. DLink 815路由器栈溢出漏洞分析与复现
  4. 使用过 Redis 分布式锁么,它是什么回事?
  5. 什么是Spring IOC 容器?
  6. UML 中有哪些常用的图?
  7. Redis 回收进程如何工作的?
  8. Java 中堆和栈有什么区别?
  9. 修改openstack Centos镜像的默认用户的密码
  10. numpy入门—numpy是什么