Kubernetes (通常简称为 K8s) 是一个开源的容器编排平台,由 Google 在 2014 年发布并捐赠给 Cloud Native Computing Foundation (CNCF)。Kubernetes 建立在容器化技术(如 Docker)的基础之上,旨在简化容器化应用程序的部署、管理和扩展过程。作为当今市场上最流行的容器编排系统之一,K8s 提供了一套强大的工具和API,使得开发团队能够以声明式的方式构建和运行可移植、弹性的微服务架构。
以下是 Kubernetes 中的一些关键概念:
-
Pod
- Pod 是 Kubernetes 中最小的可部署单元,代表了在集群中运行的一个进程实例及其所需资源。一个 Pod 可包含一个或多个紧密相关的容器,这些容器共享网络命名空间、存储卷和其他底层资源。Pod 通常被视为一个单一的服务单元,确保其内部的容器协同工作。
-
Node
- Node 是 Kubernetes 集群中的工作节点,可以是物理机或虚拟机。每个 Node 上运行着 Kubernetes 的代理(kubelet),以及其他必要的组件(如容器运行时、kube-proxy等),负责执行集群 Master 分配的任务,包括运行 Pods、监控其状态并向 Master 报告。
-
Cluster
- Cluster 由一个或多个 Master 节点和多个 Worker (Node) 节点组成,共同构成了 Kubernetes 的运行环境。Master 节点负责整个集群的管理和控制,而 Worker 节点则承载实际的应用负载。
-
Container
- Container 是 Docker 或其他符合 OCI (Open Container Initiative) 标准的容器引擎所管理的轻量级、独立运行的软件包,包含了应用程序及其依赖项。在 Kubernetes 中,Pod 内部的容器是实际执行业务逻辑的实体。
-
Deployment
- Deployment 是用来描述和管理应用实例(Pod)期望状态的高层抽象。它定义了应用的副本数量、更新策略(如滚动升级)、回滚选项等,并确保在出现故障或节点失效时,自动恢复到所需的副本数量。Deployments 是管理无状态应用的主要方式。
-
StatefulSet
- StatefulSet 类似于 Deployment,但专为管理有状态应用设计。它为每个 Pod 提供稳定的、唯一的标识符以及持久的存储卷,确保在扩缩容、迁移或重启时,Pod 之间的数据关系和网络标识保持不变。
-
Service
- Service 是 Kubernetes 中的一种抽象,用于定义一组 Pod 的访问策略(如负载均衡、DNS 名称、端口映射等),并提供稳定的网络接口来访问这些 Pod。即使 Pod 因故障或扩展而发生变化,Service 仍能确保流量被正确路由到可用的 Pod 实例。
-
Volume
- Volume 是 Kubernetes 中用于提供持久化存储能力的概念,允许数据在 Pod 的生命周期之外得以保留。它可以关联到 Pod 中的一个或多个容器,支持多种类型,如本地存储、网络存储(如 NFS、iSCSI、云提供商的块存储等)以及特定的云存储解决方案。
-
Namespace
- Namespace 为 Kubernetes 集群提供了逻辑上的划分,允许在同一个物理集群内创建多个独立的虚拟集群环境。每个 Namespace 可以有自己的资源配额、安全策略和访问控制,有助于组织内部不同团队、项目或环境的资源隔离与管理。
-
Controller
- Controller 是 Kubernetes 中负责维持集群状态与用户期望状态一致的组件。例如,Deployment Controller 会根据 Deployment 的规格调整 Pod 的数量和状态,确保实际状态始终匹配用户定义的期望状态。其他控制器包括 ReplicaSet、DaemonSet、Job、CronJob 等,分别对应不同的工作负载类型。
- ETCD
- ETCD 在 Kubernetes 集群中扮演着至关重要的角色,作为集群状态的基石,它提供了高可用、强一致的存储服务,支撑着集群的配置管理、服务发现、数据共享以及整体的协调控制。对 ETCD 的有效运维管理是保障 Kubernetes 集群稳定、安全运行的重要环节。
K8S的架构如下图: