容器化技术(七):Kubernetes集群中安装了哪些组件?

443 阅读6分钟

一、Kubernetes集群总览

Kubernetes中的节点分为两类:

  • Master节点:也称为控制平面,是Kubernetes集群的大脑,其中包括如下组件:
    • kube-apiserver:管理员操作整个Kubernetes集群的入口。
    • etcd:kube-apiserver的后台数据存储。
    • kube-scheduler:集群的调度器。
    • kube-controller-manager:控制管理器,保证Kubernetes集群中的资源按照要求运行。
  • Worker节点:负责Pod的运行。
    • kubelet:负责与Master节点交互,进而执行具体的任务。
    • kube-proxy:负责Kubernetes集群中的负载均衡。
    • 容器运行时:负责容器的操作,启动或者关闭等。

在这里插入图片描述

二、Worker节点的运行机制

Kubernetes集群已经搭建完成,Pod是Kubernetes中的很重要的概念,Pod是运行的紧密相关的容器的集合,那么在我们的Worker节点上有哪些Pod在运行呢?通过过滤命令,可以查出以下的结果,命令中:

  • -o wide:为的是让pod显示出更多的详细的信息,这里关注的是Pod所在节点的名字。
  • grep kubernetes-worker:搜索节点名字为本文之前定义的kubernetes-worker的pod。
  • kubectl:是直接操作Kubernetes集群的命令,都是直接在Master节点上进行操作,请读者注意。
[root@kubernetes-master01 ~]# kubectl get pod -n kube-system -o wide | grep kubernetes-worker
kube-flannel-ds-8m9vv                         1/1     Running   0          kubernetes-worker01     
kube-flannel-ds-j9bbc                         1/1     Running   0          kubernetes-worker02         
kube-proxy-b67l7                              1/1     Running   0          kubernetes-worker01           
kube-proxy-nnstx                              1/1     Running   0          kubernetes-worker02           

可以看到,每个Worker节点上都运行着以下Pod:

  • kube-flannel:本文安装的网络插件,用来保证整个Kubernetes集群中给Pod分配的ip的唯一性,保证跨机器节点的网络互通。
  • kube-proxy:Kubernetes中有Service的重要概念,Service的负载均衡功能由kube-proxy来提供,本文后面会对Service的概念进行重点说明。

Worker节点的主要核心任务是运行Pod,也就是运行容器,所以Worker节点上面一定要有容器运行时。

作为Worker节点,节点的相关运行情况的上报,以及Master节点发出的命令的执行,都是kubelet来负责的。

1、kubelet

在Kubernetes集群中,在每个Node上都会启动一个kubelet服务进程。该进程用于处理Master下发到本节点的任务,管 理Pod及Pod中的容器。每个kubelet进程都会在API Server上注册节点 自身的信息,定期向Master汇报节点资源的使用情况,并监控容器和节点资源。

kubelet在启动时通过kube-apiserver注册节点信息,并定时向kube-apiserver发送节点的新消息,kube-apiserver在接收到这些信息后,将这些信息写入etcd。

kubelet监听etcd,所有针对Pod的操作都会被kubelet监听。如果发现有新的绑定到本节点的Pod,则按照Pod清单的要求创建该Pod。如果发现本地的Pod被修改,则kubelet会做出相应的修改,比如在删除Pod中的某个容器时,会通过操作本地容器运行时删除该容器。

2、kube-proxy

在Kubernetes集群的每个Node上都会运行一个kube-proxy服务进程,可以把这个进程看作Service的透明代理兼负载均衡器,其核心功能是将到某个Service的访问请求转发到后端的多个Pod实例上。

3、容器运行时

容器运行时,顾名思义,就是负责容器的启动和关闭了,目前最著名的容器运行时就是Docker。

Kubernetes为了更好的兼容各种容器运行时,其中设计了CRI的概念,就是容器运行时接口,各种容器运行时需要去实现容器运行时接口。这样kubelet不管在操作什么容器时,都能够直接通过标准的接口去操作,而不必像最初那样去自己实现各种容器运行时的对接。

三、Master节点的运行机制

Kubernetes集群中的Master节点上有哪些Pod在运行呢?通过过滤命令,可以查出以下的结果,命令中:

  • -o wide:为的是让pod显示出更多的详细的信息,这里关注的是Pod所在节点的名字。
  • grep kubernetes-master01:搜索节点名字为本文之前定义的kubernetes-master01的pod。
[root@kubernetes-master01 ~]# kubectl get pod -n kube-system -o wide | grep kubernetes-master01
coredns-589b87488-dsmv8                       1/1     Running   0          kubernetes-master01             
coredns-589b87488-pc8tp                       1/1     Running   0          kubernetes-master01            
etcd-kubernetes-master01                      1/1     Running   0          kubernetes-master01             
kube-apiserver-kubernetes-master01            1/1     Running   0          kubernetes-master01             
kube-controller-manager-kubernetes-master01   1/1     Running   0          kubernetes-master01             
kube-flannel-ds-5w25c                         1/1     Running   0          kubernetes-master01              
kube-proxy-5gddj                              1/1     Running   0          kubernetes-master01           
kube-scheduler-kubernetes-master01            1/1     Running   0          kubernetes-master01            

可以看到,Master上运行着以下Pod:

  • coredns:Kubernetes集群的dns服务。
  • etcd:Kubernetes集群的状态的数据存储。
  • kube-apiserver:Kubernetes集群操作的API接口,我们与Kubernetes的所有操作,都是直接或间接的操作kube-apiserver。
  • kube-controller-manager:控制管理器,用来管理Kubernetes集群中的资源。
  • kube-scheduler:Kubernetes集群的调度器,用来决定如何将Pod调度到具体的节点上。
  • kube-flannel:网络组件。
  • kube-proxy:负责Service的负载均衡。

1、kube-apiserver

kube-apiserver的核心功能是提供了Kubernetes集群中的各种资源的操作接口,如增、删、改、查、及Watch等。kube-apiserver是集群内各功能模块之间数据交互和通信的中心枢纽,是整个Kubernetes集群的数据总线和数据中心。其中的Watch接口,可以实时关注某类资源的实时状态情况。kube-apiserver也具备以下的功能:

  • 集群管理的API入口。
  • 资源配额控制的入口。
  • 提供了完备的集群安全机制。

2、kube-controller-manager

kube-controller-manager是Kubernetes的中的资源管理器。Kubernetes集群中有很多的资源,如Node、Pod副本、服务端点Endpoint、命名空间namespace、服务账号ServiceAccount、及资源定额ResourceQuota等。kube-controller-manager负责这些资源的管理,以保证这些资源实际运行的状态达到这些资源被期望的状态。

3、kube-scheduler

kube-scheduler是Kubernetes集群中的调度器。kube-scheduler的作用是将待调度的Pod按照特定的调度算法和调度策略绑定到集群中某个合适的Node上,并将绑定信息通过调用kube-apiserver写入etcd中。

4、etcd

Kubernetes集群的数据中心,类似于微服务中的数据库的角色,Kubernetes集群常用的数据存储为etcd,根据具体的情况,也可以使用其他的存储。

四、下篇文章预告

从下篇文章开始,我们就要开始Kubernetes中的核心原理了。敬请期待。 读者看阅读我的专栏:Kubernetes系列文章