Kuberentes抽象出多种概念来描述应用程序及其周边组件,如Pod、Deployment、Service等,这些概念被统称为资源。而对象则是“资源”的实例,如具体的某个Pod、具体的某个Service。在日常语境中,我们通常不会特意区分资源和对象,可以使用”资源“、“资源对象”来泛指某类资源的实例,也即是对象。
本文我们先来了解一些常用的资源,读者在这里可以先有个大概的印象就行,因为后面的文章会针对这些资源功能进行详细介绍。
01
—
全局型资源
1. Namespace(命名空间)
很多地方都有 Namespace的概念,如 Linux 中的 Namespace,容器就使用了该技术来实现对于系统资源的访问隔离。Kubernetes集群中Namespace也是用于隔离,它提供了一种对集群中的对象进行分组和隔离的机制。使用Namespace可以将不同应用程序或不同团队的资源进行隔离,从而防止资源冲突和应用程序之间的相互影响。
02
—
工作负载型资源
1. Pod
Pod 是 Kubernetes 中最小的部署单元,可以包含一个或多个容器。每个 Pod 都有一个唯一的 IP 地址,并且内部容器可以共享网络栈、存储等。Pod 提供了一种轻量级的方式来部署容器,可以实现高效地资源利用。
2. Deployment
Deployment 用于管理 Pod 的部署和更新的控制器,可以通过指定副本数和容器镜像来定义 Pod 模板。Deployment 可以自动检测并处理 Pod 的故障,保证应用程序的高可用性,通常用于部署无状态的服务。
3. StatefulSet
功能与Deployment类似,但适用于部署有状态的应用服务。StatefulSet能够为每个Pod创建一个独特的标识,并会保证Pod之间的启动顺序。通常用于部署数据库等应用服务。
4. DaemonSet
用于确保在集群中每个节点上运行一个Pod副本,通常用于部署一些系统级别的守护进程服务,如agent、网络插件等。
03
—
负载均衡与路由资源
1. Service
Service 是一种抽象的对象,用于暴露 Pod 的网络服务。Service 可以将一组 Pod 组合在一起,并使用一个唯一的 DNS 名称和虚拟 IP 地址,提供负载均衡服务。Service 还可以定义访问控制策略,用于提高应用程序的可用性和安全性。
2. Ingress
Ingress 是 Kubernetes 中用于管理 HTTP 和 HTTPS 流量的对象。它允许外部流量进入集群,并将流量路由到不同的 Service 上。
04
—
配置型资源
1. ConfigMap
ConfigMaps 用于在 Kubernetes 中存储配置数据,它们可以用于存储键值对、文件或目录。ConfigMaps 作为 Kubernetes 对象创建,并可在容器中作为卷或环境变量进行挂载。ConfigMaps 的好处在于可以将配置数据与应用程序代码分离,使得配置数据更易于管理和更新。
2. Secret
Secrets 类似于 ConfigMaps,但用于存储敏感信息,例如密码、API 密钥和证书。与 ConfigMaps 一样,Secrets 可以在容器中作为卷或环境变量进行挂载。Secrets 的数据是加密,并且只有经过授权的用户访问时才会解密。
05
—
存储型资源
1. PersistentVolumes (PV)
PV 是集群中独立的存储Volume,可以是物理存储设备(如:磁盘)、网络存储设备(如,Nas)或者是分布式存储 系统(如GlusterFS、Ceph等)。
2. PersistentVolumeClaims(PVC)
PVC 是用于申请PV资源的对象。创建 PVC 时会指定存储的大小和资源,Kubernetes 将查找与请求匹配的可用 PV 并将它们绑定在一起。然后用户可以使用 PVC 访问存储。
06
—
任务型资源
1. Job
短暂运行的任务,一旦完成就会终止,常用于批处理任务、数据处理等场景。
2. CronJob
基于时间的作业调度,类似于Linux中的cron,可以按照预定时间或周期执行作业。