文章目录
一、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专栏