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 命令式对象管理

特点:直接通过命令操作资源,无需配置文件。

适用场景:测试环境(快速验证、临时操作)。

优点:简单直观,上手快;

缺点:仅能操作当前活动对象,无法跟踪历史变更,不便于审计。

操作示例
  1. 创建 Pod

    复制代码
    # 在default命名空间创建nginx Pod
    
    kubectl run nginx-pod --image=nginx:1.17.1 --port=80
  2. 查询资源

    复制代码
    # 查看所有Pod
    
    kubectl get pods
    
    # 查看指定Pod的详细信息
    
    kubectl describe pod nginx-pod
  3. 删除资源

    复制代码
    # 删除指定Pod
    
    kubectl delete pod nginx-pod
  4. 命名空间操作(见 3.1 节)。

4.2 命令式对象配置

特点:通过配置文件(YAML/JSON)定义资源,再用命令操作文件。

适用场景:开发环境(需跟踪配置变更)。

优点:配置文件可版本控制,便于审计和回溯;

缺点:项目规模大时配置文件繁多,操作繁琐。

操作示例
  1. 创建配置文件 (如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 # 容器镜像
  2. 创建资源

    复制代码
    kubectl create -f test.yaml
  3. 查询资源 (可直接通过配置文件查询):

    复制代码
    kubectl get -f test.yaml
  4. 更新资源 (修改配置文件后执行):

    复制代码
    kubectl patch -f test.yaml -p '{"spec":{"containers":[{"name":"nginx-container","image":"nginx:1.23"}]}}'
  5. 删除资源

    kubectl delete -f test.yaml

4.3 声明式对象配置

特点:通过kubectl apply命令操作配置文件,仅描述资源的 "最终状态"。

适用场景:开发 / 生产环境(支持批量操作,适合复杂项目)。

优点:支持目录级操作,自动判断资源状态(创建或更新);

缺点:异常情况下调试难度较高。

核心原理

kubectl apply会对比配置文件中的 "期望状态" 与集群中资源的 "当前状态":

  • 若资源不存在:自动创建(等效于kubectl create);
  • 若资源已存在:自动更新差异部分(等效于kubectl patch)。
操作示例
  1. 创建 / 更新资源 (使用 4.2 节的test.yaml):

    复制代码
    # 首次执行:创建资源
    
    kubectl apply -f test.yaml
    
    # 修改test.yaml后再次执行:更新资源
    
    kubectl apply -f test.yaml
  2. 批量操作目录中的配置文件

    对configs目录下所有.yaml文件执行apply

    kubectl 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中的核心命令,能进一步提升集群操作的效率和故障排查能力。

相关推荐
KubeSphere 云原生8 小时前
Fluid 正式入驻青云 KubeSphere Marketplace,共建云原生数据加速新生态
云原生
阿里云云原生9 小时前
云栖实录:重构可观测 - 打造大模型驱动的云监控 2.0 与 AIOps 新范式
阿里云·云原生·重构·云监控·可观测
白小云<10 小时前
docker镜像
docker·容器·eureka
不爱笑的良田11 小时前
从零开始的云原生之旅(一):把 Go 应用塞进 Docker
docker·云原生·golang
不爱笑的良田11 小时前
从零开始的云原生之旅(四):K8s 工作负载完全指南
云原生·容器·kubernetes
java_logo13 小时前
Docker 部署 Rocky Linux 全流程教程
linux·运维·服务器·docker·容器·1024程序员节
ydswin13 小时前
K8s Service会话保持导致Pod流量不均:故障排查与深度解析
kubernetes
ghie909013 小时前
利用 Docker 和 Kubernetes 实现微服务部署
docker·微服务·kubernetes
阿里云云原生15 小时前
为什么别人用 DevPod 秒启 DeepSeek-OCR,你还在装环境?
云原生