当前位置: 首页 > 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编号}
http://www.lryc.cn/news/365633.html

相关文章:

  • Docker 入门篇(九)-- 使用 Maven 插件 构建 Docker 镜像
  • 网络协议三
  • LeetCode LRU缓存
  • Parallels Desktop for Mac 19.4.0更新了哪些内容?有什么改进?
  • Python 将CSV文件转为PDF文件
  • 4_XMR交易过程
  • 02_共享锁和排他锁
  • Ubuntu的启动过程
  • c# 下 ScintillaNET 显示XML信息并折叠节点
  • 什么叫防御式编程
  • 前端优化之图片压缩——tinyPNG
  • Springboot集成Quartz
  • Android面试题之Kotlin Jetpack组件LifecycleScope
  • MySQL深分页优化
  • 问题:律师会见委托人的方式包括团体会见和( )。 #职场发展#笔记#学习方法
  • Spring Boot中整合Jasypt 使用自定义注解+AOP实现敏感字段的加解密
  • pytorch中的维度变换操作性质大总结:view, reshape, transpose, permute
  • LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划
  • 基于工业互联网打造敏捷供应链的实现方式:创新路径与实践应用
  • 碳化硅柱式膜的广泛应用
  • 【QT】QFont字体设置
  • Vue3+vite部署nginx的二级目录,使用hash模式
  • 云南区块链商户平台发票助手成品
  • AI图书推荐:检索增强生成RAG赋能大语言模型
  • 高效学习LabVIEW的方法
  • C语言 | Leetcode C语言题解之第136题只出现一次的数字
  • 如何利用Varjo混合现实技术改变飞机维修训练方式
  • C++:按指定字符分割字符串
  • 网络网络层之(6)ICMPv4协议
  • Opengrok代码在线查看平台