以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!
目录
一、基本概念
1、Master 节点
Kubernetes 集群的管理节点,主要作用:
- 集中管理和控制整个 Kubernetes 集群
- 调度和分配容器应用程序到 Node 节点上
- 监控集群中的节点和应用程序的状态
- 提供 API 和命令行工具,用于管理和操作集群
2、Node 节点
Kubernetes 集群的资源节点,主要作用:
- 是运行容器应用程序的实际节点
- 运行容器运行时(如 Dockerd 或 Containerd)和 Kubernetes 代理(kubelet)
- 接收 Master 节点分配的应用程序任务,并启动、停止和监控容器的生命周期
- 执行容器网络和存储的配置和管理
- 提供资源(CPU、内存等)和服务(如服务发现和负载均衡)
3、API 对象
Kubernetes 集群的管理操作单元,包括 Pod、Deployment、Service、ConfigMap、Secrete 等。
每个 API 对象都有三大类属性:
- metedata:对象元数据
- spec:对象规范,用于描述对象的预期状态
- status:对象状态
Kubernetes 集群的管理操作都是声明式的,可以避免操作丢失或多次运行。
4、资源清单
Kubernetes 集群是一个完全以资源为中心的系统,所有对象都使用资源清单 manifest(YAML 或 JSON 格式) 来定义。
二、对象介绍(部分)
1、Namespace
命名空间,是对一组资源和对象的抽象集合,用于对 Kubernetes 集群中的资源进行隔离。
特殊的是,Node, PersistentVolume,StorageClass 等部分资源不属于任何 Namespace。
2、Pod
Kubernetes 集群调度的最小单位,是容器的二次封装。
- 每个 Pod 由一个根容器(Pause)和若干个业务容器组成,业务容器通过根容器共享网络和存储
- 每个 Pod 表示某个应用程序的一个实例
3、Label
标签,用于实现对象的分类和分组。
4、Deployment
无状态控制器,用于管理 Pod 副本。
创建 Deployment 时需要指定两个东西:
- Pod 模版:用于创建 Pod 副本
- Label 标签:用于监控 Pod 副本
5、ReplicaSet
副本集控制器,是 Pod 副本的抽象,用于对 Pod 副本进行伸缩和版本管理。
6、Service
Service 对象将背后的 Pod 聚合在一起,以单一入口的方式对外提供服务。
它定义了 Pod 的访问方式,使得其他应用程序通过 Service 对象即可访问到这些 Pod,而无需关心 Pod 的 IP 地址、端口号等。
- 匹配 Label 标签的 Pod IP 和端口列表组成 Endpoints(负载均衡列表),由 kube-proxy 将服务 IP 负载均衡到这些 Endpoints 上
- 每个 Service 都会自动分配一个 clusterIP(VIP)和 DNS 域名,其他容器可以通过该地址或 DNS 来访问服务,而不需要了解后端应用程序的运行
🔔 关于各类对象的详细概念,请前往官方文档自行查阅:Concepts | Kubernetes
三、组件介绍
1、Master 节点核心组件
- etcd:存储 Kubernetes 集群的后端数据(即集群的状态信息),是一种键值数据库
- kube-apiserver:资源操作的唯一入口,负责 etcd 的所有操作,如注册、发现、安全等
- kube-controller-manager:资源控制中心,负责维护集群的状态,如自动伸缩、滚动更新等
- kube-scheduler:调度 Pod,为 Pod 分配节点并绑定
2、Node 节点核心组件
- kubelet:负责处理 Master 下发到本节点的任务,管理 Pod 和 Pod 内的容器
- container runtime:容器运行时,用于运行容器
- cni 插件:容器运行时接口,提供网络通信服务,如 Flannel 或 Calico
- kube-proxy:负载均衡网络流量,为 Service 对象提供内部服务发现
3、可选组件
- ingress:为 Kubernetes 集群服务提供外网入口
- kube-dns / coredns:为 Kubernetes 集群提供 DNS 服务
- metrics:为 Kubernetes 集群提供资源监控服务
- dashboard:为 Kubernetes 集群提供 GUI 可视化界面
4、组件通信
以 Pod 创建流程为例:
- 用户通过 HTTP REST API(kube-apiserver)提交创建请求
- kube-apiserver 将其写入 etcd
- kube-controller-manager 创建资源
- kube-scheduler 检测到未绑定 Node 节点的 Pod,开始分配 Node 节点并进行绑定
- kube-apiserver 将其写入 etcd
- kubelet 检测到有新的 Pod 调度过来,通过 container runtime 将其运行起来
- kubelet 通过 container runtime 获取 Pod 状态,并更新到 kube-apiserver 中
- kube-apiserver 将其写入 etcd