文章目录
- 1、总体概览
- [2、第一层:物理机、集群、Node、Pod 之间的关系](#2、第一层:物理机、集群、Node、Pod 之间的关系)
- [2、第二层:命名空间 Namespace](#2、第二层:命名空间 Namespace)
- 3、定义
- [4、控制平面(Control Plane)](#4、控制平面(Control Plane))
- [5、特别的概念 Service](#5、特别的概念 Service)
- 6、Deployment
经过 之前几篇文章对 k8s 的实践,结合实践,对 k8s 中的主要概念进行一下梳理。
1、总体概览
(图片来自互联网)
2、第一层:物理机、集群、Node、Pod 之间的关系
物理机是构建集群的基础。
集群由多个Node组成,Node 是集群的工作单元。
每个Node可以运行多个Pod,这些 Pod 执行具体的应用程序。
简单说,如下
真实物理机
└── 集群
├── Node 1
│ ├── Pod A
│ └── Pod B
├── Node 2
│ └── Pod C
└── Node 3
├── Pod D
└── Pod E
2、第二层:命名空间 Namespace
在 k8s 中,命名空间(Namespace)是集群内的一种逻辑归类。
由于k8s 的特性,命名空间 只是一种 集群内资源的逻辑归类,该Namespance 所管理的资源具体部署在哪一个 Node 的哪一个Pod 是k8s 自己决定的。
3、定义
- 真实物理机(Physical Machine)
定义:这是运行 Kubernetes 集群的实际硬件。
角色:提供计算、存储和网络资源。 - 集群(Cluster)
定义:由多个节点(Node)组成的集合,形成一个统一的计算环境。
角色:管理和调度容器化应用,提供高可用性和负载均衡。 - Node
定义:Kubernetes 集群中的一个工作机器,可以是物理机或虚拟机。
角色:
运行容器化应用的实际环境。
Node 上运行一个或多个 Pod。
每个 Node 运行一个 Kubelet 进程,用于管理 Pod。 - Pod
定义:Kubernetes 中的最小可部署单位,表示一个或多个容器的集合,通常共享网络和存储。
角色:
执行应用程序的实际实例。
可以包含一个或多个容器,通常是紧密相关的服务。 - 命名空间(Namespace)
定义:Kubernetes 中的一种逻辑隔离机制,用于将资源分组。
角色:
提供资源的隔离和组织,允许在同一集群中创建多个环境(如开发、测试、生产)。
同一命名空间内的资源可以互相访问,而不同命名空间间的资源需要明确的网络策略。
4、控制平面(Control Plane)
在 Kubernetes 中,控制平面(Control Plane)是负责管理和协调集群的组件集合。它确保集群的状态与用户的期望相符,处理所有的管理任务。以下是控制平面的主要组成部分及其功能:
- 主要组件
kube-apiserver:
提供集群的 API 接口,所有的操作(如创建、更新、删除资源)都是通过 API Server 进行的。
负责验证和处理 API 请求,并将其存储在 etcd 中。
etcd:
一个高可用的键值存储系统,用于保存 Kubernetes 集群的所有数据和状态信息。
作为集群的后端存储,提供数据的持久性和一致性。
kube-scheduler:
负责将新创建的 Pod 调度到适合的 Node 上。
根据 Node 的资源、标签、污点等信息做出调度决策。
kube-controller-manager:
运行各种控制器,负责监控集群状态并执行相应的操作。
常见的控制器包括节点控制器、复制控制器、端点控制器等。它们确保集群中资源的实际状态与期望状态一致。 - 控制平面的功能
集群管理:控制平面负责整个集群的管理和协调,确保资源的创建、更新和删除操作能够顺利执行。
状态监控:通过控制器,控制平面持续监控集群状态,并根据需要进行调整,确保系统的健康状态。
负载均衡:调度器确保 Pod 在集群中均匀分布,优化资源利用率。 - 与数据平面的关系
数据平面(Data Plane)指的是实际运行应用的 Node 和 Pod。控制平面与数据平面分离,确保集群的管理与应用的运行相互独立。
控制平面通过 API 与数据平面进行通信,发出指令,而数据平面负责执行这些指令。
总结
控制平面是 Kubernetes 的核心,负责集群的管理、调度和状态监控。它与数据平面紧密配合,确保集群能够高效、稳定地运行。通过这种分离的架构,Kubernetes 能够实现高可用性和灵活的扩展性。
5、特别的概念 Service
Service 是 Kubernetes 中一个非常重要的概念。下面是对 Kubernetes 中 Service 的详细介绍,包括其功能和工作原理。
Service 的定义
Service 是 Kubernetes 中用于定义一组 Pod 的访问策略的抽象。它为这些 Pod 提供了一个稳定的网络标识和访问方式,即使 Pod 的 IP 地址发生变化,Service 仍然可以保持稳定的访问。
主要功能
负载均衡:
Service 可以将流量分发到一组后端 Pod 上,确保请求能够均匀地分配,提升服务的可用性和性能。
稳定的访问点:
Pod 的 IP 地址可能会变化(例如,Pod 重启或调度到其他 Node),但 Service 提供了一个固定的 DNS 名称和 IP 地址,客户端可以通过这个稳定的接口访问 Pod。
服务发现:
Kubernetes 自动为每个 Service 创建 DNS 记录,允许其他 Pod 通过 Service 名称进行访问,简化了服务间的连接。
Service 的类型
Kubernetes 中有几种不同类型的 Service,每种类型适用于不同的场景:
ClusterIP(默认类型):
只在集群内部可访问,提供一个内部 IP 地址,用于在集群内进行服务发现。
NodePort:
在每个 Node 上开放一个端口,允许外部访问。通过 Node 的 IP 地址和指定的 NodePort,可以访问 Service。
LoadBalancer:
在云环境中使用时,自动创建一个外部负载均衡器,并将其分配给 Service。适合需要外部访问的服务。
ExternalName:
将 Service 映射到外部的 DNS 名称,允许 Kubernetes 集群中的 Pod 通过 Service 名称访问外部服务。
工作原理
选择器(Selector):
Service 使用标签选择器(Label Selector)来确定其后端 Pod。只有与选择器匹配的 Pod 会接收流量。
端点(Endpoints):
Kubernetes 会自动创建和维护 Endpoints 对象,它代表与 Service 相关联的 Pod 的 IP 地址和端口。当 Pod 的状态变化时,Endpoints 会自动更新。
网络代理:
Kube-proxy 运行在每个 Node 上,负责实现 Service 的负载均衡和网络代理。它根据 Service 的类型配置网络规则,将流量转发到后端 Pod。
总结
Service 是 Kubernetes 中连接和管理 Pod 的关键组件,提供了稳定的访问点、负载均衡和服务发现能力。通过不同的 Service 类型,用户可以灵活地配置服务的访问方式,满足不同的需求。
6、Deployment
定义:Deployment 是一种较高层次的 Kubernetes 资源,用于管理 Pod 的副本和生命周期。它定义了所需的 Pod 数量以及如何更新这些 Pod。
自动化管理:Deployment 可以自动处理 Pod 的创建、更新、回滚和故障恢复。它监控当前的 Pod 状态,并确保期望的状态(如 Pod 的副本数)与实际状态一致。
滚动更新:Deployment 支持滚动更新,可以在不影响服务可用性的情况下逐步更新 Pod。
用途:适用于需要高可用性和可扩展性的应用,通常在生产环境中使用。