K8S控制器之Deployment详解及配置。

目录:

一,引入Deployment

二,Deployment支持的功能

三,Deployment资源清单文件详解

四,滚动更新及回滚实验

五,弹性伸缩实验


一,引入Deployment

对于kubernetes来说Pod是资源调度最小单元,kubernetes主要的功能就是管理多个Pod,Pod中可以包含一个或多个容器,而kubernetes是如可管理多个Pod的呢?对,没错,就是通过控制器,比如Deployment和ReplicaSet(rs)。

 kubernetes下有多个Deployment,Deployment下管理RepliceSet,通过RepliceSet管理多个Pod,通过Pod管理容器。

它们之间的关系图如下:

二,Deployment支持的功能

1,动态水平的弹性伸缩

容器对比虚拟机,最大的优势就在于容器可以灵活的弹性伸缩,而这一部分工作由kubernets中的控制器进行调度。

Deployment的弹性伸缩本质指得是RS下Pod的数量增加或减少

在创建Deployment时会相应创建一个RS,通过RS实现弹性伸缩的自动化部署,并在很短的时间内进行数量的变更

弹性伸缩通过修改yaml文件中的replicas参数实现

修改yaml文件后,通过 apply 命令重新应用而实现扩容或缩容

2,支持动态的回滚和滚动更新

定义一个Deployment会创建一个新的RS,通过RS创建Pod,删除Deployment控制器,同时也会删除所对应的RS及RS下控制的Pod资源。

可以说Deployment是建立在RS之上的一种控制器,可以管理多个RS,当每次需要更新Pod的时候,就会自动生成一个新的RS,把旧的RS替换掉,多个RS可以同时存在,但只有一个RS在运行,因为新RS里生成的Pod会依次去替换旧RS里面的Pod,所以需要等待时间,大约十分钟。

Deployment还支持回滚到以前的历史版本。

更新节奏和更新逻辑:

加入Deployment中定义了replicas数量为5(也就是期望的Pod数为5个)但在实际更新时会额外多几个,假如说能多一个,但是不可以少,那么更新的过程就是先增加一个Pod,再删除一个,增一个,删一个,但一般感受不到,这里只是讲一下原理,可以不必太在意。

三,Deployment资源清单文件详解

apiVersion: apps/v1            ##版本
kind: Deployment               ##类型
metadata:                      ##Deployment的元数据
  name: httpd                  ##Deployment的名字
  labels:                      ##标签
    app: httpd                 ##标签app=httpd
spec:                          ##Pod的信息
  replicas: 3                  ##Pod的副本数
  selector:                    ##标签选择器
    matchLabels:               ##查找匹配的标签
      app: httpd               ##app=httpd
  template:                    ##Pod的模板信息,根据模板信息来创建Pod
    metadata:                  ##Pod的元数据
      labels:                  ##Pod的标签
        app: httpd             ##标签app=httpd
    spec:                      ##容器的信息
      containers:              ##容器
      - name: httpd            ##容器名
        image: httpd           ##容器所需的镜像
        ports:                 ##端口
        - containerPort: 80    ##容器暴露的端口

当我们不知道该怎么写时可以通过命令来查看更多详细内容:

查看Deployment资源对象由哪几部分组成

kubectl explain deployment

 可以一级一级的查看,想查看什么只需要在后面加上  .字段名  即可。例如查看Deployment下的spec字段

kubectl explain deployment.spec

 在写yaml文件时不仅要注意字段,还要注意字段之间的等级,每级之间一般用两个空格隔开,文件中不可以出现tab键,当你在不清楚要空几个的时候,可以用kubectl explain命令查一下,看看你加了几个点,点数*2=空格数。如kubectl explain deployment.spec,有一个点,那就是1*2=2,需空两个格。

四,滚动更新及回滚实验

1,创建deployment

2,访问其中一个页面内容

 3,滚动更新:更改镜像,

4,查看Pod并访问页面内容,可以看到已经改变

 5,查看历史版本,实现回滚更新,需要大概等10分钟,才能完全完成

查看deployment的更新记录

kubectl rollout history deployment nginx-deployment

 查看历史版本2的详细信息

kubectl rollout history deployment nginx-deployment --revision=2

回滚到历史版本2,可以看到当前只会滚完毕了2个Pod

kubectl rollout undo deployment nginx-deployment --to-revision=2

五,弹性伸缩实验

1,创建一个Deployment,4副本

kubectl apply -f jpzhttpd.yaml

2,缩为3副本

kubectl apply -f jpzhttpd.yaml

 到此为止,结束,感谢大家的观看,你们的每一个赞,以及阅读量,都是我跟新的动力,让我们一起学习,加油!!!

  • 23
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无求道贾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值