K8S架构分析

Posted zhukaijian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K8S架构分析相关的知识,希望对你有一定的参考价值。

K8S集群简介

K8S的集群由master和node组成,节点上运行着若干K8S服务。 如下图

 

技术图片

 Master节点

master节点上运行着的后台服务有kube-apiserver,  kube-scheduler, kube-controller-manager, etcd 和pod 网络.(flannel)。如下图所示

技术图片

 1.API Server (kube-apiserver)

API Server是k8s的前端接口,各种客户端工具以及k8s其他组件可以通过它管理集群的各种资源。

2.Scheduler (kube-scheduler)

scheduler负责决定将pod放在哪个node上运行。另外scheduler在调度时会充分考虑集群的架构,当前各个节点的负载,以及应用对高可用,性能

数据亲和性的需求。

3.Controller Manager (kube-controller-manager)

负责管理集群的各种资源(创建Pod之类的),保证资源处于预期的状态

4.etcd

负责保存k8s集群的配置信息和各种资源的状态信息,当数据发生变化时,etcd会快速通知k8s相关组件

5.pod网络

pod要能够互相通信,k8s集群必须掌握pod网络,flannel是其中一个可选方案。

node节点

node是Pod运行的地方。node上运行的k8s组件有kublet,kube-proxy 和 Pod网络(flannel),如下图所示:

技术图片

 1.kubelet

是node的agent(代理),当scheduler去确定在某个node上运行pod后,会将pod的具体配置信息发送给该节点的kubelet,kubelet会根据遮羞信息

创建和运行容器,并向Master报告运行状态。

2.kube-proxy

每个node都会运行kube-proxy服务,外界通过service访问pod, kube-proxy负责将降访问service的TCP/UDP数据流转发到后端的容器/

如果有多个副本,Kube-proxy会实现负载均衡。

3.pod网络

pod能能够互相通信,k8s集群必须部署pod网络,flannel是其中一个可以选择的方案

部署过程图:

技术图片

 

① kubectl 发送部署请求到 API Server。

② API Server 通知 Controller Manager 创建一个 deployment 资源。

③ Scheduler 执行调度任务,将两个副本 Pod 分发到 k8s-node1 和 k8s-node2。

④ k8s-node1 和 k8s-node2 上的 kubectl 在各自的节点上创建并运行 Pod。

补充两点:

  1. 应用的配置和当前状态信息保存在 etcd 中,执行kubectl get pod 时 API Server 会从 etcd 中读取这些数据。

  2. flannel 会为每个 Pod 都分配 IP。因为没有创建 service,目前 kube-proxy 还没参与进来。

以上是关于K8S架构分析的主要内容,如果未能解决你的问题,请参考以下文章

八个维度讲解秒杀系统架构分析与实战

架构分析:「转转云平台」的 Kubernetes 实践

科普 | 处理器RISC和CISC架构分析对比

科普 | 处理器RISC和CISC架构分析对比

k8s client-go源码分析 informer源码分析-初始化与启动分析

基于k8s实现算法训练系统(架构思路+落地方案)