K8S Replication Controller 示例

news2024/11/18 8:19:08

K8S Replication Controller

Replication Controller可确保在任何时间运行指定数量的pod副本。换句话说,ReplicationController确保一个pod或一组同类pod始终处于可用状态。

可以理解为Replication Controller (RC)是基于 K8S Pod对象之上的,控制Pod副本数量的更高层次的抽象。

工作原理

如果集群环境中Pod数量大于期望值,则RC自动终止额外的Pod。如果Pod数量少于期望值,RC将启动更多的Pod,保证Pod数量始终满足期望值。与手动创建Pod不同,使用RC维护的Pod在出现故障、删除、终止时会自动替换。因此,即使应用程序只需要一个Pod,也应该使用Replication Controller。RC类似于进程管理器,但是RC不是在单节点上管理多个进程,而是在K8S集群多节点上管理多个Pod。

为了方便书写和沟通,Replication Controller 在日常使用中通常缩写为 rc, 并且作为kubectl命令的快捷使用方式。

一个简单的例子是创建一个ReplicationController对象,以可靠地无限期运行Pod的一个实例。更复杂的用例是运行相同Pod服务的多个副本,例如web服务器(相当于为了满足高可用,将web服务进行集群部署)。

运行案例

启动案例

此案例使用Replication Controller配置三个nginx web服务器集群。

# 创建 replication.yaml 文件,文件内容如下
apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
	# 定义副本数量
  replicas: 3
  selector:
    app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

通过kubectl 命令运行以上配置案例

kubectl apply -f replication.yaml

在这里插入图片描述

启动状态

使用以下命令检查RC状态

kubectl describe replicationcontrollers/nginx

在这里插入图片描述

如上图所示,创建了三个pod,都处于正在运行状态(相比使用keepalive + nginx 手动创建集群而言,这种方式创建的nginx集群太香了 )。

Pods Status:    3 Running / 0 Waiting / 0 Succeeded / 0 Failed

如果需要使用更为简单方式罗列出ReplicationController 下的所有Pod,可以使用以下命令

# app=nginx 跟对象定义yaml文件中的信息一致
pods=$(kubectl get pods --selector=app=nginx --output=jsonpath={.items..metadata.name})
echo $pods

shell 中断输出结果类似

nginx-9zczq nginx-gmpq6 nginx-wp4g8

在这里插入图片描述

查看集群中所有pod

kubectl get rc

在这里插入图片描述

参数说明

在之前的案例中,我们使用yaml配置文件创建了K8S RC对象,现在来学习一下各参数的意义:

  • 跟与所有其他Kubernetes 对象配置一样,ReplicationController需要apiVersion、kind和 metadata 字段。

    • apiVersion 表示对象版本信息
    • kind 表示对象类型 可以是Pod 、ReplicationSet、Deployment等等,这里设置 ReplicationController,即RC
    • metadata 表示对象元数据,如名称 这里设置RC对象名称为 nginx

    当K8S创建新的Pod时,RC配置文件中的 .metadata.name 配置作为Pod名称的基础。如上面提到的三个nginx节点不同的Pod名称

    nginx-9zczq nginx-gmpq6 nginx-wp4g8
    
  • Pod Template 模板 - .spec.template 是**.spec** 部分唯一需要设置的字段

    • .spec.template 定义 Pod 相关信息(可以理解为Pod 模板)但是该部分不需要 apiVersionkind
    • 除了Pod模板的必填字段外,ReplicationController中的 .spec.template 还必须指定适当的标签;适当的重新启动策略。对于标签名称,请确保不要与其他控制器重叠。
    • 仅允许.spec.template.spec.restartPolicy等于Always,如果未指定,则为默认值
  • RC label

    ReplicationController 本身可以单独设置label标签(.metadata.labels)。通常,您可以将这些标签设置为与.spec.template.metadata.labels;如果未指定.metadata.labels,则默认为.spec.template.metadata.labels。但是,允许它们不同,并且.metadata.labels不会影响ReplicationController的行为。

  • Pod Selector

    • .spec.selector字段是标签选择器。ReplicationController使用与选择器匹配的标签管理所有pod。

    • 如果指定,.spec.template.metadata.labels必须等于.spec.selector,否则API将拒绝它。如果未指定.spec.selector,则默认为.spec.template.metadata.labels。

  • RC 副本

    用户可以通过设置.spec.replicas参数,来控制pod的运行数量。可以简单理解为该参数控制pod运行实例的节点数,该参数非常重要,如果未指定.spec.creplica,则默认值为1。

RC 验证

上面也提到过,从Replication Controller 的定义中可知,RC控制Pod运行的数量,现在来测试下,手动的删除Pod节点,测试一下RC是否会自动进行恢复Pod数量。

原始节点

在这里插入图片描述

请注意,记住上面三个Pod名称,看后续RC自动遇到故障自动恢复的节点名称是否一致

删除节点

目前RC里面运行三个Pod信息,现在手动删除Pod节点,模拟某一个节点遇到故障,看RC是否会自动恢复。

kubectl delete pod nginx-gmpq6

在这里插入图片描述

验证结果

在使用命令删除Pod的之后,以极快的速度在其他shell终端查看RC的运行状态

kubectl describe replicationcontrollers/nginx

在这里插入图片描述

如上图可知,RC中运行的Pod数量减少为2,等待一会儿再次输入命令查看 RC运行状态,Pod运行的数量变成了3个

Annotations:  Replicas:  3 current / 3 desired
Pods Status:  3 Running / 0 Waiting / 0 Succeeded / 0 Failed
# 另外,使用以下命令查看 pod启动时间
kubectl get pods

在这里插入图片描述

启动一个nginx 节点的启动时间明显少于另外两个节点,证明Pod已经发生了重启,且Pod名称也已经发生了变化。(截图中的三个nginx名称跟最初记录的原始节点的名称并不完全一致,是因为测试过程中多次删除Pod导致)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/149459.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PR采购申请启用灵活工作流配置

目录 1. 检查系统基础工作流配置 2. 激活标准场景模版 WS02000458 3. 维护收件箱操作按钮文本 4. 维护任务代理及激活事件 5. 配置Inbox审批页面 6. PR灵活工作流启动配置 7. 为流程设置代理人 8. 配置工作流场景 9. 可扩展部分 官方Help文档路径: SAP He…

算法_杨氏矩阵_杨氏矩阵算法_剑指offer

目录 一、问题描述 二、问题分析 三、算法设计 ​四、代码实现 一、问题描述 有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。 要求:时间复杂度小于O(N);…

【目标检测】Cascade RCNN中的两个常见问题

一、关于mismatch问题 在training阶段和inference阶段使用不同的阈值很容易导致mismatch,什么意思呢? 在training阶段,由于给定了GT,所以可以把与GT的IoU大于阈值的proposals作为正样本,这些正样本参与之后的bbox回归…

【C语言】深入浅出讲解函数栈帧(超详解 | 建议收藏)

🚀write in front🚀 📝个人主页:认真写博客的夏目浅石. 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:凡人修C传 💬总结:希望你看完之后&…

基于机器学习与协同过滤的图书管理推荐系统

基于机器学习与协同过滤的图书推荐系统 一、系统结构图 二、Demo示例 完整源码可联系博主微信【1257309054】 点我跳转 三、K-means聚类机器学习推荐算法 1、原理 从数据库中 1、首先获取书籍类别 2、获取用户注册时勾选喜欢的类别,勾选的为1,否则…

让 Java Agent 在 Dragonwell 上更好用

本文是《容器中的Java》系列文章之 3/n,欢迎关注后续连载 😃 。1 背景 随着越来越多的云原生微服务应用的大规模部署,大家对微服务治理的能力需求越来越强。 Java Agent技术能够让业务专注于业务逻辑,与此同时,中间…

kali渗透测试到底该如何学?

1、渗透测试是什么? 渗透测试,是为了证明网络防御按照预期计划正常运行而提供的一种机制。渗透测试是通过各种手段对目标进行一次渗透(攻击),通过渗透来测试目标的安全防护能力和安全防护意识。打个比方:比…

手写spring12(把aop动态代理整合到spring生命周期)

文章目录目标设计项目结构四、实现1、定义Advice拦截器链2、定义Advisor访问者3、方法前置拦截器——MethodBeforeAdviceInterceptor4、代理工厂——ProxyFactory5、融入Bean生命周期的自动代理创建者——InstantiationAwareBeanPostProcessor 、DefaultAdvisorAutoProxyCreato…

什么是3dMax中的“块”?如何在3dMax中使用“块”?

3dMax 块简介 3dMax 是一款用于设计 3d 模型的软件,在 3d 建模图形专业人士中最受欢迎。我们可以在此软件中导入不同类型的预设计 3d 模型,以简化我们的工作。块是不同类型的 3d 模型,您可以从互联网上下载,然后将它们导入到 3dMax 软件的项目工作中,以节省您的时间。在本…

Python和OpenCV创建超快的“for”像素循环

这篇博客将介绍如何使用Python和OpenCV创建超快的“for”像素循环(逐像素循环),即Cython快速优化for循环; 使用Python和OpenCV逐像素循环图像是一个非常缓慢的操作,即使图像在内部由NumPy数组表示。 为什么会这样&am…

C语言-指针进阶-qsort函数的学习与模拟实现(9.3)

目录 思维导图: 回调函数 qsort函数介绍 模拟实现qsort 写在最后: 思维导图: 回调函数 什么是回调函数? 回调函数是一个通过函数指针调用的函数。 将一个函数指针作为参数传递给一个函数,当这个指针被用来调用…

57、JDBC和连接池

目录 一、JDBC基本介绍 二、JDBC快速入门 三、JDBC API 1、ResultSet [结果集] 2、Statement 3、PreparedStatement 4、DriverManager 四、封闭JDBCUtils 五、事务 六、批处理 七、数据库连接池 4、数据库连接池种类 (1) c3p0数据库连接池&…

MacBookPro 遇到pip: command not found问题的解决

学习Pyhton的时候,需要安装第三方插件pyecharts,执行以下命令: pip install pyecharts总是报错 pip: command not found 我很郁闷,于是上网搜索尝试各种命令, 命令1:curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 命…

Codeforces Round 507(div. 1) C(分类讨论,并查集)

题目链接: Problem - C - Codeforceshttps://codeforces.com/contest/1039/problem/C 题意: 计算机网络由个服务器组成,每个服务器有到范围内的加密秘钥。设是分配给第i台服务器的加密密钥。对服务器通过数据通信通道直接连接。由于加密算…

高性能分布式缓存Redis-第二篇章

高性能分布式缓存Redis-第二篇章一、持久化原理1.1、持久化流程(落盘)1.2、RDB详解1.2.1、介绍1.2.2、触发&原理1.2.3、实现1.2.4、RDB总结1.3、AOF详解1.3.1、概念1.3.2、AOF 持久化的实现1.3.2、开启1.3.4、命令追加1.3.5、文件写入和同步&#xf…

SQL 别名

通过使用 SQL,可以为表名称或列名称指定别名。 SQL 别名 通过使用 SQL,可以为表名称或列名称指定别名。 基本上,创建别名是为了让列名称的可读性更强。 列的 SQL 别名语法 SELECT column_name AS alias_name FROM table_name; 表的 SQL …

dubbo学习笔记4(小d课堂)

dubbo高级特性 服务分组及其配置 我们再来创建一个实现类: 接下来我们在xml中去进行配置: 现在我们去运行看是否会有错误呢? 我们有两个服务实现类,那运行的时候到底执行哪个呢? 但是我们想的是可以指定执行哪个实现…

设计模式——访问者模式

访问者模式一、基本思想二、结构图一、基本思想 将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进…

【安全硬件】Chap.7 对实体芯片采取物理手段破解;芯片IC逆向工程和拆分制造;物理上对芯片的攻击分类;侧信道攻击;Kocher针对RSA的计时攻击

【安全硬件】Chap.7 对实体芯片采取物理手段破解;芯片IC逆向工程和拆分制造;物理上对芯片的攻击分类;侧信道攻击;Kocher针对RSA的计时攻击前言1. 逆向工程Reverse Engineering逆向工程识别芯片上2输入NAND门逆向工程技术Decapulat…

CSS 实例系列

Hello 小伙伴们早上、中午、下午、晚上和深夜好,这里是 jsliang~本 CSS 系列文章:主推学以致用。结合面试题和工作实例,让小伙伴们深入体验 61 个工作常见的 CSS 属性和各种 CSS 知识。主推纯 CSS。尽可能使用 HTML CSS 完成学习目的&#x…