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(五)的更多相关文章

  1. K8s 入门

    中文文档:https://www.kubernetes.org.cn/kubernetes%E8%AE%BE%E8%AE%A1%E6%9E%B6%E6%9E%84 小结大白话 Portainer 挺好 ...

  2. 反手来个K8S入门到跑路

    layout: post title: 反手来个K8S入门到跑路 category: linux date: 2019-06-09 tags: linux k8s 反手来个K8S入门到跑路 前言 放假 ...

  3. k8s入门你至少需要会哪些

    body { margin: 0; overflow: auto; font: normal 14px Verdana; background: rgba(255, 255, 255, 1); pad ...

  4. WCF入门教程(五)配置文件

    WCF入门教程(五)配置文件 服务协定以及实现写好后,需要将相关服务公布出去,就需要HOST来承载,供客户端来调用. 承载服务有两种方式,一种通过配置文件,一种通过代码进行配置.上一章已经介绍了代码方 ...

  5. k8s入门系列之guestbook快速部署

    k8s集群以及一些扩展插件已经安装完毕,本篇文章介绍一下如何在k8s集群上快速部署guestbook应用. •实验环境为集群:master(1)+node(4),详细内容参考<k8s入门系列之集 ...

  6. Docker入门教程(五)Docker安全

    Docker入门教程(五)Docker安全 [编者的话]DockOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第五篇,介绍了Docker的安全问题,依然是老话重谈,入门者可以通 ...

  7. 无废话ExtJs 入门教程十五[员工信息表Demo:AddUser]

    无废话ExtJs 入门教程十五[员工信息表Demo:AddUser] extjs技术交流,欢迎加群(201926085) 前面我们共介绍过10种表单组件,这些组件是我们在开发过程中最经常用到的,所以一 ...

  8. k8s入门系列之扩展组件(一)DNS安装篇

    DNS (domain name system),提供域名解析服务,解决了难于记忆的IP地址问题,以更人性可读可记忆可标识的方式映射对应IP地址. Cluster DNS扩展插件用于支持k8s集群系统 ...

  9. k8s入门系列之集群安装篇

    关于kubernetes组件的详解介绍,请阅读上一篇文章<k8s入门系列之介绍篇> Kubernetes集群安装部署 •Kubernetes集群组件: - etcd 一个高可用的K/V键值 ...

随机推荐

  1. docker学习笔记(4)- 应用数据管理(容器外)

    简介 docker storage driver支持了image分层存储和容器可写层的存储管理,使用挂载主机目录的方式可以将数据存储在主机的文件系统上或内存中. 之前学习过镜像的分层存储,以Docke ...

  2. EasyUI 之datagrid 使用 【DataGrid属性解释】

    可选的参数 DataGrid 属性 覆写了 $.fn.datagrid.defaults. 参数名 类型 描述 默认值 title string Datagrid面板的标题 null iconCls ...

  3. char型变量中能不能存储一个中文字符?为什么?

    char型变量是用来存储Unicode编码的字符的,Unicode编码字符集中包含了汉字,因此char型变量中可以存储汉字.不过,如果某个特殊的汉字没有被包含在Unicode编码字符集中,那么,这个c ...

  4. python 常用内置函数简介

    1.作用域相关内置函数globals()--获取全局变量的字典locals()--获取执行本方法所在命名空间内的局部变量的字典 2.和调用相关callable(o),o是参数,看这个变量是不是可调用. ...

  5. memcached 最大的优势是什么?

    Memcached 最大的好处就是它带来了极佳的水平可扩展性,特别是在一个巨大的 系统中.由于客户端自己做了一次哈希,那么我们很容易增加大量 memcached 到集群中.memcached 之间没有 ...

  6. 32 位和 64 位的 JVM,int 类型变量的长度是多数?

    32 位和 64 位的 JVM 中,int 类型变量的长度是相同的,都是 32 位或者 4个字节.

  7. Spring工作原理:初识SpringMVC

    1.SpringMVC简介 SpringMVC是Spring框架的一个模块.SpringMVC和Spring无需通过中间层进行整合.是一个轻量级的,基于请求响应的MVC框架. 2.1.什么是MVC? ...

  8. 小技巧之“将Text文件中的数据导入到Excel中,这里空格为分割符为例”

    1.使用场景 将数据以文本导出后,想录入到Excel中,的简便方案, 起因:对于Excel的导出,Text导出明显会更方便些 2.将Text文件中的数据导入到Excel中,这里空格为分割符为例的步骤 ...

  9. c++ 虚函数多态、纯虚函数、虚函数表指针、虚基类表指针详解

    静态多态.动态多态 静态多态:程序在编译阶段就可以确定调用哪个函数.这种情况叫做静态多态.比如重载,编译器根据传递给函数的参数和函数名决定具体要使用哪一个函数.动态多态:在运行期间才可以确定最终调用的 ...

  10. 总结一下各种0.5px的线

    在PC端用1px的边框线,看起来还好,但在手机端看起来就很难看了,而0.5px的分割线会有种精致的感觉.用普通写法border:solid 0.5px red;iPhone可以正常显示,android ...