K8s(Kubernetes)架构笔记
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)架构笔记相关推荐
- kubernetes学习笔记 (二):k8s初体验
本文采用本地k8s v1.10.3版本开发,如果还没有搭建可参照 kubernetes学习笔记 (一):搭建本地k8s开发环境进行搭建 搭建本地Docker镜像仓库 docker pull docke ...
- K8s (Kubernetes简介、特性、架构)
Kubernetes 文章目录 Kubernetes 1 Kubernetes 概述 1.2 Service分布式集群架构核心 1. 3 Kubernetes优势: 2 Kubernetes的核心概念 ...
- kubernetes(K8S)学习笔记P6:K8s集群|java项目部署
kubernetes(K8S)学习笔记P6:K8s集群|java项目部署 8.集群资源监控 8.1概述 8.2搭建集群监控平台系统 8.2.1部署prometheus 8.2.3部署Grafana 8 ...
- Kubernetes学习笔记-未整理
Kubernetes学习笔记 标签:Kubernetes 学习笔记 原文:https://github.com/wtysos11/NoteBook/blob/master/微服务/Kubernetes ...
- Kubernetes学习笔记
Kubernetes学习笔记 1.简介 用于自动部署.扩缩和管理容器化应用程序的开源系统,支持自动化部署.大规模可伸缩. 2.架构 2.1.Control Plane 对集群做出全局决策 Contro ...
- Kubernetes学习笔记【2年以前的笔记】
Kubernetes学习笔记 知识储备 熟悉linux基础命令 熟悉docker的基本原理和操作 了解ssl证书工作原理 了解负载均衡工作原理(L4/L7) 了解分布式概念 了解域名解析原理 了解网络 ...
- Kubernetes学习笔记(一)
2019独角兽企业重金招聘Python工程师标准>>> Kubernetes学习笔记(一) 博客分类: Kubernetes 导语 2015年4月,传闻已久的Borg论文伴随Kube ...
- 4天搞定Docker和k8s核心架构,稳拿35k不是问题?
随着云原生时代的到来,各大厂纷纷上云,甚至有人说,未来的软件就是生在云上,长在云上的.在这种云原生时代大势下,衍生出来的 Kubernetes 工程师.云原生工程师的薪资也水涨船高,大厂不惜花重金聘请 ...
- Kubernetes学习笔记之Calico CNI Plugin源码解析(一)
女主宣言 今天小编为大家分享Kubernets Calico CNI Plugin的源码学习笔记,希望对正在学习k8s相关部分的同学有所帮助: PS:丰富的一线技术.多元化的表现形式,尽在" ...
最新文章
- linux 用dd将iso写入U盘
- Google 顶级论文:机器学习系统,隐藏多少技术债?
- 允许使用抽象类类型 isearchboxinfo 的对象_Java面向对象编程三大特征 - 多态
- 12行代码AC——试题 算法训练 猴子吃包子——解题报告
- FreeBSD9.1安装Gnome2桌面
- vmware安装ubuntu
- matlab ode45求解齿轮动力学,ode45求解多自由度动力学方程实例.doc
- php mysql导入excel_如何从PHP导入Excel文件到mysql数据库
- 【vue】 生命周期
- 操作系统 读者-写者问题
- Matlab实现光栅实验
- 经验谈:写给新手的反激变压器KRP详解
- Influx Sql系列教程三:measurement 表
- 鼠标连接在计算机,鼠标怎么连接在电脑上
- 正则表达式判断手机号码运营商
- Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划
- 使用HSL连接欧姆龙PLC配置
- 解决报错 “App” is damaged and can’t be opened. You should move it to the Trash (Mac)
- 浅谈PS CC 2020——适合新手学习的最新版软件
- 达内计算机软件测试,达内软件测试培训让我拥有了实际工作经验
热门文章
- 大话C#的进阶业务场景必知点解析 第8节 算法上道C#根据时间起卦像程序
- iMeta | 林雁冰/James M. Tiedje/谷洁等揭示菌群对寄生植物列当的调控作用
- 【环境问题】基础Web环境搭建问题记录2——Failed to obtain JDBC Connection;
- python数组堆叠,堆叠数组-python数据处理
- 钉钉(工作协同)应用之前端源码赏析
- 什么是Hosts文件以及如何修改Hosts文件
- 机器学习与各种技术之间的关系
- 蒸发器,冷凝器面积过大
- Pandas DataFrame入门教程(图解版)
- no free lunch