kubectl 命令
一、常用命令
1、获取信息
#获取节点信息
kubectl get nodes
#获取pod信息
kubectl get pods
#获取pod信息包含具体在哪个节点
kubectl get pods -o wide
 
2、部署
# 部署pod
kubectl create deployment tomcat9 --image=tomcat:9.0.102-jre17 
# 发布service
# --post=80 --target-post=8080 : pod的80端口映射容器的8080端口  
# --type=NodePort : service会代理pod的80端口
kubectl expose deployment tomcat9 --port=8080 --target-port=8080 --type=NodePort
# --dry-run 表示测试不实际运行
# -o yaml  生成yaml
# > tomcat.yaml  输出到tomcat.yaml
#根据kubectl create deployment tomcat9 --image=tomcat:9.0.102-jre17生成yaml并输出到tomcat.yaml
kubectl create deployment tomcat9 --image=tomcat:9.0.102-jre17 --dry-run -o yaml > tomcat.yaml
# 应用tomcat.yaml(根据上面命令生成的 tomcat.yaml), 实际上和kubectl create deployment tomcat6 --image=tomcat:9.0.102-jre17一样的效果,只是yaml可以自己写更灵活
kubectl apply -f tomcat.yaml
 
二、基本命令
使用以下语法从终端窗口运行 kubectl 命令:
kubectl [command] [TYPE] [NAME] [flags]
 
其中 command、TYPE、NAME 和 flags 分别是:
-  
command:指定要对一个或多个资源执行的操作,例如create、get、describe、delete。 -  
TYPE:指定资源类型。资源类型不区分大小写, 可以指定单数、复数或缩写形式。 -  
NAME:指定资源的名称。名称区分大小写。 如果省略名称,则显示所有资源的详细信息。例如:kubectl get pods。 -  
flags: 指定可选的参数。例如,可以使用-s或--server参数指定 Kubernetes API 服务器的地址和端口。 
在对多个资源执行操作时,你可以按类型和名称指定每个资源,或指定一个或多个文件,要按类型和名称指定资源:
-  
要对所有类型相同的资源进行分组,请执行以下操作:
TYPE1 name1 name2 name<#>。
例子:kubectl get pod example-pod1 example-pod2 -  
分别指定多个资源类型:
TYPE1/name1 TYPE1/name2 TYPE2/name3TYPE<#>/name<#>。
例子:kubectl get pod/example-pod1 replicationcontroller/example-rc1 -  
用一个或多个文件指定资源:
-f file1 -f file2 -f file<#>
例子:kubectl get -f ./pod.yaml(为什么使用 YAML 而不是 JSON, 是因为 YAML 对用户更友好, 特别是对于配置文件) 
1、操作
| 操作名称 | 描述 | 语法 | 示例 | 
|---|---|---|---|
| get | 列出指定类型的资源 | kubectl get <资源类型> [flags] | kubectl get pods -n kube-system | 
| describe | 显示资源详细配置和状态 | kubectl describe <资源类型>/<资源名称> | kubectl describe node/node01 | 
| create | 通过文件创建资源 | kubectl create -f <文件路径> | kubectl create -f deployment.yaml | 
| apply | 通过文件更新/创建资源(幂等) | kubectl apply -f <文件路径> | kubectl apply -f service.yaml | 
| delete | 删除指定资源 | kubectl delete <资源类型>/<资源名称> | kubectl delete configmap/app-config | 
| logs | 输出容器日志流 | kubectl logs <Pod名称> [-c 容器名] | kubectl logs nginx-pod --tail=100 | 
| exec | 在容器中执行交互命令 | kubectl exec -it <Pod名称> -- <命令> | kubectl exec -it redis-pod -- /bin/sh | 
| port-forward | 将本地端口映射到Pod端口 | kubectl port-forward <资源类型>/<名称> <本地端口>:<目标端口> | kubectl port-forward service/nginx 8080:80 | 
| scale | 调整Deployment副本数 | kubectl scale deploy/<名称> --replicas=<数量> | kubectl scale deploy/web-server --replicas=5 | 
| rollout | 管理资源部署,包含子命令status(查看状态)、history(查看历史版本)、undo(回滚操作)、pause(暂停)、restart(恢复更新) | kubectl rollout undo <资源类型>/<名称> | kubectl rollout undo deployment/frontend | 
| top | 显示Pod/Node资源消耗 | kubectl top [pods|nodes] | kubectl top pods --sort-by=cpu | 
| edit | 直接编辑资源定义 | kubectl edit <资源类型>/<资源名称> | kubectl edit deployment/backend | 
| label | 为资源添加/修改标签 | kubectl label <资源类型> <名称> <键>=<值> | kubectl label nodes node01 disktype=ssd | 
| config | 切换kubeconfig上下文 | kubectl config use-context <上下文名称> | kubectl config use-context prod-cluster | 
| patch | 通过JSON补丁修改资源 | kubectl patch <资源类型>/<名称> -p '<补丁内容>' | kubectl patch deploy/nginx -p '{"spec":{"replicas":3}}' | 
| cp | 在容器和本地间传输文件 | kubectl cp <源路径> <目标路径> | kubectl cp default/nginx-pod:/log.txt ./local.log | 
| taint | 管理节点的调度污点 | kubectl taint nodes <节点名> <键>=<值>:<效果> | kubectl taint nodes node01 app=test:NoSchedule | 
| cordon/uncordon | 禁止/允许节点调度Pod | kubectl cordon/uncordon <节点名> | kubectl cordon node02 | 
| drain | 安全驱逐节点上的Pod | kubectl drain <节点名> [--ignore-daemonsets] | kubectl drain node03 --delete-emptydir-data | 
| run | 快速运行临时容器 | kubectl run <名称> --image=<镜像> [-- <命令] | kubectl run debug-tool --image=busybox -- sleep 3600 | 
| diff | 对比集群配置与本地文件的差异 | kubectl diff -f <文件路径> [flags] | kubectl diff -f updated-deployment.yaml | 
| expose | 将资源暴露为 Kubernetes 服务 | kubectl expose <资源类型>/<名称> [--port=端口] [--target-port=目标端口] | kubectl expose deploy/nginx --port=80 --target-port=9376 | 
| proxy | 创建到 Kubernetes API 的代理通道 | kubectl proxy [--port=端口] [--address=地址] | kubectl proxy --port=8080 --address='192.168.1.100' | 
| set | 动态修改资源配置(镜像/环境变量/资源限制) | kubectl set <子命令> <资源类型>/<名称> [参数] | kubectl set image deploy/nginx nginx=1.25.2-alpine | 
| explain | 查看资源配置字段的文档说明 | kubectl explain [<资源类型>.<字段路径>] [--recursive] | kubectl explain pod.spec.containers.resources.limits | 
补充说明
- 表格中所有命令支持 
-n <命名空间>指定命名空间,--all-namespaces查看全集群资源 - 资源类型支持缩写(如 
po=pods,deploy=deployments,svc=services) - 使用 
--dry-run=client -o yaml可生成资源模板(如kubectl create deploy test --image=nginx --dry-run=client -o yaml) - 生产环境建议结合 
kubectl diff -f <文件>预演配置变更 - 资源名称需替换为实际环境中的标识符
 - 可通过 
kubectl explain <资源字段>查看资源配置字段说明 - 时间敏感操作(如日志查看)可结合 
--since参数(如--since=1h) 
使用技巧与注意事项
- 多文件操作
 
# 批量应用目录下所有配置 -R:递归应用某个目录及其子目录下的所有 YAML/JSON 文件
kubectl apply -f ./manifests/ -R 
 
- 资源选择器组合
 
# 联合使用文件选择与标签过滤 
kubectl delete -f deploy.yaml  -l app=critical 
 
- 输出格式化
 
# 生成资源配置模板(YAML 与 JSON 互转)
kubectl get deploy/nginx -o yaml > nginx-template.yaml  
 
- 版本控制集成
 
# 记录操作历史(需配合 --record 参数)
kubectl apply -f deploy.yaml  --record
 
安全提示:使用 --force 删除、drain 节点等高风险操作前,务必通过 --dry-run=server 验证影响范围。
2、资源
| 资源名 | 缩写名 | API 版本 | 按命名空间 | 资源类型 | 
|---|---|---|---|---|
| Core/v1 资源 | ||||
bindings | - | v1 | true | Binding | 
componentstatuses | cs | v1 | false | ComponentStatus | 
configmaps | cm | v1 | true | ConfigMap | 
endpoints | ep | v1 | true | Endpoints | 
events | ev | v1 | true | Event | 
limitranges | limits | v1 | true | LimitRange | 
namespaces | ns | v1 | false | Namespace | 
nodes | no | v1 | false | Node | 
persistentvolumeclaims | pvc | v1 | true | PersistentVolumeClaim | 
persistentvolumes | pv | v1 | false | PersistentVolume | 
pods | po | v1 | true | Pod | 
replicationcontrollers | rc | v1 | true | ReplicationController | 
secrets | - | v1 | true | Secret | 
services | svc | v1 | true | Service | 
| Apps 工作负载资源 | ||||
daemonsets | ds | apps/v1 | true | DaemonSet | 
deployments | deploy | apps/v1 | true | Deployment | 
statefulsets | sts | apps/v1 | true | StatefulSet | 
replicasets | rs | apps/v1 | true | ReplicaSet | 
| Network 网络资源 | ||||
ingresses | ing | networking.k8s.io/v1 | true | Ingress | 
networkpolicies | netpol | networking.k8s.io/v1 | true | NetworkPolicy | 
| 扩展与安全资源 | ||||
horizontalpodautoscalers | hpa | autoscaling/v2 | true | HorizontalPodAutoscaler | 
cronjobs | cj | batch/v1 | true | CronJob | 
certificatesigningrequests | csr | certificates.k8s.io/v1 | false | CertificateSigningRequest | 
poddisruptionbudgets | pdb | policy/v1 | true | PodDisruptionBudget | 
storageclasses | sc | storage.k8s.io/v1 | false | StorageClass | 
| RBAC 权限资源 | ||||
clusterroles | - | rbac.authorization.k8s.io/v1 | false | ClusterRole | 
rolebindings | - | rbac.authorization.k8s.io/v1 | true | RoleBinding | 
关键特性标注
-  
API 版本差异
PodSecurityPolicy(psp) 使用已弃用的policy/v1beta1(Kubernetes 1.25+ 移除)FlowSchema/PriorityLevelConfiguration使用测试版 APIflowcontrol.apiserver.k8s.io/v1beta2
 -  
命名空间隔离性
- 集群级资源(
false):nodes,persistentvolumes,storageclasses - 命名空间级资源(
true):pods,services,configmaps 
 - 集群级资源(
 -  
高频缩写对照
缩写 全称 使用场景 dsDaemonSet 节点守护进程部署 hpaHorizontalPodAutoscaler 自动水平扩缩容 pdbPodDisruptionBudget 维护期 Pod 中断预算  
使用建议
# 查询资源缩写(含扩展资源)
kubectl api-resources --verbs=list -o wide 
 
# 检查特定资源的 API 版本兼容性 
kubectl explain <resource> --api-version=<version>
 
3、可选参数
| Flag 参数 | 默认值 | 适用命令 | 功能描述 | 
|---|---|---|---|
--namespace=<ns> | default | 所有命令 | 指定操作的命名空间,缩写 -n | 
--kubeconfig=<path> | ~/.kube/config | 所有命令 | 指定 Kubernetes 配置文件路径 | 
--output=<format> | text | get/describe等 | 输出格式控制(json, yaml, wide, name),缩写 -o | 
--dry-run=<mode> | none | apply/create | 试运行模式(client/server/none),用于验证配置 | 
--force | false | delete | 强制删除资源(绕过优雅删除策略) | 
--selector=<label> | 无 | 资源查询命令 | 按标签筛选资源,缩写 -l | 
--field-selector=<query> | 无 | get | 按字段条件筛选资源(如 status.phase=Running ) | 
--record | false | apply/set | 在资源注解中记录命令操作历史 | 
--server=<address> | 无 | 所有命令 | 直接指定 Kubernetes API 服务器地址 | 
--insecure-skip-tls-verify | false | 所有命令 | 跳过 TLS 证书验证(仅测试环境使用) | 
--filename | 无 | apply/create/delete/diff/replace/get/explain等 | 从 本地文件/目录/URL/标准输入流 加载资源配置,驱动声明式或命令式操作,缩写 -f | 
特殊场景参数扩展表
| Flag 参数 | 典型使用场景 | 示例命令 | 
|---|---|---|
--watch / -w | 实时监控资源变化 | kubectl get pods -w | 
--timeout=<duration> | 设置命令超时时间(如 30s, 5m) | kubectl delete pod --timeout=10s | 
--all | 操作全部资源(慎用) | kubectl delete pods --all | 
--show-labels | 显示资源标签列 | kubectl get pods --show-labels | 
--sort-by=<jsonpath> | 按字段排序输出结果 | kubectl get pods --sort-by=.metadata.creationTimestamp | 
使用说明
- 命令兼容性:不同子命令支持的 flags 存在差异(如 
--replicas仅适用于kubectl scale) - 动态查看帮助:
 
# 查看全局 flags 
kubectl options 
# 查看子命令专属 flags 
kubectl <command> --help 
 
参考1
 参考2
