当前位置: 首页 > news >正文

K8s:无状态

无状态服务

无状态服务是指服务的实例之间没有持久化状态,每个实例都是相同的,可以互换使用。

调度器

ReplicationController

简称 RC是 Kubernetes 早期版本中用来确保 Pod 副本始终运行的 API 对象。它通过监控 Pod 副本的数量,确保任何时候都有指定数量的 Pod 副本始终运行。即如果有容器异常退出,会自动创建新的 Pod 来替代;而异常多出来的容器也会自动回收。

确保健康 Pod 的数量、弹性伸缩、滚动升级以及应用多版本发布跟踪等。

特点

  • 确保 Pod 副本始终运行。
  • 可以进行滚动更新。
  • 在较新版本的 Kubernetes 中,ReplicaSet 已经取代了 ReplicationController

示例

apiVersion: v1
kind: ReplicationController
metadata:name: my-replicationcontroller
spec:replicas: 3selector:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: myapp-containerimage: myapp:1.0.0

ReplicaSet

RS,ReplicaSet 保证 Pod 的副本数不变,并且能够处理 Pod 模板的更新。

特点

  • ReplicationController 类似,但更通用。
  • 支持基于集合的选择器(如 key in (value1, value2))。
  • 推荐用于替代 ReplicationController

示例

apiVersion: apps/v1
kind: ReplicaSet
metadata:name: my-replicaset
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: myapp-containerimage: myapp:1.0.0

Deployment

Deployment 是一种更高级的 API 对象,用于声明 Pod 和 ReplicaSet 的声明周期管理。Deployment 控制器负责 Pod 副本的声明式更新,可以自动替换 Pod 模板中的镜像或其他定义。

API版本:apps/v1

特点

  • 提供应用的声明式更新能力。
  • 支持回滚和暂停更新。
  • 可以查看 Deployment 的状态,如更新进度、修订版本等。
  • 是管理无状态应用的标准方式。

示例

apiVersion: apps/v1
kind: Deployment
metadata:name: my-deployment
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: myapp-containerimage: myapp:1.0.0

比较

  • 功能Deployment 提供了比 ReplicaSetReplicationController 更丰富的功能,如自动滚动更新、回滚等。
  • 选择器ReplicaSet 支持集合选择器,而 ReplicationController 只支持等值选择器。
  • 推荐使用:在新的 Kubernetes 应用中,推荐使用 Deployment 来管理无状态应用的声明周期,使用 StatefulSet 来管理有状态应用。
$ kubectl apply -f exampleDeploymentv1.yml --record

参数–record,这样会把每次修改Deployment控制器时所使用的命令记录到备注字段中,以便在查看Deployment控制器变更历史或进行回滚时可以辨别每次修改的内容。

deployment的yaml模板

apiVersion: apps/v1
kind: Deployment
metadata:name: String            #元数据,必填,Deployment控制器的名字namespace: String       #元数据,Deployment控制器的命名空间labels:                 #元数据,标签列表key: value            #元数据,可定义多个标签的键/值对annotations:            #元数据,自定义注解列表key: value            #元数据,可定义多个注解的键/值对
spec:selector:#必填,用于指定此Deployment控制器针对的Pod的标签选择器,需要与template中的标签匹配matchLabels:          #定义需要匹配的标签集合key: value          #需要匹配的标签,可定义多个标签的键/值对template: [PodTemplate] #必填,Pod模板,它与Pod具有完全相同的结构,不过它是嵌套的,#而且不需要带apiVersion或kind字段replicas: int           #指定所需Pod的数量,默认为1strategy:               #更新时替换旧Pod的策略type: Recreate/RollingUpdate     #Recreate表示所有现有的Pod都会在创建新的Pod之前被#终止,RollingUpdate表示以滚动更新方式更新PodrollingUpdate:maxSurge: int/int%           #在滚动更新时,在所需数量的Pod上允许创建的最大Pod数,#这个数字也可以为百分比形式maxUnavailable: int/int%     #在滚动更新时,同时存在最大不可用Pod数,#这个数字也可以为百分比形式progressDeadlineSeconds: int  #Deployment控制器处于进行状态时的等待秒数,超过这个时间将会变为失败minReadySeconds: int     #指定新创建的Pod应该在没有任何容器崩溃的情况下准备好的最短秒数revisionHistoryLimit: int        #指定要保留的允许回滚的旧ReplicaSet的数量paused: boolean                  #默认为false,用于暂停和恢复部署。当暂停部署时,#Pod模板中spec属性的任何更改都不会触发新的部署

Deployment控制器有两种更新方式。

  • Recreate:所有现有的Pod都会在创建的Pod之前被终止;删除旧的ReplicaSet控制器下的所有Pod,只保留旧的ReplicaSet控制器的定义,但不再投入使用

  • RollingUpdate:表示以滚动跟新方式更新Pod,并可以通过maxUnavailable和maxSurge参数控制滚动更新过程

    • maxUnavailable:表示在更新过程中能够进入不可用状态的Pod的最大值或相对于总副本数的最大百分比
    • maxSurge:表示能够额外创建的Pod数或相对于总副本数的百分比。

更新的暂停与恢复

暂停与恢复的命令如下所示。

$ kubectl rollout pause deploy {Deployment名称}
$ kubectl rollout resume deploy {Deployment名称}

回滚

需要回滚到之前版本,则可以先使用以下命令查看历史变更记录。

$ kubectl rollout history deployment {Deployment名称}

回滚命令

kubectl rollout undo deployment {Deployment名称} --to-revision={revision编号}

相关文章:

  • 排序---快速排序
  • msfconsole利用Windows server2008cve-2019-0708漏洞入侵
  • c#未能加载基类System错误 这台计算机上缺少此项目引用的 NuGet 程序包
  • HikariCP连接池初识
  • 基于机器学习的锂电池RUL SOH预测
  • 【JavaScript脚本宇宙】表格大变身:探秘JavaScript库的数据表格魔法
  • 设计模式七大原则-单一职责原则SingleResponsibility
  • 卡码网用友提前批笔试 | 121 大数减法、122 滑动窗口最大值、117 软件架构
  • Selenium IDE 工具
  • Python框架scrapy有什么天赋异禀
  • 技术前沿 |【大模型InstructBLIP进行指令微调】
  • PostgreSQL的视图pg_tables
  • 【Java】Java流中的API
  • 通用信息提取数据预处理
  • MySQL——索引下推
  • @jsonView过滤属性
  • Android Studio:GIT提交项目到远程仓库
  • EventListener原理
  • input实现文字超出省略号功能
  • java2019面试题北京
  • Java超时控制的实现
  • Sass Day-01
  • Sublime text 3 3103 注册码
  • vuex 学习笔记 01
  • vue学习系列(二)vue-cli
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 微服务核心架构梳理
  • 我这样减少了26.5M Java内存!
  • ​ArcGIS Pro 如何批量删除字段
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #162 (Div. 2)
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #pragma data_seg 共享数据区(转)
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (02)Unity使用在线AI大模型(调用Python)
  • (Java入门)学生管理系统
  • (Oracle)SQL优化技巧(一):分页查询
  • (八)Flink Join 连接
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (转)Sql Server 保留几位小数的两种做法
  • (转)创业的注意事项
  • (转)四层和七层负载均衡的区别
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET 5种线程安全集合
  • .NET Core 成都线下面基会拉开序幕
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .Net Core和.Net Standard直观理解
  • .Net Remoting常用部署结构
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET程序员迈向卓越的必由之路
  • .NET处理HTTP请求
  • .Net多线程Threading相关详解
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)