Deployment详解

RC & RS

ReplicationController (复制控制器,RC)和ReplicaSet(复制集,RS)是两种简单部署pod的方式,因为在生产环境中,主要使用更高级的Deployment等方式部署、运行、管理pod,所以本节只对RC和RS部署进行简单介绍

**Deployment 管理Rs/RS 管理 Pod **

ReplicaSet

ReplicaSet是支持基于集合的标签选择器的下一代Replication Controller,它主要用作Deployment协调创建、删除和更新Pod,和Replication Controller唯一的区别是,ReplicaSet支持标签选择器。在实际应用中,虽然ReplicaSet可以单独使用,但是一般建议使用Deployment来自动管理ReplicaSet,除非自定义的Pod不需要更新或有其他编排等。

Replication Controller和ReplicaSet的创建删除和Pod并无太大区别,Replication Controller目前几乎已经不在生产环境中使用,ReplicaSet也很少单独被使用,都是使用更高级的资源Deployment、DaemonSet、StatefulSet进行管理Pod。

Deployment

Deployment概念:用于部署无状态的服务,这个最常用的控制器。一般用于管理维护企业内部无状态的微服务,比如configserver、zuul、springboot。他可以管理多个副本的Pod实现无缝迁移、自动扩容缩容、自动灾难恢复、一键回滚等功能。

虽然ReplicaSet可以确保在任何给定时间运行的Pod副本达到指定的数量,但是Deployment(部署)是一个更高级的概念,它管理ReplicaSet并为Pod和ReplicaSet提供声明性更新以及许多其他有用的功能,所以建议在实际使用中,使用Deployment代替ReplicaSet。

如果在Deployment对象中描述了所需的状态,Deployment控制器就会以可控制的速率将实际状态更改为期望状态。也可以在Deployment中创建新的ReplicaSet,或者删除现有的Deployment并使用新的Deployment部署所用的资源。

Deployment命令

kubectl get deployment   #查看Deployment下Pod
kubectl create deployment nginx --image=nginx:1.19.0 --replicas=4
# 创建deployment pod
--replicas=4  #就是副本,4个副本
直接vim dc-nginx.yaml文件apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec :- name: nginximage: nginx:1.19.0ports:- containerPort: 80示例解析:
kind: Deployment  类型 deploymnt
nginx-deployment:Deployment的名称。
replicas: 创建Pod的副本数。
selector:定义Deployment如何找到要管理的Pod,与template的label(标签)对应。
template字段包含以下字段:
app: nginx使用label(标签)标记Pod
spec:表示Pod运行一个名字为nginx的容器。
image:运行此Pod使用的镜像
Port:容器用于发送和接收流量的端口
运行 deployment.yaml文件
kubectl create -f dc-nginx.yaml
也可以直接修改deployment,让yaml文件直接生效
kubectl edit deployment nginx-deployment    #按SHIFT加ZZ退出
kubectl get deployment -o wide   #更加详细的查看 deployment
NAME:集群中Deployment的名称。
READY: Pod的状态,已经ready的Pod个数,前边的1是准备好的pod数量,后边1是deployment中配置的pod副本数。
UP-TO-DATE:显示已达到期望状态的被更新的副本数。
AVAILABLE:显示用户可以使用的应用程序副本数,当前为1,因为部分Pod仍在创建过程中。
AGE:显示应用程序运行的时间。
CONTAINERS: 容器的名称
IMAGES: 镜像名称
SELECTOR: 管理的pod标签

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nQYAbzrz-1634901461639)(C:\Users\yyc\AppData\Roaming\Typora\typora-user-images\image-20210926180835599.png)]

更新 Doployment pod

一般对应用程序升级或者版本迭代时,会通过Deployment对Pod进行滚动更新。

当然也可以直接编辑Deployment,效果相同:  回滚也可以
kubectl edit deployment nginx-deployment
kubectl set image deployment nginx-deployment nginx=nginx:1.20.0 --record
--record  #  保留更新的历史纪录
回滚 Doploymentpod

当新版本不稳定时,可以对其进行回滚操作,默认情况下,所有Deployment的rollout历史都保留在系统中,可以随时回滚。

kubectl rollout history deployment nginx-deployment #查看部署历史kubectl rollout undo deployment nginx-deployment --to-revision=1 #回滚--to-revision=1 # 使用--to-revision参数回到指定版本:
扩展Deployment pod

当公司访问量变大,三个Pod已无法支撑业务时,可以对其进行扩展。

扩容 kubectl scale deployment nginx --replicas=5--replicas=5  #副本数
缩容 kubectl scale deployment nginx --replicas=3
暂停和恢复Deployment pod 更新

Deployment支持暂停更新,用于对Deployment进行多次修改操作。

暂停更新 kubectl rollout pause deployment nginx-deployment恢复更新kubectl rollout resume deployment nginx-deployment暂停更新期间 对deployment 修改或更新等回复更新后继续执行。

Deployment 更新策略

清理策略

在默认情况下,revision保留10个旧的ReplicaSet,其余的将在后台进行垃圾回收,可以在.spec.revisionHistoryLimit设置保留ReplicaSet的个数。当设置为0时,不保留历史记录。

更新策略
.spec.strategy.type==Recreate,表示重建,先删掉旧的Pod再创建新的Pod。strategy:    #Recreate:      #maxSurge: 25%      #maxUnavailable: 25%    type: Recreate.spec.strategy.type==RollingUpdate,表示滚动更新,可以指定maxUnavailable和maxSurge来控制滚动更新过程。        .spec.strategy.rollingUpdate.maxUnavailable,指定在回滚更新时最大不可用的Pod数量,可选字段,默认为25%,可以设置为数字或百分比,如果maxSurge为0,则该值不能为0。        .spec.strategy.rollingUpdate.maxSurge可以超过期望值的最大Pod数,可选字段,默认为25%,可以设置成数字或百分比,如果maxUnavailable为0,则该值不能为0maxUnavailable   滚动更新期间最大多少个pod不可用maxSurge        一次可次超出期望值多少个pod

dnsPoilcy 策略

None(无策略)

清除 Pod 预设 DNS 配置,当 dnsPolicy 设置成为这个值之后, kubernetes 不会为 Pod 预先加载任何逻辑用于判定得到 DNS 的配置

默认预设 (Default)

Pod 里面的 DNS 配置继承了宿主机上的 DNS 配置。即,该 Pod 的 DNS 配置与宿主机完全一致。

集群优先 (ClusterFirst)

与 Default 相反,会预先使用 kube-dns (或 CoreDNS ) 的信息当预设置参数写入到该 Pod 内的DNS配置。如设置了 hostNetwork = true 时,ClusterFirst 会被强制转化为 Default

ClusterFirstWithHostNet (宿主机与 Kubernetes 共存 )

集群 DNS 优先,并伴随着使用宿主机网络

扩展

单词 Deployment 部署

Deployment详解相关推荐

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

    目录: 一,引入Deployment 二,Deployment支持的功能 三,Deployment资源清单文件详解 四,滚动更新及回滚实验 五,弹性伸缩实验 一,引入Deployment 对于kube ...

  2. Kubernetes(15):Pod控制器ReplicaSet和Deployment详解

    文章目录 前言 第一节 Pod控制器 第二节 ReplicaSet(RS) 1. 概念和资源清单 2. 创建ReplicaSet 3. 扩缩容 3.1 方法一:直接编辑rs 3.2方法二 :命令扩缩容 ...

  3. k8s之Deployment详解

    一.官方介绍 Deployments | Kubernetes Deployment为Pod和Replica Set提供声明式更新. 你只需要在 Deployment 中描述您想要的目标状态是什么,D ...

  4. K8S系列(四)Deployment 详解

    背景 如果我们直接管理集群中所有的 Pod,应用 A.B.C 的 Pod,其实是散乱地分布在集群中.,现在有以下的问题: 首先,如何保证集群内可用 Pod 的数量?也就是说我们应用 A 四个 Pod ...

  5. Kubernetes K8S之资源控制器Job和CronJob详解

    Kubernetes的资源控制器Job和CronJob详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...

  6. Kubernetes K8S之资源控制器Daemonset详解

    Kubernetes的资源控制器Daemonset详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C/ ...

  7. kubernetes运行应用2之DaemonSet详解

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  8. 容器编排技术 -- Kubernetes kubectl create deployment 命令详解

    容器编排技术 -- Kubernetes kubectl create deployment 命令详解 1 kubectl create deployment 2 语法 3 示例 4 Flags ku ...

  9. k8s nodeport无法访问_k8s学习之service详解

    1.概述 通过Deployment来创建一组Pod来提供具有高可用性的服务.每个Pod都会分配一个单独的Pod IP,却存在如下两问题: 1.pod ip仅仅集群内部可见的虚拟IP,外部无法访问 2. ...

最新文章

  1. 【转/TCP协议编程】 基于TCP的Socket 编程
  2. 首页优化加载(聊聊百度移动端首页前端优化)
  3. web前后台数据交互
  4. c语言排序系统代码怎么写,排序概述(c语言)(示例代码)
  5. 牛客题霸 [ 最长回文子串] C++题解/答案
  6. win10系统怎么写java_win10系统制作java文本的操作方法
  7. 每日英语:Is austerity good for your health?
  8. 信息安全系统设计基础实验三
  9. 音视频开发音频处理技术
  10. 湖北校园天翼飞young使用路由器上网
  11. PMP证书考试攻略:项目管理考试技巧篇(名师分享PPT)
  12. Spring JtaTransactionManager事务管理
  13. SVM + HOG实现图像分类
  14. 经济基础知识(中级)【6】
  15. 应用宝上架审核要求_腾讯应用宝开发者福利!2小时内审核
  16. Python实现的双目相机标定系统
  17. 大恒相机-水星(MERCURY)系列 | 软件启动
  18. 1202 -- 童年生活二三事
  19. 如何做好网站优化推广
  20. R包bs4Dash控件效果对照图

热门文章

  1. vector 作为dll 接口参数_DLL中传递STL参数,vector对象作为dll参数传递等问题(转)...
  2. go语言支持继承吗_Go语言的结构体嵌入为什么不算继承?
  3. ilm 和dlm差异_电力通信系统--加密芯片.pdf
  4. 查看linux中的sh指向哪,什么是Linux的Shell脚本和怎么执行脚本?
  5. Spring MVC中处理Request和Response的策略
  6. 皮一皮:不能太自信。。。
  7. 一个关于hashCode的追问!
  8. 皮一皮:这不叫分手...叫裁员...
  9. 如何用 Java 实现简单的区块链
  10. Spring 中策略模式的 2 个经典应用