【云原生】ReplicationController控制器详解

ReplicationController

文章目录

  • ReplicationController
    • 说明
    • 一、ReplicationControllere介绍
    • 二、ReplicationController如何工作
    • 三、运行一个ReplicationController
    • 四、编写一个ReplicationController清单注意事项
      • 4.1、Pod模板
      • 4.2、ReplicationController上的标签
      • 4.3、Pod选择算符
      • 4.4、多个Pod副本
      • 4.5、删除Pod
      • 4.6、只删除ReplicationController
        • 演示

说明

  • 现在推荐使用ReplicaSetDeployment控制器来管理副本管理机制。

一、ReplicationControllere介绍

  • ReplicationController确保在任何时候都有特定数量的Pod副本处于运行状态。换句话说,ReplicationController确保一个Pod或一组同类的Pod总是可用的。

二、ReplicationController如何工作

  • 当Pod数量过多时,ReplicationController会终止多余的Pod。当Pod数量太少时,ReplicationController将会启动新的Pod。与手动创建的Pod不同,由ReplicationController创建的Pod在失败、被删除或被终止时会被自动替换。例如,在中断性维护(如内核升级)之后,你的Pod会在节点上重新创建。因此,即使你的应用程序只需要一个POd,你也应该使用ReplicationController创建Pod。ReplicationController类似于进程管理器,但是ReplicationController不是监控单个节点上的单个进程,而是监控多个节点的多个Pod。

  • 在讨论中,ReplicationController通常缩写为rc,并作为kubectl命令的快捷方式(意思就是如果使用kubectl可以把ReplicationConroller简写为rc)

  • 一个简单的示例是创建一个ReplicationController对象来可靠地无限期地运行Pod的一个实例。更复杂的用例是运行一个多副本服务(如Web服务器)的若干相同副本。

三、运行一个ReplicationController

  • 这个示例ReplicationController运行NginxPod,一共会创建出三个副本,分别分配到Node节点上
[root@master ~]# cat rc-nginx.yaml 
# 指定使用Kubernetes API的版本
apiVersion: "v1"
# 定义资源类型为RC
kind: ReplicationController
# 定义Pod的元数据
metadata:
# Pod名字为nginxname: nginx
# 定义Pod的规格
spec:
# 期望Pod的副本数量,这次为3replicas: 3
# 标签选择器:用于定义选择哪些现有Pod应该被这个RC管理selector:app: nginx
# 定义了创建Pod的模板,也可以理解为容器模板,这个模板将用于创建新的Pod副本template:metadata:name: nginx
# 定义容器模板,可以理解为,如果是使用这个模板创建出的Pod副本会自动打上一个标签为app=nginxlabels:app: nginx
# 定义容器规格spec:# 定义Pod中要运行的容器列表,这个例子中有多个containers:# 定义容器名称- name: nginx# 定义容器使用的镜像image: nginx# 定义容器内部监听的端口列表ports:- containerPort: 80
  • 通过以下命令运行示例任务
[root@master ~]# kubectl apply -f rc-nginx.yaml
  • 输出类似于
replicationcontroller/nginx created
  • 使用以下命令查看ReplicationController的状态:
# 方法一
[root@master ~]# kubectl describe replicationcontroller nginx# 方法二
[root@master ~]# kubectl describe rc nginx
  • 输出类似于
Name:         nginx
Namespace:    default
Selector:     app=nginx
Labels:       app=nginx
Annotations:  <none>
Replicas:     3 current / 3 desired
Pods Status:  2 Running / 1 Waiting / 0 Succeeded / 0 Failed
Pod Template:Labels:  app=nginxContainers:nginx:Image:        nginxPort:         80/TCPHost Port:    0/TCPEnvironment:  <none>Mounts:       <none>Volumes:        <none>
Events:Type    Reason            Age   From                    Message----    ------            ----  ----                    -------Normal  SuccessfulCreate  11m   replication-controller  Created pod: nginx-8jzh2Normal  SuccessfulCreate  11m   replication-controller  Created pod: nginx-gfksdNormal  SuccessfulCreate  11m   replication-controller  Created pod: nginx-ll8lh
  • 查看Pod运行状态
[root@master ~]# kubectl get pod 
NAME          READY   STATUS    RESTARTS   AGE
nginx-792pv   1/1     Running   0          90s
nginx-8jzh2   1/1     Running   0          19m
nginx-ll8lh   1/1     Running   0          19m

四、编写一个ReplicationController清单注意事项

  • 与所有其他Kubernetes配置一样,ReplicationController需要apiVersionKindmetadata字段
  • 当控制平面为ReplicationController创建新的Pod时,ReplicationController的.metadata.name是命名这些Pod的部分基础。ReplicationController的名称必须是一个合法的DNS子域值,但这可能对Pod的主机名产生意外的结果。为获得最佳兼容性,名称应遵循更严格的DNS标签规则。

4.1、Pod模板

  • .spec.template.spec的唯一必须字段。

  • .spec.template是一个Pod模板。它的模式与Pod完全相同,只是它是嵌套的,没有apiVersionKind属性。

  • 除了Pod所需的字段外,ReplicationController中的Pod模板必须指定适当的标签和适当的重启策略。对于标签,请确保不与其他控制器重叠。

  • 只允许.spec.template.spec.restartPolicy等于Always,如果没有指定Pod的重启策略默认使用Always

4.2、ReplicationController上的标签

  • ReplicationController本身可以有标签(.metadata.labels)。通常,你可以将这些设置为.spec.template.metadata.lables;如果没有指定.metadata.labels那么它默认为.spec.template.metadata.lable。但是Kubernetes允许他们不同的,.metadata.labels不会影响ReplicationController的行为。

4.3、Pod选择算符

  • .spec.selector字段是一个标签选择器。ReplicationController管理标签与标签选择器匹配的Pod(意思:如果定义的标签选择器为.spec.selector.app:nginx那么就意味着这个控制器将会管理带有标签为app=nginxPod)。它不区分它创建或删除的Pod和其他人或进程创建或删除的Pod。这允许在不影响正在运行的Pod的情况下替换ReplicationController。

  • 如果指定了.spec.template.metadata.lables,它必须和.spec.selector相同,否则它将被API拒绝。如果没有指定.spec.selector,它将默认为.spec.template.metadata.labels

spec:replicas: 3selector:app: nginxtemplate:metadata:name: nginxlabels:app: ginx
  • 模板的标签和标签选择器不同的话,将会报错如下内容
[root@master ~]# kubectl apply -f rc-nginx.yaml 
The ReplicationController "nginx" is invalid: spec.template.metadata.labels: Invalid value: map[string]string{"app":"ginx"}: `selector` does not match template `labels`
  • 另外,通常不应该直接使用另一个ReplicationController或另一个控制器(例如Job)来创建其标签与该选择算符匹配的任何Pod。如果这样做,ReplicationScontroller会认为它创建了这些Pod。Kubernetes并没有阻止你这样做。

4.4、多个Pod副本

  • 你可以通过设置.spec.replicas来指定应该同时运行多个Pod。在任何时候,处于运行状态的Pod个数可能高于或者低于设定值。例如,副本个数刚刚被增加或减少时,或者一个Pod处于优雅终止过程中而其替代副本已经提前开始创建时。
  • 如果你没有指定.spec.replicas,那么它默认是1也就是默认运行一个Pod
# 将replicas设置为10也就意味着将会运行10个Pod副本,
[root@master ~]# cat rc-nginx.yaml 
apiVersion: "v1"
kind: ReplicationController
metadata:name: nginx
spec:replicas: 10selector:app: nginxtemplate:metadata:name: nginxlabels:app: nginxspec:containers:- name: nginximage: nginxports:- containerPort: 80
  • 通过以下命令运行示例任务
[root@master ~]# kubectl apply -f rc-nginx.yaml
  • 查看ReplicationController个数
  • 仔细观察以下Pod的数量,和状态一栏,可得知,Pod的状态不止Running,如果状态为ContainerCreating表示Pod正在创建中。
[root@master ~]# kubectl get pod 
NAME          READY   STATUS              RESTARTS   AGE
nginx-2pjqd   1/1     Running             0          39s
nginx-689qk   1/1     Running             0          39s
nginx-792pv   1/1     Running             0          30m
nginx-8jzh2   1/1     Running             0          47m
nginx-fz5ln   1/1     Running             0          39s
nginx-ll8lh   1/1     Running             0          47m
nginx-lpztd   0/1     ContainerCreating   0          39s
nginx-q4hdn   1/1     Running             0          39s
nginx-qmzsw   0/1     ContainerCreating   0          39s
nginx-zctgv   0/1     ContainerCreating   0          39s
  • 等待一小会再次查看Pod个数
[root@master ~]# kubectl get pod 
NAME          READY   STATUS    RESTARTS   AGE
nginx-2pjqd   1/1     Running   0          2m2s
nginx-689qk   1/1     Running   0          2m2s
nginx-792pv   1/1     Running   0          31m
nginx-8jzh2   1/1     Running   0          49m
nginx-fz5ln   1/1     Running   0          2m2s
nginx-ll8lh   1/1     Running   0          49m
nginx-lpztd   1/1     Running   0          2m2s
nginx-q4hdn   1/1     Running   0          2m2s
nginx-qmzsw   1/1     Running   0          2m2s
nginx-zctgv   1/1     Running   0          2m2s

4.5、删除Pod

  • 使用资源清单运行的Pod使用kubectl delete pod <Pod名字>是不会完全删除的,因为ReplicationController有个特性就是它会一直维持指定Pod的状态数量

  • 为了更好的理解现在进行相关测试

  • 使用kubectl delete命令删除Pod查看效果

  • 先查看Pod的数量

[root@master ~]# kubectl get pod 
NAME          READY   STATUS    RESTARTS   AGE
nginx-2pjqd   1/1     Running   0          5m35s
nginx-689qk   1/1     Running   0          5m35s
nginx-792pv   1/1     Running   0          34m
nginx-8jzh2   1/1     Running   0          52m
nginx-fz5ln   1/1     Running   0          5m35s
nginx-ll8lh   1/1     Running   0          52m
nginx-lpztd   1/1     Running   0          5m35s
nginx-q4hdn   1/1     Running   0          5m35s
nginx-qmzsw   1/1     Running   0          5m35s
nginx-zctgv   1/1     Running   0          5m35s
  • 使用kubectl delete命令删除一个Pod查看效果
[root@master ~]# kubectl delete pod nginx-2pjqd
pod "nginx-2pjqd" deleted
  • 再次查看Pod的数量,依旧还是运行了10个Pod副本
[root@master ~]# kubectl get rc
NAME    DESIRED   CURRENT   READY   AGE
nginx   10        10        10      3m58s
  • 如果想彻底删除所有资源清单部署的Pod副本,请使用以下命令
  • 请小心使用以下命令,因为它将会把这个资源清单中的内容全部删除
[root@master ~]# kubectl delete -f rc-nginx.yaml
  • 再次查看Pod,将查看不到任何内容
[root@master ~]# kubectl get pod 
No resources found in default namespace.
  • 再次部署Pod,后面会再次用到
[root@master ~]# kubectl apply -f rc-nginx.yaml

4.6、只删除ReplicationController

  • 你可以删除一个ReplicationController而不影响它的任何Pod。
  • 使用kubectl,为kubectl delete指定--cascade=orphan选项。
  • 当使用REST API或客户端库时,只需删除ReplicationController来替换它。只要新的和旧的.spec.selector相同,那么新的控制器将领养旧的Pod。但是,它不会做出任何努力使现有的Pod匹配新的、不同的Pod模板。如果希望以受控制方式更新Pod以使用新的spec,请执行滚动更新操作。
演示
  • 你需要提前apply一个资源清单,并查看Pod
[root@master ~]# kubectl get pod 
NAME          READY   STATUS    RESTARTS   AGE
nginx-68zl5   1/1     Running   0          4m48s
nginx-7m4dz   1/1     Running   0          4m48s
nginx-bnzpt   1/1     Running   0          4m48s
nginx-f2ptt   1/1     Running   0          4m48s
nginx-n8ndg   1/1     Running   0          4m48s
nginx-p94qb   1/1     Running   0          4m48s
nginx-pgxvn   1/1     Running   0          4m48s
nginx-t5xhs   1/1     Running   0          4m48s
nginx-wr67c   1/1     Running   0          4m48s
nginx-xszcf   1/1     Running   0          4m48s
  • 不加--cascade=orphan删除RC资源对象
[root@master ~]# kubectl delete rc nginx
  • 再次查看Pod,可以看到Pod一个也不存在了,
[root@master ~]# kubectl get pod
No resources found in default namespace.
  • 使用--cascade=orphan删除RC,在此之前你需要apply一个RC的资源清单
[root@master ~]# kubectl delete rc nginx --cascade=orphan
  • 查看Pod是否跟随着RC被一起删除
  • 通过下面的命令回显可知,当加了--cascade=orphan参数时,创建资源对象并不会删除对象对象的数据比如Pod
[root@master ~]# kubectl get pod
NAME          READY   STATUS    RESTARTS   AGE
nginx-2t8zx   1/1     Running   0          103s
nginx-66ssk   1/1     Running   0          103s
nginx-92mvt   1/1     Running   0          103s
nginx-9m6zz   1/1     Running   0          103s
nginx-9zgbd   1/1     Running   0          103s
nginx-b4d65   1/1     Running   0          103s
nginx-dfktn   1/1     Running   0          103s
nginx-gxcgj   1/1     Running   0          103s
nginx-j74xn   1/1     Running   0          103s
nginx-vcfjq   1/1     Running   0          103s

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

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

相关文章

python机器学习8--自然语言处理(1)

1.基本定义&#xff1a; 语义&#xff1a;就是一句话的重点是什么。 自定词汇&#xff1a;因为语言、文字太多&#xff0c;自定和处理你所关心的重点词汇。 简体转繁体代码 from opencc import OpenCCtext1 "我去过清华大学" openCC OpenCC(s2t) line openCC.…

Typora 【最新1.8.6】版本安装下载教程 (轻量级 Markdown 编辑器),图文步骤详解,免费领取(软件可激活使用)

文章目录 软件介绍软件下载安装步骤激活步骤 软件介绍 Typora 是一款专为 Markdown 爱好者设计的文本编辑器&#xff0c;它结合了简洁的界面设计与强大的 Markdown 渲染能力&#xff0c;为用户提供了一个流畅、高效的写作环境。以下是对 Typora 更详细的介绍&#xff1a; 核心特…

vue使用mavonEditor(流程图、时序图、甘特图实现)

mavonEditor 安装mavonEditor $ npm install mavon-editor --save使用 // 全局注册import Vue from vueimport mavonEditor from mavon-editorimport mavon-editor/dist/css/index.css// useVue.use(mavonEditor)new Vue({el: #main,data() {return { value: }}})//局部使用…

js-vue中多个按钮状态选中类似于复选框与单选框实现

1.vue中多个按钮状态选中类似于复选框 在Vue中处理多个按钮的选中状态切换&#xff0c;通常我们会利用Vue的响应式数据系统来追踪每个按钮的选中状态。 html <div id"app"> <button v-for"button in buttons" :key"button.id" :c…

MATLAB绘制方波、锯齿波、三角波、正弦波和余弦波、

一、引言 MATLAB是一种具有很强的数值计算和数据可视化软件&#xff0c;提供了许多内置函数来简化数学运算和图形的快速生成。在MATLAB中&#xff0c;你可以使用多种方法来快速绘制正弦波、方波和三角波。以下是一些基本的示例&#xff0c;展示了如何使用MATLAB的命令来实现正弦…

数据科学统计面试问题 -40问

前 40 名数据科学统计面试问题 一、介绍 正如 Josh Wills 曾经说过的那样&#xff0c;“数据科学家是一个比任何程序员都更擅长统计、比任何统计学家都更擅长编程的人”。统计学是数据科学中处理数据及其分析的基本工具。它提供了工具和方法&#xff0c;可帮助数据科学家获得…

第五节shell脚本中的运行流程控制(5.2)

b)应答语句中的变量 #!/usr/bin/expect spawn sh ask.sh set timeout 5 set NAME [ lindex $argv 0 ] set AGE [ lindex $argv 1 ] set SUB [ lindex $argv 2 ] set FEEL [ lindex $argv 3 ] expect {"name" { send "$NAME\r";exp_continue }"old&qu…

【React】条件渲染:深入探讨高效开发技巧与最佳实践

文章目录 一、什么是条件渲染&#xff1f;二、条件渲染的实现方式三、条件渲染的最佳实践四、复杂条件渲染的实现 在现代前端开发中&#xff0c;React 已成为开发者构建用户界面的首选框架之一。React 的强大之处在于其组件化和状态管理能力&#xff0c;而条件渲染则是 React 开…

Linux Vim教程(六):文件操作与保存

目录 1. 打开与关闭文件 1.1 打开文件 1.2 关闭文件 1.3 保存文件 2. 创建和删除文件 2.1 创建新文件 2.2 删除文件 3. 文件浏览与导航 3.1 切换文件 3.2 文件列表 4. 文件保存技巧 4.1 强制保存 4.2 保存为新文件 4.3 自动保存 5. 文件操作的高级技巧 5.1 分割…

防火墙限制docker了

今天有个安全方面的需求&#xff0c;演示环境禁止将3306等高危端口暴露到外网。 于是同事开启了防火墙&#xff0c;仅将应用端口暴露。结果导致演示环境无法使用。 由于公司的应用是基于docker部署的。结果他问我为什么同一台机器&#xff0c;应用无法访问mysql。 docker对于…

ELK Stack入门之部署EFK架构

前言&#xff1a; 日志分析对于现代IT系统来说至关重要&#xff0c;它可以帮助组织机构理解和优化其业务和技术基础设施。以下是日志分析的一些重要性方面&#xff1a; 问题诊断与故障排除&#xff1a; 当系统发生故障或出现异常时&#xff0c;通过对相关日志进行分析&#xf…

SQL labs-SQL注入(五,使用sqlmap进行cookie注入)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 引言&#xff1a; Cookie 是一些数据, 存储于你电脑上的文本文件中。当 web 服务器向浏览器发送 web 页面时&#xff0c;在连接关闭后&#xff0c;服务端不会记录用户的信息。Cookie…

第十一章 数据结构

第十一章 数据结构 11.1 数组 数组是元素的顺序集合&#xff0c;通常这些元素具有相同的数据类型 索引表示元素在数组中的顺序号&#xff0c;顺序号从数组开始处计数 数组元素通过索引被独立给出了地址&#xff0c;数组整体上有一个名称&#xff0c;但每个元素利用数组的的…

elasticsearch 解决全模糊匹配最佳实践

事件背景&#xff1a; 某 CRM 系统&#xff0c;定义了如下两个表&#xff1a; 客户表 t_custom 字段名 类型 描述 idlong自增主键phonestring客户手机......... 客户产品关系表 t_custom_product 字段名 类型 描述 idlong自增主键custom_idlong客户idproduct_idlong产品…

【buildroot系统中qt显示屏触摸方向更改】

buildroot系统和qt的显示触摸不一致&#xff0c;qt程序出现显示触摸上下颠倒问题 操作全部在启动qt程序之前设置系统显示配置 操作全部在启动qt程序之前设置系统显示配置 我的设备是上电自启动我的qt程序&#xff0c;所以为了方便我全部在调用我的qt程序位置处修改vi /etc/ini…

vue如何适应多个页面不同的布局

在 Vue.js 中&#xff0c;要适应多个页面不同的布局&#xff0c;你可以采用以下几种方法&#xff1a; 使用动态组件 (Dynamic Components)&#xff1a; 通过使用 Vue 的动态组件&#xff0c;可以在同一个页面中根据路由动态加载不同的布局组件。 <template><component…

笔记本检测工具 | 爱回收笔记本质检系统 v1.9.6

软件简介 爱回收笔记本质检系统是一款专为笔记本电脑硬件检测而设计的软件。它以其快速的检测速度、简便的操作流程和直观的检测结果&#xff0c;为用户提供了一种高效、易懂的硬件检测解决方案。 这款软件不仅适用于对电脑硬件有一定了解的用户&#xff0c;也特别适合对硬件…

SQL进阶:解锁高级特性,深化数据洞察

掌握了SQL的基础知识后&#xff0c;进一步探索其高级特性将帮助您更高效地处理复杂数据&#xff0c;深化数据分析的广度和深度。本文将带您领略SQL的高级功能&#xff0c;包括窗口函数、存储过程、触发器以及高级查询技巧等&#xff0c;让您在数据处理的道路上更进一步。 一、…

C#使用csvhelper实现csv的操作

新建控制台项目 安装csvhelper 33.0.1 写入csv 新建Foo.cs namespace CsvSut02;public class Foo {public int Id { get; set; }public string Name { get; set; } }批量写入 using System.Globalization; using CsvHelper; using CsvHelper.Configuration;namespace Csv…

如何为WordPress网站设置多语言站点

随着全球化的发展&#xff0c;拥有一个支持多语言的站点已成为提升用户体验、扩大受众范围的重要手段。本文将详细介绍如何为WordPress网站设置多语言站点&#xff0c;提供两种最佳方案详解&#xff0c;帮助您轻松实现多语言站点的搭建与管理。无论您是选择在同一站点内发布多语…