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. ubuntu16.04启动ssh服务

    1 查看ssh服务是否开启 ps -e | grep ssh* 2如果没有则安装ssh apt-get install openssh-server openssh-client 3再看服务就有ssh ...

  2. python3 爬虫2--发送请求1

    1urlopen 属于url.request类 我们用urlopen("网址")来发送请求 最基础的发送请求如下 from urllib.request import urlope ...

  3. redis主从复制和哨兵机制

    redis主从复制和哨兵机制 技术标签: redis 1.redis主从复制(master/slave模式) 主数据库可以进行读写操作,当写操作导致数据发生变化时会自动将数据同步给从数据库.而一般情况 ...

  4. Lock 与 Synchronized 的区别?

    首先两者都保持了并发场景下的原子性和可见性,区别则是synchronized的释放锁机制是交由其自身控制,且互斥性在某些场景下不符合逻辑,无法进行干预,不可人为中断等.而lock常用的则有Reentr ...

  5. homebrew 安装nginx+php+mysql

    转:https://juejin.im/post/5c8fb28a6fb9a07103548318 brew search nginxbrew install nginx /usr/local/etc ...

  6. redis有哪些功能

    基于本机内存的缓存 为了解决调用API依然需要2秒的问题,经过排查,其主要原因在于使用SQL获取热点新闻的过程中消耗了将近2秒的时间,于是乎,我们又想到了一个简单粗暴的解决方案,即把SQL查询的结果直 ...

  7. Java中自动装箱与拆箱

    一.什么是封装类? Java中存在基础数据类型,但是在某些情况下,我们要对基础数据类型进行对象的操作,例如,集合中只能存在对象,而不能存在基础数据类型,于是便出现了包装器类.包装器类型就是对基本数据类 ...

  8. Django的models中filter的各种用法及官方手册的网址

    __exact 精确等于 like 'aaa' __iexact 精确等于 忽略大小写 ilike 'aaa' __contains 包含 like '%aaa%' __icontains 包含 忽略 ...

  9. Python中的numpy库介绍!

    转自:https://blog.csdn.net/codedz/article/details/82869370 机器学习算法中大部分都是调用Numpy库来完成基础数值计算的.安装方法: pip3 i ...

  10. 顺利通过EMC实验(20)