Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。K8s集群分为两个部分,分别是master节点和worker节点,先看两个节点的组成:

master节点

master节点由etcd分布式持久化存储、API服务器、调度器、控制器管理器组成,这些组件用来存储、管理集群状态
API 服务器是 Kubernetes 控制面的前端,用于和其余的组件进行通信
etcd可以作为保存 Kubernetes 所有集群数据的后台数据库,是集群中唯一一个存储集群状态和元数据的组件
raft一致性算法

etcd

etcd是一个响应快、分布式、一致性存储的k-v存储,因此它是分布式的,因此可以运行多个etcd实例来获取高可用和更好的性能。
唯一能和etcd通信的是API服务器,所有其他组件通过API服务器间接地读取、写入数据到etcd,这能带来增强乐观锁系统、验证系统的健壮性。且etcd是K8s中存储集群状态和元数据的唯一地方

API服务器

API服务器作为中心组件,其他组件或者是客户端都会去调用API服务器,以RESTful API的形式提供了CRUD(Created,Read,Update,Delete)接口

其工作内容为通过认证插件认证客户端、通过授权插件授权客户端、通过准入控制插件验证AND/OR修改资源请求、验证资源以及持久化资源等。即启动控制器以及其他一些组件来监控已部署资源的变更。并不会告诉控制器去做什么,只是通知服务器该变更操作

可以使用监听机制,当创建、修改、删除Pod时会通知

API服务器的客户端之一就是命令行工具kebectl

调度器

调度器的工作就是利用API服务器的监听机制等待新创建的Pod,然后给每个新的、没有节点集的Pod分配节点。不会命令选中的节点去运行pod,只会通过API服务器更新pod的定义。然后API服务器再去通知Kubelet该pod已经被调度过了。当目标节点的kubelet发现该节点被调度到本届点,就会创建并且运行pod的容器

控制器管理器

控制器是活跃的K8s组件,去进行具体的部署资源工作。通过API服务器去监听资源的变更

worker节点

worker节点由kubelet、kubelet服务代理(kubectl proxy)、容器运行时(docker或者时rkt等)组成

kubelet是一个在集群中每个节点上运行的代理,它保证容器都运行在 Pod 中
kube-proxy 是集群中每个节点上运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。kube-proxy 维护节点上的网络规则
容器运行环境是负责运行容器的软件

除此之外,还有一些额外的节点,用来提供额外的功能时需要添加(如Ingress控制器、kubernetes DNS服务器等)

kubelet

kubelet是负责所有运行在工作节点上的内容,做的第一件事情就是在API服务器中创建一个Node资源来注册该节点。然后需要持续监控API服务器是否把节点分配给Pod,然后启动Pod

kube-proxy

kube-proxy确保客户端能够通过API服务器连接到定义的服务。即确保对服务IP和端口的连接最终能到达支撑服务的某个Pod处。若有多个Pod,则kube-proxy会担任负载均衡的作用

有两种代理模式,一种是userspace代理模式,还有一种是iptables代理模式,其区别在于userspace代理模式需要在userspace空间且userspace模式需要将数据包转发给kube-proxy,再由代理服务器将数据包转发给后端真正提供服务的Pod,且采用轮询模式进行负载均衡。而iptables代理模式则直接用iptables重定向,将数据包直接重定向到后端提供服务的pod处,随机选择pod进行负载均衡,是当前默认的代理模式

处理和service相关的任何事情

其他插件

1.集群 DNS 是一个 DNS 服务器,和环境中的其他 DNS 服务器一起工作,它为 Kubernetes 服务提供 DNS 记录
2.Web 界面(仪表盘) ,Dashboard 是Kubernetes 集群的通用的、基于 Web 的用户界面。 它使用户可以管理集群中运行的应用程序以及集群本身并进行故障排除。

Ingress

Ingress是七层的负载均衡器,用来对流量进行转发到后端提供服务的Pod处,且外部客户端通过Ingress连接时,会对客户端的IP进行保存,因此会比service更受欢迎

Pod

Pod是运行在节点上的最小单元,其有几种状态:
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐