kubectl 学习心得:从入门到实践的 K8s 命令行掌控之旅

K8s篇章更新已经进入尾声了,这篇文章就来介绍K8s命令行的介绍。在 Kubernetes 的学习道路上,kubectl是我与集群对话的 "桥梁"。从语法入门到命令实操,每一次对kubectl的探索都让我更深入地理解 K8s 的资源管理逻辑。以下是我对kubectl核心知识的总结与学习感悟。

一、语法格式拆解

核心格式:kubectl [command] [TYPE] [NAME] [flags]

四个部分分别对应"动作" "资源类型" "资源名称" "可选参数",共同构成一条完整的kubectl命令。

二、各部分详解

1. command:对资源的 "动作指令"

定义要对资源执行的操作,是命令的 "核心行为"。常见命令包括:

  • 基础操作:create(创建)、get(查询)、describe(详情)、delete(删除)、apply(声明式更新);
  • 配置类:label(添加标签)、annotate(添加注解)、edit(编辑资源)
  • 运维类:exec(进入容器)、logs(查看日志)、scale(扩缩容)、autoscale(自动扩缩容)。

2. TYPE:资源类型(核心要素)

指定操作的资源类别(如Pod、Deployment等),具有以下特性:

  • 大小写不敏感:pod、Pod、POD效果相同;
  • 支持单数/复数/缩写:

以 "Pod" 为例,pod(单数)、pods(复数)、po(缩写)均有效,以下命令等价:

复制代码
kubectl get pod nginx-pod
kubectl get pods nginx-pod
kubectl get po nginx-pod

常见资源及缩写

资源类型 缩写 资源类型 缩写
pod po deployment deploy
service svc statefulset sts
replicationcontroller rc daemonset ds
configmap cm secret
namespace ns node no

3. NAME:资源的 "唯一标识"

指定具体资源的名称,具有以下特点:

  • 区分大小写:nginx-pod和Nginx-Pod式两个不同资源;

  • 省略则操作"所有资源";

  • kubectl get pods(省略名称,查询所有pod)

  • kubectl delete deployment(删除所有Deployment,需谨慎)

  • 多资源操作:可同时指定多个资源名称,用空格分隔:

    kubectl get pod nginx-pod1 nginx-pod2 # 同时查询两个Pod

4. flags:可选参数(功能扩展)

用于调整命令的输出格式、范围或行为,是kubectl灵活性的体现。常见flags包括:

  • 输出格式:-o wide (显示更多详情,如Pod所在节点)、-o yaml(YAML格式输出)、-o json(JSON格式输出);

示例:kubectl get po nginx-pod -o wide (查看Pod的节点、IP等信息)

  • 标签筛选:-l key=value(只操作带指定标签的资源);

示例:kubectl get pod -l app=nginx (查询所有标签为app=nginx的Pod)。

  • 命名空间:-n namespace (指定操作的命名空间,默认default)

示例:kubectl get pod -n kube-system (查询kube-system命名空间的Pod)

  • 实时监控:-w(持续监听资源变换,类似watch命令);

示例:kubectl get po nginx-pod -w(实时监控Pod状态变化)

三、关键注意事项

  1. 参数优先级:命令行指定的flags会覆盖默认配置和环境变量(如KUBECONFIG)

  2. **资源类型与名称组合:**操作多个不同类型资源时,需用"TYPE/NAME"格式,例如:

    kubectl get pod/nginx-pod deployment/nginx-deploy #同时查询Pod和Deployment

3.帮助查询 :对任何命令 / 资源,可通过--help查看详情,例如:

复制代码
kubectl get --help  # 查看get命令的用法
kubectl explain pod  # 查看Pod资源的字段说明

四、kubectl核心命令实操指南(按场景分类)

4.1、资源管理场景(创建 / 更新 / 删除资源)

1.apply(声明式创建/更新)

  • 功能:从 YAML/JSON 文件创建或增量更新资源,自动对比现有配置,避免覆盖风险。

  • 语法kubectl apply -f 配置文件.yaml [--namespace 命名空间]

  • 示例

    #从文件创建Pod
    kubectl apply -f my-pod.yaml
    #批量应用目录下所有配置文件
    kubectl apply -f ./k8s-configs/
    #指定命名空间(如kube-system)
    kubectl apply -f calcico.yaml -n kube-system

2. delete(删除资源)

  • 功能:按名称、文件或标签删除资源,支持批量操作。

  • 语法kubectl delete [资源类型 名称 | -f 配置文件 | -l 标签] [--namespace 命名空间]

  • 示例

    #删除指定Pod
    kubectl delete pod my-pod
    #从文件删除资源
    kubectl delete -f my-pod.yaml
    #删除所有标签为app=nginx的Pod(批量删除)
    Kubectl delete pods -l app=nginx
    #删除指定命名空间的Deployment
    kubectl delete deployment nginx -n test

3. create(命令式创建,少用)

  • 功能 :从文件或命令行直接创建资源,覆盖式创建(已存在会报错),推荐用 apply 替代。

  • 语法kubectl create -f 配置文件.yaml

  • 示例

    kubectl create -f my-deploy.yaml

4. run(快速创建 Pod,测试用)

  • 功能:通过命令行快速创建单个 Pod(无需写 YAML),适合临时测试。

  • 语法kubectl run 名称 --image=镜像名 [--port=端口] [--env=键=值]

  • 示例

    #创建运行nginx的Pod
    kubectl run nginx-test --image=nginx:1.23 --port=80
    #带环境变量的Pod
    kubectl run app-test --image=my-app --env="ENV=prod"

4.2、故障排查场景(查看状态 / 日志 / 详情)

1. get(基础查询,高频)

  • 功能:列出资源的关键信息(如状态、IP、副本数),支持自定义输出格式。
  • 语法kubectl get 资源类型 [名称] [-o 输出格式] [--watch] [--namespace 命名空间]
  • 常用参数
    • -o wide:显示更多详情(如 Pod 所在节点、IP);

    • -o yaml/json:输出完整配置(用于导出资源);

    • --watch:实时监控资源状态变化(类似 tail -f)。

    • 示例

      #查看所有Pod(默认命名空间)
      kubectl get pods
      #查看Pod并显示所有在节点和Ip
      kubectl get pods -o wide
      #查看指定Deployment的YAML配置
      kubectl get deploy nginx -o yaml
      #实时监控Pod状态
      kubectl get pods --watch
      #查看kube-system命名空间的资源
      kubectl get pods -n kube-system

2. describe(查看资源详情,排障核心)

  • 功能 :显示资源的详细状态(含事件、容器日志片段、关联对象),比 get 更深入,是排查故障的核心命令。

  • 语法kubectl describe 资源类型 [名称 | -l 标签] [--namespace 命名空间]

  • 示例

    #查看Pod详情(重点看Events部分,排查启动失败原因)
    kubectl describe pod my-pod
    #查看节点详情(含资源使用、运行的Pod)
    kubectl describe node node-1
    #查看标签为app=nginx的所有Deployment详情
    kubectl describe deploy -l app=nginx

3. logs(查看容器日志)

  • 功能:打印 Pod 内容器的日志,支持实时跟踪,排查应用运行错误。
  • 语法kubectl logs Pod名称 [-c 容器名] [--follow] [--tail=行数] [--namespace 命名空间]
  • 常用参数
    • -c 容器名:Pod 有多个容器时,指定容器;

    • --follow:实时跟踪日志(类似 tail -f);

    • --tail=100:只显示最后 100 行日志。

    • 示例

      #查看Pod的日志快照
      kubectl logs my-pod
      #实时跟踪日志
      kubectl logs my-pod --follow
      #查看Pod中名为sidecar的容器日志,只看最后50行
      kubectl logs my-pod -c sidecar --tail=50

exec(进入容器执行命令,调试核心)

  • 功能 :在 Pod 内的容器中执行命令,支持交互式登录(类似 ssh 进入机器)。

  • 语法kubectl exec Pod名称 [-c 容器名] -i -t -- 命令

  • 常用参数

    • -i:保持输入流打开;
    • -t:分配伪终端(登录终端必须加);
    • -c 容器名:指定容器(Pod 多容器时必加)。
  • 示例

    #登录Pod的bash终端
    kubectl exec -it my-pod -- /bin/bash
    #在指定容器(如app-container)中执行命令(查看目录)
    kubectl exec my-pod -c app-container -- ls /app
    #查看容器内环境变量
    kubectl exec my-pod -- env

4.3、集群运维场景(了解集群状态 / 扩展资源)

1. cluster-info(查看集群核心服务)

2. api-versions(查看支持的 API 版本)

  • 功能 :列出集群支持的所有 API 版本,编写 YAML 时需对应正确的 apiVersion

  • 语法kubectl api-versions

  • 示例

    kubectl api-versions

    输出示例(关键版本):

    v1(核心资源:Pod、Service)

    apps/v1(应用资源:Deployment、StatefulSet)

    networking.k8s.io/v1(网络资源:Ingress、NetworkPolicy)

  • 版本说明

    • alpha:内测版(不稳定,可能废弃);
    • beta:公测版(基本可用,细节可能调整);
    • stable(如 v1):稳定版(推荐使用,长期支持)。

3. autoscale(自动扩缩容)

  • 功能:为 Deployment、RC 等资源配置基于 CPU 使用率的自动扩缩容,无需手动调整副本数。

  • 语法kubectl autoscale 资源类型 名称 --min=最小副本数 --max=最大副本数 --cpu-percent=阈值

  • 示例

    #为nginx Deployment 配置自动扩缩容:最小2副本,最大10副本,CPU达80%扩容
    kubectl autoscale deployment nginx --min=2 --max=10 --cpu-percent=80

4. scale(手动扩缩容)

  • 功能:手动调整资源的副本数(如 Deployment、StatefulSet)。

  • 语法kubectl scale 资源类型 名称 --replicas=目标副本数

  • 示例

    #将nginx Deployment的副本数调整为5
    kubectl scale deployment nginx --rplicas=5

5. expose(创建 Service,暴露服务)

  • 功能:将 Pod、Deployment 等资源暴露为 Service,提供网络访问入口(支持 ClusterIP、NodePort、LoadBalancer 类型)。

  • 语法kubectl expose 资源类型 名称 --port=服务端口 --target-port=容器端口 --type=服务类型

  • 示例

    将 nginx Deployment 暴露为 NodePort 类型 Service:

    服务端口 80,容器端口 80,外部可通过节点 IP:随机端口访问

    kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort

4.4、配置调整场景(编辑标签 / 注解 / 资源配置)

1. edit(在线编辑资源配置)

  • 功能:用默认编辑器(如 vim)直接编辑集群中的资源配置,保存后实时生效,适合临时修改。

  • 语法kubectl edit 资源类型 名称 [--namespace 命名空间]

  • 示例

    编辑 nginx Deployment 的配置(如修改镜像版本、副本数)

    kubectl edit deployment nginx

    编辑 kube-system 命名空间的 ConfigMap

    kubectl edit configmap kube-proxy -n kube-system

2. label(添加 / 更新资源标签)

  • 功能 :为资源添加标签(key=value),标签用于资源筛选(如 kubectl get pods -l 标签)、服务发现等。

  • 语法kubectl label 资源类型 名称 标签键=标签值 [--overwrite]

  • 示例

    为 Pod 添加标签 env=prod

    kubectl label pod my-pod env=prod

    覆盖已有的 env 标签(加 --overwrite)

    kubectl label pod my-pod env=test --overwrite

    为所有节点添加标签 zone=node-1

    kubectl label nodes node-1 zone=node-1

3. annotate(添加 / 更新资源注解)

  • 功能:为资源添加注解(key=value),注解用于存储辅助信息(如工具配置、描述),不用于资源筛选。

  • 语法kubectl annotate 资源类型 名称 注解键=注解值 [--overwrite]

  • 示例

    为 Pod 添加注解(描述信息)

    kubectl annotate pod my-pod description="This is a test pod"

    覆盖已有的注解

    kubectl annotate pod my-pod description="Updated test pod" --overwrite

4. explain(查看资源配置文档,自学神器)

  • 功能 :查看资源的所有字段说明(如 Pod 的 spec.containers、Deployment 的 spec.replicas),编写 YAML 时必备。

  • 语法kubectl explain 资源类型 [--recursive]

  • 示例

    查看 Pod 的所有字段说明

    kubectl explain pod

    查看 Pod 的 spec.containers 字段详情(重点字段)

    kubectl explain pod.spec.containers

    递归查看所有子字段(--recursive)

    kubectl explain deployment --recursive

五、其他实用命令

命令 功能 示例
version 查看 kubectl 客户端和集群版本 kubectl version
config 管理 kubeconfig(切换集群 / 用户) kubectl config use-context prod-cluster(切换到生产集群)
port-forward 本地端口转发到 Pod(调试用) kubectl port-forward pod my-pod 8080:80(本地 8080 映射到 Pod 80)

综上就是kubectl 命令的总结了,点赞+收藏+关注,我们下个栏目再见!

相关推荐
阿里云云原生8 小时前
用户说“App 卡死了”,你却查不到原因?可能是监控方式错了
云原生
老友@8 小时前
Docker 部署 Node.js + Playwright 项目,实现浏览器截图、打印和下载
docker·容器·node.js·playwright
2401_840192279 小时前
什么是ingress?
docker·容器·kubernetes
晚风 -11 小时前
idea中Docker一键自动化部署
docker·容器·自动化
落日漫游13 小时前
ArgoCD与Helm:云原生部署对比解析
java·容器·kubernetes
罗不俷13 小时前
Prometheus 详解:从原理到实战,打造企业级云原生监控体系
云原生·prometheus
不爱笑的良田13 小时前
从零开始的云原生之旅(十):HPA 完全指南:从原理到实践
云原生·容器·kubernetes
不爱笑的良田13 小时前
从零开始的云原生之旅(九):云原生的核心优势:自动弹性伸缩实战
云原生·容器·kubernetes·go
万岳科技程序员小金14 小时前
多商户商城APP源码开发的未来方向:云原生、电商中台与智能客服
人工智能·云原生·开源·软件开发·app开发·多商户商城系统源码·多商户商城app开发