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/name3
TYPE<#>/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
- 集群级资源(
-
高频缩写对照
缩写 全称 使用场景 ds
DaemonSet 节点守护进程部署 hpa
HorizontalPodAutoscaler 自动水平扩缩容 pdb
PodDisruptionBudget 维护期 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