此文为读书笔记,非原创。
云原生本质上是一套让用户用好云的技术栈。k8s on cloud是这套技术栈的主框架,k8s on cloud是各个厂商基于自己的云产品和开源k8s软件实现的容器集群产品。
这些容器集群产品,以云服务器为节点,基于专有网络实现集群网络,依靠弹性伸缩等实现节点伸缩等,从而吸收了云的弹性和k8s的自动化运维等属性。
1.1 内容概要
阿里云K8s集群分为四层结构,自下而上分别是云资源层、单机系统层、集群系统层和功能扩展层。
云资源层包括就请你使用的所有云资源,此层需要用户付费;单机系统层包括节点的操作系统和容器运行时;集群系统层包括K8s系统组件以及插件;最上面是功能扩展层,基于下部的三层自愿,并依靠一些特殊功能组件而实现的对集群功能的扩展。
1.2 云资源层
云资源层和云上K8s之间的关系,相当于计算机硬件与操作系统之间的关系。云资源层为K8s提供了有弹性优势的软硬件基础,如云服务器、安全组、专有网络、负载均衡、资源编排等。
1.2.1 专有版
首先是资源管理。专有版集群使用了多种云资源,以资源编排ROS(Resource Orchestration Service)模板为基础,结合用户自定义配置统一管理底层资源。
其次是集群网络,专有版集群创建之初就被指定了专有网络VPC(virtual private cloud)的配置,如节点网段等。VPC实例被创建之后,其他所有集群资源,都必须与这个VPC实例相关联。VPC的安全组在这里扮演集群网络的防火墙角色。
然后是计算资源。集群在默认情况下会创建三个云服务器作为管控节点,同时集群会根据用户的需求,创建若干云服务器作为集群的Worker节点,这些Worker节点与弹性伸缩实例绑定,以实现节点伸缩功能。集群节点和访问控制RAM(Resource Access Management)的角色绑定,以授权集群内部组件访问其他云资源。另外,集群节点可以挂载云盘并以本地存储形式来使用。
最后是接口实现。集群使用NAT网关作为集群默认的网络出口,使用负载均衡SLB(Server Load Balancer)
作为集群的入口,包括API Server入口,以及图中为包括的Service的入口。
托管版和Serverless版本未使用,所以不介绍。
1.3 单机系统层
单机系统层主要有操作系统和容器运行时两部分,理论上说两者的组合有很多变化,如CentOS和Docker,Windows和Docker等。阿里云单机系统层主要支持CentOS和Windows两种操作系统,以及Docker和安全沙箱两种容器运行时。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
相比于原有Docker运行时,安全沙箱为您提供的一种新的容器运行时选项,可以让您的应用运行在一个轻量虚拟机沙箱环境中,拥有独立的内核,具备更好的安全隔离能力。
安全沙箱特别适合于不可信应用隔离、故障隔离、性能隔离、多用户间负载隔离等场景。在提升安全性的同时,对性能影响非常小,并且具备与Docker容器一样的用户体验,例如日志、监控、弹性等。
不支持同一节点同时部署Docker和安全沙箱两种运行时。
集群内可以通过创建不同节点池来实现Docker运行时节点和安全沙箱运行时节点混合部署。
1.4 集群系统层
这一层是指K8s及其组件,比如网络组件CNI。存储插件FlexVolume等。
1.4.1 专有版
集群系统层的组件和功能在专有版中主要体现在Master节点和Worker节点上。
在Master节点上,运行着集群中心数据库ETCD,以及集群管控的三大件API Server、Controller Manager 和Scheduler,另外包括Cloud Controller Manager等定制组件。
在Worker节点上,运行着服务代理Proxy、节点代理Kubelet,以及网络插件和存储插件等自定义组件。
托管版和Serverless版本未使用,所以不介绍。
1.5 功能扩展层
功能扩展层是对包括日子、监控、存储、镜像、路由、负载均衡、伸缩、DNS和包管理在内的的,大量K8s on Cloud集群扩展组件的合成。因为这些丰富的功能扩展层,集群才能不是IaaS+,不断接近PaaS。大部分扩展组件都是基于某些云产品,同时采用自动一控制器的方式实现,比如监控扩展组件,就包括了云监控和监控控制器等部分。
1.5.1监控
1.5.2 日志
组件部署阶段,用户需要给集群安装日志控制器,包括实现的日志服务的扩展资源定义CRD。
日志配置阶段,日志控制器会读取应用日志相关配置,并通过日志服务的云接口,创建对应的日志文件和配置。
在日志收集阶段,日志收集工具Logtail会从容器文件或者标准输出中获取日志数据,并同步到日志服务。
网友评论