Kubernetes(K8s)资源管理
Kubernetes(K8s)资源管理
一、资源管理概述
在 Kubernetes 中,所有内容都被抽象为 “资源”,用户通过操作资源实现对集群的管理。核心资源关系如下:
- Pod:容器的管理单元(非直接管理容器,而是容器的载体);
- Pod 控制器:K8s 通过控制器(如 Deployment、StatefulSet)间接管理 Pod;
- Service:为 Pod 提供统一访问入口,实现服务暴露;
- 存储资源:提供数据持久化能力(如 PV、PVC、ConfigMap 等)。
二、kubectl 命令行工具
kubectl是 K8s 集群的命令行工具,用于管理集群和部署应用。
2.1 基本语法
kubectl [command] [type] [name] [flags]
- command:对资源执行的操作(如create创建、get查询、delete删除);
- type:资源类型(如pod、deployment、service);
- name:资源名称(大小写敏感);
- flags:可选参数(如-o yaml指定输出格式)。
2.2 常用命令速查
| 命令示例 | 功能说明 | 
| kubectl --help | 查看所有 kubectl 命令及说明 | 
| kubectl get pods | 查看当前命名空间下所有 Pod | 
| kubectl get pod <pod名称> | 查看指定 Pod 的基本信息 | 
| kubectl get pod <pod名称> -o yaml | 以 YAML 格式查看指定 Pod 的详细配置 | 
| kubectl run <pod名称> --image=<镜像> --port=<端口> | 直接创建一个 Pod(如kubectl run nginx-pod --image=nginx:1.17.1 --port=80) | 
三、命名空间(Namespace)
命名空间是 K8s 中用于隔离资源的虚拟环境,避免同名资源冲突。
3.1 常用操作
| 命令 | 功能 | 
| kubectl create namespace <命名空间名> | 创建命名空间(如kubectl create namespace test) | 
| kubectl get ns 或 kubectl get namespace | 查看所有命名空间 | 
| kubectl run <pod名称> --image=<镜像> -n <命名空间> | 在指定命名空间创建 Pod(如kubectl run nginx --image=nginx -n test) | 
| kubectl get pod -n <命名空间> | 查看指定命名空间的 Pod(如kubectl get pod -n test) | 
| kubectl delete pod <pod名称> -n <命名空间> | 删除指定命名空间的 Pod | 
| kubectl delete ns <命名空间名> | 删除命名空间(会同时删除该空间下所有资源) | 
3.2 系统默认命名空间
| 命名空间 | 作用 | 
| default | 未指定命名空间的资源默认分配到此 | 
| kube-node-lease | 维护集群节点间的心跳(v1.13 + 引入) | 
| kube-public | 所有用户(包括未认证用户)可访问的资源 | 
| kube-system | Kubernetes 系统组件(如 API Server、Calico)所在的命名空间 | 
四、资源管理的三种方式
K8s 提供三种资源管理方式,适用于不同场景:
4.1 命令式对象管理
特点:直接通过命令操作资源,无需配置文件。
适用场景:测试环境(快速验证、临时操作)。
优点:简单直观,上手快;
缺点:仅能操作当前活动对象,无法跟踪历史变更,不便于审计。
操作示例
- 创建 Pod: # 在default命名空间创建nginx Podkubectl run nginx-pod --image=nginx:1.17.1 --port=80
- 查询资源: # 查看所有Podkubectl get pods# 查看指定Pod的详细信息kubectl describe pod nginx-pod
- 删除资源: # 删除指定Podkubectl delete pod nginx-pod
- 命名空间操作(见 3.1 节)。
4.2 命令式对象配置
特点:通过配置文件(YAML/JSON)定义资源,再用命令操作文件。
适用场景:开发环境(需跟踪配置变更)。
优点:配置文件可版本控制,便于审计和回溯;
缺点:项目规模大时配置文件繁多,操作繁琐。
操作示例
- 创建配置文件(如test.yaml,支持多资源定义,用---分隔): # 定义命名空间devapiVersion: v1kind: Namespacemetadata:name: dev---# 在dev命名空间定义nginx PodapiVersion: v1kind: Podmetadata:name: nginx-podnamespace: dev # 指定命名空间spec:containers:- name: nginx-container # 容器名称image: nginx:latest # 容器镜像
- 创建资源: kubectl create -f test.yaml
- 查询资源(可直接通过配置文件查询): kubectl get -f test.yaml
- 更新资源(修改配置文件后执行): kubectl patch -f test.yaml -p '{"spec":{"containers":[{"name":"nginx-container","image":"nginx:1.23"}]}}'
- 删除资源:
kubectl delete -f test.yaml4.3 声明式对象配置
特点:通过kubectl apply命令操作配置文件,仅描述资源的 “最终状态”。
适用场景:开发 / 生产环境(支持批量操作,适合复杂项目)。
优点:支持目录级操作,自动判断资源状态(创建或更新);
缺点:异常情况下调试难度较高。
核心原理
kubectl apply会对比配置文件中的 “期望状态” 与集群中资源的 “当前状态”:
- 若资源不存在:自动创建(等效于kubectl create);
- 若资源已存在:自动更新差异部分(等效于kubectl patch)。
操作示例
- 创建 / 更新资源(使用 4.2 节的test.yaml): # 首次执行:创建资源kubectl apply -f test.yaml# 修改test.yaml后再次执行:更新资源kubectl apply -f test.yaml
- 批量操作目录中的配置文件:
# 对configs目录下所有.yaml文件执行applykubectl apply -f configs/五、资源管理方式推荐
| 操作场景 | 推荐方式 | 命令示例 | 
| 创建 / 更新资源 | 声明式对象配置 | kubectl apply -f <配置文件/目录> | 
| 删除资源 | 命令式对象配置 | kubectl delete -f <配置文件> | 
| 查询资源 | 命令式对象管理 | kubectl get <资源类型> [名称] 或 kubectl describe <资源类型> [名称] | 
 六、kubectl --help 核心命令解释
 
kubectl --help列出的命令按功能可分为基础操作、资源管理、集群维护、故障排查、工具辅助五大类,以下是核心命令的详细解释:
6.1 基础操作类(资源创建 / 查询 / 删除)
| 命令 | 功能说明 | 示例 | 
| create | 从命令行或配置文件创建资源(支持 Pod、Deployment、Service 等) | kubectl create deployment nginx --image=nginx(创建 Deployment) | 
| get | 查看资源的基本信息(默认显示名称、就绪状态、重启次数、年龄) | kubectl get pods -n dev(查看 dev 命名空间的 Pod) | 
| describe | 查看资源的详细信息(含事件、关联资源、配置详情) | kubectl describe pod nginx-pod(查看 nginx-pod 的详细日志) | 
| delete | 删除指定资源(支持按名称、标签、配置文件删除) | kubectl delete pod nginx-pod(删除单个 Pod)、kubectl delete -f test.yaml(按文件删除) | 
6.2 资源更新类(配置修改 / 版本管理)
| 命令 | 功能说明 | 示例 | 
| apply | 声明式创建 / 更新资源(对比配置文件与集群状态,自动同步) | kubectl apply -f nginx-deploy.yaml(创建或更新 Deployment) | 
| patch | 增量更新资源的指定字段(无需完整配置文件) | kubectl patch deployment nginx -p '{"spec":{"replicas":3}}'(将副本数改为 3) | 
| replace | 全量替换资源配置(需提供完整配置文件,覆盖原有配置) | kubectl replace -f nginx-deploy.yaml(用新文件替换旧 Deployment) | 
| rollout | 管理资源的发布流程(支持查看状态、历史版本、回滚) | kubectl rollout undo deployment nginx(回滚 nginx 的上一版本)、kubectl rollout history deployment nginx(查看发布历史) | 
6.3 集群维护类(节点 / 命名空间管理)
| 命令 | 功能说明 | 示例 | 
| cordon | 标记节点为 “不可调度”(新 Pod 不分配到该节点,保留已有 Pod) | kubectl cordon node1(标记 node1 不可调度) | 
| uncordon | 取消节点的 “不可调度” 标记,恢复正常调度 | kubectl uncordon node1(恢复 node1 调度) | 
| drain | 排空节点(优雅驱逐所有 Pod 到其他节点,用于节点维护) | kubectl drain node1 --ignore-daemonsets(排空 node1,忽略 DaemonSet Pod) | 
| taint | 为节点添加 / 移除 “污点”(控制 Pod 是否能调度到该节点) | kubectl taint node node1 key=value:NoSchedule(添加污点,禁止 Pod 调度) | 
| top | 查看节点或 Pod 的资源使用率(需依赖 metrics-server 组件) | kubectl top node(查看所有节点 CPU / 内存使用)、kubectl top pod(查看 Pod 资源使用) | 
6.4 故障排查类(日志 / 容器交互)
| 命令 | 功能说明 | 示例 | 
| logs | 查看 Pod 中容器的日志(支持实时日志、多容器指定) | kubectl logs -f nginx-pod(实时查看 nginx-pod 日志)、kubectl logs nginx-pod -c nginx-container(指定容器) | 
| exec | 在 Pod 的容器中执行命令(支持交互式终端) | kubectl exec -it nginx-pod -- /bin/bash(进入 nginx-pod 的 bash 终端) | 
| port-forward | 将本地端口转发到 Pod 端口(本地访问 Pod 服务) | kubectl port-forward pod/nginx-pod 8080:80(本地 8080 端口映射到 Pod 的 80 端口) | 
| cp | 在本地与 Pod 之间复制文件 / 目录 | kubectl cp local-file.txt nginx-pod:/tmp/(本地文件复制到 Pod 的 /tmp 目录) | 
| proxy | 启动集群 API 代理(本地通过localhost访问集群 API) | kubectl proxy --port=8001(启动代理,访问http://localhost:8001/api查看 API) | 
6.5 工具辅助类(信息查询 / 配置管理)
| 命令 | 功能说明 | 示例 | 
| version | 查看 kubectl 客户端与集群服务端的版本 | kubectl version(显示客户端 v1.28.0、服务端 v1.28.0) | 
| api-resources | 列出集群所有可用的资源类型(含 API 版本、是否命名) | kubectl api-resources(显示 pods、deployments、services 等资源信息) | 
| api-versions | 列出集群支持的所有 API 版本(如 v1、apps/v1) | kubectl api-versions(显示 apps/v1、networking.k8s.io/v1 等) | 
| config | 管理 kubeconfig 配置文件(切换上下文、设置集群 / 用户) | kubectl config use-context minikube(切换到 minikube 上下文)、kubectl config get-contexts(查看所有上下文) | 
| help | 查看指定命令的详细帮助(含参数、示例) | kubectl help get(查看 get 命令的用法)、kubectl help rollout undo(查看回滚命令的用法) | 
总结
Kubernetes 资源管理的核心是通过操作 “资源” 实现集群管控,三种方式各有侧重:
- 命令式对象管理适合临时测试;
- 命令式对象配置适合跟踪单个配置文件的变更;
- 声明式对象配置适合复杂项目的批量管理,是生产环境的首选。
掌握kubectl命令和 YAML 配置文件的编写,是高效管理 K8s 集群的基础。而熟悉kubectl --help中的核心命令,能进一步提升集群操作的效率和故障排查能力。
