
1 2 3 4 |
Kubernetes 遵循非常传统的客户端/服务端的架构模式,客户端可以通过 RESTful 接口或者直接 kubectl 与 Kubernetes 集群进行通信,这两者在实际上并没有太多的区别,后者也只是对 Kub 提供的 RESTful API 进行封装并提供出来。每一个 Kubernetes 集群都是由一组 Master 节点 Worker 节点组成,其中 Master 节点主要负责存储集群的状态并为 Kubernetes 对象分配和调度资源 |


作为管理集群状态的 master 节点,它主要负责接收客户端的请求,安排容器的执行并且运行控制循环,将集群的状态向目标状态进行迁移。Master节点内部由下面三个组件构成:

1 2 3 4 5 6 7 8 9 10 11 12 13 |
api-server:负责处理来自用户的请求,其主要作用就是对外提供 RESTfu1的接口,包括用于查看集群状态的读请求以及改变集群状态的写请求,也是唯--个与 etcd 集群通信的组件。 etcd : 是兼具一致性和高可用性的键值数据库,可以作为保存 ubernetes 所有集群数据的后台数据库。 scheduler :主节点上的组件,该组件监视那些新创建的未指定运行节点的Pod,并选择节点让 Pod 在上面运行。调度决策考虑的因素包括单个Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。 在主节点上运行控制器的组件,从逻辑上讲,每个控制器都是一个单独的进程 controller-manager:但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。 这些控制器包括: 节点控制器(负责在节点出现故障时进行通知和响应) 副本控制器(负责为系统中的每个副本控制器对象维护正确数量的 Pod) 端点控制器(填充端点 Endpoints对象,即加入Service与Pod))、 服务帐户和令牌控制器(为新的命名空间创建默认帐户和 API 访问令牌)。 |
工作节点 – Node 架构

1 2 3 4 5 6 |
其他的 Worker 节点实现就相对比较简单了,它主要由 kubelet 和 kube-proxy 两部分组成。 kubelet :是工作节点执行操作的 agent,负责具体的容器生命周期管理,根据从数据库中获取的信息来管理容器,并上报 pod 运行状态等。 kube-proxy:是一个简单的网络访问代理,同时也是一个Load Balancer。 它负责将访问到某个服务的请求具体分配给工作节点上同一类标签的Pod。 kube-proxy 实质就是通过操作防火墙规则(iptables或者ipvs)来实现 Pod 的映射。 容器运行环境是负责运行容器的软件,Kubernetes支持多个容器运行环境:Container Runtime:rktlet 以及任何实现Docker、containerd、cri-0、Kubernetes CRI(容器运行环境接口)。 |

三 、kubernetes组件说明

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
主要由以下几个核心组件组成: apiserver 所有服务访问的唯一入口,提供认证、授权、访问控制、API 注册和发现等机制 controller manager 负责维护集群的状态,比如副本期望数量、故障检测、自动扩展、滚动更新等 scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上 etcd 键值对数据库,保存了整个集群的状态 kubelet 负责维护容器的生命周期,同时也负责 Volume 和网络的管理 kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡 Container runtime 负责镜像管理以及 Pod 和容器的真正运行 |
除了核心组件,还有一些推荐的插件:
1 2 3 4 5 6 7 8 9 10 |
CoreDNS 可以为集群中的 SVC 创建一个域名 IP 的对应关系解析的 DNS 服务 Dashboard 给 K8s 集群提供了一个 B/S 架构的访问入口 Ingress Controller 官方只能够实现四层的网络代理,而Ingress 可以实现七层的代理 Prometheus 给 K8s 集群提供资源监控的能力 Federation 提供一个可以跨集群中心多 K8s 的统一管理功能,提供跨可用区的集群 |
- 本文固定链接: https://www.yoyoask.com/?p=12361
- 转载请注明: shooter 于 SHOOTER 发表