跳转至

k8s架构解读

Kubernetes(K8s)是一个开源的容器编排平台,用于管理容器化应用程序。它由 Master 和 Work 节点组成。

k8s architecture

k8s 架构组成

Master节点组件

Master节点上运行以下主要组件:

  • kube-apiserver:K8s API服务器,是集群的控制中心,负责接收来自客户端的请求并对集群状态进行操作。
  • kube-scheduler:K8s调度器,负责将Pod调度到Worker节点上。
  • kube-controller-manager:K8s控制器管理器,负责运行各种控制器,如节点控制器、端点控制器、副本控制器等。
  • etcd:K8s的分布式数据存储,用于存储集群状态。

Info

除了原生的 kube-controller-manager 外,一般云厂商版本的 k8s 还会有一个 cloud-controller-manager 嵌入了特定于云平台的控制逻辑,允许将你的集群连接到云提供商的 API 之上。

Node节点组件

Node节点上运行以下主要组件:

  • kubelet:K8s代理,负责在Node节点上运行Pod。
  • kube-proxy:K8s代理,负责为Pod提供网络服务。
  • docker engine:容器引擎,用于运行容器。

此外,Node节点还可能运行以下可选组件:

  • kube-flannel:K8s 网络插件,用于在 Node 节点之间创建 Overlay 网络。
  • Calico:K8s 网络插件,用于在 Node 节点之间创建 Overlay 网络。
  • kube-collector:K8s 日志收集器,负责收集 Pod 日志。
  • node-exporter:Prometheus 导出器,用于导出 Node 节点的指标。

组件功能概述

  • kube-apiserver:是K8s API服务器,是集群的控制中心,负责接收来自客户端的请求并对集群状态进行操作。它提供RESTful API,允许用户查看、创建、更新和删除集群资源。
  • kube-scheduler:K8s调度器,负责将Pod调度到Worker节点上。它会考虑各种因素,例如Pod的资源需求、Node节点的可用资源和Pod的亲和性和反亲和性等。
  • kube-controller-manager:K8s控制器管理器,负责运行各种控制器,如节点控制器、端点控制器、副本控制器等。这些控制器会不断监视集群状态,并根据需要进行相应的操作。
  • etcd:K8s的分布式数据存储,用于存储集群状态。它是一个高度可用的键值存储系统,可以确保集群状态的一致性。
  • kubelet:K8s代理,负责在Node节点上运行Pod。它会根据kube-apiserver的指示创建、启动、停止和管理Pod。
  • kube-proxy:K8s代理,负责为Pod提供网络服务。它会将Pod的流量路由到相应的Pod实例上。
  • docker engine:容器引擎,用于运行容器。它负责创建、启动、停止和管理容器。

组件交互

Master节点上的组件和Node节点上的组件会相互交互以管理集群。例如,kube-scheduler会将Pod调度到Node节点上,然后kubelet会负责在Node节点上运行Pod。kube-proxy会为Pod提供网络服务,并确保Pod之间可以相互通信。

Kubernetes 组件

Kubernetes接口

alt

这张图会比上面第一张图更详细,这里会涉及三类接口:CRI、CNI、CSI。

1. CRI(Container Runtime Interface,容器运行时接口)

CRI用于定义容器运行时与Kubernetes集群之间通信的标准方式。它提供了一组API,用于管理容器的生命周期,例如创建、运行、停止和删除容器。常见的CRI实现包括Docker、containerd和CRI-O。

CRI的主要优势在于其可移植性,它允许用户在不修改K8s集群的情况下切换不同的容器运行时。

2. CNI(Container Network Interface,容器网络接口)

CNI用于定义容器与Pod网络之间通信的标准方式。它提供了一组插件,用于为Pod分配网络资源,例如IP地址、子网和路由。常见的CNI插件包括Flannel、Calico和Weave Net。

CNI使Kubernetes能够与各种网络环境兼容,并为容器提供灵活的网络配置。

3. CSI(Container Storage Interface,容器存储接口)

CSI用于定义容器与存储系统之间通信的标准方式。它提供了一组API,用于管理容器的存储卷,例如创建、挂载、卸载和删除存储卷。常见的CSI插件包括NFS、GlusterFS和Ceph。

CSI简化了容器存储的管理,并使Kubernetes能够支持各种存储系统。

总结

CRI、CNI和CSI是Kubernetes的关键接口,它们共同实现了容器的运行、网络和存储功能。这三个接口的出现,使Kubernetes更加灵活、可扩展,并能够支持各种应用场景。

Kubernetes分层架构

通常情况下K8S社区对k8s定义了5层:

  • (内核层)Nucleus: API and Execution
  • (应用层)Application Layer: Deployment and Routing
  • (治理层)Governance Layer: Automation and Policy Enforcement
  • (接口层)Interface Layer: Client Libraries and Tools
  • (生态系统)Ecosystem

k8s five layers

捐赠本站(Donate)

weixin_pay
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))