在前面知识点docker的就提到过k8s,相当于到docker的一个脚手架或者说是一个管理编排容器的工具,但这个脚手架是怎么来的呢?

最开始专门的运维工作很复杂,因此在运维工程师技术领域出现了一个技术叫Ansible,使得运维工程师很多工作可以定制化出来交给程序执行。

到2014年左右随着docker的出现,使得运维工作,可以让我们开发人员也参与进来,但是docker在早期,它的功能还不是很强大,只能对于单台docker host主机,进行容器的操作,同时它自带了一个管理工具docker compose,随着后期的发展,docker在docker host的基础上发展出了虚拟资源池的概念,也就是到docker swarm,但是使用起来还是不方便。因为所有资源池内的服务器不只要满足自身是docker的主机,还要满足加入swarm的条件,所以docker又出了一个预处理工具machine,可以让docker主机满足加入资源池的条件。

这三个玩意儿在当年业界被称为docker运维三剑客。但是后期k8s杀出重围,在大厂之间被广泛应用,甚至有很多的大厂能够将自己的k8s体系开放出去,让用户直接在其上做容器的托管,占据了80%多的市场份额,可想而知k8s当时是多么的强势。所以迫使docker官方在2017年底没有办法捏着鼻子认了,把k8s加入到自己的体系内,同时支持swarm和k8s两种容器编排方式。

k8s其实是个简称,它的全称叫kubernetes。根据官方的说法,k8s可以实现的技术特点有自动装箱,也就是前面docker知识中提到的容器的生成,不过K8s是自己根据配置好的约束生成。自我修复因为容器的轻量化,它的启动很快,所以k8s可以在一个容器崩了之后,在秒级内重启,但其实在实际使用上,会发现k8s很少会去重启某个容器,而是在一个容器崩了之后直接Kill掉,用备份的容器顶上,这也可以说是k8s的一种思想,抛弃对单个容器的关注,保证整个大集群本身的安全。自动实现水平扩展,就比如前面docker的知识点,提到过阿里双11,怎样保证服务器足够?这就是k8s的水平扩展100个,不行就扩展200个,200个不行再扩,只要你物理宿主机资源能够撑得住。自动实现服务发现和负载均衡,服务发现就是说在k8s里面的有运行的容器,都可以通过k8s查找到它的信息,而当一类服务对应的启动了多个容器,可以自动实现负载均衡。还可以实现自动发布和回滚。以及提供密钥和容器的配置管理的功能。
注意:K8s底层操作的最小可运行单元不是容器,而是pod,下面会解释pod,为了方便理解,这里暂时称作为容器。

从k8s技术本身来说,整个k8s也是使用高可用的搭建模式,主节点一般两到三个,其他的都是node节点,用来跑容器。和大数据hadoop差不多,也是有一个yarn那样的资源调度体系,所以docker本身其实不关注于资源的把控,只要宿主机就撑得住,就可以一直run容器,但有了k8s这样的容器编排技术之后,就显得更加完整。

在k8s的master节点里,有四个很重要的东西,一个叫API Server用来接收容器的操作请求,第二个叫Scheduler,和yarn一样是一个调度器,第三个叫Controller Manager叫做控制器管理器,这个组件比较绕,它是用来确保控制器健康,而控制器是用来确保容器处于健康状态。之所以看上去有点绕,是因为k8s支持不同种类的控制器,每种控制器是K8s对Pod操作的直接负责对象,比如Pod状态监控、筛选、水平扩容、容器的多退少补等等。当然还有最后一个保证k8s各节点任务运行的kubelet

说完master节点,同样的node节点相对的也有几个角色,第一个是kubelet,这一点就和hadoop很像但又不同,hadoop节点之间的资源通讯主要是依靠yarn体系下的resourcemanager和nodemanager,而k8s是相对独立的kubelet和scheduler。第二个就是第三方容器引擎,比如docker。第三个是kule-proxy,它负责和主节点的API Server通信,维护所有Pod的所在地址。

上面提到过,对于k8s来说,最小可运行的逻辑单元,不再是单一的容器而是pod。不过在操作上仍然可以操作到容器这一层,是属于pod的一个部分。在k8s内部将容器用pod的概念管理,让一个pod下的容器有着密切的关系,且一个pod下的容器一定是在同一节点上的。如果这个pod整个崩掉,k8s会重新给node节点分配任务。pod和控制器依靠着心跳机制实现状态的通信。不过一般情况下项目上一个pod只运行一个容器,这样有利于pod的管理,当然也有多个的时候比如用另一个容器去查日志之类的辅助操作,总之一个pod下多个容器的情况很少发生,还有一个根本原因就是在实际使用中如果一个pod下多容器时,其中一个容器挂掉,你会发现k8s只会将这个容器的状态改为不可用,而不是去容灾这个容器,而我们通常会有很多pod,要在这么多的pod中找到哪个pod出了问题?再去想办法去修复它,这无论是在实操还是容器技术本身的用意上都是背道而驰的,所以除特殊情况外,我们都是一个pod中,只有一个容器,使得容器挂掉,整个pod就挂了让k8s去容灾,就连上面说到的负载均衡,其实本质上也是让k8s实例了很多pod副本。

Pod的也分三种,当然官方并没有给Pod分类,只是在我们使用上的划分,一种叫自主式Pod,当你使用配置清单方式操作时生成的pod通常就是自主式的,这类pod可以操作的颗粒度很细。另一种叫控制器管理的Pod,这种Pod出现在命令行操作时产生,操作起来非常方便,但是可配置性不高。第三种不是我们用户使用的,而是k8s中基础架构的一部分也就是附件类的Pod,这种Pod使得k8s的功能更健壮。是不是自主式如果大家无法区分,目前可以通俗地理解为,只要这个pod没有对应的控制器,它就是自主式的,K8s不会去管它的死活。

最后一个知识点是整个k8s集群,有三个网络概念,各节点之间系统通讯有着节点网路负责,比如master和node的通信。不同Pod之间有着Pod网络,使得同一节点下的Pod它们可以通过直接路由等方式通信,后面的知识点会提到这是依赖于宿主机上的虚拟网卡。不同节点Pod的通信,靠的是Service网络,本质上是一个k8s的附件Pod,它和各节点之间的kule-proxy配合,使得Pod可以跨节点通讯。

应该注意的是Service网络和Pod网络其实很相似,它们都是用来在集群内部使用,让Pod之间可以实现互通,不同的是,Pod网络是让pod拥有可通信地址,而service是用来代理pod网络的。我们在实际操作的时候,不同节点之间抛开service网络,k8s自己集群内部不同节点的pod是没有办法通讯的,但是我们实操的时候,可以发现在不同节点,我们通过ping命令可以发现不同节点的pod,这个能力不是k8s自身提供的,而是容器引擎基于虚拟网卡提供了直接路由的条件,如果k8s自己只使用pod网络,那么不同节点之间的pod通信是会出问题的,而Service是k8s提供的用来代理Pod网络,默认只面向所有Pod端,提供一个固定的能让不同节点上所有pod都可以访问到的DNS网络,并且解决了所有Pod之间由于Pod重启等原因造成的访问方式改变等问题。这一点后面的知识点会体现。不过默认情况下,service是不让非代理pod节点直接去使用的,这一点后面的知识点会有例子。

知识点13--认识K8s相关推荐

  1. 从坐标移动_ABB知识点13:工件坐标系定义

    课程视频 知识点 >>>> 工件坐标系的概念 工件坐标系用于定义工件相对于大地坐标系或者其他坐标系的位置,具有两个作用: (1)  方便用户以工件平面方向为参考手动操纵调试:  ...

  2. C++知识点13——友元,类的声明

    友元就是允许其他类或函数访问类的非公有成员,打破了类的封装性,友元属性用friend来修饰 1.友元与函数 class friendclass {friend void seeprivatefunc( ...

  3. java的知识点13——多态、对象的转型(casting)、final关键字、抽象方法和抽象类、接口的作用、如何定义和使用接口?、接口的多继承、面向接口编程

    多态 多态指的是同一个方法调用,由于对象不同可能会有不同的行为.现实生活中,同一个方法,具体实现会完全不同. 多态的要点: 1. 多态是方法的多态,不是属性的多态(多态与属性无关). 2. 多态的存在 ...

  4. 《系统集成项目管理工程师》必背100个知识点-13项目经理是整合者

    项目经理作为项目的整合者,需要做的工作有哪些?作为整合者,项目经理必须: (1)通过与项目干系人主动.全面的沟通,来了解他们对项目的需求. (2)在相互竞争的众多干系人之间寻找平衡点. (3)通过认真 ...

  5. 实战生产环境:kubeadmin安装1.13.3最新版k8s集群教程

    2019年3月6日:出版安装kubeadmin部署k8s集群教程 本次安装采用kubeadmin ! 安装的k8s版本为1.13.3版,是当前最新版本! 本篇文章,所使用的任何镜像和yaml我都会发一 ...

  6. K8S 1.13.4安装部署

    kubeadm是K8S官方提供的集群部署工具.kubeadm将master节点上的apiserver.scheduler.controller-manager.etcd和node节点上的kube-pr ...

  7. C/C++ Linux后台服务器开发高级架构师学习知识点路线总结(2021架构师篇完整版)

    C/C++ Linux后台服务器开发高级架构师学习知识点路线总结(2021架构师篇完整版) 前言: 小编之前有跟大家分享过一篇架构师体系知识点总结的文章,今天在原来的基础上有所改变更新(2021版). ...

  8. C/C++ Linux后台服务器开发高级架构师学习知识点路线总结(2022架构师篇完整版)

    C/C++ Linux后台服务器开发高级架构师学习知识点路线总结(2021架构师篇完整版) 前言: 小编之前有跟大家分享过一篇架构师体系知识点总结的文章,今天在原来的基础上有所改变更新(2021版). ...

  9. abb工业机器人指令lf怎么用_工业机器人课程:ABB知识点27 | I/O控制指令

    本节要点 · 了解I/O 信号分类 · 掌握Set.Reset.WaitDI.SetDO.PulseDO 指令的使用 要点解析 (1)I/O 信号分类. I/O 信号分类见下表. I/O 信号分类 ( ...

最新文章

  1. python 去除str的引号 去除括号_用python进行图像修复与去除水印
  2. python学习费用-学习老男孩python多少钱?收费贵不贵?
  3. html5 的menu的属性,HTML5 menu 标签
  4. Centos下mysql数据库备份与恢复的方法
  5. html json解析插件,jQuery插件jsonview展示json数据
  6. javadocs_不会吸引人的JavaDocs源样本
  7. 自己常用的C/C++小技巧
  8. Java编程思想 经典评注分享
  9. C# 将数据导出到Excel汇总(转)
  10. 【月径流预测】基于matlab未来搜索算法算法优化BP神经网络月径流预测【含Matlab源码 2001期】
  11. 2013-1-30 六级词汇造句
  12. (判断题)两台路由器之间转发的数据包一定不携带VLAN TAG?
  13. 百度市值要被京东超越了?你投百度还是京东?
  14. 单工,半双工和和全双工通讯的概念
  15. 加密聊天应用依然安全
  16. 教你用Ossim平台检测网络的Shellcode攻击
  17. DM达梦数据库dminit使用手册
  18. int和Integer区别,为什么有了int还要有Integer
  19. 怎么实现MindMapper中剪贴画的添加
  20. anaconda离线安装第三方包

热门文章

  1. SpringCloud之 LoadBalancer和Feign负载均衡
  2. 【密码加密】【明文加密解密】加密 解密
  3. MySQL完整学习笔记
  4. store模板/彩虹代刷商城模板/1.13版本
  5. 加密压缩防360云上传
  6. Springcloud什么鬼错误
  7. [转载]广告联盟类型详解
  8. OpenGL学习笔记:(三)异或操作-橡皮条程序
  9. Goldeneye靶机实操
  10. 【源码】基于模型的阶梯式车架设计仿真