一  了解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之机理概览的更多相关文章

  1. InnoDB存储引擎概览

    InnoDB存储引擎概览   InnoDB存储引擎以其平衡了高可靠性和高性能性而闻名遐迩,在MySQL 8.0版本中,InnoDB存储引擎是默认的存储引擎.(历史追溯从MySQL 5.5.5版本开始, ...

  2. Activity之概览屏幕(Overview Screen)

    概览屏幕 概览屏幕(也称为最新动态屏幕.最近任务列表或最近使用的应用)是一个系统级别 UI,其中列出了最近访问过的 Activity 和任务. 用户可以浏览该列表并选择要恢复的任务,也可以通过滑动清除 ...

  3. Atitit 软件工程概览attilax总结

    Atitit 软件工程概览attilax总结 1.1. .2 软件工程的发展 进一步地,结合人类发展史和计算机世界演化史来考察软件工程的发展史. 表2 软件工程过程模型 表2将软件工程的主要过程模型做 ...

  4. Kubernets搭建Kubernetes-dashboard

    接上篇文章,在已经部署好Kubernetes的基础上部署kubernetes-dashboard,它是官方提供的用户管理Kubernets集群可视化工具:部署dashboard其实和在kubernet ...

  5. iOS开发系列—Objective-C之基础概览

    概览 前面我们已经用了几章内容进行C语言介绍,当然要通过几篇文章完整的介绍C语言的知识是不太现实的,例如C语言的文件操作.内存申请等我们都没有重点介绍,当然核心知识点基本都已经提到了,后面有时间我们会 ...

  6. iOS开发系列--IOS程序开发概览

    概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...

  7. Azure SQL Database (19) Stretch Database 概览

    <Windows Azure Platform 系列文章目录>  Azure SQL Database (19) Stretch Database 概览      Azure SQL Da ...

  8. Web前端开发大系概览 (前端开发技术栈)

    前言 互联网建立50多年了,网站开发技术日新月异,但web前端始终离不开浏览器,最终还是HTML+JavaScript+CSS这3个核心,围绕这3个核心而开发出来大量技术框架/解决方案. 我从2000 ...

  9. Atitit.自然语言处理--摘要算法---圣经章节旧约39卷概览bible overview v2 qa1.docx

    Atitit.自然语言处理--摘要算法---圣经章节旧约39卷概览bible overview v2 qa1.docx 1. 摘要算法的大概流程2 2. 旧约圣经 (39卷)2 2.1. 与古兰经的对 ...

随机推荐

  1. 时间转成x时x分x秒的封装(简易版)

    function createTime(t) { let timer; if (t <= 0 || !t || t < 60 || typeof(t)!=='number') timer ...

  2. github内的一些操作

    github远程仓库的克隆操作 1,找到你想要克隆的地址,复制下来 2,切入到git所在目录下,输入 git clone 复制的地址 设置过滤文件不纳入git管理 1,在git目录下创建一个.giti ...

  3. 搭建本地yum镜像源

    Blog:博客园 个人 目录 概述 语法说明 参数说明 部署 配置阿里云源 同步源 建仓 Nginx配置 配置定时计划 yum配置 概述 由于内网有大量机器不能访问公网,安装软件比较费劲,那么,如何让 ...

  4. HTTPS和HTTP的那些事

    随着信息安全变得越来越重要,在浏览器.搜索引擎.CA机构.大型互联网企业的共同促进下,互联网迎来了"HTTPS加密时代".HTTPS在HTTP上建立了SSL加密层,是HTTP协议的 ...

  5. 什么是java的深浅拷贝?

    什么是java的深浅拷贝? 浅拷贝 就是很肤浅的拷贝,只拷贝了别人的地址.没有拷贝地址里面的值.地址里面的值改变后,就都改变了. 深拷贝 就是很深入的拷贝,深入到核心的拷贝,拷贝了别人地址里面的值,别 ...

  6. Python 搜索文件,文件过滤,pathlib模块

    1,搜索文件,文件过滤 这里使用:pathlib 模块的  Path.glob(pattern)  方法,该方法可以用来过滤目标文件,以迭代器的形式返回搜索结果. pattern: 通配符:" ...

  7. webform中配置服务器控件的样式

    前台 Style <asp:Label ID="Label1" runat="server" Text="Label" Style=& ...

  8. 【程序包管理】篇章3:CentOS平台下软件包安装方法总结

    1.软件包安装前的学习:程序包管理的基础知识 2.程序包安装的方法介绍: rpm文件的二进制包安装:Linux程序包管理之rpm安装总结 yum安装:Linux程序包管理之yum源安装 链接:本地yu ...

  9. 2.k8sPod、控制器、service

    一.Pod生命周期 Pod是k8s中最小的管理单元(逻辑上存在,实际不存在),是一组容器的集合 同一个Pod中的容器共享网络和存储(通过pause容器实现),由一个统一的IP向集群内部提供服务 Pod ...

  10. 设计模式之-Builder模式

    场景引入: 一个类,如果有多个属性时,在创建对象,如何对属性进行赋值呢? 1.通过构造器赋值,这种方案优点时一次性赋值完成,但是多种属性的组合,导致构造器会非常多. 2.通过setter方法赋值,方案 ...