k8s简介
Kubernetes是一个全新的基于容器技术的分布式架构领先方案,Kubernetes(k8s)是Google开源的容器集群管理系统。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性
Kubernetes特性:
- 快速部署应用
- 快速扩展应用
- 无缝对接新的应用功能
- 节省资源,优化硬件资源的使用
Kubernetes 特点:
- 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
- 可扩展: 模块化, 插件化, 可挂载, 可组合
- 自动化:自动部署,自动重启,自动复制,自动伸缩/扩展
k8s总体架构

k8s就是一个组合多台主机的资源整合成一个大的资源地,并统一对外进行计算、存储等能力的集群

K8s总体架构
K8s集群由两节点组成:Master和Node。在Master上运行etcd,Api Server,Controller Manager和Scheduler四个组件。后三个组件构成了K8s的总控中心,负责对集群中所有资源进行管控和调度.在每个node上运行kubectl,proxy和docker daemon三个组件,负责对节点上的Pod的生命周期进行管理,以及实现服务代理的功能。另外所有节点上都可以运行kubectl命令行工具。
API Server作为集群的核心,负责集群各功能模块之间的通信。集群内的功能模块通过Api Server将信息存入到etcd,其他模块通过Api Server读取这些信息,从而实现模块之间的信息交互。Node节点上的Kubelet每隔一个时间周期,通过Api Server报告自身状态,Api Server接收到这些信息后,将节点信息保存到etcd中。Controller Manager中 的node controller通过Api server定期读取这些节点状态信息,并做响应处理。Scheduler监听到某个Pod创建的信息后,检索所有符合该pod要求的节点列表,并将pod绑定到节点列表中最符合要求的节点上。如果scheduler监听到某个Pod被删除,则调用api server删除该Pod资源对象。kubelet监听pod信息,如果监听到pod对象被删除,则删除本节点上的相应的pod实例,如果监听到修改Pod信息,则会相应地修改本节点的Pod实例。

Kubernetes主要由以下几个核心组件组成:
- etcd保存了整个集群的状态;
- apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
- controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
- scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
- kubelet负责本Node节点上的Pod的创建、修改、监控、删除等生命周期管理,同时Kubelet定时“上报”本Node的状态信息到Api Server里;
- Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
- kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;
masters
k8s 集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求;
Master Node 由 API Server、Scheduler、ClusterState Store(ETCD 数据库)和 Controller MangerServer 所组成
- kube-apiserver (负责接受并处理请求)
kube-apiserver用于暴露Kubernetes API。任何的资源请求/调用操作都是通过kube-apiserver提供的接口进行。请参阅构建高可用群集 - ETCD(调度容器创建的请求)
etcd是Kubernetes提供默认的存储系统,保存所有集群数据,使用时需要为etcd数据提供备份计划。 - kube-controller-manager(确保后端节点上的控制器处于健康状态)
kube-controller-manager运行管理控制器,它们是集群中处理常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行。这些控制器包括:
1、节点(Node)控制器
2、副本(Replication)控制器:负责维护系统中每个副本中的pod
3、端点(Endpoins)控制器:填充Endpoints对象(即连接Seevices&pod)
4、Service Account和Token控制器:为新的Namespace创建默认账户访问API Token - kube-scheduler (调度容器创建的请求)
kube-scheduler 监视新创建没有分配到Node的Pod,为Pod选择一个Node
nodes
- Kubelet (与master通信的集群代理)
kubelet是主要的节点代理,它会监视已分配给节点的pod,具体功能:
1、安装Pod所需的volume。
2、下载Pod的Secrets。
3、Pod中运行的 docker(或experimentally,rkt)容器。
4、定期执行容器健康检查。
5、通过创建一个 Pod(如果需要的话),向系统的其余部分报告 Pod 的状态。
6、向系统的其他部分报告节点的状态。 - 容器引擎(docker)
k8s专业术语
pod
- K8s的最小调度逻辑单元
- pod可以理解为是容器的外壳,它为容器做了一层抽象的封装
- pod内部主要是用来放容器的
- pod的特点是可以将多个容器加入到同一个网络名称空间中
- 一个pod中可以包含多个容器同一个pod中的不同容器可以共享存储卷
- 一个pod上无论是有一个容器还是有多个容器,一旦将此pod调度到某node上运行时,这一个pod内的所有容器只能运行在同一个node上
node
- node是k8s集群中的工作节点,负责运行由master指派的各种任务。而最核心的任务就是以pod形式运行容器
- node可以是任何形式的计算设备,只要此设备上能够有传统意义上的CPU、内存、存储空间,并且能装上k8s的集群代理程序,它都可以作为整个k8s集群一个成员
标签选择器
- 当大量的pod运行在一个集群当中时,如何实现分类管理?比如想删除某一类pod,比如想让控制器去管理一部分pod,它怎么进行管理?如何挑选、检测出来这些pod呢?值得肯定的是,这么多的pod,我们不能通过pod的名称来识别容器,因为pod随时都会被创建和删除,当一个pod发生故障被删除后,重新生成的pod的名称与被删除的pod名称肯定是不一样的,只不过其内部运行的程序是一样的,所以我们不能靠pod的名称来识别。同时我们有可能要将一类pod归组,比如创建4个nginx的pod,期望使用一个控制器对其进行统一管理,删除一个控制器就把这4个pod都删了,控制器还要保证这4个pod都处于运行状态,缺—个要补一个,多一个要多杀一个,精确符合我们期望的4个pod才行
- 为了能够实现pod识别,需要在pod之上附加一些元数据,类似dockerfile中的label标签的方式,比如在创建pod时为其附加—个名为app的key,然后将其值设为nginx,那么当我们在批量进行pod调度管理时,可以检查pod中是否有app这个key,且其佶具不头nainv通业种方十立
- 为了能够实现pod识别,需要在pod之.上附加一些元数据,类似dockerfile中的label标签的方式,比如在创建pod时为其附加一个名为app的key,然后将其值设为nginx,那么当我们在批量进行pod调度管理时,可以检查pod中是否有app这个key,且其值是否为nginx,通过此种方法来识别pod是否是我们想要控制的pod
- 标签是在k8s上管理大规模pod资源并且能够分类识别和管理的一个非常重要的途径
- 那么怎么从众多的pod中筛选出我们想要的pod呢?通过标签选择器组件我们可以实现这个功能
- 标签选择器就是一种根据标签来过滤符合条件的资源对象的机制
1168

被折叠的 条评论
为什么被折叠?



