kubernets之机理概览
一 了解kubernets的运行机理
1.1 了解架构
众所周知,kubernets的组成由2个部分组成
- kubernets 平面
- node节点 (工作节点)
控制平面的组成
- etcd 分布式的持久化存储
- apiserver 服务器
- scheduler 调度器
- controller manager 控制器管控器
工作节点的组成
- kubelet
- kubelet服务代理 (kube-proxy)
- 容器运行时(主要是docker)
其他可能出现的一些组件(非必需)
- kubernets DNS服务器
- 仪表盘
- Ingress控制器
- 容器网络接口插件
1.1.1 kubernets组建的分布式特性
若想获得完整kubernets的全部功能需要部署全部的组件,各个组件的功能和依赖如下图所示

这里可以通过以下命令来检查集群服务器的健康状态
k get componentstatuses
组件间的通信方式:
kubernets组件间不能直接通信,只能通过apiserver与etcd进行通信,例如修改某个资源状态,都是通过API服务器
单组件运行多个实例
工作节点上面的应用需要发布在单个节点上面,但是控制平面的组件却可以分布在多个节点上,etcd和apiserver可以有多个实例同时进行,但是控制器和调度器某个时间点只有一个有作用,其余的组件就只处于待命状态
组件部署形态
控制平面的组件以及一些常见的插件(网络插件以及Ingress)等这些都是以pod形式部署,而工作节点上面的kube-proxy以pod形式部署,而唯一一个不以pod部署的是kubelet
1.1.2 kubernets中与etcd相关
任何所有资源的mainifest都存储在etcd中,并且唯一能与之通信的只有apiserver,这样的好处是增加乐观锁的系统,并且etcd是kubernets中唯一的存储地方,还有一点要注意的是,由于etcd使用的是RATF算法,这种算法只有当一半以上(不含一半)的节点数能够转换到了另外一种形态的话,系统里面的存储才能够转换形态,具体细节可以查看下图所示

由于这个原因,故通常在部署高可用集群的时候经常需要部署奇数个数的节点数(3,5,7)
1.1.3 kubernets中与api服务器相关
api服务器作为kubernets里面作为k8s中心组件,其他组件或者客户端都会过来调用它,它对外提供了一个restfulapi形式的接口,支持客户端进行增删改查,并将修改后的资源持久化存储到etcd中
同时它还提供了一种一致的方式将对象存储到etcd中也对这些对象进行效验,这样客户端就无法将非法数据存储到集群中的etc中,同时还会处理乐观锁机制,对于并发的写入就不会被其他用户修改
kuberct作为客户端之一,当以json形式文件创建一个资源的时候,实际上是将数据以post形式发布到api服务器中,之后经过api服务器的多重认证写入etcd中

- 第一个需要通过就是认证插件,api服务器可以配置一个或者多个认证插件,在有请求到来的时候,API服务器会轮流调度这些插件,直到有一个能够辨别出来这个请求是谁发过来的
- 第二个需要通过的鉴权插件,这个插件的作用主要是用来鉴别这个用户是否有权限在这个命名空间里面对资源进行一些列的增删改查,这个也可以配置一到多个,之后会进入第三个插件
- 第三个需要通过的准入插件,如果创建或者修改一个资源,需要经过准入插件的认证,服务器可以同时配置很多的准入插件,在这个过程中插件会去修改或者添加资源的某些字段,甚至于拒绝对资源的修改或者创建,这个过程比较验证,需要请求能够通过所有的准入插件才能进行资源验证最后到达存储空间中,之后返回一个响应到客户端
1.1.4 服务端是如何通知客户端资源的变化情况的呢
除了之前讨论的,服务端不会多做任何其他的事情,当创建一个deployment的时候,API服务器不会去创建RS以及任何的pod,这些创建工作是经由控制器以及调度器来执行的任务,api服务器也不会去通知这些调度器以及控制器需要干啥,它做的就是启动这些控制器以及其他的组件来监听已部署资源的变更,控制平面可以请求订阅资源被创建,删除,修改等的通知,这使得组件们去执行相应的操作去完成。
客户端通过创建到API服务器的HTTP连接来监听变更,通过此连接,客户端会收到来自服务端的资源变更,服务端会在创建,修改等操作完成之后,会将更新后的资源发送给所有监听该对象的客户端中,图示描述了,一个资源创建的过程中客户端服务端等的交互过程

小技巧:可以通过以下命令来实时的监控集群中的pod变化
k get po --watch
k get po -o yaml --watch
kubernets之机理概览的更多相关文章
- InnoDB存储引擎概览
InnoDB存储引擎概览 InnoDB存储引擎以其平衡了高可靠性和高性能性而闻名遐迩,在MySQL 8.0版本中,InnoDB存储引擎是默认的存储引擎.(历史追溯从MySQL 5.5.5版本开始, ...
- Activity之概览屏幕(Overview Screen)
概览屏幕 概览屏幕(也称为最新动态屏幕.最近任务列表或最近使用的应用)是一个系统级别 UI,其中列出了最近访问过的 Activity 和任务. 用户可以浏览该列表并选择要恢复的任务,也可以通过滑动清除 ...
- Atitit 软件工程概览attilax总结
Atitit 软件工程概览attilax总结 1.1. .2 软件工程的发展 进一步地,结合人类发展史和计算机世界演化史来考察软件工程的发展史. 表2 软件工程过程模型 表2将软件工程的主要过程模型做 ...
- Kubernets搭建Kubernetes-dashboard
接上篇文章,在已经部署好Kubernetes的基础上部署kubernetes-dashboard,它是官方提供的用户管理Kubernets集群可视化工具:部署dashboard其实和在kubernet ...
- iOS开发系列—Objective-C之基础概览
概览 前面我们已经用了几章内容进行C语言介绍,当然要通过几篇文章完整的介绍C语言的知识是不太现实的,例如C语言的文件操作.内存申请等我们都没有重点介绍,当然核心知识点基本都已经提到了,后面有时间我们会 ...
- iOS开发系列--IOS程序开发概览
概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...
- Azure SQL Database (19) Stretch Database 概览
<Windows Azure Platform 系列文章目录> Azure SQL Database (19) Stretch Database 概览 Azure SQL Da ...
- Web前端开发大系概览 (前端开发技术栈)
前言 互联网建立50多年了,网站开发技术日新月异,但web前端始终离不开浏览器,最终还是HTML+JavaScript+CSS这3个核心,围绕这3个核心而开发出来大量技术框架/解决方案. 我从2000 ...
- Atitit.自然语言处理--摘要算法---圣经章节旧约39卷概览bible overview v2 qa1.docx
Atitit.自然语言处理--摘要算法---圣经章节旧约39卷概览bible overview v2 qa1.docx 1. 摘要算法的大概流程2 2. 旧约圣经 (39卷)2 2.1. 与古兰经的对 ...
随机推荐
- Navicat Primium连接数据库报ORA-28547错误
这个问题主要是Navicat Primium与orecal中的oci.dll版本不一致造成的,无论是本地数据库或者网络数据库. 解决方法:在数据库orecal安装目录中搜索oci.dll文件,找到后将 ...
- springmvc中使用文件下载功能
项目代码:https://github.com/PeiranZhang/springmvc-fileupload 使用文件下载步骤 对请求处理方法使用void或null作为返回类型,并在方法中添加Ht ...
- sqlmap进阶篇—POST注入三种方法
测试是否存在post注入 第一种方法 直接加--form让它自动加载表单 第二种方法 把form表单里面提交的内容复制出来,放到data中跑 第三种方法 先用burp suite抓包,把包的内容存到本 ...
- nodeJS中的事件机制
events模块是node的核心模块,几乎所有常用的node模块都继承了events模块,比如http.fs等.本文将详细介绍nodeJS中的事件机制 EventEmitter 多数 Node.js ...
- C#动态实体集的反序列化(动态JSON反序列化)
一.使用场景 我们在将 JSON 反序列化实体集的时候,如果字段是固定的,那么我们序列化非常简单,对应字段写的实体集就可以了.比如下面这种: { "data":[ { " ...
- C# 托管与非托管类型 堆和栈 值类型与引用类型 装箱与拆箱
一.托管类型与非托管类型 1.托管类型 托管类型包括 引用类型 以及 包含有引用类型或托管类型成员的结构. 引用类型 含引用类型或托管类型成员(字段.自动实现 get 访问器的属性)的结构 // 托管 ...
- 使用CodeSmith编写ADO.Net三层
说明 自本文发布日起,发现和完善了编写的CodeSmith几处代码. 故,不再直接在文章添加代码,最新代码参见GitHub https://github.com/catbiscuit/CodeSmit ...
- List集合转JSONObject
以前写代码喜欢用Map拼接返回去给前端,这样得到的也是一个标准的JSON,今天先不说Map的优缺点,我们就来说说JSONObject的使用,我用的是阿里的fastjson,先上代码,当我们需要嵌套代码 ...
- ES6语法:class类,从了解到使用
前期提要: JavaScript 语言中,在使用类之前,生成实例对象的传统方法是通过使用构造函数. 一.构造函数: 定义:通过 new 函数名 来实例化对象的函数叫构造函数. 主要功能:为初 ...
- Linux 时间同步 04 ntp时间同步
Linux 时间同步 04 ntp时间同步 目录 Linux 时间同步 04 ntp时间同步 安装ntp 配置与外部时间服务器进行时间同步的客户端主机 配置其他客户端与以上客户端主机时间同步 验证查看 ...