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 Pod kubectl run nginx-pod --image=nginx:1.17.1 --port=80
- 
查询资源 : # 查看所有Pod kubectl get pods # 查看指定Pod的详细信息 kubectl describe pod nginx-pod
- 
删除资源 : # 删除指定Pod kubectl delete pod nginx-pod
- 
命名空间操作(见 3.1 节)。 
4.2 命令式对象配置
特点:通过配置文件(YAML/JSON)定义资源,再用命令操作文件。
适用场景:开发环境(需跟踪配置变更)。
优点:配置文件可版本控制,便于审计和回溯;
缺点:项目规模大时配置文件繁多,操作繁琐。
操作示例
- 
创建配置文件 (如test.yaml,支持多资源定义,用---分隔): # 定义命名空间dev apiVersion: v1 kind: Namespace metadata: name: dev --- # 在dev命名空间定义nginx Pod apiVersion: v1 kind: Pod metadata: name: nginx-pod namespace: 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.yaml 
4.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中的核心命令,能进一步提升集群操作的效率和故障排查能力。