Kubernetes 常用资源类型详解与实用命令
Kubernetes(K8S)作为容器编排的行业标准,资源类型繁多,新手和有经验的运维/开发人员容易混淆。本文将结合实际生产环境,通过 kubectl api-resources
命令输出内容,梳理K8S各类资源类型、常见用法、注意点,助你快速理解并高效使用。
一、什么是 Kubernetes 资源类型
Kubernetes 的一切都是“资源(Resource)”。资源即API对象,用来描述K8S中的各种实体,比如 Pod、Service、Deployment、Node、Namespace、ConfigMap 等。理解资源类型,是学习K8S的基础。
二、查看所有资源类型
在K8S集群主节点或拥有kubectl权限的机器上,执行:
kubectl api-resources
你将得到如下类似输出(仅截取部分作为举例):
NAME | SHORTNAMES | APIVERSION | NAMESPACED | KIND |
---|---|---|---|---|
pods | po | v1 | true | Pod |
services | svc | v1 | true | Service |
deployments | deploy | apps/v1 | true | Deployment |
nodes | no | v1 | false | Node |
namespaces | ns | v1 | false | Namespace |
... | ... | ... | ... | ... |
其中,NAMESPACED 表示该资源是否属于某个命名空间。
三、K8S核心资源类型详解
1. 工作负载类
此类资源决定了你的应用程序如何运行和扩展:
-
Pod(po)
K8S最小的可调度单元,是容器的载体。实际生产中很少直接运维裸Pod,通常用在Job等场景。 -
ReplicaSet(rs)
保证指定副本数的Pod持续运行。多由Deployment控制间接管理,不直接编写。 -
Deployment(deploy)
最常用的部署资源,支持回滚、滚动升级。日常生产用的最多,如Web应用、API服务等。 -
StatefulSet(sts)
有状态服务(如MySQL、Redis集群)专用,Pod有固定标识符和持久存储。 -
DaemonSet(ds)
用于每个(或指定)Node上自动运行一个Pod,例如日志收集、监控agent。 -
Job / CronJob
Job用于一次性任务,CronJob实现定时调度(可类比Linux的crontab)。
2. 服务发现与负载均衡
-
Service(svc)
集群内持久服务入口,实现Pod间或外部服务访问负载均衡。 -
Endpoints / EndpointSlice
Service关联的实际Pod IP存储对象,自动管理,无需手动变更。 -
Ingress
七层路由,支持HTTP/S流量的准入、反向代理、SSL。
3. 存储管理
-
PersistentVolume(pv)、PersistentVolumeClaim(pvc)
PV是系统管理员提供的物理存储,PVC是用户申请的逻辑存储,两者绑定让Pod能持久存储。 -
StorageClass(sc)
提供动态存储卷选项,简化PVC自动分配。
4. 配置与密钥
-
ConfigMap(cm)
存储配置数据,诸如环境变量、配置文件。明文存储,非敏感信息。 -
Secret
存储敏感数据,例如密码、密钥、token,默认base64编码(需注意不是加密,生产需结合KMS等方案)。
5. 权限与安全
-
ServiceAccount(sa)、Role/ClusterRole、RoleBinding/ClusterRoleBinding
实现K8S的RBAC权限控制,精细划分用户和服务的集群操作范围。 -
PodSecurityPolicy(psp)
现已废弃(K8S v1.21开始,v1.25完全移除),建议用Pod Security标准(如baseline、restricted)替代。 -
NetworkPolicy(netpol)
网络层面的访问控制,是生产环境强烈建议启用的安全措施。
6. 集群级管理
-
Namespace(ns)
多租户/隔离环境的实现基础,推荐每个业务系统独占一个namespace。 -
Node(no)
集群中的物理机/虚拟机。不可随意操作,部分命令需集群管理员权限。
7. 其他高阶与扩展
-
CRD(CustomResourceDefinition)
用户自定义资源类型。实现Operator、Service Mesh、云原生数据库等扩展生态的基石。 -
AdmissionWebhook
动态准入控制(如MutatingWebhook/ValidatingWebhook),提供更灵活的安全、合规管理。
四、生产环境常用命令汇总
- 查看所有资源类型及缩写
kubectl api-resources
- 查看单个namespace下所有资源
kubectl get all -n <namespace>
- 按Kind查看资源
kubectl get deployment,svc,pod -n <namespace>
- 查单一资源(如Pod日志、YAML)
kubectl logs pod-name -n <namespace> kubectl get pod pod-name -o yaml -n <namespace>
五、生产环境实践建议
- 使用Deployment/StatefulSet来管理Pod副本,严禁直接管理裸Pod。
- 所有部署都建议隔离到独立namespace,便于权限、配额、安全收敛。
- 严格启用RBAC、NetworkPolicy到最小权限原则。
- 尽量用ConfigMap、Secret优雅解耦配置与代码,提高安全。
- 存储用PVC和StorageClass动态方案,避免存储漂移。
- 熟悉自定义扩展(CRD),为开源生态打下基础。
- 及时关注k8s版本变化,如PSP已废弃,需切换其他安全方案。
六、结语
Kubernetes资源类型犹如乐队中的各类乐器,只有理解它们的特性与组合方式,才能演奏出高效稳定的云原生乐章。掌握 kubectl api-resources
,善用K8S原生能力,配合云原生最佳实践,你的集群将稳定、高效、易扩展,轻松驾驭多变的业务需求。
欢迎关注我的博客,后续会持续深度分享更多K8S进阶实战内容!
(转载请注明出处,欢迎评论交流)