自主式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. Python爬虫学习==>第三章:Redis环境配置

    学习目的: 学习非关系型数据库环境安装,为后续的分布式爬虫做基建 正式步骤 Step1:安装Redis 打开http://www.runoob.com/,搜索redis安装 打开搜索的内容,得到red ...

  2. 大觅网02Day

    docker环境搭建:(注:请先完成上一次的环境搭建) A.部署环境(导入上次系统的时候修改虚拟机的内存) 1.安装系统自带版本Docker:apt-get install docker.io 2.查 ...

  3. Linux C/C++基础 文件(下)

    1.fgets和fputs #include <stdio.h> int fputs(const char * str, FILE * stream); 功能:将str所指定的字符串写入到 ...

  4. python笔记之元祖

    元祖创建使用圆括号括起来,中间元素使用逗号隔开 如:tuple1 = (1,2,3,4) tuple2 = () 空元祖 #!/usr/bin/env python #-*-coding:utf-8- ...

  5. 【go进阶】一个简单的go服务器实现

    光阴似箭,日月如梭,在昨天我终于拿到了自己忙活了半个月的工资. 据说在7月25日有一颗小行星掠过地球,如果真的撞上来,估计31号我就不是乐呵呵的了,应该是直接没了. 如下的代码运行起来就是一个微型go ...

  6. nginx配置反向代理支持session

    Nginx反向代理tomcat,很是方便,但是也有些细节的问题需要注意:今天遇到了这样一个问题,tomcat中路径“host/web1”,nginx中直接“host/”代理,这时候session就无法 ...

  7. MSF魔鬼训练营-3.5.4Nmap与渗透测试数据库

    MSF中可以直接使用db_nmap,它是namp的一个封装与NMAP用法完全一致.其执行结果会自动导入至数据库中. 当然也可以在使用 nmap 的 -oX参数输出一个XML格式的文件.这可以是你在本机 ...

  8. Elasticsearch-如何识别一篇文档

    ES-识别文档 为了识别同一个索引中的某篇文档,ES使用_uid中的文档类型和ID结合体._uid字段是由_id和_type字段组成,当搜索或者检索文档的时候总是能获得这两项信息. FengZhend ...

  9. Entity Framework常用方法及案例

    ⒈Skip(int count) 说明:跳过集合的前n个元素:延迟.即我们跳过给定的数目返回后面的结果集. ⒉Take(int count) 说明:获取集合的前n个元素:延迟.即只返回限定数量的结果集 ...

  10. xargs、chattr命令

    一.xargs:将标准输入转化成命令行参数 用法:xargs [OPTION] ... COMMAND INITIAL-ARGS ...使用参数INITIAL-ARGS运行COMMAND,并从输入中读 ...