K8s满足的需求

K8s的主要职责是容器编排(Container Orchestration),即在一组服务器上启动、监控、回收容器,在满足排程的同时,保证容器可以健康的运行。

K8s架构的概念/术语

学习K8s架构之前,需要了解一些K8s特有的概念:

  • Cluster 集群 K8s可利用的主机、存储和网络资源的集合。
  • Node 结点 单台主机,可以是物理的或虚拟的计算机。结点分为主结点(master)和工作结点(worker)。
  • Pod K8s中的工作单元,K8s是以Pod而非容器为单位排程的。Pod可以理解为Docker单机环境,每个Pod中包含一至多个容器,总是被启动在一个结点;一个Pod的容器在K8s集群中有相同的地址和端口范围,即容器暴露于K8s集群的端口号不可重复。

K8s架构概览

K8s集群由主结点工作结点两类结点构成。其中主结点上运行着K8s Control Plane,控制并管理着整个K8s系统;工作结点上运行用户实际部署到K8s应用。

K8s的结点上运行着一些组件,共同协作以完成容器编排,其中主要的组件有:

  • etcd 一款开源软件。提供可靠的分布式数据存储服务,用于持久化存储K8s集群的配置和状态。
  • K8s API server 用户程序(如kubectl)、K8s其它组件之间通信的接口。K8s其它组件之间不直接通信,而是通过API server通信的。这一点在上图的连接中可以体现,例如,只有API server连接了etcd,即其它组件更新K8s集群的状态时,只能通过API server读写etcd中的数据。
  • Scheduler 排程组件,为用户应用的每一可部署组件分配工作结点。
  • Controller Manager 执行集群级别的功能,如复制组件、追踪工作结点状态、处理结点失败等。Controller Manager组件是由多个控制器组成的,其中很多控制器是按K8s的资源类型划分的,如Replication Manager(管理ReplicationController 资源),ReplicaSet Controller,PersistentVolume controller。
  • kube-proxy 在应用组件间负载均衡网络流量。
  • Kubelet 管理工作结点上的容器。
  • Container runtime Docker, rkt等实际运行容器的组件。

在K8s中运行一个容器应用

下面通过运行一个容器应用的过程,来一起理解一下K8s组件是如何协作的。

开发者开发一个应用后,打包Docker镜像,上传到Docker registry;然后编写一个yaml部署描述文件,以描述应用的结构和资源需求。开发者通过kubectl(或其它应用),将部署描述文件提交到API server,API server将部署需求更新到etcd。etcd在K8s管理结点中的作用相当于数据库,其它组件提交到API server的数据都存储于etcd。API server非常轻量,并不会直接去创建或管理Pod等资源,在多数场景下甚至不会去主动调用其它的K8s组件发出指令。其它组件通过建立和API server的长连接,监视关心的对象,监视到变化后,执行所负责的操作。

继续我们的启动应用之旅,如图所示,Controller Manager中的控制器监视到新的部署描述后,根据部署描述,创建ReplicaSet、Pod等资源。Scheduler监视到新的Pod资源后,结合集群的资源情况,选定一或多个工作结点运行Pod。工作结点上的Kubelet监视到有Pod被计划在自己的结点后,向Docker等Container runtime发出启动容器的指令,Docker engineer将按照指令从Docker registy拉取镜像,然后启动并运行容器。

K8s集群的高可用部署

通过之前的介绍,我们看到K8s可以在多个工作结点上启动并管理容器,下面来学习一下,如何实现管理结点的高可用部署。

上图的K8s高可用部署中有3个管理结点。etcd自身是一个分布式数据存储系统,按照其多实例部署方案,结点只需在启动时知道其它结点的IP和端口号即可组成高可用环境。和通常的应用服务器一样,API Server是无状态的,可以运行任意多个实例,且彼此之间无需互相知道。为了能使kubectl等客户端和Kubelet等组件连接到健康的API Server、减轻单台API Server的压力,需使用基础架构提供的负载均衡器作为多个API Server实例的入口。如上图的部署方法,每个主结点上都运行了一个etcd实例,这样API Server只需连接本地的etcd实例即可,无需再使用负载均衡器作为etcd的入口。

Controller Manager和Scheduler需要修改K8s集群,同时修改时可能引发并发问题。假设两个ReplicaSet Controller同时监视到需创建一个Pod,然后同时进行创建操作,就会创建出两个Pod。K8s为了避免这个问题,一组此类组件的实例将选举出一个leader,仅有leader处于活动状态,其它实例处于待命状态。Controller Manager和Scheduler也可以独立于API server部署,通过负载均衡器连接到多个API server实例。

参考资料

1. Mastering Kubernetes

2. Kubernetes in Action

K8s(Kubernetes)架构笔记相关推荐

  1. kubernetes学习笔记 (二):k8s初体验

    本文采用本地k8s v1.10.3版本开发,如果还没有搭建可参照 kubernetes学习笔记 (一):搭建本地k8s开发环境进行搭建 搭建本地Docker镜像仓库 docker pull docke ...

  2. K8s (Kubernetes简介、特性、架构)

    Kubernetes 文章目录 Kubernetes 1 Kubernetes 概述 1.2 Service分布式集群架构核心 1. 3 Kubernetes优势: 2 Kubernetes的核心概念 ...

  3. kubernetes(K8S)学习笔记P6:K8s集群|java项目部署

    kubernetes(K8S)学习笔记P6:K8s集群|java项目部署 8.集群资源监控 8.1概述 8.2搭建集群监控平台系统 8.2.1部署prometheus 8.2.3部署Grafana 8 ...

  4. Kubernetes学习笔记-未整理

    Kubernetes学习笔记 标签:Kubernetes 学习笔记 原文:https://github.com/wtysos11/NoteBook/blob/master/微服务/Kubernetes ...

  5. Kubernetes学习笔记

    Kubernetes学习笔记 1.简介 用于自动部署.扩缩和管理容器化应用程序的开源系统,支持自动化部署.大规模可伸缩. 2.架构 2.1.Control Plane 对集群做出全局决策 Contro ...

  6. Kubernetes学习笔记【2年以前的笔记】

    Kubernetes学习笔记 知识储备 熟悉linux基础命令 熟悉docker的基本原理和操作 了解ssl证书工作原理 了解负载均衡工作原理(L4/L7) 了解分布式概念 了解域名解析原理 了解网络 ...

  7. Kubernetes学习笔记(一)

    2019独角兽企业重金招聘Python工程师标准>>> Kubernetes学习笔记(一) 博客分类: Kubernetes 导语 2015年4月,传闻已久的Borg论文伴随Kube ...

  8. 4天搞定Docker和k8s核心架构,稳拿35k不是问题?

    随着云原生时代的到来,各大厂纷纷上云,甚至有人说,未来的软件就是生在云上,长在云上的.在这种云原生时代大势下,衍生出来的 Kubernetes 工程师.云原生工程师的薪资也水涨船高,大厂不惜花重金聘请 ...

  9. Kubernetes学习笔记之Calico CNI Plugin源码解析(一)

    女主宣言 今天小编为大家分享Kubernets Calico CNI Plugin的源码学习笔记,希望对正在学习k8s相关部分的同学有所帮助: PS:丰富的一线技术.多元化的表现形式,尽在" ...

最新文章

  1. linux 用dd将iso写入U盘
  2. Google 顶级论文:机器学习系统,隐藏多少技术债?
  3. 允许使用抽象类类型 isearchboxinfo 的对象_Java面向对象编程三大特征 - 多态
  4. 12行代码AC——试题 算法训练 猴子吃包子——解题报告
  5. FreeBSD9.1安装Gnome2桌面
  6. vmware安装ubuntu
  7. matlab ode45求解齿轮动力学,ode45求解多自由度动力学方程实例.doc
  8. php mysql导入excel_如何从PHP导入Excel文件到mysql数据库
  9. 【vue】 生命周期
  10. 操作系统 读者-写者问题
  11. Matlab实现光栅实验
  12. 经验谈:写给新手的反激变压器KRP详解
  13. Influx Sql系列教程三:measurement 表
  14. 鼠标连接在计算机,鼠标怎么连接在电脑上
  15. 正则表达式判断手机号码运营商
  16. Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划
  17. 使用HSL连接欧姆龙PLC配置
  18. 解决报错 “App” is damaged and can’t be opened. You should move it to the Trash (Mac)
  19. 浅谈PS CC 2020——适合新手学习的最新版软件
  20. 达内计算机软件测试,达内软件测试培训让我拥有了实际工作经验

热门文章

  1. 大话C#的进阶业务场景必知点解析 第8节 算法上道C#根据时间起卦像程序
  2. iMeta | 林雁冰/James M. Tiedje/谷洁等揭示菌群对寄生植物列当的调控作用
  3. 【环境问题】基础Web环境搭建问题记录2——Failed to obtain JDBC Connection;
  4. python数组堆叠,堆叠数组-python数据处理
  5. 钉钉(工作协同)应用之前端源码赏析
  6. 什么是Hosts文件以及如何修改Hosts文件
  7. 机器学习与各种技术之间的关系
  8. 蒸发器,冷凝器面积过大
  9. Pandas DataFrame入门教程(图解版)
  10. no free lunch