一. Replication Controller与Deployment的区别

1. Replication Controller

Replication Controller为Kubernetes的一个核心内容,应用托管到Kubernetes之后,Replication Controller需要保证应用能够持续的运行,主要的功能如下:
1)确保pod数量:它会确保Kubernetes中有指定数量的Pod在运行。如果少于指定数量的pod,Replication Controller会创建新 的,反之则会删除掉多余的以保证Pod数量不变。
2)确保pod健康:当pod不健康,运行出错或者无法提供服务时,Replication Controller也会杀死不健康的pod,重新创建新的。
3)弹性伸缩 :在业务高峰或者低峰期的时候,可以通过Replication Controller动态的调整pod的数量来提高资源的利用率。同时,配置相应的监控功能(Hroizontal Pod Autoscaler),会定时自动从监控平台获取Replication Controller关联pod的整体资源使用情况,做到自动伸缩。
4)滚动升级:滚动升级为一种平滑的升级方式,通过逐步替换的策略,保证整体系统的稳定,在初始化升级的时候就可以及时发现和解决问题,避免问题不断扩大。

2. Deployment

Deployment同样为Kubernetes的一个核心内容,主要职责同样是为了保证pod的数量和健康,90%的功能与Replication Controller完全一样,可以看做新一代的Replication Controller。但是,它又具备了Replication Controller之外的新特性:
1)Deployment继承了Replication Controller的全部功能。
2)可以查看Deployment的升级详细进度和状态。
3)回滚:当升级pod镜像或者相关参数的时候发现问题,可以使用回滚操作回滚到上一个稳定的版本或者指定的版本。
4)版本记录: 每一次对Deployment的操作,都能保存下来,给予后续可能的回滚使用。
5)暂停和启动:对于每一次升级,都能够随时暂停和启动。
6)多种升级方案:Recreate:删除所有已存在的pod,重新创建新的; RollingUpdate:滚动升级,逐步替换的策略,同时滚动升级时,支持更多的附加参数,例如设置最大不可用pod数量,最小升级间隔时间等等。

二. Deployment功能全部演示一遍

1. 演示文件docker-project.yaml

apiVersion:  apps/v1                      #当前格式的版本
kind:  Deployment                 #当前创建资源的类型, 当前类型是Deployment
metadata:                         #当前资源的元数据name:  docker-project              #当前资源的名字 是元数据必须的项annotations:kubernetes.io/change-cause: "初始化版本v1"  #记录到revision中的内容
spec:selector:matchLabels:app:  web_server                          #是当前Deployment的规格说明replicas:                       #指当前创建的副本数量 默认不填 默认值就为‘1’template:                         #定义pod的模板metadata:                       #当前pod的元数据labels:                       #至少顶一个labels标签,可任意创建一个 key:valueapp:  web_serverspec:                           #当前pod的规格说明containers:                   #容器-  name: my-docker-project              #是容器的名字容器名字是必须填写的image: 192.168.214.128:5000/docker-project:v1      #镜像 镜像的名字和版本imagePullPolicy: Always        #拉取策略: Always--总是拉取 IfNotPresent--默认值,本地有则使用本地镜像,不拉取 Never--只使用本地镜像,从不拉取ports:- containerPort: 8080livenessProbe:httpGet:path: api/heathyport: 8080---kind: Service
apiVersion: v1
metadata:name: docker-project-service
spec:type: NodePortports:- port: 8080targetPort: 8080nodePort: 31000selector:app: web_server

2. 执行docker-project.yaml文件

kubectl apply -f docker-project.yaml
kubectl get deployment
kubectl get pod
kubectl get services;

执行结果

查看详细的pod信息

kubectl get pods --show-labels

执行结果

页面查看结果

3. 增加滚动升级

1)升级策略:

minReadySeconds: 5
strategy:type: RollingUpdaterollingUpdate:maxSurge: 1maxUnavailable: 1

2)参数含义

minReadySeconds:Kubernetes在等待设置的时间后才进行升级如果没有设置该值,Kubernetes会假设该容器启动起来后就提供服务了如果没有设置该值,在某些极端情况下可能会造成服务服务正常运行
maxSurge:升级过程中最多可以比原先设置多出的POD数量例如:maxSurage=1,replicas=5,则表示Kubernetes会先启动1一个新的Pod后才删掉一个旧的POD,整个升级过程中最多会有5+1个POD。
maxUnavaible:升级过程中最多有多少个POD处于无法提供服务的状态当maxSurge不为0时,该值也不能为0例如:maxUnavaible=1,则表示Kubernetes整个升级过程中最多会有1个POD处于无法服务的状态。

3)修改后的文件:

apiVersion:  apps/v1                      #当前格式的版本
kind:  Deployment                 #当前创建资源的类型, 当前类型是Deployment
metadata:                         #当前资源的元数据name:  docker-project              #当前资源的名字 是元数据必须的项annotations:kubernetes.io/change-cause: "将v1版本升级到v2"  #记录到revision中的内容
spec:minReadySeconds: 5strategy:type: RollingUpdaterollingUpdate:maxSurge: 1maxUnavailable: 1selector:matchLabels:app:  web_server                          #是当前Deployment的规格说明replicas:                       #指当前创建的副本数量 默认不填 默认值就为‘1’template:                         #定义pod的模板metadata:                       #当前pod的元数据labels:                       #至少顶一个labels标签,可任意创建一个 key:valueapp:  web_serverspec:                           #当前pod的规格说明containers:                   #容器-  name: my-docker-project              #是容器的名字容器名字是必须填写的image: 192.168.214.128:5000/docker-project:v2      #镜像 镜像的名字和版本imagePullPolicy: Always        #拉取策略: Always--总是拉取 IfNotPresent--默认值,本地有则使用本地镜像,不拉取 Never--只使用本地镜像,从不拉取ports:- containerPort: 8080livenessProbe:httpGet:path: api/heathyport: 8080---kind: Service
apiVersion: v1
metadata:name: docker-project-service
spec:type: NodePortports:- port: 8080targetPort: 8080nodePort: 31000selector:app: web_server

4)执行docker-project.yaml文件

kubectl apply -f docker-project.yaml

执行结果

5)查看升级状态

kubectl rollout status deployment  docker-project

执行结果(节点比较少,升级过程没有体现出来)

6)暂停升级

kubectl rollout pause deployment <deployment>

7)继续升级

kubectl rollout resume deployment <deployment>

8)页面查看升级结果:

9)查看升级历史

kubectl rollout history deployment docker-project

执行结果:

10)查看deployment信息

kubectl describe deployment docker-project

执行结果:

11)回滚到上一个版本

kubectl rollout undo deployment docker-project

执行结果:

12) 回滚到指定版本

kubectl rollout undo deployment docker-project --to-revision=1

执行结果:

13) 删除deployment

kubectl delete deployment docker-project

Kubernetes--Deployment使用相关推荐

  1. WHAT THE DATA SAYS ABOUT KUBERNETES DEPLOYMENT PATTERNS

    2019独角兽企业重金招聘Python工程师标准>>> WHAT THE DATA SAYS ABOUT KUBERNETES DEPLOYMENT PATTERNS The con ...

  2. 容器编排技术 -- Kubernetes Deployment

    容器编排技术 -- Kubernetes Deployment 1 创建 Deployment 1.1 Pod-template-hash label 2 更新Deployment 2.1 Rollo ...

  3. kubernetes deployment,pod 实践

    本文同步gitlab 更新 https://github.com/lifalin0802/falin_repos/blob/master/kubernetes_manual.md 创建自主pod ku ...

  4. 2021完整版:Kubernetes Deployment故障排除的可视化指南

    原文发表于kubernetes中文社区,为作者原创翻译 更多kubernetes文章,请多关注kubernetes中文社区 文章目录 连接Deployment 和 Service 连接 Service ...

  5. Kubernetes Deployment控制器(二十)

    前面我们学习了 ReplicaSet 控制器,了解到该控制器是用来维护集群中运行的 Pod 数量的,但是往往在实际操作的时候,我们反而不会去直接使用 RS,而是会使用更上层的控制器,比如我们今天要学习 ...

  6. Kubernetes Deployment

    什么是Deployment? Deployment提供了运行Pod能力,并且为Pod提供滚动升级.伸缩.副本等功能,一般用于运行无状态的应用.目前建议使用Deployment来代替RelicaSet及 ...

  7. Kubernetes Deployment与Replica Set

    Deployment相对于RC的优势 RS与Deployment主要用于替代RC.RS的全称为Replica Set.相对于RC,RS与Deployment的优势如下: RC只支持基于等式的selec ...

  8. Kubernetes:全面了解 Deployment

    本文为作者的 Kubernetes 系列电子书的一部分,电子书已经开源,欢迎关注,电子书浏览地址: https://k8s.whuanle.cn[适合国内访问] https://ek8s.whuanl ...

  9. 容器编排技术 -- Kubernetes 联邦 Deployment

    容器编排技术 -- Kubernetes 联邦 Deployment 1 Before you begin 2 创建联邦 Deployment 2.1 在底层集群中分布副本 3 更新联邦 Deploy ...

  10. kubernetes1.4 基础篇:Learn Kubernetes 1.4 by 6 steps(3):Step 2. Using kubectl to Create a Deployment

    在上一篇文章中我们学习到了如何快速搭k8s的集群.本文将会将会学到Kubernetes的应用部署(Deployment),以及如何使用kubectl来部署我们的应用.被部署的应用我们将直接使用kube ...

最新文章

  1. SAP获利能力报表常用Tcode的区别
  2. matlab 自再现模,平行平面腔自再现模FoxLi数值迭代解法及MATLAB实现
  3. Canvas-drawImage 绘制图片模糊问题
  4. html53d正方形,利用HTML5绘制点线面组成的3D图形的示例
  5. Python之“可变”的tuple
  6. Golang开发环境配置
  7. 1 源码安装Zabbix agent 3.4
  8. linux gcc百度经验,详解Linux安装GCC方法
  9. 淘宝客APP源码 社交电商uniapp开发源码 前端源码自营商城
  10. Excel中关于数组函数的研究
  11. arcos的matlab定义,想用matlab解一个带arccos的方程。可是结果好像没有解析解。求帮助解数值解...
  12. 华东交通大学计算机考研资料汇总
  13. 那些在风雨中依然坚守的人们
  14. 2022第三届全国大学生网络安全精英赛练习题(1)
  15. win10 内存溢出修复
  16. c++打印心形_C语言控制台打印3D爱心图案
  17. API函数之SetParent
  18. Opencv配置VS2010,配置成功后如何成功使用完成vs调用opencv库
  19. 高分通过CKA认证考试指南
  20. MSN的邮箱,真不好用!

热门文章

  1. 使用 ahk 让普通键盘变为Dvorak键盘
  2. Highcharts简介
  3. 涉密信息系统口令管理制度
  4. 36. 介绍一下 except 的作用和用法?
  5. Horizon Daas SP服务中心界面修改背景和logo
  6. MySQL 部门 员工数量查询
  7. linux rm和rmdir区别,Linux命令rmdir和rm的区别
  8. BCS2022|奇安信总裁吴云坤:用四个创新模式应对网络安全产业的四大转变
  9. paraview输出高清晰度带速度箭头颗粒分布图
  10. Java项目经验二:二手车系统