1 API Server

1.1 提供集群管理的API接口

  • API Server在kubernetes中的进程名为apiserver,运行在Master节点上
  • apiserver开放两个端口
    • 本地端口,默认8080
    • 安全端口,默认6443,接受Https,用于基于Token以及策略的授权
  • Kubectl Proxy作为API Server的反向代理,也能作为普通客户端访问API Server
  • 命令行工具kubectl用来将API Server的API包装成建档的命令集

1.2 成为集群内各个功能模块之间数据交互和通信的中心枢纽

  • 集群内的功能模块通过API Server将信息存入etcd,其他模块通过API Server读取这些信息,从而实现模块之间的信息交互
  • 为了缓解各模块对API Server的访问压力,各个功能模块都采用缓存的机制来缓存数据,各模块定时从API Server获取指定资源对象信息(list及watch方式),功能模块不直接访问API Server

1.3 拥有完备的集群安全机制

后续安全章节

2 Controller Manager

其为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务帐号(ServiceAccount)、资源定额(ResourceQuota)等的管理并执行自动化修复流程

2.1 Replication Controller

作用: 确保在任何时候集群中一个RC所关联的Pod都保持一定数量的Pod副本处于正常运行状态

  • Pod对象被成功创建后不会消失,用户或RC会销毁Pod对象,唯一例外是当Pod处于succeeded或failed状态时间过程时,该Pod将被系统自动回收
  • 当Pod状态编程failed或被删除,且其RestartPolicy=Always时,管理该Pod的副本控制器将在其他Node上重新创建运行该Pod
  • Pod可以通过修改Label来实现脱离RC的管控,该方法可以用于将Pod从集群中迁移、数据修复等调试
  • 通过调整RC的spec.replicas的属性来调整Pod的副本数量
  • RC的使用模式:
    • 重新调度,保证Pod的副本数量
    • 弹性伸缩,手动或通过自动扩容代理修改RC的spce.replicas的值
      kubectl scale --replicas=3 replicationcontroller foo//设置foo的RC副本
    • 滚动更新,RC被设计成通过逐个替换Pod的方式来辅助服务的滚动更新

2.2 Node Controller

作用: 负责管理、发现和监控集群中的各个Node节点

  • Kubelet在启动时通过API Server注册节点信息,并定时向API Server发送节点信息,API Server将接受的信息存入etcd
  • Node Controller通过API Server定期读取信息,并做如下处理:
    1. Controller Manager在启动时如果设置了--cluster-cdir参数,则每个设置了spec.PodCIDR的Node生成一个CIDR地址
    2. 逐个读取节点信息,将节点信息和Node Controller的nodeStatusMap中保存的节点信息做比较。
      • 没收到节点信息、第一次收到节点信息、处理过程中节点状态变成非健康状态、在指定时间内收到新节点信息且节点状态发生变化,用Master节点的系统时间作为探测时间和节点状态变化时间
      • 在指定时间内收到新的节点信息,但节点状态没改变,用Master节点的系统时间作为探测时间,用上次节点信息中的节点状态状态改变时间作为该节点的状态改变时间
    3. 如果某一段时间内没有收到节点状态信息,则置该节点状态为“未知”
    4. 如果节点状态为非就绪状态,则将节点加入到待删除队列否则从该队列中删除。如果系统指定Cloud Provider则Node Controller调用Cloud Provider查看节点,发现节点故障则删除etcd中节点信息,并删除该节点相关的Pod等资源信息

2.3 ResourceQuota Controller

作用: 资源配置管理确保指定的对象在任何时候都不会超量占用系统资源

  • 三个层次的资源配额管理:

    • 容器级别,对CPU与Memory进行限制
    • Pod级别,对一个Pod内所有容器的可用资源限制
    • Namespace级别,现在该Namespace下的Pod、Replication Controller、Service、ResourceQuota、Secret和可持有的PV(Persistent Volume)
  • 配额管理通过准入机制(Admission Control)实现,与配额相关的两种准入控制器是LimitRanger与ResourceQuota,前者作用与Pod和Container后者作用于Namespace
  • 所有Pod、Service、RC、Secret和Persistent Volume资源对象的实时状态通过API Server保存到etcd,ResourceQuota Controller在计算资源使用总量时会用到这些信息
  • 用户通过API Server请求创建或修改资源时,API Server会调用Admission Controller的ResourceQuota插件,其将读取etcd中的统计结果,如果某项资源超出配额,则将拒绝执行

2.4 Namespace Controller

  • 通过API Server创建Namespace并保存到etcd,Namespace Controller定时读取Namespace信息
  • 当Namespace被标识为优雅删除(设置删除期限,DeletionTimestamp属性被设置),则将其状态设置为Terminating,同时删除其下的所有对象
  • 当状态为Terminating时由Adminssion Controller的NamespaceLifecycle插件阻止为该Namespace创建新资源
  • Namespace Controller为其删除完所有资源对象后,将对其执行finalize操作,删除Namespace的spec.finalizers域中的信息

2.5 ServiceAccount Controller与Token Controller

ServiceAccount Controller 在Controller Manager启动时被创建,其监听Service Account的删除事件和Namespace的创建、修改事件

Token Controller 监听Service Account和Secret的创建、修改和删除事件,并根据事件的不同做不同处理

2.6 Service Controller与Endpoint Controller

Service 定义Pod集合的抽象,或者被访问者看作一个访问策略,也可称为微服务

Service Controller 监控Service的变化,如果是LoadBalancer类型则需确保外部LoadBalancer被相应创建与删除

Endpoint Controller 通过Store来缓存Service和Pod信息,监控Service和Pod的变化

  • Kubernetes中Service是一种资源对象通过标签选择器选择Pod
  • 如果Service指定了标签选择器,系统将自动创建一个和该Service同名的Endpoint资源对象,其包含一个地址和端口集合,地址与端口即被选择的Pod的
  • 通过虚拟IP访问后端Pod
    • kube-proxy进程会观察Master上添加和删除Service和Endpoint的行为
    • kube-proxy为每个Service在本地主机开一个端口,任何访问该端口的连接都被代理到相应的Pod(选择Pod依据Round Robin算法及Service的Session粘连决定)
    • kube-proxy在本机Iptables安装相应规则,将捕获的流量重定向到上一步中的随机端口
  • Kubernetes会为Service制定一个集群Ip
  • Kubernetes支持容器的Service环境变量和DNS两种形式来查找Service的集群IP
  • Service暴露外网ip可以通过NodePort和LoadBalancer两种模式

3 Scheduler

作用: 在于将待调度的Pod通过一些复杂的调度流程绑定到某个合适的Node上,并写入etcd

  • 主要涉及待调度Pod列表、可用Node列表和调度算法和策略
  • Kubernetes提供的默认调度流程:
    1. 预选调度过程,遍历所有目标Node,筛选出符合要求的候选节点
    2. 确定最优点,基于候选节点,采用优选策略计算出每个候选节点的积分,积分最高者获胜
  • 预选策略
    • NoDiskConflict,判断备选Pod的GCEPersistentDisk或AWSElasticBloackStore和备选的节点中已存的Pod是否存在冲突
    • PodFitsResources,判断节点的资源是否满足Pod的需求
    • PodSelectorMatches,节点是否包含备选pod的标签选择器指定的标签
    • PodFitsHost,判断备选Pod的spec.nodeName所指定的节点名称和备选节点名称是否一致
    • CheckNodeLabelPresence,判断策略列出的标签在备选节点中存在时,是否选择该备选节点
    • CheckServiceAffinity,判备选节点是否包含策略指定的标签或包含和备选Pod在相同Service和Namespace下的Pod所在节点的标签列表
    • PodFitsPorts,判断备选Pod所用端口列表中的端口是否在备选节点中已被占用
  • 优选策略,每个节点通过优选策略都会算出一个得分,计算各项总分,分值最大的最优
    • LeastRequestedPriority,从备选节点列表中选出资源消耗最小的节点
    • CalculateNodeLabelPriority,判断策略列出的标签在备选节点中存在时,是否选择该备选节点
    • BalancedResourceAllocation,从备选节点列表中选出各项资源使用率最均衡的节点

《Kubernetes权威指南》——组件原理的更多相关文章

  1. 《Kubernetes权威指南》——网络原理

    1 Kubernetes网络模型 基本原则:每个Pod都拥有一个独立IP,而且假定所有Pod都在一个可以直接连通的.扁平的网络空间中. 基于基本原则,用户不需要额外考虑如何建立Pod之间的连接,也不需 ...

  2. 《Kubernetes权威指南》——Kubelet运行机制与安全机制

    1 Kubelet运行机制 Kubenetes集群中的每个Node节点都会启动一个Kubelet服务进程用于处理Master下发到该节点的任务,管理Pod及其中的容器 Kubelet进程在API Se ...

  3. 《Kubernetes权威指南》——入门

    1 Hello World 1.1 概述 搭建一个Web留言板应用,采用PHP+Redis. Redis由一个master提供写和两个slave提供读. PHP构成的前端Web层由三个实例构成集群,访 ...

  4. Kubernetes权威指南学习笔记(一)

    https://blog.csdn.net/keysilence1/article/details/70239717 概念 Kubernetes是谷歌严格保密十几年的秘密武器——Borg的一个开源版本 ...

  5. 《Kubernetes权威指南第2版》学习(四)kubernetes基本概念和术语

    1: etcd是干什么的: 键-值存储仓库,用来配置共享和服务发现. k8s把Node, pod,replication controller, Services看做是资源对象,这些资源对象可以通过K ...

  6. Kubernetes权威指南 第一章:Kubernetes入门

    Kubernetes是什么 官网 https://kubernetes.io/ 中文版:https://kubernetes.io/zh/ Kubernetes是谷歌十几年大规模容器管理经验的成果 是 ...

  7. 《Kubernetes权威指南》——运维技巧

    1 Node的隔离和恢复 方法1: 创建新的Node配置文件指定spec.unschedulable: true 通过kubectl replace完成对Node的状态修改 kubectl repla ...

  8. 《Kubernetes权威指南第2版》学习(三)RC学习

    1 RC文件介绍: kind: ReplicationController,表示是一个RC: spec.selector:  RC的Pod标签(Label)选择器,监控和管理拥有这些标签的Pod实例, ...

  9. 《Kubernetes权威指南第2版》学习(二)一个简单的例子

    1: 安装VirtualBox, 并下载CentOS-7-x86_64-DVD-1708.iso, 安装centOS7,具体过程可以百度. 2:开启centOS的SSH, 步骤如下: (1) yum ...

随机推荐

  1. 281. Zigzag Iterator z字型遍历

    [抄题]: Given two 1d vectors, implement an iterator to return their elements alternately. Example: Inp ...

  2. 【转载】我为什么弃用OpenStack转向VMware vsphere

    我为什么弃用OpenStack转向VMware Vsphere,一切皆为简单.高效.因为我们在工作过程中涉及到大量的测试工作,每天都有成百个虚拟机的创建和销毁工作. 工作任务非常繁重,我们的持续集成平 ...

  3. node.js中使用 http-proxy 创建代理服务器

    代理,也称网络代理,是一种特殊网络服务,允许一个终端通过代理服务与另一个终端进行非直接的连接,这样利于安全和防止被攻击. 代理服务器,就是代理网络用户去获取网络信息,就是信息的中转,负责转发. 代理又 ...

  4. dtruss

    一.简介 系统调用跟踪工具.   二.实例

  5. centos 7安装java开发环境

    https://jingyan.baidu.com/article/29697b91660672ab20de3c15.html 自带版本是有问题的~

  6. Fabric的权限管理:Attribute-Based Access Control

    之前稍微了解过Client Identity Chaincode Library,这几天正好开始实际应用. 虽然了解过,还是发现了不少之前理解的不足,也踩了不少坑. 先列出官方介绍: https:// ...

  7. POI2014解题报告

    穷酸博主没有bz权限号, 也不会去$poi$官网, 在某咕刷的$poi$,按照某咕的难度排序刷, poi~ $Luogu3572 PTA-Little Bird$ 单调队列, 队列内按照 步数为第一关 ...

  8. cpp 区块链模拟示例(六) 交易

    交易(transaction)是比特币的核心所在,而区块链的唯一目的,也正是为了能够安全可靠地存储交易.在区块链中,交易一旦被创建,就没有任何人能够再去修改或是删除它.在今天的文章中,我们会实现交易的 ...

  9. HQL数据查询基础

    HQL定义 1.Hibernate Query Language, Hibernate查询语言 2.HQL是面向对象的查询语言(HQL查询的主体是映射配置的持久化类及其属性而SQL查询主体是数据库表) ...

  10. sql server中replace()函数用法解析

    知识点一:replace()的语法 REPLACE ( string_replace1 , string_replace2 , string_replace3 ) 参数解析: string_repla ...