Kubernetes的总架构

Kubernetes的总架构

  • 前言
  • Control Plane Components 平面控制组件
    • kube-apiserver 资源操作入口
    • etcd
    • kube-scheduler 集群分发调度器
    • kube-controller-manager 内部管理控制中心
  • Node Components 节点组件
    • kubelet 节点上的Pod管家
    • kube-proxy 负载均衡、路由转发
    • kubectl(kubelet client)集群管理命令行工具集

前言

When you deploy Kubernetes, you get a cluster.

A Kubernetes cluster consists of a set of worker machines, called
nodes, that run containerized applications. Every cluster has at least
one worker node.

The worker node(s) host the Pods that are the components of the
application workload. The control plane manages the worker nodes and
the Pods in the cluster. In production environments, the control plane
usually runs across multiple computers and a cluster usually runs
multiple nodes, providing fault-tolerance and high availability.

部署 Kubernetes 时,您将获得一个集群。
一个 Kubernetes 集群由一组工作机器组成,称为 节点,运行容器应用程序。每个集群至少有一个工作节点。
工作节点承载作为应用程序工作负载组件的POD(豌豆夹里面有多个豌豆(容器),是k8s容器调度最小单元)。控制平面管理集群中的工作节点和POD。在生产环境中,控制平面通常运行在多台计算机上,一个集群通常运行多个节点,提供容错和高可用性。

这是将所有组件捆绑在一起的 Kubernetes 集群图

Kubernetes的总架构_第1张图片

我们查看docker运行的进程时会发现关于k8s的进程有很多个,如图:
Kubernetes的总架构_第2张图片
这些进程是什么呢?干什么的呢?本篇将介绍组件的大概功能特点

Control Plane Components 平面控制组件

控制平面的组件对集群做出全局决策(例如,调度),以及检测和响应集群事件(例如,当部署的副本字段未满足要求时启动新pod)

控制平面组件可以在集群中的任何机器上运行。但是,为简单起见,会设置脚本在同一台机器上去启动所有控制平面组件,并且不在这台机器上运行用户容器。有关 跨多个 VM 运行的示例控制平面设置

kube-apiserver 资源操作入口

1、提供了资源对象的唯一操作入口,其他所有组件都必须通过它提供的API来操作资源数据,只有API Server与存储通信,其他模块通过API
Server访问集群状态。

   第一,是为了保证集群状态访问的安全。

   第二,是为了隔离集群状态访问的方式和后端存储实现的方式:    
        API Server是状态访问的方式,不会因为后端存储技术etcd的改变而改变。

2、作为kubernetes系统的入口,封装了核心对象的增删改查操作,以RESTFul接口方式提供给外部客户和内部组件调用。对相关的资源数据“全量查询”+“变化监听”,实时完成相关的业务功能。
3、kube-apiserver 旨在水平扩展——也就是说,它通过部署更多实例来扩展。您可以运行多个 kube-apiserver 实例并平衡这些实例之间的流量。

etcd

etcd是k8s系统中的一个组建,安装在master节点中,负责数据的存储,以及节点的注册发现, 一致且高度可用的键值存储用作Kubernetes对所有群集数据的备份存储。如果你的Kubernetes群集使用etcd作为其备份存储,请确保您有这些数据的备份计划。

kube-scheduler 集群分发调度器

调度决策考虑的因素包括:个人和集体资源需求、硬件/软件/策略约束、关联和反关联规范、数据局部性、工作负载间干扰和截止日期。

1、Scheduler收集和分析当前Kubernetes集群中所有Minion/Node节点的资源(内存、CPU)负载情况,然后依此分发新建的Pod到Kubernetes集群中可用的节点。(根据调度算法分配任务给node)

2、实时监测Kubernetes集群中未分发和已分发的所有运行的Pod。

3、Scheduler也监测Minion/Node节点信息,由于会频繁查找
Minion/Node节点,Scheduler会缓存一份最新的信息在本地。

4、最后,Scheduler在分发Pod到指定的Minion/Node节点后,会把Pod相关的信息Binding写回API Serve

kube-controller-manager 内部管理控制中心

运行控制器进程的控制平面组件。逻辑上,每个 控制器 是一个单独的进程,但为了降低复杂性,它们都被编译成一个二进制文件并在单个进程中运行

实现集群故障检测和恢复的自动化工作,负责执行各种控制器,这些控制器的类型是:

1、节点控制器:负责在节点宕机时进行通知和响应

2、作业控制器:监视表示一次性任务的作业对象,然后创建 Pod 以运行这些任务直至完成。
3、端点控制器:填充端点对象(即连接服务和POD)。
4、服务帐户和令牌控制器:为新命名空间创建默认帐户和API访问令牌。

Node Components 节点组件

节点组件在每个节点上运行,维护正在运行的 Pod 并提供 Kubernetes 运行时环境。

kubelet 节点上的Pod管家

在群集中的每个节点上运行的代理。它确保容器在pod中运行。

1、负责Node节点上pod的创建、修改、监控、删除等全生命周期的管理

2、定时上报本Node的状态信息给API Server。

3、kubelet是Master API Server和Minion/Node之间的桥梁,接收Master API Server分配给它的commands和work,通过kube-apiserver间接与Etcd集群交互,读取配置信息
4、具体的工作如下:

设置容器的环境变量、给容器绑定Volume、给容器绑定Port、根据指定的Pod运行一个单一容器、给指定的Pod创建network 容器。
     
同步Pod的状态、同步Pod的状态、从cAdvisor获取container info、 pod info、 root info、 machine info。

在容器中运行命令、杀死容器、删除Pod的所有容器

kube-proxy 负载均衡、路由转发

1、 kube proxy是在集群中的每个节点上运行的网络代理,实现了Kubernetes服务概念的一部分。

2、kube proxy维护节点上的网络规则。这些网络规则允许通过集群内外的网络会话与POD进行网络通信。

3、 kube proxy使用操作系统包过滤层(如果有且可用)。否则,kube代理将转发流量本身。

kubectl(kubelet client)集群管理命令行工具集

通过客户端的kubectl命令集操作,API Server响应对应的命令结果,从而达到对kubernetes集群的管理

你可能感兴趣的:(dacker,docker,运维)