下面是 k8s 官网给到的一张集群组件示意图,其组件主要分为两大类:
控制平面组件 运行在 Kubernetes
集群的 主节点 上,负责管理集群的全局状态,以及协调和控制集群中的所有操作。
以下表格展示了有哪些 控制平面组件,以及对应的作用
组件名 | 作用 |
---|---|
kube-apiserver |
负责公开 K8s API,负责 API 请求处理,提供了资源操作的唯一入口(如认证、授权、访问控制、API 注册等),是 K8s 的前端控制平面组件 |
etcd |
Kubernetes 集群中的分布式键值存储,用于存储和共享集群状态信息和配置数据。所有的组件和工具都可以通过 etcd 获取集群中的信息和数据。 |
kube-scheduler |
负责资源调度,如监视新创建的、未指定运行节点(node) 的 Pods, 并选择节点来让 Pod 在上面运行。调度决策考虑的因素包括单个 Pod 及 Pods 集合的资源需求、软硬件及策略约束、 亲和性及反亲和性规范、数据位置、工作负载间的干扰等。 |
kube-controller-manager |
负责将 Pod 调度到可用的 Node 节点上运行,根据节点的资源情况和 Pod 的调度策略进行调度决策,如故障检测、自动扩展、滚动更新等。 |
cloud-controller-manager |
是 Kubernetes 的一个可选组件,它负责与云提供商(如 AWS、Azure、Google Cloud 等)的 API 交互,实现了一些针对云环境的特定功能。 |
Node 组件 运行在 Kubernetes
集群中的 每个节点 上,负责管理和维护节点的状态,以及在节点上运行的容器实例。
以下表格展示了有哪些 Node组件,以及对应的作用
组件名 | 作用 |
---|---|
kubelet |
在每个节点上运行的代理,负责管理和维护该节点上的容器实例。Kubelet 会从 API Server 中获取 Pod 的配置信息,并确保该节点上的容器实例按照配置要求运行。 |
kube-proxy |
在每个节点上运行的网络代理,负责将 Service 和 Pod 之间的网络流量转发到正确的目标。Kube-Proxy 会监听 Kubernetes 集群中的 Service 和 Endpoint 对象的变化,并自动更新节点上的网络规则。 |
Container Runtime |
在每个节点上运行的容器运行环境,负责在节点上运行和管理容器实例。 |
温馨提醒
kubelet
不会管理不是由Kubernetes
创建的容器。- 一般建议将
kube-proxy
运行在工作节点上,而不是主节点上(因为会占用额外的资源),以确保Kubernetes
集群的稳定性和高可用性。
名字 | 说明 |
---|---|
Pod |
是 Kubernetes 最基本的部署单元,可以 包含一个或多个容器。多个容器共享 Pod 的网络和存储空间,因此它们之间可以轻松地通信和共享数据。 |
Deployment |
是 Kubernetes 中 用于管理 Pod 副本的控制器,用于确保指定数量的 Pod 副本在集群中运行。通过 Deployment,可以轻松地进行 Pod 的滚动升级、回滚、扩容和缩容等操作。 |
Service |
是 Kubernetes 中 用于暴露 Pod 的网络服务,可以将 Pod 与 Service 进行关联,从而实现负载均衡、服务发现等功能。通过 Service,可以在集群内部或集群外部访问 Pod 提供的服务。 |
ReplicaSet |
是 Kubernetes 中用于管理 Pod 副本数量的控制器,可以确保指定数量的 Pod 副本在集群中运行,并提供自动扩缩容和故障恢复等功能。 |
Node |
是 Kubernetes 集群中的一个工作节点,可以运行容器实例并承担负载均衡、网络代理等功能。一个 Kubernetes 集群可以包含多个 Node,它们可以组成一个逻辑集群,共同运行和管理容器实例。 |
Namespace |
是 Kubernetes 中 用于划分资源隔离的逻辑分区,可以将集群中的资源划分为多个独立的命名空间,从而实现资源隔离和权限控制等功能。 |
Volume |
是 Kubernetes 中 用于管理容器数据持久化的一种机制,可以将容器中的数据存储到持久化存储设备中,并在容器重启或迁移时保留数据。Kubernetes 支持多种 Volume 类型,包括 HostPath 、EmptyDir 、PersistentVolume 等。 |
Secret |
是 Kubernetes 中 用于管理敏感数据的一种机制,可以将敏感数据存储在 Secret 中,并在容器中使用它们。Kubernetes 中的 Secret 支持多种加密方式,包括 base64 编码、TLS 证书、SSH 私钥等。 |
DaemonSet |
是 Kubernetes 中用于运行在每个节点上的 Pod 的控制器,可以确保每个节点上都运行指定数量的 Pod。 |
StatefulSet |
是 Kubernetes 中用于运行有状态应用程序的控制器,可以确保每个 Pod 拥有唯一的网络标识和持久化存储。 |
Job |
是 Kubernetes 中用于运行短暂任务的控制器,可以确保任务的成功执行,并记录任务的历史和状态。 |
CronJob |
是 Kubernetes 中用于定时运行任务的控制器,可以根据指定的时间表自动运行任务。 |
Horizontal Pod Autoscaler(HPA) |
是 Kubernetes 中用于自动调整 Pod 副本数量的控制器,可以根据 CPU 使用率或者其他指标自动扩容或者缩容 Pod。 |
Kubernetes Dashboard |
是 Kubernetes 提供的一个 Web 界面管理工具,可以帮助用户监控和管理 Kubernetes 集群。 |
Ingress |
是 Kubernetes 中用于管理集群内外部流量的一种机制,可以将不同的服务通过不同的路由映射到集群内或者集群外的不同地址。 |
Init Containers |
是 Kubernetes 中用于初始化 Pod 环境的容器,可以在主容器启动之前运行,并执行一些初始化操作。 |
Sidecar Containers |
是 Kubernetes 中与主容器共享 Pod 环境的容器,可以为主容器提供额外的功能和服务,如日志收集、监控、代理等。 |
配置管理 |
是指在 Kubernetes 中管理应用程序配置文件的一些机制,包括 ConfigMap 和 Secret 等对象,可以将应用程序配置文件存储为对象,并在 Pod 中使用。 |
Lifecycle Hooks |
是指在 Kubernetes 中在 Pod 生命周期中添加额外的自定义操作的一些机制,包括容器的启动前钩子、容器的启动后钩子等。 |
Custom Resources |
是指在 Kubernetes 中通过自定义资源定义和实现自定义 API 对象的一种机制,可以扩展 Kubernetes 的能力和灵活性。 |
PersistentVolumeClaim |
是 Kubernetes 中用于声明持久化存储需求的对象,可以为 Pod 提供持久化存储,并支持多种存储后端类型,如 NFS 、iSCSI 、Ceph 、GlusterFs 等。 |
Label |
是 Kubernetes 中用于标识和选择对象的一种机制,可以为对象添加自定义的键值对标签,并通过标签选择器进行对象的筛选和管理。 |
Annotation |
是 Kubernetes 中用于为对象添加元数据的一种机制,可以为对象添加任意的键值对注释,并在对象的生命周期中保留和使用这些注释。 |
Taint |
污点,是 Kubernetes 中一种节点级别的标记,可以标记节点不可调度或者只能调度特定类型的 Pod。当某个节点被标记了 taint 之后,只有带有对应容忍度的 Pod 才能在该节点上运行。 |
Toleration |
容忍度,是 Kubernetes 中一种 Pod 级别的设置,可以指定容忍特定类型的 taint 。当 Pod 带有对应的 toleration 时,就可以在被标记了对应 taint 的节点上运行。 |
ServiceMesh |
是 Kubernetes 中用于管理微服务架构的一种解决方案,提供了流量管理、安全、监控、追踪等功能。 |
Operator |
是 Kubernetes 中一种自动化管理应用程序的解决方案,可以根据自定义规则和策略自动管理和扩展应用程序。 |
ReplicaSet
和 Deployment
的区别ReplicaSet
旨在确保指定数量的 Pod 副本在集群中运行,而 Deployment
除了提供 ReplicaSet 的功能外,还提供了应用程序部署的滚动升级、回滚、扩缩容等功能,可以更好地管理应用程序的生命周期。ReplicaSet
是 Kubernetes 中的一个核心 API 对象,而 Deployment
是基于 ReplicaSet
的高级 API 对象,它在 ReplicaSet
的基础上增加了更多的功能和控制选项。ReplicaSet
只能进行基本的滚动更新,即先创建新的 Pod,再删除旧的 Pod,而 Deployment
支持多种更新策略,如 Recreate 策略
、RollingUpdate 策略
等,可以根据不同的需求进行选择。Deployment
和 ReplicaSet
的标签选择器不同,Deployment
支持更灵活的标签选择器,可以根据多个标签进行选择,而 ReplicaSet
只能根据一个标签进行选择。