k8s整体架构与设计原理 | 青训营

74 阅读5分钟

"K8s" 是 "Kubernetes" 的简写,是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。Kubernetes 的目标是简化容器化应用程序的部署和运维,使开发者能够更轻松地管理复杂的容器化应用程序,从而提高应用程序的可靠性和可扩展性。

容器化是一种虚拟化技术,可以将应用程序及其所有依赖项打包在一个轻量级的环境中,称为容器。这使得应用程序能够在不同的计算环境中以一致的方式运行,从开发环境到生产环境。

Kubernetes 提供了以下主要功能:

  1. 自动化容器部署和伸缩: Kubernetes 允许你定义应用程序的部署规范,然后自动处理容器的创建、销毁和伸缩,以适应不同的负载情况。
  2. 自动容器位置调度: Kubernetes 可以根据资源需求和约束条件,在集群中的不同节点上调度容器,以确保高效的资源利用和负载平衡。
  3. 自动容器恢复: 如果容器或节点发生故障,Kubernetes 可以自动重新启动容器或迁移容器到其他健康的节点,以实现高可用性。
  4. 自动应用程序升级和回滚: Kubernetes 支持无缝地进行应用程序的升级和回滚,以确保应用程序在不中断服务的情况下进行更新。
  5. 容器间通信和服务发现: Kubernetes 提供了内建的服务发现和负载均衡机制,使容器能够轻松地相互通信,构建微服务架构。
  6. 存储管理: Kubernetes 允许你声明式地管理应用程序所需的存储卷,并自动将其挂载到容器中。
  7. 配置管理: Kubernetes 允许你将配置信息从应用程序代码中分离出来,并动态地进行配置更改,而无需重新部署应用程序。
  8. 密钥和密码管理: Kubernetes 提供了安全的方式来管理敏感信息,如密码和密钥。

Kubernetes 已经成为容器化部署和管理的事实标准,被广泛用于构建和运行云原生应用程序。它支持多种容器运行时,包括 Docker,并且可以在各种云平台和私有数据中心中部署。

image.png

架构概述:

Kubernetes 的整体架构可以分为以下几个主要组件:

  1. Master 组件: Master 组件是整个集群的控制中心,负责管理和控制集群中的所有操作。它包括以下核心组件:

    • API Server: 提供集群内部和外部的 API 接口,供用户和其他组件进行交互。
    • Controller Manager: 负责监控集群状态的变化,以确保期望状态与实际状态一致。它包括多个控制器,如 ReplicaSet、Deployment、Namespace 等。
    • Scheduler: 负责将待调度的 Pod 分配到合适的节点上,考虑资源需求、节点负载和亲和性规则等。
    • etcd: 是一个分布式键值存储系统,用于存储集群的配置信息、状态和元数据。
  2. Node 组件: Node 组件运行在每个节点上,负责在节点级别管理容器和相关资源。每个节点上都运行了以下组件:

    • Kubelet: 监控 Master 节点的指令,确保在节点上运行的容器处于健康状态。
    • Kube Proxy: 负责在节点上维护网络代理,实现服务发现和负载均衡。
    • Container Runtime: 负责运行容器,支持多种容器运行时,如 Docker、containerd 等。
  3. 网络插件: Kubernetes 集群需要一个网络插件,以便容器能够在不同节点之间通信,并且实现服务的负载均衡。常用的网络插件包括 Calico、Flannel、Cilium 等。

  4. 存储插件: 存储插件允许容器使用持久化存储卷,并且在容器迁移时保持数据的一致性。一些存储插件包括 CSI(Container Storage Interface)插件。

设计原理:

  1. 自愈性和自动化: Kubernetes 的设计强调自愈能力,即自动检测和处理故障,例如自动重新启动失败的容器或迁移到其他健康节点。这使得应用程序具有更高的可用性。
  2. 声明式配置: Kubernetes 鼓励使用声明式配置方式,用户通过定义期望状态的 YAML 文件来描述应用程序、服务和资源的规范,而不是编写详细的操作指令。
  3. 抽象化和解耦: Kubernetes 提供了多个抽象层次,如 Pod、Service、Deployment 等,使开发人员能够更专注于应用程序的逻辑,而不用关心底层基础设施的细节。
  4. 弹性和扩展性: Kubernetes 可以动态地伸缩应用程序,根据负载自动扩展或收缩容器实例数量。它还支持将应用程序分布在多个节点上,以实现水平扩展。
  5. 服务发现和负载均衡: Kubernetes 提供内建的服务发现和负载均衡机制,使容器能够通过服务名来相互通信,而不需要知道具体的 IP 地址。
  6. 多租户支持: Kubernetes 支持多个命名空间(Namespace),允许在同一个集群中隔离不同团队或应用程序。
  7. 可插拔性: Kubernetes 设计为可扩展和可插拔的架构,可以通过自定义插件和扩展来满足特定需求,如网络插件、存储插件等。