Kubernetes特性、架构、组件详解和核心概念
Kubernetes架构、组件详解一、Kubernetes的概述●Kubernetes 是Google在2014年开源的一个 容器集群管理系统,Kubernetes简称K8S。●K8S用于容器化应用程序的部署,扩展和管理。●K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一 系列功能。●Kubernetes目标是让部署容器化应用简单高效。官方网站: http://www....
Kubernetes特性、架构、组件详解和核心概念
一、Kubernetes的概述
●Kubernetes 是Google在2014年开源的一个 容器集群管理系统,Kubernetes简称K8S。现在还出现了K3S。是rancher出品的一个轻量级的K8S。虽然比K8S少了一些功能,但是由于是轻量级别逐渐受到人们的重视。
●K8S用于容器化应用程序的部署,扩展和管理。通过pod管理容器的生命周期,随着业务的需求而弹性伸缩。
●K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一 系列功能。
●Kubernetes目标是让部署容器化应用简单高效。
二、K8S的特性
K8S的功能非常强大,所以广受青睐。下面我将简单介绍一下K8S的几个非常具有代表性的特性:
1.自我修复功能:
我们都知道无论什么服务都有可能出现故障问题,这时就需要运维人员去解决。运行在容器里的服务也是如此,那么K8S就会发现出现故障的节点的容器,并进行重新部署容器,保证预期的容器副本数量杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。
2.弹性伸缩功能:
运维人员可以根据当前CPU的负载情况、通过使用命令、web的ui界面等方式,自动快速扩容或者收缩容器的数量。在高并发的时候快速增加容器以应对增长的业务量;在业务量非常小的情况下,自动杀死一些无用的容器,以确保整个集群运行在最低的资源消耗的状态,节约成本。
3.自动部署和回滚功能:
K8S的部署容器的方式为滚动部署,即每生成了一个新的pod,就会杀死一个旧pod。如果新pod出现了问题,可以立即回滚让业务在不停机的情况下正常运转。
4.服务发现和负载均衡功能:
K8S为集群中的容器提供了一个统一的访问入口。并且集群内部所有容器都处在负载均衡的状态。
5.机密和配置管理功能:
一些机密数据和配置都是由K8S进行管理,容器镜像也得到了有效的保护,方便进行管理和使用。
6.存储编排功能:
K8S兼容外部存储系统,如aws、NFS、GFS和CEPH等。极大提高存储使用灵活性。
7.批处理功能:
提供一次性任务,定时任务;满足批量数据处理和分析的场景。
三、K8S的基本组件和架构简介
(一)、基本组件
K8S的组件可以分为,在master节点的组件和node节点的组件。
在主节点上运行:api server作为整个集群的同一入口,并且起着协调各个组件的作用。整个集群的所有操作都需要交给api server处理。
etcd:etcd是分布式键值对存储数据库。用于保存集群的状态信息、用户信息等。etcd与其他数据库最大的区别便是其可以自动发现服务这是其他数据库无法做到的。
scheduler:scheduler可以看做是openstack中的nova-scheduler组件,其通过计算每个节点的积分,分数越高的节点被分配到任务的概率也就越大。一旦节点接收到创建容器的任务,scheduler就会重新为所有节点评分。所以这个积分不是静态的而是动态的。而scheduler将创建任务交给api server与各个节点进行通信。
controller-manager:用于处理集群的后台任务并且管理节点的pod节点的容器副本数量在期望值左右。
node节点组件:
kublet:可以看做是master节点的代理,接收来自master节点的命令,并且管理此节点内的pod的创建和生命周期。
kubproxy:在节点上实现为pod的网络代理,主要为pod实现四层的负载均衡。
容器引擎:即运行在pod中的容器
(二)、K8S的架构
单master结构,这种架构只适用于实验环境,由于是一个单master节点所以其非常容易出现单点故障。一个master节点下面运行着3个node节点和三个etcd数据库。
多master节点架构:在整个集群的最前端是由至少两个代理服务器接收来自外部的请求,并转发给master节点和node节点。至少两个master节点互为主备关系,其他的节点不变。
四、K8S的核心概念
1.pod的概念
在node节点中的pod是运行容器、管理容器的最小化的单元,其中一个pod可以管理一个或者多个容器,然而在生产环境中最好让一个pod中运行一个容器。当然也有个例外,作为运维人员我们都搭建过ELK企业日志收集分析集群。在web端,我们不仅要搭建web服务器还要搭建logstash进行日志文件的收集工作。这时我们就需要将web容器和logstash容器一起运行在同一个pod之中。我们称其为带斗容器。
2.controller
在master节点上运行的controller-manager,其主要的功能是:replicaset,保证pod的数量,这个数量是运维工程师制定的,但是在资源无法满足的情况下是无法创建出目标数量的pod,所以才叫做预期的pod数量。
在K8S中还要考虑到有状态和无状态pod的创建:deployment和statefulset。无状态应用的部署最典型的就是各种web服务,即使出现宕机只要集群中有备份就不会出现数据不对等的情况。而典型的有状态服务是数据库,一旦有一个数据库出现宕机,等到其重新上线由于数据库内容与集群中其他数据库中的内容不一致就非常容易出现数据不对等的情况。
daemonset,确保所有node运行同一个pod。
job和cronjob:一次性任务和定时任务。
3.Namespace
命名空间,将对象进行逻辑上隔离。
4.Label
标签,附加到某个资源上,用于方便查找。
5.service
service的主要作用是防止pod失联,并定义一组pod的访问策略。
更多推荐
所有评论(0)