目录
- 一. 🦁 前言
- 二. 🦁 K8s vs Docker
- 三. 🦁 K8s基础组件
- 3.1 Master组件
- 3.1.1 api server
- 3.1.2 controller manager
- 3.1.3 scheduler
- 3.1.4 etcd
- 3.2 Node组件
- 3.2.1 kublet
- 3.2.2 kube-proxy
- 四. 🦁 最后
一. 🦁 前言
Kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,K8s的目标是让部署容器化的应用简单并且高效,K8s提供了应用部署,规划,更新,维护的一种机制
。K8s是Google开源的一个容器编排引擎,使用Google自家的Go语言开发。
它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。
在K8s中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。
特点:
- 可移植:支持公有云,私有云,混合云,多重云(multi-cloud)
- 可扩展: 模块化,插件化,可挂载,可组合
- 自动化:自动部署,自动重启,自动复制,自动伸缩/扩展
二. 🦁 K8s vs Docker
- Docker针对paas,是以应用为中心;
- K8s是一个管理各个工作节点中容器应用,通过api server进行控制,通过kubelet进行管理的容器管理引擎;
- K8s解决了密钥配置管理、自动二进制打包、自动部署和回滚、存储编排、服务发现和负载均衡等问题。
三. 🦁 K8s基础组件
K8s架构主要分为两部分——一个Master(主节点) && 一群Node(工作节点)。
- Master节点主要负责管理和控制,里面含有四大组件,分别是API Server、Scheduler、Controller manager、etcd
- API Server 是整个系统的对外接口,供客户端和其它组件调用,相当于“服务窗口”
- Scheduler 负责对集群内部的资源进行调度,相当于“调度室”
- Controller manager 负责管理控制器,相当于“管理员”
- etcd是保存K8s所有集群数据的后台数据库
- Node节点是工作负载节点,主要组件包括包括Docker、kubelet、kube-proxy和pod。
- Docker,创建容器的;
- Kubelet,负责监视指派到它所在Node上的 Pod,包括创建、修改、监控、删除等;
- Kube-proxy,主要负责为Pod对象提供代理;
- Fluentd,主要负责日志收集、存储与查询。
每个Node都会被Master分配一些工作负载,当某个Node宕机时,该节点上的工作负载就会被Master自动转移到其它节点上。
我们现在来介绍一下这些组件工作原理:
3.1 Master组件
3.1.1 api server
主节点上负责提供K8s API 服务的组件,它是K8s控制面的前端。
- 1 apiserver是K8s最重要的核心组件之一,提供集群管理的REST API接口,包括认证授权,数据校验以及集群状态变更等;
- 2 提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd)
- 3 生产环境可以为api server做LA
Load Average
或LBLoad Balance
,在设计上考虑了水平扩缩的需要。 换言之,通过部署多个实例可以实现扩缩。
3.1.2 controller manager
在主节点上运行控制器的组件。
- 1 controller manager是K8s的大脑,它通过api server监控整个集群的状态,确保集群处于预期的工作状态;
- 2 controller manager由一系列的控制器组成,例如,Replication Controller控制副本,Node Controller节点控制,Deployment Controller管理deployment等。
3.1.3 scheduler
主节点上的组件,该组件监视那些新创建的未指定运行节点的Pod,并选择节点让Pod 在上面运行。scheduler负责分配调度Pod到集群内的节点上,它监听apiserver,查询还未分配Node的Pod,然后根据调度策略为这些Pod分配节点。
3.1.4 etcd
- 1 K8s需要存储很多东西,像它本身的节点信息,组件信息,还有通过K8s运行的pod,deployment,service等等,都需要持久化,etcd就是它的数据中心。生产环境中为了保证数据中心的高可用和数据的一致性,一般会部署最少三个节点;
- 2 etcd也可以部署在K8s每一个节点,组成etcd集群;
- 3 如果已经有外部etcd服务,K8s可以直接使用外部etcd服务。
3.2 Node组件
3.2.1 kublet
一旦Pod被调度到对应的宿主机之后,后续要做的事情就是创建这个Pod,并管理这个Pod的生命周期,这里面包括:Pod的增删改查等操作,在K8S里面这部分功能是通过kubelet 这个核心组件来完成的。kublet的功能分为两类:
- kubelet操作当前宿主机的资源信息,并启动Pod
- 与k8s进行交互,获取pod相关的数据,监控当前的Pod变化的事件
3.2.2 kube-proxy
在k8s集群的每个节点上都运行着kube-proxy进程,负责实现k8s中service组件的虚拟IP服务。kube-proxy是让集群服务在外部可以被访问到的重要方式。目前kube-proxy有三种工作模式:
- User space模式
- Iptables模式(默认)
- IPVS模式
四. 🦁 最后
今天介绍了K8s集群的一些组件功能,深入了解K8s的工作机制,希望你喜欢。