当前位置: 首页 > news >正文

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

常见资源及缩写

资源类型缩写资源类型缩写
podpodeploymentdeploy
servicesvcstatefulsetsts
replicationcontrollerrcdaemonsetds
configmapcmsecret
namespacensnodeno

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(查看集群核心服务)

    • 功能:显示集群 API Server、CoreDNS、Etcd 等核心组件的访问地址,快速确认集群是否正常。
    • 语法kubectl cluster-info
    • 示例
    kubectl cluster-info
    # 输出示例:
    # Kubernetes control plane is running at https://192.168.8.100:6443
    # CoreDNS is running at https://192.168.8.100:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

    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 命令的总结了,点赞+收藏+关注,我们下个栏目再见!

    http://www.dtcms.com/a/540628.html

    相关文章:

  1. 非线性笔记革命:Trilium+cpolar如何让知识管理突破时空限制?
  2. 华为ENSP——OSPF多区域配置实验
  3. 快指点击器 1.1.9 | 支持多点操作、自动化脚本,操作记录等功能,快速解放双手
  4. Termux 安装 Joplin Server ,全平台同步Joplin笔记
  5. 笔记:现代操作系统:原理与实现(6)
  6. 电商网站对比表请问下网站开发怎么弄
  7. 浙人医已用金仓 KFS 工具破解多数据库并存难题!
  8. 四川建设网网站首页开发公司起名
  9. K8s学习笔记(二十四) ingress
  10. 将axios、async、Promise联系在一起讲一下讲一下.then 与其关系
  11. 最权威的排行榜网站scratch网站开发
  12. WPF 数据绑定详解
  13. 【Swift】LeetCode 54. 螺旋矩阵
  14. 河北邯郸seo网站建设网站优化专业网站的定义
  15. Python测试题2
  16. WordPress 上传图片报错:明明是 PNG,却提示「请转换为 JPEG 或 PNG 格式」?
  17. annotation-logging-guide
  18. 没有公司做网站重庆网站推广入口
  19. 管理k8s的资源类型(PV/PVC)的脚本
  20. 【记录】飞书多维表格|做自动显示当前填写情况(包括填写人数、未填写情况、最高分和平均分)的收集表
  21. 清除入侵痕迹(winLinuxweb)
  22. 找设计师的网站淘宝客 网站建设
  23. 第六部分:VTK进阶(第175章 并行 IO管线与检查点)
  24. 河南海绵城市建设网站wordpress中文版书籍
  25. Opencv(三): 二值化
  26. GitHub使用技巧——上传本地项目
  27. 网站建设用途一个旅游网站建设需求分析
  28. 甜品网站网页设计代码网上免费推广
  29. 渗透测试工具 windows上搭建vmware kali-linux
  30. ecstore等产品开启缓存-后台及前台不能登录原因-setcookie+session问题