序言

kubernetes集群中有两种管理角色,Master和Node,在我们第一节安装单机版的kubernetes集群的文章里,我们为了kubernetes集群可以正常工作,启动了非常多的相关服务,这些服务便是kubernetes的相关组件,下面我们就来了解一下相关的组件的作用分别是什么。

Master节点常用组件

Master节点是kubernetes集群的控制节点,每个 集群都需要有一个Master节点来负责整个集群的管理和控制,集群中所有控制命令都是从Master节点发出

  • ETCD
ETCD 是一个高可用的分布式键值数据库,可用于服务发现。ETCD 采用 raft 一致性算法,基于 Go 语言实现。
ETCD 是Kubernetes提供默认的存储系统,保存所有集群数据。
  • kube-apiserver
kube-apiserver提供了Http Rest接口,是kubernetes中所有资源的增删改查等操作的唯一入口。
1、包括认证授权、数据校验以及集群状态变更;
2、提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd);
3、是资源配额控制的入口;
4、拥有完备的集群安全机制;

这里给大家推荐一篇非常棒的介绍kube-apiserver相关功能文章,看了以后一定会对kube-apiserver有了一个更加深入的认识,文章地址是:

  • kube-controller-manager
kube-controller-manager是运行管理控制器,它们是集群中处理常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成单个二进制文件,并在单个进程中运行。
管理控制器主要包括:
1、Node:节点控制器
2、Replication: 副本控制器,维护系统中每个副本中的pod
3、Endpoints:端点控制器,填充Endpoints对象,用来连接Services和Pods
4、Service Account 和 Token控制器: 为新的Namespace创建默认账户访问API Token

kube-controller-manager 是所有资源的自动化控制中心。
  • kube-scheduler
kube-scheduler 主要负责资源调度的进程,监视新创建没有分配到Node的Pod,为Pod选择一个Node进行运行。kube-scheduler是以插件形式存在的组件,正因为以插件形式存在,所以其具有可扩展可定制的特性。kube-scheduler相当于整个集群的调度决策者,其通过预选和优选两个过程决定容器的最佳调度位置。

下面的一篇文章是我发现的一篇非常棒的讲解kube-scheduler的文章,分享给大家:

Node节点常用组件

Node节点是kubernetes集群中的工作负载节点,每个Node都会被Master分配一些工作负载,当某个Node节点发生宕机时,该Node上的工作负载会被Master自动转移到其它节点上。

  • docker
docker服务主要负责本机的容器创建与管理工作
  • kube-proxy
kube-proxy主要用来实现kubernetes service的通信与负载均衡机制,kube-proxy是service的访问入口,包括集群内Pod到Service的访问和集群外访问service。kube-proxy管理sevice的Endpoints,该service对外暴露一个Virtual IP,也称为Cluster IP, 集群内通过访问这个Cluster IP:Port就能访问到集群内对应的serivce下的Pod
  • kubelet
kubelet负责Pod对应的容器的创建、启动等任务,同时与Master节点进行协作,实现集群管理功能。
每个Node都会启动kubelet进程,用来处理Master下发下来的任务,按照 PodSpec 描述来管理Pod 和其中的容器

下面的这篇文章非常深入的讲解了kubelet组件的相关知识,文章地址:

结语

通过简单的介绍,我们初步的知道了kubernetes中有那些组件,这样我们就可以为我们后面深入的学习和使用kubernetes打下了一个基础,让我们在后面的学习过程中不会因为没有一个总的结构而造成无序而低效的学习。