控制器_控制器设计 - CSDN
  • 控制器组成及其部分原理情况说明

    千次阅读 2017-09-13 22:12:39
    控制器的组成与里面涉及到的知识的总结

    控制器的组成与里面涉及到的知识的总结

    • 指令寄存器(Instuction Register,IR)
      • 指令寄存器IR保存从存储器中读出的当前要执行的指令。指令分为两部分,由操作码和地址码构成。操作码用来表明指令的操作性质,如加法,减法等;地址码提供本条指令的操作数地址或形成操作数地址有关信息,操作码是必不可少的,地址码则视情况而定(如情况一:不需要操作数的控制指令,如空操作指令,停机指令等;情况二:隐含操作数的指令,如堆栈结构计算机的运算指令,其所需的操作数是隐含在堆栈中,由堆栈指针SP【Stack Pointer】指出;情况三:8086CPU的字符串处理指令,源操作数和目的操作数分别隐含在源变址寄存器SI【Source Index】),和目的变址寄存器DI【Destination Index】中。
    • 指令译码器(Instruction Decoder,ID)
      • 指令译码器ID用来对指令寄存器中的指令进行译码分析,指出指令的操作种类和寻址方式,指令译码器的输出作为微操作命令发生器的输入,是产生控制信号的主要依据。指令译码器主要是对操作码的译码分析。
        • 寻址方式
          • 指令寻址
            • 相对寻址
              • 相对寻址是指指令代码提供目标地址相对于当前指令地址的位移量,转移到的目标地址就是当前指令地址加上位移量。当同一程序被操作系统安排到不同的存储区域执行时,指令间的位移并没有改变,采用相对寻址也就无需改变转移地址,给操作系统的灵活调度提供了很大方便,所以是最常用的目标地址寻址方式。
            • 直接寻址和间接寻址
              • 直接寻址是指令代码中直接提供目标地址,间接寻址时指令代码指出寄存器或存储单员地址,目标地址来自寄存器或存储单元。如果用寄存器保存目标地址,则称为目标地址的寄存器间接寻址;如果用存储单元保存目标地址,则称为目标地址的存储器间接寻址。
          • 数据寻址
            • 立即数寻址
              • 在立即数寻址方式中,指令需要的操作数紧跟在操作码之后(注意在这里操作码后面不是跟着地址码)作为指令机器代码的一部分,并且随着取指操作从主存进入指令寄存器。这种操作数用常量形式直接表达,称为立即数。立即数寻址方式只用于指令的源操作数,如在传送指令中给寄存器和存储器单元赋值。 如将16位立即数1234H传送到AX寄存器的指令可以写 MOV AX,1234H;而1234H的寻址方式就是立即数寻址,因为1234H为立即数,直接使用便可。而将32位立即数33221100H传送到EAX寄存器的指令可以写为: MOV EAX,33221100H。后一条指令的机器代码是B800112233H(从这里面也可以看出在存储单元存储数据时的规则:按照低位字节存放在低地址单元,高位字节存放在高地址单元),其中,第一个字节B8是操作码,后4个字节是立即数。8086CPU规定,指令中有两个操作数时,左面的目的操作数,右面的为源操作数。
            • 寄存器寻址
              • 指令的操作数存放在寄存器中称为寄存器寻址,可以直接使用寄存器的名字表示它保存的数据。绝大对数指令采用通用寄存器寻址,部分指令支持专用寄存器。寄存器寻址方式简单快捷,指令字长短,是最常用的寻址方式。 如 MOV AX,1100H,1100H为立即数寻址方式,而AX为寄存器寻址。也可以说源操作数为立即数寻址,目的操作数为寄存器寻址。
            • 存储器直接寻址
              • 如果操作数在主存单元中,指令代码中直接给出操作数有效地址称为存储器直接寻址。按80X86CPU处理器访问存储器的方式,指令中给出的地址是操作数在数据段的偏移地址,用段地址(在数据段寄存器储存DS)与偏移地址相结合,才能得到操作数在主存的地址。 MOV DX,[1234H];这种有方括号的表达式即存储器直接寻址,地址码给出的为寄存器地址,寄存器里面存储的内容为偏移地址
            • 寄存器间接寻址
              • 寄存器间接寻址是将操作数的有效地址存放在寄存器中,MASM汇编程序要求用英文括号将寄存器名字括起来。例如指令 MOV DX,[BX] 的源操作数采用寄存器间接寻址,指令 MOV [ESI],ECX的目的操作数为寄存器间接寻址。在寄存器间接寻址中,寄存器的内容为偏移地址(和存储器直接寻址一样),相当于一个地址指针。利用寄存器间接寻址,可以方便地对数组的元素或字符串的字符进行操作。也就是说,将数组或字符串首地址(或末地址)赋值给通用寄存器,利用寄存器间接寻址方式可以访问数组的头一个(或最后一个)元素,在加减数组元素所占的字节数就可以访问到其他元素或字符。
            • 寄存器相对寻址
              • 在寄存器相对寻址中,操作数的有效地址是寄存器内容和位移量之和。例如指令:MOV SI,[BX+4]表示源操作数的有效地址由BX寄存器的内容加上位移量4得到,默认与BX寄存器配合的是段寄存器DS指向的数据段
            • 基址加变址寻址和相对基址加变址寻址
              • 基址加变址寻址即寻址时同时使用基址和变址寄存器,将二者之和作为操作数的偏移地址(也可以称为有效地址) MOV DI,[ BX+SI ]
              • 相对基址加变址寻址即同时使用基址加变址寄存器加一个偏移量 MOV EAX,[ EBX+EDX+80H ]
            • 带比例的变址寻址
              • 在32位寻址方式中,支持变址寄存器内容乘以一个常数1(可省略),2,4,8这种寻址方式称为带比例的变址寻址。 MOV EAX,[ EBX *4 ] :带比例的变址寻址 MOV EAX,[ ESI*2+80H ] :带比例的相对变址寻址 MOV EAX,[ EBX+ESI*4 ] :带比例的基址加变址寻址 MOV EAX,[ EBX+ESI*8-80H ] :带比例的相对基址加变址寻址
    • 程序计数器(Program Counter,PC)
      • 程序计数器PC也叫指令指针寄存器【Instruction Pointer,IP】,用来存放下一条要执行指令的存储器地址,按此地址从对应存储单元取出的内容就是要执行的指令。指令是顺序存放在存储器内的,通常指令是按顺序执行的,则下一条要执行指令的地址由现行地址加1(或加一常量【寻址方式的不同】形成)
      • 地址形成电路根据寻址方式可以形成转移类指令或操作数地址,如在程序执行过程中要实现程序的转移,就要将形成的转移地址送到程序计数器PC中。
    • 时序电路
      • 用于控制操作时间的信号称为时序控制信号。时序电路产生并发出计算机所需的各种时序控制信号,对各种操作进行时间上的控制。时序控制信号有机器周期信号、节拍信号、工作脉冲信号,它们决定每个微操作的开始时刻和操作的持续时间
    • 微操作命令发生器
      • 微操作就是不能再分解的操作,执行微操作总是需要相应的控制信号(也称为微操作控制命令)。例如,让寄存器A的内容通过多路选择器这一操作就不能再分解,因此它是一个微操作。执行这一操作,需要控制器发出选通寄存器A的微操作命令。 微操作命令发生器是产生所有微操作命令的部件,是控制器中最复杂的部件。微操作命令发生器根据指令操作码、时序信号、状态寄存器内容和其他一些信息,产生计算机工作需要的各种控制信号,以便建立正确的数据通路,完成对取指令、分析指令和执行指令的控制。(控制器可以按照两种方法来设计:一种是由各种门电路构成,完全依靠硬件来产生控制信号,称为组合逻辑控制器,也叫硬布线控制器;另外一种是微程序控制器,通过执行固化的一段微程序产生控制信号来实现一条机器指令功能,对应所有指令的微程序的存放在控制器的只读存储器中。 组合逻辑控制器具有速度快的优点,但设计繁琐、复杂,微程序控制器速度教慢,但设计简单、规整,控制器的设计过程中可以将这两种方式结合起来 如最开始的计算是软件实现,现在大部分计算机是硬件实现)

    展开全文
  • 计算机组成原理之控制器

    千次阅读 2018-07-15 14:05:39
    控制器指令系统名词解释:指令系统:一台计算机可分为两个部件:控制部件和执行部件;其中控制器为控制部件,而其他的运算器、存储器、外围输入输出设备相对于控制器来说就是执行部件。微命令:控制器通过控制总线向...

    控制器

    指令系统

    名词解释:

    指令系统:一台计算机可分为两个部件:控制部件和执行部件;其中控制器为控制部件,而其他的运算器、存储器、外围输入输出设备相对于控制器来说就是执行部件。

    微命令:控制器通过控制总线向执行部件发送的各种控制命令。

    微操作:执行部件接受微命令之后所进行的相应操作。

    微指令:一组实现一定功能的微命令的组合,属于硬件。

    机器指令:一组可以完成一个独立的算术运算或逻辑运算的微指令的组合,与硬件紧密相连。

    宏指令:由若干条机器指令组成的软件指令,属于软件。

    指令系统:一台计算机中所有机器指令的集合,它是表征一台计算机性能的重要因素。

    指令格式

    操作码:指出指令所进行的操作。

    地址码:表示参与运算的数据应从寄存器的哪个单元取,运算的结果应存到哪个单元。

     

    指令按字长进行划分:

    单字长指令:指令字长等于机器字长度

    半字长指令:指令字长等于半个机器字长度

    双字长指令:指令字长等于两个机器字长度

    多字长指令:指令字长等于多个机器字长度

     

    指令按地址码的个数进行分类:

    三地址指令:指令中由三个地址

    二地址指令:指令中有两个地址(常用)

    一地址指令:指令中有一个地址(跳转指令)

    零地址指令:指令中没有地址(停机指令)

    指令和数据的寻址方式

    指令寻址的两种方式:

    顺序寻址:CPU内部的指令计数器PC,每执行一条指令之后其值自动加1,指向下一条欲执行指令的指令地址。

    跳跃寻址:将下一条待执行指令的地址送入PC,使PC指向新的内存地址

     

    操作数的基本寻址方式:

    隐含寻址:指令中只有操作数

    立即数寻址:地址码部分的形式地址字段就是操作数

    直接寻址:地址码部分的形式地址字段指向操作数在内存的有效地址

    间接寻址:地址码部分的形式地址字段指向的内存地址中的内容是是操作数的有效地址

    寄存器寻址:地址码部分的形式地址字段是存放操作数寄存器编号

    寄存器间接寻址:地址码部分的形式地址字段是指向的寄存器存放操作数的有效地址

    偏移寻址:

           相对偏移寻址:地址码部分的形式地址字段和PC寄存器中的内容相加的结果是存放操作数的有效地址。

           基址寻址方式:地址码部分的形式地址字段和BR基址寄存器中的内容相加的结果是存放操作数的有效地址。

           变址寻址方式:地址码部分的形式地址字段和IX变址寄存器中的内容相加的结果是存放操作数的有效地址。


     

    指令周期

    指令周期可分为两个:取指周期和执行周期。

    取指周期做取指令操作和译码操作,执行周期按指令进行相应的操作。

    四个时钟周期是一个机器周期,一个指令周期至少包含两个机器周期(非访存指令两个、访存指令三个及以上)。

     

    时序控制器

    四个时钟周期是一个机器周期,一个指令周期至少包含两个机器周期

     

    微程序控制器

           微地址的形成方法:

    计数器方式、多路转移方式


    附:图片截取自胡老师的授课PPT

    展开全文
  • 控制器的基本组成与实现 控制器的组成 指令部件 主要任务是完成取指令分析指令,指令部件包括: ![控制器的基本组成](C:\Users\hp\Desktop\控制器的基本组成.png) (1)程序计数器 (2)指令寄存器 (3)指令译码...

    控制器的基本组成与实现

    控制器的组成

    1. 指令部件
      主要任务是完成取指令分析指令,指令部件包括:
      ![控制器的基本组成](C:\Users\hp\Desktop\控制器的基本组成.png)
      (1)程序计数器
      (2)指令寄存器
      (3)指令译码器
      又称为操作数译码器,或指令功能分析解释器。暂存在指令寄存器中的指令只有在其操作吗部分经过译码之后才能识别这是一条什么样的指令,并产生相应的控制信号提供给位操作信号发生器。
      (4)地址形成部件
      地址形成部件根据指令的不同寻址方式,形成操作数的有效地址,在微、小型机中,可以不设专门的地址形成部件,而利用运算器来进行有效地址的运算。
    2. 时序部件
      时序部件能产生一定的时序信号,以保证机器的各功能部件有节奏的进行信息传送、加工及信息存储。时序部件包括:
      (1)脉冲源
      脉冲源用来产生具有一定频率和宽度的时钟信号,为整个及其提供基准信号。(一般使用石英晶体振荡器)
      (2)启停控制逻辑
      只有通过启停控制逻辑将计算机启动后,注释中脉冲才允许进入。它可以保证第一个脉冲和停止时的输出的最后一个脉冲都是完整的脉冲。
      (3) 节拍信号发生器
      节拍信号发生器(脉冲分配器)。脉冲源产生的脉冲信号,经过节拍信号发生器后产生各个及其周期中的节拍信号。
    3. 微操作信号发生器
      一条指令的去除和操作可以分解为很多基本操作,这种最基本的不可分割的操作成为位操作。也称为控制单元(CU)。不同机器指令具有不同的微操作序列。
    4. 终端控制逻辑
      是用来控制中断处理的硬件逻辑。

    控制器的硬件实现方法

    控制器的核心是操作信号发生器(控制单元CU)。
    位操作控制信号是由指令部件提供的译码信号、时序不见提供的时序信号和被控制功能部件所反馈的状态及条件综合形成的。
    根据产生的操作控制信号的方式不同,控制器分为:

    1. 组合逻辑型
      控制单元CU是由门电路组成的复杂树形网络。目前仅有一些巨型机和RISC(Reduced Instruction Set Computer,中文是精简指令集计算机。特点是所有指令的格式都是一致的,所有指令的指令周期也是相同的,并且采用流水线技术。)机为了追求高速度仍采用组合逻辑控制器。
    2. 存储逻辑型
      微程序控制器,采用存储逻辑来实现的,也就是把位操作信号代码化,使每条指令转化为一段微程序存入专门的存储器中。指令的执行速度比组合逻辑控制器慢。
    3. 组合逻辑和存储逻辑结合型
      控制器称为可编程逻辑阵列(PLA)控制器
    展开全文
  • 控制器类型

    2020-09-02 15:05:24
    控制器类型 ReplicationController 和 ReplicaSet deployment daemonset statefulset job/Cronjob Horizontal pod Autoscaling 每一种控制器都有它们各自的优点,我们要掌握它们的优点以后才能够合理的在不同情况...

    控制器类型

    ReplicationController 和 ReplicaSet

    deployment

    daemonset

    statefulset

    job/Cronjob

    Horizontal pod Autoscaling

    每一种控制器都有它们各自的优点,我们要掌握它们的优点以后才能够合理的在不同情况下去选择对应的控制器。接下来就给大家讲解一下它们每一种的特点,以及使用在那种环境之下

    6.2.1 ReplicationController 和 ReplicaSet

    首先就是我们的 RC 和 RS 它们写在一起就是 RS 是我们的现在进行时,RC 是我们的过去时

    replicationcontroller(RC)最基本的控制器类型就是用来维持 pod 的副本数目的:用来确保容器应用的副本数目始终维持在用户定义的副本数目,即如果有容器异常退出,也会创建新的 pod 来取代,也就是意味着始终维持我们的 pod 数目;而如果异常多出来的容器也会自动回收,不管是多还是少都不行,必须得是我们的期望值上。

    在新版本中得 kubernetes 建议使用 replicaset(RS)来取代 RC 。RS 和 RC 最大得不同点就是replicaset 支持了集合式得 selector(选择器);这里得选择是通过了标签进行选择即控制的。对于我们的 RS 来说它支持大量的一些算法来进行标签得匹配。而且 RC 是没有的,所以 RC 被淘汰了。

    6.2.2 deployment

    deployment 为我们的 pod 和 replicaset(RS) 提供了一个声明式定义方法,这需要给大家解释一下声明式定义方法,我给大家看一个说明。

    对于我们的声明式定义来说它也有一个队立面,叫做命令式编程,这是两类完全不同的思想。

    命令式编程:侧重于如何实现程序,就像我们刚接触编程的时候,我们需要把程序实现的结果按照逻辑结果一步一步写下来。

    声明式编程:侧重于定义想要什么,然后告诉计算机引擎,让计算机去帮我们实现。

    这两种其实我们已经看到了特点一个我需要一步一步的把想要得到的结果按照它的顺序和执行关系定义出来以后,它帮我们去实现。另一个是只要告诉他结果就帮我们去实现。从我们客户端这里来说那肯定是声明式编程更友好的,但是我们也看到了一个问题,声明式编程对开发人员不太友好。其实还是前端定义了一些语法结构,去理解以后帮我们实现的。并且声明式还有一个最大的特点就是,它还是一个可重复执行或叫它是一个幂等的。

    声明式使用命令(deployment): apply(优) create

    命令式使用命令(RS) :create(优) apply

    用来替代以前的 replicationController(RC) 来方便的管理应用。典型的应用场景包括:

    定义 deployment 用来创建 pod 和 Replicaset(RC)

    如下图,当我们去创建一个 deployment 的时候比如这个 deployment 叫做 nginx ,这时候它呢回去创建一个叫做 nginx-deployment-xxxxx 的 RS。那这个就是一个典型的 RS 、或叫 deployment 创建的 RS ,也就是我们的 deployment 会去创建出来对应的 RS ,而 RS 再去创建出来我们对应的 Pod ,这个逻辑关系很重要,deployment 不是直接去管理这些 pod 的而是由 RS 去管理这些 pod 的。

    在这里插入图片描述

    滚动升级和回滚应用

    滚动升级:控制 RS 这么一个版本进行我们所谓的滚动更新,回滚或者是我们所谓的暂停或继续,如果想进行滚动更新的话,它会创建出来一个新副本的 RS ,旧的这个 RS 会被删除并不是真的删除,而是将他的 pod 副本数目降低,然后将多的那个副本数目已移至新的 RS 中,直到旧的 RS 这边一个 pod 副本数都没有了,全部都移动至新的 RS 中。至此完成整个流程的滚动更新。

    回滚应用:如果有一天我们觉得这个新的 RS 中的 pod 并不是我想要的结果,然后就会将旧的 RS 中的 pod 副本数目启动,并且同时将新的 RS 中的 pod 副本数往旧的 RS 中移动,直到新的 RS 移动完。就实现了我们的回滚

    这就是 deployment 滚动和回滚操作底层的原理了

    扩容和缩容

    扩容缩容是在我们 RS 上面就已经实现了,那既然 deployment 是通过我们的 RS 去进行所谓的 pod 管理的,所以我们想都不用想了 deployment 肯定是支持的

    暂停和继续 deployment

    在我们的 pod 还是有对应的挂起操作,进行所谓的暂停操作。

    总结:

    也就意味着其实对于我们大部分应用程序来说,通过 RC 和 deployment 都可以实现了,如果两个都可以选的话建议大家选择我们的 deployment ,因为它的功能更多。

    6.2.3 daemonset

    daemonset 确保全部(或一些)node 上运行一个 pod 的副本上。当有 node 加入集群时,也会为它们新增一个 pod 。当有 node 从集群移除时,这些 pod 也会被收回,并不是我们的命令下达一瞬间,有哪些 node 那些 node 上就会去运行 pod 而后面新加的这些 node 以后,这些 node 并不会运行这些 pod 而是一个动态持续的过程,只要这个 daemonset 它在持续运行,没有被删除那在这个整个周期之类对应的 node 上都会去运行我想运行的 pod ,并且需要注意一下只有一个 pod 副本,也就是 daemonset 并不可以去定义超过一个以上的 pod 副本,因为它的默认值只有一个,也只能定义为一个,如果有多个 pod 需要运行在我们对应的 node 上的话,就可以通过定义多个 daemonset 的方案去实现。删除 daemonset 将会删除它创建的所有 pod,还是那句话 daemonset 引导起来的 pod 都是被我们的 daemonset 所管理的,你的管理者都已经没有了那 pod 自然也不应该存在。

    全部或一些这是一个非常关键的概念:也就意味着其实在我们的 K8s 里,它的调度选择是可以被我们管理员所控制的并不是只有 K8S 自己去决定,这在后面的调度策略里会教大家怎么去把对应的 pod 放在对应的 node 上去运行,那些 node 不想运行 pod 也是可以被定义的,主要是通过我们的标签选择或者说是所谓的污点去决定的

    使用 Daemonset 的一些典型用法:

    运行集群存储 daemon , 例如在每个 node 上运行 glusterd、ceph

    在每个 node 上运行日志收集 daemon,例如fluentd、logstash

    在每个 node 上运行监控 daemon ,比如 zabbix,也可以通过 daemonset 去部署更便于我们去实现,因为他可以去确保每个 node 节点有且只有一个,哪怕 zabbix 死了以后也会被启动。

    6.2.4 statefulset

    我们之前也说过,对于我们的 docker 来说更适合的是运行我们的无状态服务。哪有状态服务怎么办呢,docker 给我们的解决方案是一个以存储卷的方案去加载对应的数据,但是在 K8S 里它不仅有存储卷,还给了我们一个特殊的控制器叫 statefulset ,去完成我们的有状态服务的解决。其实现在还是有很多有状态的应用程序不方便去部署进我们的 statefulset ,或是不方便部署进我们的 k8s。比如我们的 mysql ,其实至今没有一个太好的解决方案可以把 mysql 这么一个有状态服务部署进我们的 K8s。

    statefulset 作为 controller 为 pod 提供唯一的表示。它可以保证部署和 scale 的顺序

    statefulset 是为了解决有状态服务的问题 (对应 Deployments 和 ReplicaSets 是为无状态服务而设计),其应用场景包括:

    稳定的持久化存储:即 pod 重新调度后还是能够访问到相同的持久化数据,基于 PVC 来实现。假设现在我有几个我们的容器,是被我们的 statefulset 去部署的,部署完成以后呢可能都用到了我们同一个存储卷,假如有一天这个 pod 死亡了,但我们的 statefulset 为了维持这个副本数就会重新创建对应的 pod ,这时候新创建的 pod 也会继续使用上一个 pod 退出时使用到的存储卷。也就这里的持久化数据并不会丢失,这就是我们所谓的稳定的持久化存储方案。

    稳定的网络标识:即 pod 重新调度以后其 pod name 和 host name 不变(这个很重要,在我们的很多服务里我们去创建对应的一些服务的链接方案的时候,都会以我们的 pod name 为链接对象,或者 host name 为链接对象,如果我们的 pod 死亡被重新创建以后它的名称发生改变了这个对于我们后面的自动化流程来说时非常不友好的。但是对于我们的 statefulset 来说它可以确保每一个 pod 它的 pod name 和 host name 在 statefulset 生命周期里完全不变),基于 headless service 无头服务实现(也就是没有 cluster IP 的 service,可以理解为没有 IP 地址和端口 )来实现

    有序部署,有序扩展:即 pod 是有顺序的,在部署或者扩展的时候要依据定义的顺序依次进行(即从 0 到 N1,在下一个 pod 运行之前所有的 pod 必须是 running 和 ready 状态),基于 init containers 来实现。好这里需要注意以下为啥是基于 init containers 而不是基于我们所谓的 start 或 stop ,原因是不管是 start 、stop 他都需要去更改我们 pod 内部的容器镜像,但是对于init containers 初始化容器来说是不需要更改的,只需要在statefulset 的 pod 里面的容器运行之前加一个 init C ,并不会对我们的原有 pod 结构发生改变。所以这是他的解决方案怎么去实现这里的 running 和 ready。

    有序收缩,有序删除(即从 N1 到 0):会发现在扩展部署的时候是 0 到 N1 的,在删除的时候 N1 到 0 的,这是一个倒序关系。我们可以观察下图:

    在这里插入图片描述

    现在我有这么一个结构,底下是我们一个数据库 mysql ,上面运行了我们一些 php-fpm,在上面运行了我们的一个 nginx 实现了我们的一个反向代理,这样的一个结构我们会发现在部署的时候应该从底往上部署。也就意味着他是先部署我们的 mysql –> php-fpm –> nginx ,这我们的部署顺序。那如果我们想把这个服务停止的话它的顺序正好是相反的,我们应该先停我们的 nginx –> php-fpm –> mysql ,这时候有可能有的朋友就会想为什么不是先停我们的 mysql , 假如我们先把 mysql 停了,那这里的 php-fpm 和 nginx 还是在运行状态。用户的请求有可能是会到我们的 nginx 那就有可能到我们的 php-fpm 就有可能报错。所以它的部署顺序和它的启动顺序恰好是相反的。

    6.2.5 job

    job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 pod 成功结束。这是什么盖脸呢,举例:我现在有这么一个脚本,这个脚本如果正常退出的话是以 0 状态码退出的,这时候 job 就会记录它的正常退出次数为 1 ,那我是可以定义 job 能够正常退出的次数。比如我们定义为 4 ,它正常退出一次我们的次数加 1 ,有运行一遍我们就加 1 变为 2 直到正常退出次数为 4 。变成4 达到我们的要求以后这个 job 成功退出。这个成功退出的含义就是这个 job 执行完成了就不需要运行了。

    job 的生命周期也就等于我们的 pod 运行至成功数目以后结束,那我们想要一个根据时间去循环的 job 的话,这时就需要借助到 cronjob 的这么一个控制器。

    那如果我们有一些类似于脚本的方案需要去执行的话,我就需要引入两个新的管理器,一个是 job 一个是我们的 Cronjob

    job 会有自己的纠错能力,也就意味着如果在里面运行的这么一个脚本没有以 0 的状态码退出的话,他会重新执行这个程序,也就意味着以 job 去实现的这么一个管理控制器,它更倾向于去以这种所谓的脚本的运行方案机制的这么一个 pod 的管理。也就意味着以 job 这么一个资源管理控制器里面去部署对应的脚本,以确保它能够正常运行。

    6.2.6 Cronjob 在特定的时间循环创建 job

    cron job 管理基于时间的 job,即:

    在给定的时间内只允许一次

    周期性地在给定时间点运行

    类似于 Linux 中的 crontab 定时计划任务。

    并且 cronjob 也是通过创建在特定时间创定 job 去实现的

    配置方案和 crontab 一摸一样 * * * * * 分、时、日、月、周

    但是运行 cronjob 有前提条件:当前使用的 K8S 集群,版本必须大于 1.8 。启动 API server 时,通过传递选项 --runtime-config=batch/v2alpha1=true可以开启 batch/v2alpha1 API**

    典型的使用方法如下所示:

    在给定的时间点调度 job 运行

    周期性的创建运行的 job,例如:数据库备份、发送邮件

    总结:

    当遇到批处理的任务,job、cronjob 是我们最好的处理方案。

    6.2.7 Horizontal pod Autoscaling (HPA 水平扩展)

    应用的资源使用率通常都有高峰和低谷的时候,如何削峰填谷,提高集群的整体资源利用率,让 service 中的 pod 个数自动调整呢?这就有赖于 HPA 了,顾名思义使 Pod 水平自动缩放。

    自动扩展,我们可以理解为它并不是一个控制器,而是一个控制器的附属品,比如我先部署了一个 RS 这时候我再去确定 HPA ,去运行管理这个 RS ,比如我先部署了一个 deployment ,我再去创建一个 HPA 去管理这个deployment。 HPA 并不是一个直接的控制器,HPA 是控制这些控制器为模板的。

    那我们为什么需要这个 HPA 控制器呢,这个 HPA 给我们实现的就是一个自动扩容缩容方案;可以居于我们的一些指标去实现,比如一些 CPU 大于百分之 80 的时候给我们扩容到 10 个节点,那 CPU 小于百分之 60 的时候就给我们恢复到 4 个节点。这里的过程就可以以 HPA 来实现,当然我们 K8s 集群本身是不支持这个功能的,他需要加一个资源收集的方案,给我们 HPA 提供一个资源性能的指标,才能帮我去做调整。

    6.2.8 总结:

    有状态服务部署至我们的 RS 、deployment 需要与我们 node 为节点部署至 daemonset ,是一些批处理任务的话部署在 job 和 cronjob,有状态服务 statefulset,以上就是我们控制器的一些类型,包括他的一些意义,以及每种控制器适合在那种情况下去运行。

    ※部分文章来源于网络,如有侵权请联系删除;更多文章和资料|点击后方文字直达 ↓↓↓ 100GPython自学资料包 阿里云K8s实战手册 [阿里云CDN排坑指南]CDN ECS运维指南 DevOps实践手册 Hadoop大数据实战手册 Knative云原生应用开发指南 OSS 运维实战手册 云原生架构白皮书 Zabbix企业级分布式监控系统源码文档 10G大厂面试题戳领

    展开全文
  • 几种控制器介绍

    2015-04-28 18:31:48
    这里一共跟大家介绍四种控制器:AbstractController、CommandContorller(命令控制器)、FormController(表单控制器)、WizardFormController(向导表单控制器)。
  • 控制器

    2019-06-15 16:58:36
    答:控制器是控制电机转速的部件,也是电动车电动系统和核心,具有欠压、限流或过流保护功能,智能控制器还具有多种骑行模式和整车电器部件自检功能,控制器是电动车能量管理与各种信号处理的核心部件。2、 无刷控制...
  • 【Jmeter】Jmeter:逻辑控制器

    千次阅读 2019-09-28 01:20:11
    目录 一、Logic Controller(逻辑控制器) ...二、If Controller【如果(If)控制器】 三、Transaction Controller【事务控制器】 四、Loop Controller【循环控制器】 五、While Controller【Wh...
  • cpu控制器

    千次阅读 2015-11-28 20:31:37
    CPU控制器  控制器是整个CPU的指挥控制中心,由指令寄存器IR(InstructionRegister)、程序计数器PC(ProgramCounter)和操作控制器0C(OperationController)三个部件组成,对协调整个电脑有序工作极为重要。 指令...
  • CPU(控制器) 目录 CPU(控制器) 8.1 CPU的基本功能与组成(8.1) 储存数据的 存储地址和存数据的结构上属于内存,放到CPU是为了速度快 8.2 时序系统和控制方式(8.2 8.3 9) 8.3 控制器:组合逻辑设计(10...
  • 控制器(Controller):操作容器,比如Deployment,是k8s第一个重要的设计思想,叫作控制器模式 kube-controller-manager:一系列控制器的集合 $ ls -d kubernetes/pkg/controller/ deployment/ job/ podautoscaler/...
  • k8s--控制器

    2020-07-03 16:52:52
    控制器管理的 Pod:在控制器的生命周期里,始终要维持 Pod 的副本数目 • 控制器类型: • Replication Controller和ReplicaSet • Deployment • DaemonSet • StatefulSet • Job • CronJob • HPA全称Horizontal...
  • 1.控制器 Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无效,则会重新新建pod的资源。 pod分类和控制器类型 Pod的分类: 自主式Pod:...
  • 关于多级控制器和分层控制器希望大家不要被名称所困扰,这两个概念我更希望通过目录结构的改变来给大家说明。只是控制器所在的位置不同而已。 点击进入视频教程分层控制器中所定义的控制器其实是不能被URL直接访问...
  • 比例谐振(PR)控制器的学习过程记录

    万次阅读 多人点赞 2018-09-27 22:43:17
    1、PR控制器和PI控制器对比 1.1 传递函数表达式对比 1.2 波特图对比 2、离散化预备知识 2.1 离散化表达式 2.2 离散化方法 2.3 离散化练习题 3. 使用Matlab离散PR控制器 4、逆变器仿真模型中使用PR闭环控制器...
  • tp php 获取控制器控制器方法

    万次阅读 2020-07-06 10:15:12
    php 权限控制器等获取 php 获取文件名(获取控制器,通过读目录的方式) $planPath = APP_PATH.$modules[$type]['name'].'/controller'; $planList = array(); $dirRes = opendir($planPath); while($dir = readdir($...
  • 浅谈父子控制器

    千次阅读 2016-11-12 08:36:53
    一个控制器通过addChildViewController:方法添加多个控制器,被添加的控制器称为子控制器,添加多个子控制器控制器称为父控制器。 二. 父子控制器关系有什么作用? (1). 父控制器处理的事件会自动传给子控制器 ...
  • 新能源整车控制器VCU开发过程分享

    万次阅读 多人点赞 2018-09-02 20:10:14
    一、一款合适的整车控制器需要正确的输入,一般车型不一样整车控制器的接口需求也不一样,因为整车控制器开发周期比较长,所以在整车控制器的研发起始阶段要考虑,所研发的整车控制器要有一定的兼容性,能适应较多...
  • 相信许多PHP开发者在使用ThinkPHP框架进行...你的Controller文件夹下没有存放你控制器的文件,因为很可能你在开始学习或者测试的时候将控制器类写在了Index控制器的文件中,但是在ThinkPHP中,在IndexController.cla
  • thinkphp5多级控制器及其使用

    千次阅读 2017-08-21 19:02:41
    多级控制器其实就是对控制器的一个分组。比如我们的一个商城系统中有负责商品相关操作的Goods.php控制器 负责商品积分的控制器Score.php控制器。如果公司将这两个业务归于一个开发部门管理的。那么为了结构不那么乱...
  • 前端控制器模式

    千次阅读 2019-09-25 20:02:37
    前端控制器模式(Front Controller Pattern)是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理。该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下...
1 2 3 4 5 ... 20
收藏数 2,075,408
精华内容 830,163
关键字:

控制器