Kubernetes 及 Operator 入门
K8s
什么是 Kubernetes?有人说它是一个容器编排系统,有人称它为分布式操作系统,有人认为它是一个多云的 PaaS(平台即服务)平台,还有人把它看作是构建 PaaS 解决方案的平台。
本文将介绍 Kubernetes 的关键概念和构建模块。
K8s 控制平面(Control Plane)
Kubernetes 控制平面是 Kubernetes 的大脑和心脏。它负责管理整个集群的运行,包括处理 API 请求、存储配置数据以及确保集群处于期望的状态。关键组件包括 API 服务器(API Server,负责通信)、etcd(存储所有集群数据)、控制器管理器(Controller Manager,确保集群处于期望的状态)、调度器(Scheduler,将工作负载分配给节点)以及云控制器管理器(Cloud Controller Manager,管理与云平台的集成,如负载均衡、存储和网络)。这些组件共同协调容器在集群中的部署、扩展和管理。
节点(Node)
有人将 Kubernetes 描述为一个分布式操作系统,能够管理多个节点。节点是集群中的物理或虚拟机器,作为集群中的工作单元。每个节点都运行一些核心服务,包括容器运行时(如 Docker 或 containerd)、kubelet 和 kube-proxy。kubelet 确保容器按 Pod 中的配置运行,而 Pod 是 Kubernetes 中最小的可部署单元。kube-proxy 处理网络路由,维护网络规则,并允许 Pod 和服务之间的通信。节点提供运行容器化应用所需的计算资源,并由 Kubernetes 主节点管理,主节点负责分配任务、监控节点健康状况并保持集群的期望状态。
在某些语境中,同时讨论 Kubernetes 和数据库时,“节点”一词可能会产生混淆。在 Kubernetes 中,“节点”指的是集群中作为工作单元的物理或虚拟机器,用于运行容器化应用。而在 Kubernetes 中运行数据库时,“数据库节点”一般是指承载数据库实例的 Pod。
在 KubeBlocks 文档中,“节点”通常指的是数据库节点。如果我们指的是 Kubernetes 节点,我们将明确说明为“K8s 节点”以避免混淆。
kubelet
kubelet 是 Kubernetes 控制平面用于管理集群中每个节点的代理。它确保 Pod 中的容器按 Kubernetes 控制平面定义的方式运行。kubelet 持续监控容器的状态,确保它们健康且按预期运行。如果容器失败,kubelet 会根据指定的策略尝试重启它。
Pod
在 Kubernetes 中,Pod 在某种程度上类似于虚拟机,但更轻量和专用。它是 Kubernetes 中最小的可部署单元。
Pod 代表一个或多个紧密耦合且需要协同工作的容器,以及共享存储(卷)、网络资源和运行容器的规范。这些容器可以使用本地地址(localhost)进行相互通信,并共享内存和存储等资源。
Kubernetes 动态管理 Pods,确保它们按指定的方式运行,并在失败时自动重启或替换 Pods 。Pods 可以分布在多个节点上以实现冗余,因此在 Kubernetes 中部署和管理容器化应用(包括数据库)时,Pods 是基础构件。
存储类(Storage Class)
在为 Pod 内的工作负载(例如数据库)创建磁盘时,您可能需要指定磁盘介质的类型,无论是 HDD 还是 SSD。在云环境中,通常会有更多的选项可供选择。例如,AWS EBS 提供多种卷类型,如通用 SSD(gp2/gp3)、预配置 IOPS SSD(io1/io2)和优化吞吐量的 HDD(st1)。在 Kubernetes 中,您可以通过存储类(StorageClass)选择所需的磁盘类型。
持久卷声明(PVC)
在 Kubernetes 中,持久卷声明(PVC,Persistent Volume Claim)是用户对存储的请求。PVC 本质上是请求具有特定特性的存储的一种方式,例如存储类、大小和访问模式(如读写或只读)。PVC 使 Pods 能够使用存储,而无需了解底层基础设施的详细信息。
在 K8s 中,为了使用存储,用户会创建 PVC。创建 PVC 时,Kubernetes 会查找与请求匹配的 StorageClass。如果找到匹配的 StorageClass,Kubernetes 将根据定义的参数自动配置存储,无论是 SSD、HDD、EBS 还是 NAS。如果 PVC 未指定 StorageClass,Kubernetes 将使用默认的 StorageClass(如果已配置)来配置存储。