架构概览
Kubernetes
(通常称为 K8s) 是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。Google 设计并捐赠给 Cloud Native Computing Foundation(CNCF,今属 Linux 基金会)来使用的。它旨在提供 “跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。它支持一系列容器工具, 包括 Docker 等。 -- 摘自维基百科 Kubernetes 词条

kubernetes-architecuture
Kubernetes 控制平面由一系列组件组成,可以运行在一个单独的主节点上,也可以分布部署以支持高可用集群,或者运行在 Kubernetes 之上。
- kube-apiserver
- etcd
etcd
是一个分布式 key-value 数据库,Kubernetes 用 etcd
作为后端数据存储。集群所有的持久性状态都存储在 etcd
实例中。etcd
提供了可靠配置数据存储。通过 watch
的支持,可以非常快速地通知协调组件变更。- kube-controller-manager
集群内部的管理控制中心,如 Node、Volume、Deployment 、Service 等资源管理,以及空间生命周期,Pod GC、节点 GC 等。
- kube-scheduler
执行 pod 的相关调度。调度程序监视未调度的 pod,并根据所请求资源的可用性,服务质量要求、亲和性和反亲和性设置以及其它约束,通过
/binding
pod 子资源 API 绑定到相应节点。Kubelet 是 Kubernetes 中最重要和突出的控制器,它是驱动容器执行层的 Pod 和 Node API 的主要实现者。没有这些 API,Kubernetes 只是一个后端由键值存储支持的面向 CRUD 的 REST 应用程序框架。
每一个节点运行一个容器运行时,负责下载镜像和运行容器。Kubelet 不集成容器运行时。作为替代,定义了一个 Container Runtime Interface 控制底层运行时并促进该层的可插拔性。当前支持的有 docker、rkt、cri-o、frakti。
service 的抽象提供了一种在 公共访问策略(如负载均衡)下对 pod 进行分组的方式。Service 通过创建 VIP,提供给客户端访问,再透明代理到 Service 中的 pods。每个节点都运行一个 kube-proxy 进程,该进程维护一套 iptables 规则,以捕获对服务 IPs 的访问,并重定向到正确的后端(1.12.x ipvs 正式 GA,性能相对 iptables 有很大的提升)。
附上华为关于 Service 性能这块的介绍,主要是对比 ipvs 和 iptables:
Kubernetes GUI 从体验上来说还是相对比较差的,可以使用一些开源的替代版本:
- 360 开源的 Kubernetes 多集群 Web UI
最近更新 3yr ago