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 # 同时查询两个Pod4. 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状态变化)
三、关键注意事项
- 参数优先级:命令行指定的flags会覆盖默认配置和环境变量(如KUBECONFIG)
- 资源类型与名称组合:操作多个不同类型资源时,需用“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-system2. 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 test3. create(命令式创建,少用)
- 功能:从文件或命令行直接创建资源,覆盖式创建(已存在会报错),推荐用
apply替代。 - 语法:
kubectl create -f 配置文件.yaml - 示例:
kubectl create -f my-deploy.yaml4. 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-system2. 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=nginx3. 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=50exec(进入容器执行命令,调试核心)
- 功能:在 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 -- env4.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/proxy2. 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=804. scale(手动扩缩容)
- 功能:手动调整资源的副本数(如 Deployment、StatefulSet)。
- 语法:
kubectl scale 资源类型 名称 --replicas=目标副本数 - 示例:
#将nginx Deployment的副本数调整为5
kubectl scale deployment nginx --rplicas=55. 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=NodePort4.4、配置调整场景(编辑标签 / 注解 / 资源配置)
1. edit(在线编辑资源配置)
- 功能:用默认编辑器(如 vim)直接编辑集群中的资源配置,保存后实时生效,适合临时修改。
- 语法:
kubectl edit 资源类型 名称 [--namespace 命名空间] - 示例:
# 编辑 nginx Deployment 的配置(如修改镜像版本、副本数)
kubectl edit deployment nginx
# 编辑 kube-system 命名空间的 ConfigMap
kubectl edit configmap kube-proxy -n kube-system2. 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-13. 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" --overwrite4. 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 命令的总结了,点赞+收藏+关注,我们下个栏目再见!
