Skip to content

Docker - Kubernetes 架构

Kubernetes(通常简写为 K8s)是一个强大的开源系统,用于自动化容器化应用的部署、扩缩和管理。虽然 Docker 提供了容器运行时,但 Kubernetes 可以在机器集群中编排这些容器。

可以将 Docker 看作是构建标准化集装箱(您的应用镜像),而 Kubernetes 则是全球航运物流系统(大规模管理这些集装箱在哪里以及如何运行)。

Kubernetes 集群由两种主要类型的组件组成:

  • 控制平面 (Control Plane, 曾称作 Master Node): 管理整个集群状态。它对集群做出全局决策(例如,调度应用)并检测和响应集群事件。
  • 工作节点 (Worker Nodes, 曾称作 Minions): 这些是实际运行您的容器化应用的机器(VM 或物理服务器)。

控制平面组件通常运行在专用机器上,而工作节点则托管应用负载。

  • kube-apiserver: Kubernetes 控制平面的前端。它暴露 Kubernetes API,用户、管理工具和其他集群组件都通过此 API 进行交互。
  • etcd: 一个一致且高可用的键值存储,用作 Kubernetes 所有集群数据(状态、配置等)的后备存储。
  • kube-scheduler: 监控新创建的、尚未分配节点的 Pods(Kubernetes 中最小的可部署单元,通常包含一个或多个容器),并根据资源需求、策略等为其选择一个运行节点。
  • kube-controller-manager: 运行控制器进程,这些进程调节集群的状态。示例包括 Node 控制器(处理节点故障)、Replication 控制器(维护正确数量的 Pods)等。
  • cloud-controller-manager (可选): 与底层云提供商的 API 进行交互(例如,用于管理负载均衡器或存储)。
  • kubelet: 运行在每个工作节点上的代理。它确保 PodSpecs(由 API 服务器提供)中描述的容器正在运行且健康。
  • kube-proxy: 运行在每个节点上的网络代理,维护网络规则并启用从集群内部或外部的网络会话到 Pods 的网络通信。
  • 容器运行时 (Container Runtime): 负责运行容器的软件。Docker 是一个流行的选择,但 Kubernetes 也支持其他运行时,如 containerd 和 CRI-O。
  • Pods: 最小的可部署单元,代表集群中运行进程的单一实例。Pods 包含一个或多个容器(如 Docker 容器),这些容器共享存储和网络资源。
  • Services (服务): 一种抽象方式,用于将运行在一组 Pods 上的应用暴露为网络服务。为访问 Pods 提供稳定的 IP 地址和 DNS 名称。
  • Deployments (部署): 一种声明式方式,用于管理 Pods 和 ReplicaSets(确保指定数量的 Pod 副本正在运行)。处理滚动更新和回滚。
  • Namespaces (命名空间): 提供一种在多个用户或团队之间划分集群资源的方式。

Kubernetes 编排这些组件,为运行通过 Docker 镜像定义的容器化应用提供了弹性、可伸缩的平台。