Kubernetes (k8s) 相关名词详解原创
了解Kubernetes(简称k8s)相关的名词有助于更好地使用和管理Kubernetes集群。以下是一些常见的Kubernetes相关名词及其详细介绍:
版本说明
本文的名词释义基于 Kubernetes 1.20+ 的稳定 API,截至 1.31 这些核心对象的语义未变。
唯一需要注意版本的是 PodSecurityPolicy(1.25 已移除,改用 Pod Security Admission)与 in-tree 存储插件(1.27 完成 CSI 迁移),本文未涉及。
# 1. Pod
Pod 是 Kubernetes 中最小的部署单元,一个 Pod 可以包含一个或多个容器,这些容器共享网络和存储资源。Pod 通常用于运行一个应用程序的一个实例。
# 2. Node
Node 是 Kubernetes 集群中的一台服务器,可以是物理机也可以是虚拟机。每个 Node 上运行一个 kubelet 服务,负责与 Kubernetes API server 通信,并管理该 Node 上的 Pod。
# 3. Cluster
Cluster 是一组 Node 的集合,通过 Kubernetes API 进行统一管理。集群可以在本地数据中心或云环境中部署。
# 4. Namespace
Namespace 是 Kubernetes 中的一个逻辑隔离单位,用于将集群中的资源划分为不同的组。不同的 Namespace 之间的资源默认是隔离的,但可以通过某些配置进行跨 Namespace 访问。
# 5. Deployment
Deployment 是 Kubernetes 中用于声明应用的生命周期管理的资源。通过 Deployment,可以定义 Pod 的副本数、更新策略等,Kubernetes 会自动管理这些 Pod 的创建、删除和更新。
# 6. Service
Service 是 Kubernetes 中用于定义一组 Pod 的网络访问策略。Service 提供了一个稳定的 IP 地址和 DNS 名称,用于访问与其关联的 Pod。
# 7. ConfigMap
ConfigMap 用于在 Kubernetes 中存储非机密的配置数据,以键值对的形式存储。Pod 可以将 ConfigMap 中的数据挂载为环境变量或配置文件。
# 8. Secret
Secret 与 ConfigMap 类似,但用于存储敏感信息,如密码、OAuth 令牌等。注意一个常见误解:Secret 里的 Base64 是编码而不是加密——任何能读到该 Secret 的人 base64 -d 一下就是明文,而且 Secret 默认在 etcd 中以明文存储,必须显式配置 EncryptionConfiguration(API Server 的 --encryption-provider-config)才有静态加密。Secret 相对 ConfigMap 真正多出来的保护是三点:可以用 RBAC 单独收紧读取权限、挂载进 Pod 时走 tmpfs 内存文件系统而不落节点磁盘、以及不会被 kubectl describe 直接打印出内容。把 Secret 当成「天然安全」来用,是生产环境泄密的常见起点。
# 9. Volume
Volume 是 Kubernetes 中用于给容器挂载存储的抽象,同一个 Pod 内的多个容器可以共享同一个 Volume。生命周期要分两类看:emptyDir、configMap、secret 这类卷与 Pod 同生共死,Pod 被删除数据即丢失;而由 PersistentVolume 支撑的卷(persistentVolumeClaim)生命周期独立于 Pod,Pod 重建后数据仍在——真正的持久化只能靠后者。
# 10. PersistentVolume (PV) 和 PersistentVolumeClaim (PVC)
PersistentVolume (PV) 是集群级别的存储资源,管理员预先配置。PersistentVolumeClaim (PVC) 是用户对 PV 的请求,类似于 Pod 对 Node 的请求。
# 11. Ingress
Ingress 是 Kubernetes 中的一种 API 对象,用于管理外部访问服务的规则。通过 Ingress,可以配置 HTTP 和 HTTPS 路由,并提供负载均衡、SSL 终端等功能。
# 12. StatefulSet
StatefulSet 是一种用于管理有状态应用的控制器,保证 Pod 的唯一性和顺序性,常用于数据库或其他有状态服务的部署。
# 13. DaemonSet
DaemonSet 确保集群中的每个 Node 都运行一个 Pod 副本,常用于日志收集、监控代理等系统服务。
# 14. Job 和 CronJob
Job 是 Kubernetes 中用于一次性任务的资源,确保任务的完成。CronJob 是基于时间调度的 Job,可以定时执行任务。
# 15. kube-apiserver
kube-apiserver 是 Kubernetes 控制平面的组件,负责处理 API 请求,并与集群中其他组件通信。
# 16. kube-controller-manager
kube-controller-manager 运行控制器进程,负责集群中的常规任务,如副本控制、节点控制、端点控制等。
# 17. kube-scheduler
kube-scheduler 负责将 Pod 调度到适合的 Node 上,考虑资源需求、策略和约束。
# 18. etcd
etcd 是 Kubernetes 的分布式键值存储,保存了集群的所有状态信息。
# 19. kubelet
kubelet 是运行在每个 Node 上的代理,负责管理该 Node 上的容器,确保它们按照 Pod 规范运行。
# 20. kubectl
kubectl 是 Kubernetes 的命令行工具,用于与 Kubernetes 集群交互,执行各种管理任务。