Kubernetes 架构

Kubernetes是一个全新的基于容器技术的分布式架构,虽然Kubernetes只有三年,但它是谷歌十几年以来大规模应用容器技术的经验积累和升华的一个重要发展成果。确切的说,Kubernetes是谷歌严格保密十几年的秘密武器----Borg的一个开源版本。Kubernetes的目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化。Kubernetes 具备完善的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力。 Kubernetes 还提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。由于Kubernetes站在Borg这个巨人的肩膀上,才让他有如此大的吸引力。

 

Kubernetes架构图

Kubernetes集群包含有节点代理kubelet和Master组件(APIs, controller manage,scheduler, etc),一切都基于分布式的存储系统。下面这张图是Kubernetes的架构图。

深入剖析kubertetes epub 深入剖析kubernetes_深入剖析kubertetes epub

 

 Kubernetes主要由以下几个核心组件组成:

  • etcd 保存整个集群状态的存储
  • apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
  • controller manager 负责维护集群的状态,保证资源处于预期状态,Controller Manager 由多种 controller 组成,包括 replication controller、endpoints controller、namespace controller、serviceaccounts controller 等。不同的 controller 管理不同的资源。例如 replication controller 管理 Deployment、StatefulSet、DaemonSet 的生命周期,namespace controller 管理 Namespace 资源。
  • scheduler 负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上,cheduler 在调度时会充分考虑 Cluster 的拓扑结构,当前各个节点的负载,以及应用对高可用、性能、数据亲和性的需求。
  • kubelet 负责维护容器的生命周期,同时也负责Volume(CSI)和网络(CNI)的管理, 是 Node 的 agent,当 Scheduler 确定在某个 Node 上运行 Pod 后,会将 Pod 的具体配置信息(image、volume 等)发送给该节点的 kubelet,kubelet 根据这些信息创建和运行容器,并向 Master 报告运行状态。
  • Container runtime 负责镜像管理以及Pod和容器的真正运行(CRI)
  • kube-proxy 负责为Service提供cluster内部的服务发现和负载均衡,service 在逻辑上代表了后端的多个 Pod,外界通过 service 访问 Pod。service 接收到的请求是如何转发到 Pod 的呢?这就是 kube-proxy 要完成的工作。每个 Node 都会运行 kube-proxy 服务,它负责将访问 service 的 TCP/UPD 数据流转发到后端的容器。如果有多个副本,kube-proxy 会实现负载均衡。

除了核心组件,还有一些推荐的Add-ons(附件):

  • kube-dns 负责为整个集群提供DNS服务
  • Ingress Controller 为服务提供外网入口
  • Heapster 提供资源监控
  • Dashboard 提供GUI
  • Federation 提供跨可用区的集群

Kubernetes master 架构

深入剖析kubertetes epub 深入剖析kubernetes_服务发现_02

 

Kubernetes Nodes 架构图

深入剖析kubertetes epub 深入剖析kubernetes_Pod_03