一  了解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. DVWA各等级sql注入

    sql全等级注入 level:low <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { //判断submit是否存在 // Get input $id = ...

  2. VMware Workstation 16中安装macOS Big Sur,AMD版

    VMware Workstation 16中安装macOS Big Sur,AMD版 目录 VMware Workstation 16中安装macOS Big Sur,AMD版 准备阶段 步骤一:安装 ...

  3. IntelliJ IDEA(十二) :IDEA常用配置

    idea版本 2019.3.4 配置JDK File--> Project Structure... 修改项目 jdk和项目语言等级 修改jdk版本 File--> Ohter Setti ...

  4. vue第三单元(webpack的应用-能根据具体的需求构建对应的开发环境)

    第三单元(webpack的应用-能根据具体的需求构建对应的开发环境) #课程目标 理解什么是单页面应用. 掌握单页面和多页面的差异. 了解单页面的实现原理. 掌握模块化的方式实现webpack配置,区 ...

  5. svn add . 报错,不能add全部,因为有一些文件已经在版本库中了

    svn add 目录名 --force SVN commit -m '' 目录名

  6. 微博爬虫,python微博用户主页小姐姐图片内容采集爬虫

    python爬虫,微博爬虫,需要知晓微博用户id号,能够通过抓取微博用户主页内容来获取用户发表的内容,时间,点赞数,转发数等数据,当然以上都是本渣渣结合网上代码抄抄改改获取的! 要抓取的微博地址:ht ...

  7. C#访问Access数据库提示未安装ISAM

    解决办法 1.在前面加上Jet OLEDB:,如: Jet OLEDB:Database Password='zt' <add name="ConStrOleDb" conn ...

  8. IT职业:2021年掌握的10项关键技能

    原文:https://enterprisersproject.com/article/2020/12/it-careers-10-critical-skills-master-2021 科技行业似乎在 ...

  9. CentOS7 实战源码安装mysql5.7.17数据库服务器

    CentOS7 实战源码安装mysql5.7.17数据库服务器 简介:实战演练mysql数据库服务器的搭建  mysql简介: mysql是一个开源的关系型数据库管理系统,现在是oracle公司旗下的 ...

  10. JAVA的一些笔记

    /*一般函数与构造函数的区别 构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化 一般函数:对象创建时,需要函数功能时才调用 构造函数:一个对象对象创建时,只调用一次 一般函数:对象创 ...