Kubernetes第一回(架构概述)

发布时间:2020-07-26 14:00:03 作者:yacai1990
来源:网络 阅读:824

一、kubernetes和Devops概述

1、为什么要用kubernetes

 在docker还没有出现前,我们去安装部署应用程序时,比如nginx、php等web架构站点。我们要去手动操作部署,非常繁琐耗时,后来有了ansible等运维工具。这种工具实际上是一个应用编排工具,能够实现安装、配置、启动。甚至可以按照定义好的playbook完成对多种有着依赖关系的应用程序的快速部署。代替了繁琐易出错的手动操作。而这种工具操作的对象是直接部署在操作系统中的应用程序。docker出现以后,各种应用程序都被封装在容器中运行(容器化)。由于操作对象从实际的应用程序对象变成了容器内的应用,他们本身提供的访问控制和管理接口是不同的。所以ansible等运维工具无法完成容器运行的编排工作。后来,出现了专门用于容器编排的工具


1.1、常见的3款容器编排工具


2、devops概念:

DevOps是(Development和Operations的组合词)是一组过程、方法、文化与系统的统称,depvops重视的是将持续集成、持续交付再到持续部署的一整套流程的解决方案


2.1、devops和docker的关系

docker容器的出现和容器编排工具的出现使得devops这一套流程(持续集成、持续交付、持续部署)更容易实现了,在原来的场景中,我们需要针对目标的环境构建不同环境的应用,部署方式也不尽相同。而有了docker之后,就不需要关注这些,因为docker可以做到,一次构建,到处运行。我们可以只构建一次(构建为镜像),只要目标主机上有docker(不需要关注目标主机的环境),我们就可以将应用跑起来。

虽然docker可以很好的将devops文化实现,但是也带来一个缺点,在众多微服务中,我们每天可能需要去处理各种服务的崩溃,而服务间的依赖调用关系也及其复杂,这对我们解决问题带来了很大的复杂度。要很好的解决这个问题。我们就需要用到容器编排工具。


二、kubernetes

1、kubernetes的由来

最早在2014年对外发布,kubernetes是由google的几位工程师用Go语言根据google内部强大的容器编排工具Borg改写而来。而后在容器技术广为应用之后,kubernetes在短短几年之内,发展迅速,它深受人们的喜爱。kubernetes最早的版本1.0在2015年发布,到现在为止发布的版本已经到了1.12版。在2017年容器技术发展历史上具有里程碑意义的一年,因为在这一年中,aws、微软云、阿里云等等著名的云计算公司都开始宣布原生支持kubernetes 。还有的平台可以做到把自己的k8s对外提供服务,让用户可以直接在上面部署应用程序,提供容器级服务的环境。这些大型云厂商的支持, 使得k8s在业内已经受到了广泛的认可和支持。而且在2017年10月,docker宣布在他们的企业版发行版当中,原生同时支持swarm和kubernetes两种工具。


2、kubernetes的特性


3、kubernetes架构

kubernetes是从我们传统运维角度来说的集群,组合多台主机的资源整合成一个大的资源池并统一对外提供计算存储等能力的集群。每一个主机上都安装了k8s的相关应用程序,并通过这个应用程序协同工作,把多个主机当一个主机来使用。但是在k8s集群中,主机是分角色的,k8s是一个有中心节点架构的集群系统(master/nodes模型)。k8s一般有3个master节点以实现HA,N个node节点提供计算存储能力以运行容器。master负责接受客户端的请求,而后master负责分析各个node现有的可用资源状态,将请求调度到一个可运行容器的最佳的node节点。最后,node节点首先在本地检查是否有镜像(去Registry上pull镜像)最后在以Pod(node节点的最小调度单元)的形式将容器启动起来。这是kubernetes的功能模型。


3.1、master节点的核心组件


3.2、etcd节点

它是一个key:value的数据库,类似redis。但是它还具有redis不具备的集群选举功能,负责存储集群中API Server中保存的各个状态信息(持久化到共享存储),以防止集群中的主master节点宕机,其他master节点可以读取到之前的集群信息。etcd同样是restfull风格的集群,通过http或https通信。在一个k8s集群中,etcd是高可用的。防止一个etcd宕机之后不能进行集群leader选举。


3.3、node节点的核心组件

3.4、Pod是什么

Pod是k8s的最小逻辑运行、调度单元。在k8s中,调度器并不直接调度容器的运行,它调度的目标是Pod,Pod是k8s中对容器抽象的封装,可以理解成一个外壳。Pod内部主要用来放容器,一般Pod中只有一个容器,Pod中也可以有多个容器,因此Pod有个特性,就是共享底层的名称空间Net、UTS、IPC,在这三个名称空间之上还可以共享第三种资源“存储卷”。这使得我们可以构建较为精细的容器间通信架构。

k8s通过在Pod上添加一些元数据信息来将k8s的资源管理(Pod资源等)变得简单,而Tag是众多元数据中的一种,,Tag是Key="Value"的形式,通过label selector(标签选择器),kubelet在管理Pod,分组Pod,识别Pod就容易了。

Pod种类:

3.5、Pod控制器


四、Kubernetes的网络模型

1、kubernetes要求整个k8s集群中要有3种网络

要想接入外部网络,要先到达节点网络,由节点网络代理至集群网络,最后在由集群网络代理到Pod网络


2、3类通信

 

3、kubernetes的网络实现

k8s并不提供集群中的3种网络管理与网络策略功能,而是依赖于第三方插件,k8s通过CNI(Container  Network  Interface)插件体系来接入外部的网络服务解决方案,CNI要求网络解决方案必须要支持网络功能(能提供地址),还必须要支持网络策略的功能(为了安全,隔离限制不同名称空间中的Pod之间的访问或者限制相同名称空间中的各Pod之间的访问)。只要一个网络服务提供商能够遵循CNI开发这个服务,它就能作为k8s的网络解决方案来使用。这些网络解决方案可以以附件的方式托管在集群之上(可以运行为Pod),它是一个特殊Pod,它需要共享节点的网络名称空间。这样就能实现以容器的方式来运行系统管理的命令。目前可以用的CNI插件有很多,常见的有;

推荐阅读:
  1. Swoole学习笔记(一):架构概述
  2. Zabbix功能概述及架构介绍(理论篇)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

kubernetes 架构概述 uber

上一篇:GFS基础配置安装(纯实战)

下一篇:CAD转图片7个步骤

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》