K8s Pod 控制器(一)

2023-11-15

K8s workload architecture

一、RC/RS 控制器

控制Pod,使Pod拥有自愈,多副本,扩缩容的能力

RC的定义包括如下几个部分:

(1)、Pod期待的副本数(replicas)

(2)、用于筛选目标Pod的Label Selector

(3)、当Pod的副本数量小预期数量时,用于创建新Pod的Pod模板(template)

2、Label and Selector

标签是关键值对,可以配置到 K8s 中任何的对象(例如 Pods)。标签用于根据要求组织和选
择子对象集。许多对象可以具有相同的标签。标签不为对象提供独特性。
在图中,我们使用了两个标签:app 和 env。根据我们的要求,我们为我们的四个 Pod 赋予了不同的价值。

K label resource-name app=test

3、Label Selectors – 标签选择器

通过标签选择器,我们可以选择对象的子集。K8s 支持两种类型的选择器:
基于平等的选择器
基于平等的选择器允许基于标签键和值对对象进行过滤。使用这种类型的选择器,
我们可以使用 [,],或!例如,通过 env=dev,我们选择的是设置 env 标签的对象。
基于设置的选择器
基于设置的选择器允许基于一组值对对象进行筛选。使用这种类型的选择器,我们
可以使用内、不和存在操作员。例如,在 env 中(dev,qa),我们选择的对象是 env 
标签设置为开发或卡。

k get rc owide
k get pod –show-label
k get rs -owide

4、ReplicaSet/Replication Controller 创建

RS 的 yaml 文件创建

apiVersion: apps/v1
kind: ReplicaSet
metadata:
 name: frontend
 labels:
 app: guestbook
 tier: frontend
spec:
 # modify replicas according to your case
 replicas: 3
 selector:
 matchLabels:
 tier: frontend
--------------------------------------------
 template:
 metadata:
 labels:
 tier: frontend
 spec:
 containers:
 - name: php-redis
 image: nginx:1.7.9

5、RS 自愈能力

K delete rs 

6、RS 多副本

–replicas=2
注意名字的变化

7、RS 扩缩容能力

K scale

二、Deployment 

控制 Pod,使 Pod 拥有自愈,多副本,扩缩容和滚动更新的能力

1、使用 Deployment 部署应用

k run nginx --image=nignx:alpine
K create deployment test –image=nginx:alpine 

apiVersion: apps/v1
kind: Deployment
metadata:
 name: myngx
spec:
 replicas: 3
 selector:
 matchLabels:
 app: myngx
 template:
 metadata:
 labels:
 app: myngx
 spec:
 containers:
 - image: nginx:1.7.9
 name: myngx
 ports:
 - containerPort: 80
 resources:
    requests:
     cpu: 8m

2、Deployment 的多副本能力

K scale deploy name –replicas=4

3、Deployment 扩缩容能力

K scale deploy name –replicas=4

4、Deployment 自愈&故障转移能力

演示 POD 故障以及 node 故障部署的故障转移能力
Deployment,RepliaSet and Pod 关系

Delete docker
Delete pod

5、升级部署方式介绍

kubernetes 多种发布方式概述

Kubernetes 蓝绿部署,金丝雀发布,滚动更新的介绍

6、金丝雀发布(又称灰度发布、灰度更新): 

金丝雀发布一般是先发 1 台机器,或者一个小比例,例如 2%的服务器,主要做流量
验证用,也称为金丝雀 (Canary) 测试,国内常称灰度测试。以前旷工下矿前,会先放一
只金丝雀进去用于探测洞里是否有有毒气体,看金丝雀能否活下来,金丝雀发布由此得
名。简单的金丝雀测试一般通过手工测试验证,复杂的金丝雀测试需要比较完善的监控
基础设施配合,通过监控指标反馈,观察金丝雀的健康状况,作为后续发布或回退的依
据。如果金丝测试通过,则把剩余的 V1 版本全部升级为 V2 版本。如果金丝雀测试失
败,则直接回退金丝雀,发布失败。

7、滚动更新 

在金丝雀发布基础上的进一步优化改进,是一种自动化程度较高的发布方式,用户
体验比较平滑,是目前成熟型技术组织所采用的主流发布方式。一次滚动式发布一般由
若干个发布批次组成,每批的数量一般是可以配置的(可以通过发布模板定义)。例如,
第一批 1 台(金丝雀),第二批 10%,第三批 50%,第四批 100%。每个批次之间留观察
间隔,通过手工验证或监控反馈确保没有问题再发下一批次,所以总体上滚动式发布过
程是比较缓慢的 (其中金丝雀的时间一般会比后续批次更长,比如金丝雀 10 分钟,后
续间隔 2 分钟)。

8、蓝绿部署 

一些应用程序只需要部署一个新版本,并需要立即切到这个版本。因此,我们需要
执行蓝/绿部署。在进行蓝/绿部署时,应用程序的一个新副本(绿)将与现有版本(蓝)
一起部署。然后更新应用程序的入口/路由器以切换到新版本(绿)。然后,您需要等待
旧(蓝)版本来完成所有发送给它的请求,但是大多数情况下,应用程序的流量将一次
更改为新版本;Kubernetes 不支持内置的蓝/绿部署。目前最好的方式是创建新的部署,
然后更新应用程序的服务(如 service)以指向新的部署;蓝绿部署是不停老版本,部署
新版本然后进行测试,确认 OK 后将流量逐步切到新版本。蓝绿部署无需停机,并且风
险较小。

9、A/B 测试 

AB 测试是为 Web 或 App 界面或流程制作两个(A/B)或多个(A/B/n)版本,在同一时间
维度,分别让组成成分相同(相似)的访客群组(目标人群)随机的访问这些版本,收集各
群组的用户体验数据和业务数据,最后分析、评估出最好版本,正式采用。

10、Deloyment 滚动更新

Deployment upgrade 
• Method 1 
• kubectl set image deployment/NAME containername=imagename:version 
• kubectl set image deployment/myngx myngx=nginx:latest
• Method2:
• Kubectl edit deployment name
• Method3:
• Kubectl apply –f yaml file
• 生成一个新的 RS
check 升级记录
• kubectl rollout history deployment/name
• kubectl rollout history deployment/name --revision=3
• Kubectl get rs -owide
• k get deployments.apps myngx -o yaml # check metadata.generation: 2
• This number is same with RS # rollback is not counted.

RollingUpdate Parameter

strategy:
 rollingUpdate:
 maxSurge: 25%
 maxUnavailable: 25%
type: RollingUpdate

maxSurge <string>
• 可调度的 Pod 最大数量超过所需数量 pod。值可以是绝对数(例如:5)或所需值的
百分比豆荚(ex:10%)。绝对数通过四舍五入从百分比计算。默认为 25%。
• 例子:
• 当该值设置为 30%时,当滚动更新开始时可以立即放大新的复制集,旧的和
新的 pod 不超过所需吊舱的 130%。一旦老 pod 被杀死,新的 ReplicaSet 可
以进一步扩展,确保 POD 的总数在更新过程中的任何时间运行最多为所需
POD 的 130%。


maxUnavailable<string>
• 更新期间不可用的最大 pod。价值可以是绝对数(例如:5)或所需 pod 的百分比
(例如:10%). 绝对数由百分比向下舍入计算得出。这如果 MaxSurge 为 0,则不能
为 0。默认值为 25%。
• 示例:
• 设置此选项时到 30%,旧的 pod 可以缩小到所需 POD 的 70%滚动更新开始
时立即执行。一旦新 pod 准备好,旧豆荚 ReplicaSet 可以进一步缩小,然后
再放大新的 ReplicaSet,确保始终可用的 POD 总数在更新过程中,至少有70%的 POD 是所需的。

11、Deployment 版本回退能力

回滚到上一个版本:
kubectl rollout undo deployment/NAME
回滚到先前的任何版本
kubectl rollout undo deployment/nginx-deployment --to-revision=2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

K8s Pod 控制器(一) 的相关文章

  • 如何在测试套件中定义 JUnit 方法规则?

    我有一个类 它是 JUnit 测试类的 JUnit 套件 我想定义一个规则on the suite 这是可以做到的 但需要做一些工作 您还需要定义自己的 Suite 运行程序和测试运行程序 然后在测试运行程序中重写 runChild 使用以
  • 如何查看Pocketsphinx词典中是否存在该单词?

    我只是想看看字典文件中是否存在字符串 字典文件位于问题底部 我想检查语音识别器是否可以识别单词 例如 识别器将无法识别字符串ahdfojakdlfafiop 因为字典中没有定义 所以 我可以检查某个单词是否在 pocktsphinx 词典中
  • 检查双精度值的等于和不等于条件

    我在比较两者时遇到困难double values using and 我创建了 6 个双变量并尝试进行比较If健康 状况 double a b c d e f if a b c d e f My code here in case of t
  • 如何打印整个字符串池?

    我想打印包含文字的整个字符串池String使用添加的对象intern 就在垃圾收集之前 JDK有没有隐式的方法来进行这样的操作 我们如何检查字符串池 EDIT The comment suggests that there may be a
  • 使用 Checkstyle Plugin 时从插件调用代码时出现问题:“org.eclipse.jface”

    我正在尝试在 Rational Software Architect 7 0 0 4 上使用 eclipse cs 插件 我最近卸载了旧的 beta2 版本并安装了 beta3 插件本身按照之前的配置工作 但是每当我尝试通过 Windows
  • 无法加载 jar 文件的主类

    我使用 Eclipse IDE 开发了一个应用程序 创建应用程序后 我以 jar 格式导出项目 当我尝试运行此 jar 文件时 出现错误 无法加载主类 请帮忙 当您将项目导出为 jar 时 请参阅此所以问题 https stackoverf
  • 通过 InjectMocks Spy 注入对象

    我需要对一个类运行一系列单元测试 该类具有 Autowired Logger 实现 实现的基本思想是 Mock Logger logger InjectMocks TestedClass tested 但我想保存日志输出功能 Mockito
  • Java 重写 hashCode() 得到 StackOverflowError

    所以我不太熟悉重写 hashCode 并且我似乎在 hashCode 方法中以某种方式进行了一些无限递归 这是我的场景 我有一个 DuplicateCache 类 它是一个缓存对象 用于检查系统中的重复对象 我有一个静态内部类 Duplic
  • PropertySources 中各种源的优先级

    Spring引入了新的注释 PropertySources对于所有标记为的类 Configuration since 4 0 需要不同的 PropertySource作为论证 PropertySources PropertySource c
  • 如何将 Spotlight for Help 插入本地化的 macOS 应用程序?

    我正在 macOS 上使用 Swing GUI 框架实现 Java 应用程序 当使用system外观和感觉以及screen菜单栏 Swing 自动插入一个搜索栏 called 聚光灯寻求帮助 https developer apple co
  • JavaFX - setVisible 隐藏元素但不重新排列相邻节点

    在 JavaFX 中 如果我有一个场景有 2VBox元素和每个VBox有多个Label in it 如果我设置顶部VBox to 无形的 为什么底部VBox 不向上移动顶部的场景VBox was The VBox is 无形的但我希望其他物
  • 如何将 XMP XML 块序列化为现有的 JPEG 图像?

    我有许多 JPEG 图像 其中包含损坏的 XMP XML 块 我可以轻松修复这些块 但我不确定如何将 固定 数据写回图像文件 我目前正在使用 JAVA 但我愿意接受任何能让这项任务变得容易的事情 这是目标关于 XMP XML 的另一个问题
  • 打印包含 JBIG2 图像的 PDF

    请推荐一些库 帮助我打印包含 JBIG2 编码图像的 PDF 文件 PDFRenderer PDFBox别帮我 这些库可以打印简单的 PDF 但不能打印包含 JBIG2 图像的 PDF PDFRenderer尝试修复它 根据 PDFRedn
  • Apache Commons CLI:替代已弃用的 OptionBuilder?

    IntelliJ 显示此示例代码中不推荐使用 OptionBuilderhttp commons apache org proper commons cli usage html http commons apache org proper
  • 不兼容的类型:在 java netbeans 中对象无法转换为 String

    我试图在我的项目中使用对象数组 但出现错误 incompatible types Object cannot be converted to String 在这一行 ST1 new String emt1 emt2 emt3 emt4 现在
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • Spock模拟inputStream导致无限循环

    我有一个代码 gridFSFile inputStream bytes 当我尝试这样测试时 given def inputStream Mock InputStream def gridFSDBFile Mock GridFSDBFile
  • Java中有类似分支/跳转表的东西吗?

    Java有类似分支表或跳转表的东西吗 分支表或跳转表是 根据维基百科 http en wikipedia org wiki Branch table 用于描述使用分支指令表将程序控制 分支 转移到程序的另一部分 或可能已动态加载的不同程序
  • java中如何找到class文件的包

    我正在编写一个使用 class 文件的 java 程序 我希望能够读取文件系统上的 class 文件 使用 InputStream 并确定它所在的包 该 class 文件可能不在一个好的包目录结构中 它可能位于某个随机位置 我怎样才能做到这

随机推荐

  • spring boot之actuator健康检查

    什么是actuator SpringBoot自带监控功能Actuator 可以帮助实现对程序内部运行情况监控 比如监控状况 Bean加载情况 环境变量 日志信息 线程信息等 官翻文档 https blog csdn net alinyua
  • java实体类相互转换

    工具类 public class SmartBeanUtil 复制bean的属性 param source 源 要复制的对象 param target 目标 复制到此对象 public static void copyProperties
  • dataframe多种更改数据的方法

    以下是测试的数据 import pandas as pd data name Alice Bob Cindy David age 25 23 28 24 gender woman man woman man df pd DataFrame
  • 人工智能目标检测数据集:飞机(3)

    本数据集为飞机卫星图 包括J用 民用 以及通用飞机 图片数量1000张 图片尺寸为1024x1024 RGB彩图 仅包含一类目标 飞机 数据集已经打好标签 标签格式为常用的pascal voc格式 xml 可以直接用于目标检测模型的训练 Y
  • 如何快速求最大公约数和最小公倍数

    可以运用辗转相除法 即 326 78 78 326 78 78 14 14 78 14 14 8 8 14 8 8 6 6 8 6 6 2 2 6 2 0 此时结束 这个时候2就是最大公约数 所用原理是 1 a b a ka b 其中a b
  • 正则表达式函数

    匹配函数 match函数是从头开始匹配 如果刚开始匹配不成 就无法再进行匹配了 import re result re match r a zA Z 大Abc print result 输出结果 None search函数 只要字符串中有满
  • vue和ajax

    常用发送ajax的方法 xhr jQury get post axios fetch window内置 promise风格 会把返回数据包两层promise 而且兼容不好 v resouce server1 js const express
  • java获取文件夹下所有图片_【windows技巧】快速获取文件夹内所有文件名称列表...

    转自 百度经验 https jingyan baidu com article 3aed632e3917c870108091d1 html 1 打开一个文件夹 gt 2 新建一个TXT文档 将名字命名为 文档列表 gt 3 在TXT文档里输
  • c++什么时候生成默认拷贝构造函数

    需要默认拷贝构造函数原因 如果不提供默认拷贝构造函数 编译器会按照位拷贝进行拷贝 位拷贝指的是按字节进行拷贝 有些时候位拷贝出现的不是我们预期的行为 会取消一些特性 以下是需要默认拷贝构造函数的必要条件 1 类成员也是一个类 该成员类有拷贝
  • 如何实现无线网卡上外网+有线上内网=同时上网

    网上那些花里胡哨的 一顿操作然并卵 已补充成功操作详情 请翻到最后面查看 前面内容请忽视 至少我现在根本实现不了 但是会比拔插网线换来换去方便些 记录下 需要的自取 实例 一 开始 1 管理员打开cmd命令 2 route print 查看
  • chatgpt赋能python:怎么让Python执行完不关闭的SEO

    怎么让Python执行完不关闭的SEO 作为一名有十年Python编程经验的工程师 我深知Python在SEO技术中的重要性 然而 很多人可能不知道如何让Python执行完任务后不关闭 这将会影响我们的SEO效果 因此 在这篇文章中 我将向
  • xlwt:ValueError: column index (256) not an int in range(256)

    xlwt最大列只支持255列 超过范围会报错 可以考虑用xlsxwriter
  • 安卓已死?毕业一年萌新的Android大厂面经,年薪超过80万!

    前言 最近我一直在面试高级工程师 不管初级 高级 程序员 我想面试前 大家刷题一定是是少不了吧 我也一样 我在网上找了很多面试题来看 最近又赶上跳槽的高峰期 好多粉丝 都问我要有没有最新面试题 索性 我就把我看过的和我面试中的真题 及答案都
  • layer.msg 的time 时间停留问题

    layer msg 同上 icon 1 time 2000 2秒关闭 如果不配置 默认是3秒 function do something time 属性为弹框停留时间 单位为毫秒 tipsMore 属性为是否同时显示多个弹框 true为显示
  • 顺序表与数组

    顺序表是在计算机内存中以数组的形式保存的线性表 顺序表是指用一组地址连续的存储单元依次存储数据元素的线性结构 线性表采用顺序存储的方式存储就称之为顺序表 顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中 线性表采用指针链接
  • Python 如何将字符串转为字典

    在工作中遇到一个小问题 需要将一个 python 的字符串转为字典 比如字符串 user info name john gender male age 28 我们想把它转为下面的字典 user dict name john gender m
  • Kubespray-offline v2.21.0-1 下载 Kubespray v2.22.1 离线部署 kubernetes v1.25.6

    文章目录 1 目标 2 预备条件 3 vcenter 创建虚拟机 4 系统初始化 4 1 配置网卡 4 2 配置主机名 4 3 内核参数 5 打快照 6 安装 git 7 配置科学 8 安装 docker 9 下载介质 9 1 下载安装 d
  • Linux文件编程常用函数详解——exit()和_exit()函数

    两个函数的区别
  • MongoDB未授权访问漏洞复现及加固

    说明 仅供技术学习交流 请勿用于非法行为 否则后果自负 0x01 漏洞简述 MongoDB是一个介于关系数据库和非关系数据库之间的产品 是非关系数据库当中功能最丰富 最像关系数据库的 它支持的数据结构非常松散 是类似json的bson格式
  • K8s Pod 控制器(一)

    K8s workload architecture 一 RC RS 控制器 控制Pod 使Pod拥有自愈 多副本 扩缩容的能力 RC的定义包括如下几个部分 1 Pod期待的副本数 replicas 2 用于筛选目标Pod的Label Sel