自主式pod对象由调度器绑定至目标工作节点后即由相应节点上的kubelet负责监控其容器的存活性,容器主进程崩溃后,kubelet能够自动重启相应的容器。不过,kubelet对非主进程崩溃类的容器错误却无感知,这依赖于用户为pod资源对象自定义的存活性探测机制,以便kubelet能够探知到此类故障。然而,在pod对象遭到意外删除,或者工作节点自身发生故障时,又该如何处理呢。

kubelet时k8s集群节点代理程序,它在每个工作节点上都运行着一个实例。因而,集群中的某工作几点发生故障时,其kubelet也必将不再可用,于是,节点上的pod资源的健康状态将无法得到保障,也无法再由kubelet重启。此种场景中的pod存活性一般要由工作节点之外的pod控制器来保证。事实上,遇到意外删除的pod资源的恢复也依赖于其控制器。

pod控制器由master的kube-controller-manager组件提供,常见的此类别的控制器有ReplicationController、ReplicaSet、Deployment、DaemonSet、StatefulSet、Job和ConJob等,它们分别以不同的方式管理pod资源对象。

一、pod控制器概述

master的各组件中,apiserver仅负责将资源存储于etcd中,并将其变动通知给各相关的客户端程序,如kubelet、kube-scheduler、kube-porxy和kube-controller-manager等,kube-scheduler监控到处于未绑定状态的pod对象出现时遂启动调度器为其挑选适配的工作节点,然而,k8s的核心功能之一还在于要确保各资源对象的当前状态以匹配用户期望状态,使当前状态不断地向期望状态和解来完成容器应用管理,而这些则是kube-controller-manager的任务。kube-controller-manager是一个独立的单体守护进程,然而它包含了众多功能不同的控制器类型分别用于各类和解任务。

创建为具体的控制器对象后,每个控制器均通过apiserver提供的接口持续监控相关资源对象的当前状态,并在因故障、更新或其他原因导致系统状态发生变化时,尝试让资源的当前状态向期望状态迁移和逼近。简单来说,每个控制器对象运行一个和解循环负责状态和解,并将目标资源对象的当前状态写入到其status字段中。

List-Watch时k8s实现的核心机制之一,在资源对象的状态发生变动时,由api server负责写入etcd并通过水平触发机制主动通知给相关的客户端程序以确保其不会错过任何一个事件。控制器通过api server的watch接口实时监控目标资源对象的变动并执行和解操作,但并不会与其他控制器进行任何交互,甚至彼此之间根本就意识不到对方的存在。

工作负载一类的控制器资源类型包括ReplicationController、ReplicaSet、Deployment、DaemonSet、Job和ConJob等,它们分别代表了一种类型的pod控制器资源。

二、控制器与pod对象

pod控制器资源通过持续性地监控集群中运行着的pod资源对象来确保受其管控的资源严格符合用户期望的状态,例如资源副本的数量要精确符合期望等。通常一个pod控制器资源至少应该包含三个基本的组成部分。

标签选择器:匹配并关联pod资源对象,并根据此完成受其管控的pod资源计数

期望的副本数:期望在集群中精确运行着的pod资源的对象数量

pod模板:用于新建pod资源对象的pod模板资源。

三、pod模板资源

PodTemplate是k8s api的常用资源类型,常用于为控制器指定自动创建pod资源对象时所需的配置信息。因为要内嵌于控制器中使用,所以pod模板的配置信息中不需要apiVersion和kind字段,但除此之外的其他内容与自定义自主式pod对象所支持的字段几乎完全相同,这包括metadata和spec及其内嵌的其他各个字段。pod控制器类资源的spec字段通常都要内嵌replicas、selector和template字段,其中template即为pod模板的定义。如下:

apiVersion: apps/v1
kind: ReplicaSet
matadata:
name: rs-example
spec:
replicas:
selector:
matchLabels:
app: rs-demo
template:
matadata:
labels:
app: rs-demo
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort:

k8spod控制器概述的更多相关文章

  1. K8s-Pod控制器

      在K8s-Pod文档中我们创建的Pod是非托管的Pod,因为Pod被设计为用后就弃的对象,如果Pod正常关闭,K8s会将该Pod清除,它没有自愈的能力.Pod控制器是用来保持Pod状态的一种对象资 ...

  2. LPC1768/1769之CAN控制器概述(附库函数下载地址)

    一.背景: 使用LPC1769来做CAN的收发,在此对使用LPC1769的CAN控制器进行收发做个总结和记录,以备下 次开发快速上手使用. 附:LPC1768/1769除了支持最高频率不同以外,其它基 ...

  3. Git——版本控制器概述

    一.版本控制 版本控制(Revision contontrol)是一种在开发过程中用于管理修改历史,方便查看更改历史记录,备份以便恢复以前版本的软件工程的技术. 1.实现跨区域多人协同开发 2.追踪和 ...

  4. UISplitViewController - iPad分屏视图控制器

    UISplitViewController - 分屏视图控制器 概述 UISplitViewController 是一个容器vc, 展示一个 master-detail(主-详(从))界面. 主视图改 ...

  5. ##DAY3 自定义视图、视图控制器、视图控制器指定视图、loadView、 viewDidLoad、MVC、屏幕旋转、内存警告

    ##DAY3 自定义视图.视图控制器.视图控制器指定视图.loadView. viewDidLoad.MVC.屏幕旋转.内存警告 #pragma mark ———————自定义视图的步骤 —————— ...

  6. ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC控制器简介 ASP.NET Core MVC控制器操作简介 ASP.NET Core MVC控制器操作简介返回类型简介 ASP.NET C ...

  7. Controller控制器

    控制器概述 上接应用(北向),下接设备(南向),左右扩展(东西接口). 谁掌控了控制器,或者制定了标准,就掌握了SDN. 南向功能:通过Openflow等南向接口技术,对网络设备进行管控,例如拓扑发现 ...

  8. (六)Kubernetes Pod控制器-ReplicaSet和Deployment和DaemonSet

    Pod控制器相关知识 控制器的必要性 自主式Pod对象由调度器调度到目标工作节点后即由相应节点上的kubelet负责监控其容器的存活状态,容器主进程崩溃后,kubelet能够自动重启相应的容器.但对出 ...

  9. ASP.NET Core 入门笔记5,ASP.NET Core MVC控制器入门

    摘抄自https://www.cnblogs.com/ken-io/p/aspnet-core-tutorial-mvc-controller-action.html 一.前言 1.本教程主要内容 A ...

随机推荐

  1. LeetCode.1078-两词出现后的单词(Occurrences After Bigram)

    这是小川的第392次更新,第422篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第254题(顺位题号是1078).给出单词first和单词second,以"fi ...

  2. PJzhang:一道看线索找答案的逻辑题

    猫宁!!! 这道逻辑题,2年前就有打算解决,但是没上心,今天抽空梳理出来了思路,逻辑上可以跑的通,不至于以后慢慢忘了,这道题和数独题基本类似,但是也许更花时间,做这种题最好看着线索列图标,省的不停翻页 ...

  3. jmeter性能测试总结

    一.性能测试问题记录: Ⅰ.秒杀的失败率了在96.45%,原因 Query对于 活动的秒杀采用的是0.5秒,刷新缓存的策略在活动中优惠券被秒杀一空 下架前,短暂的时间内仍能够查询到 这个活动架构中采用 ...

  4. 引用Nuget包Microsoft.EntityFrameworkCore.Tools.DotNet报错

    错误如下 解决方法 使用VS2017或更高版本在改项目右键,选择“编辑xxx.csproj”,并添加如下一句话,就可以成功引用改Nuget包 <PackageReference Include= ...

  5. DES、AES和RSA加密算法

    DES加密算法简介 DES(Data Encryption Standard)是目前最为流行的加密算法之一(它是分组密码). 强加密使用的基本操作 -> 混淆与扩散 混淆:是一种使密钥与密文之间 ...

  6. kettle An error occurred, processing will be stopped: 错误 解决方法

    上午在使用KETTLE时,报了一个 An error occurred, processing will be stopped: 错误,手动跑没有问题,用jekens调用就报错. 具体原因不清楚,后面 ...

  7. 小记--------spark内核架构原理分析

      首先会将jar包上传到机器(服务器上)     1.在这台机器上会产生一个Application(也就是自己的spark程序)     2.然后通过spark-submit(shell) 提交程序 ...

  8. 关于springcloud hystrix 执行 hystrix.stream 跳转失败的问题

    经过观看网友的总结:应该时版本的问题.某些版本没有对/hystrix.stream进行配置 所以解决方案(网友答案): 需要配置类配置下面 @Bean public ServletRegistrati ...

  9. JavaRMI框架

     RMI(即Remote Method Invoke 远程方法调用).在Java中,只要一个类extends了java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一 ...

  10. # 关于设置AUTH_USER_MODEL出现的问题

    关于设置AUTH_USER_MODEL出现的问题 在运行的时候出现了一个bug: AttributeError: type object 'UserProfile' has no attribute ...