kubectl命令行工具用法详解
创始人
2024-05-29 05:41:25

Kubectl 是管理kubernetes的命令行工具,kubectl在$HOME/.kube目录下查找config配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数指定其他kubeconfig文件。

 

本文介绍kubectl语法和命令操作描述,并提供常见示例。包括支持的参数和子命令。

一、语法

kubectl使用以下语法,在终端运行命令:

kubectl [command] [TYPE] [NAME] [flags]

其中:

  • command:指定要对一个或多个资源执行的操作,比如create、get、describe、delete。
  • TYPE:指定资源类型。资源类型不区分大小写,可以指定单数、复数或缩写形式。

例如:以下三个命令输出结果相同

kubectl get pod nginx-1635820653-568f555cfd-fmvr2
kubectl get pods nginx-1635820653-568f555cfd-fmvr2
kubectl get po nginx-1635820653-568f555cfd-fmvr2
  • NAME: 指定资源的名称。名称区分大小写。如果省略名称,则显示所有资源的详细信息
kubectl get pods

1)要按类型和名称指定资源

a) 要对所有类型相同的资源进行分区,执行以下操作: TYPE1 name1 name2 name<#>,例如: 

kubectl get pod nfs-client-provisioner-6fd5756874-qkwwq sentinel-0

b) 分别指定多个资源类型: TYPE1/name TYPE1/name2 TYPE2/name1 TYPE<#>/name<#>,例如:

kubectl get pod/nfs-client-provisioner-6fd5756874-qkwwq service/nginx-1635820653

2)用一个或多个文件指定资源: -f file1 -f file2 -f file<#>

a) 使用YAML而不是JSON,因为YAML更容易使用,特别是用于配置文件。例如:

kubectl get -f ./pod.yaml
  • flags:  指定可选的参数。例如,可以使用 -s 或 --server 参数指定 Kubernetes API 服务器的地址和端口。
  • -n 后跟 namespace, 查看指定的命名空间
  • -o

注意:从命令行指定的参数会覆盖默认值和任何相应的环境变量。 

如果需要帮助,可以使用kubectl的help命令

kubectl -h

二、操作

基础命令

命令说明
create通过文件名或者标准输入创建资源
expose将一个资源公开为一个新的Service
run在集群中运行一个特定的镜像
set在对象上设置特定的功能
expiain文档参考资料
get显示一个或多个资源
edit使用默认的编辑器编辑一个资源
delete通过文件名、标准输入、资源名称或标签选择器来删除资源

集群部署命令

命令说明
rollout管理资源的发布
rolling-update对给定的复制控制器滚动更新
scale扩容或缩容Pod数量,Deployment、ReplicaSet、RC或Job
autoscale创建一个自动选择扩容或缩容并设置Pod数量

集群管理命令

命令说明
certificate修改证书资源
cluster-info显示集群信息
top显示资源(CPU/Memory/Storage)使用。需要Heapster运行
cordon标记节点不可调度
uncordon标记节点可调度
drain驱逐节点上的应用,准备下线维护
taint修改节点taint标记

故障和调试命令

命令说明
describe显示特定资源或资源组的详细信息
logs在一个Pod中打印一个容器日志。如果Pod只有一个容器,容器名称是可选的
attach附加到一个运行的容器
exec执行命令到容器
port-forward转发一个或多个本地端口到一个pod
proxy运行一个proxy到kubernetes API server
cp拷贝文件或目录到容器中
auth检查授权

高级命令

命令说明
apply通过文件名或标准输入对资源应用配置
patch使用补丁修改、更新资源的字段
replace通过文件名或标准输入替换一个资源
convert不同的API版本之间转换配置文件

设置命令

命令说明
label更新资源上的标签
annotate更新资源上的注释
completion用于实现kubectl工具自动不全

其他命令

命令说明
api-versions打印支持的API版本
api-resources打印支持的服务器资源API
config修改kubeconfig文件(用于访问API,比如配置认证信息)
help所有命令帮助
plugin运行一个命令行插件
version打印客户端和服务版本信息

下表包含所有kubectl操作的描述和语法

操作语法描述
alphakubectl alpha SUBCOMMAND [flags]列出与 alpha 特性对应的可用命令,这些特性在 Kubernetes 集群中默认情况下是不启用的。
annotatekubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [—overwrite] [—all] [—resource-version=version] [flags]添加或更新一个或多个资源的注解。
api-resourceskubectl api-resources [flags]列出可用的 API 资源。
api-versionskubectl api-versions [flags]列出可用的 API 版本。
applykubectl apply -f FILENAME [flags]从文件或 stdin 对资源应用配置更改。
attachkubectl attach POD -c CONTAINER [-i] [-t] [flags]附加到正在运行的容器,查看输出流或与容器(stdin)交互。
authkubectl auth [flags] [options]检查授权。
autoscalekubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [—min=MINPODS] —max=MAXPODS [—cpu-percent=CPU] [flags]自动伸缩由副本控制器管理的一组 pod。
certificatekubectl certificate SUBCOMMAND [options]修改证书资源。
cluster-infokubectl cluster-info [flags]显示有关集群中主服务器和服务的端口信息。
completionkubectl completion SHELL [options]为指定的 shell (bash 或 zsh)输出 shell 补齐代码。
configkubectl config SUBCOMMAND [flags]修改 kubeconfig 文件。有关详细信息,请参阅各个子命令。
convertkubectl convert -f FILENAME [options]在不同的 API 版本之间转换配置文件。配置文件可以是 YAML 或 JSON 格式。
cordonkubectl cordon NODE [options]将节点标记为不可调度。
cpkubectl cp [options]在容器之间复制文件和目录。
createkubectl create -f FILENAME [flags]从文件或 stdin 创建一个或多个资源。
deletekubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | —all]) [flags]从文件、标准输入或指定标签选择器、名称、资源选择器或资源中删除资源。
describekubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags]显示一个或多个资源的详细状态。
diffkubectl diff -f FILENAME [flags]将 live 配置和文件或标准输入做对比 (BETA)
drainkubectl drain NODE [options]腾空节点以准备维护。
editkubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags]使用默认编辑器编辑和更新服务器上一个或多个资源的定义。
execkubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [— COMMAND [args…]]对 pod 中的容器执行命令。
explainkubectl explain [—recursive=false] [flags]获取多种资源的文档。例如 pod, node, service 等。
exposekubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [—port=port] [—protocol=TCP|UDP] [—target-port=number-or-name] [—name=name] [—external-ip=external-ip-of-service] [—type=type] [flags]将副本控制器、服务或 pod 作为新的 Kubernetes 服务暴露。
getkubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [—watch] [—sort-by=FIELD] [[-o | —output]=OUTPUT_FORMAT] [flags]列出一个或多个资源。
kustomizekubectl kustomize [flags] [options]列出从 kustomization.yaml 文件中的指令生成的一组 API 资源。参数必须是包含文件的目录的路径,或者是 git 存储库 URL,其路径后缀相对于存储库根目录指定了相同的路径。
labelkubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [—overwrite] [—all] [—resource-version=version] [flags]添加或更新一个或多个资源的标签。
logskubectl logs POD [-c CONTAINER] [—follow] [flags]在 pod 中打印容器的日志。
optionskubectl options全局命令行选项列表,适用于所有命令。
patchkubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) —patch PATCH [flags]使用策略合并 patch 程序更新资源的一个或多个字段。
pluginkubectl plugin [flags] [options]提供用于与插件交互的实用程序。
port-forwardkubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT […[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]将一个或多个本地端口转发到一个 pod。
proxykubectl proxy [—port=PORT] [—www=static-dir] [—www-prefix=prefix] [—api-prefix=prefix] [flags]运行 Kubernetes API 服务器的代理。
replacekubectl replace -f FILENAME从文件或标准输入中替换资源。
rolloutkubectl rollout SUBCOMMAND [options]管理资源的部署。有效的资源类型包括:Deployments, DaemonSets 和 StatefulSets。
runkubectl run NAME —image=image [—env=”key=value”] [—port=port] [—dry-run=server | client | none] [—overrides=inline-json] [flags]在集群上运行指定的镜像。
scalekubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) —replicas=COUNT [—resource-version=version] [—current-replicas=count] [flags]更新指定副本控制器的大小。
setkubectl set SUBCOMMAND [options]配置应用程序资源。
taintkubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 … KEY_N=VAL_N:TAINT_EFFECT_N [options]更新一个或多个节点上的污点。
topkubectl top [flags] [options]显示资源(CPU/内存/存储)的使用情况。
uncordonkubectl uncordon NODE [options]将节点标记为可调度。
versionkubectl version [—client] [flags]显示运行在客户端和服务器上的 Kubernetes 版本。
waitkubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | —all)]) [—for=delete|—for condition=available] [options]实验性:等待一种或多种资源的特定条件。

更多有关命令操作的信息,请参阅kubectl参考文档。

三、资源类型

下表列出所有支持的资源类型及其缩写名:

提示:以下输出可以通过kubectl api-resources获取

资源名缩写名API 分组按命名空间资源类型
bindingstrueBinding
componentstatusescsfalseComponentStatus
configmapscmtrueConfigMap
endpointseptrueEndpoints
eventsevtrueEvent
limitrangeslimitstrueLimitRange
namespacesnsfalseNamespace
nodesnofalseNode
persistentvolumeclaimspvctruePersistentVolumeClaim
persistentvolumespvfalsePersistentVolume
podspotruePod
podtemplatestruePodTemplate
replicationcontrollersrctrueReplicationController
resourcequotasquotatrueResourceQuota
secretstrueSecret
serviceaccountssatrueServiceAccount
servicessvctrueService
mutatingwebhookconfigurationsadmissionregistration.k8s.iofalseMutatingWebhookConfiguration
validatingwebhookconfigurationsadmissionregistration.k8s.iofalseValidatingWebhookConfiguration
customresourcedefinitionscrd,crdsapiextensions.k8s.iofalseCustomResourceDefinition
apiservicesapiregistration.k8s.iofalseAPIService
controllerrevisionsappstrueControllerRevision
daemonsetsdsappstrueDaemonSet
deploymentsdeployappstrueDeployment
replicasetsrsappstrueReplicaSet
statefulsetsstsappstrueStatefulSet
tokenreviewsauthentication.k8s.iofalseTokenReview
localsubjectaccessreviewsauthorization.k8s.iotrueLocalSubjectAccessReview
selfsubjectaccessreviewsauthorization.k8s.iofalseSelfSubjectAccessReview
selfsubjectrulesreviewsauthorization.k8s.iofalseSelfSubjectRulesReview
subjectaccessreviewsauthorization.k8s.iofalseSubjectAccessReview
horizontalpodautoscalershpaautoscalingtrueHorizontalPodAutoscaler
cronjobscjbatchtrueCronJob
jobsbatchtrueJob
certificatesigningrequestscsrcertificates.k8s.iofalseCertificateSigningRequest
leasescoordination.k8s.iotrueLease
endpointslicesdiscovery.k8s.iotrueEndpointSlice
eventsevevents.k8s.iotrueEvent
ingressesingextensionstrueIngress
flowschemasflowcontrol.apiserver.k8s.iofalseFlowSchema
prioritylevelconfigurationsflowcontrol.apiserver.k8s.iofalsePriorityLevelConfiguration
ingressclassesnetworking.k8s.iofalseIngressClass
ingressesingnetworking.k8s.iotrueIngress
networkpoliciesnetpolnetworking.k8s.iotrueNetworkPolicy
runtimeclassesnode.k8s.iofalseRuntimeClass
poddisruptionbudgetspdbpolicytruePodDisruptionBudget
podsecuritypoliciespsppolicyfalsePodSecurityPolicy
clusterrolebindingsrbac.authorization.k8s.iofalseClusterRoleBinding
clusterrolesrbac.authorization.k8s.iofalseClusterRole
rolebindingsrbac.authorization.k8s.iotrueRoleBinding
rolesrbac.authorization.k8s.iotrueRole
priorityclassespcscheduling.k8s.iofalsePriorityClass
csidriversstorage.k8s.iofalseCSIDriver
csinodesstorage.k8s.iofalseCSINode
storageclassesscstorage.k8s.iofalseStorageClass
volumeattachmentsstorage.k8s.iofalseVolumeAttachment

四、输出选项

介绍如何格式化或排序某些命令的输出信息。

1)格式化输出

kubectl命令的默认输出格式是可读的纯文本格式。要以特定格式向终端窗口输出详细信息,可以将-o或--output参数添加到kubectl命令中。

语法:

kubectl [command] [TYPE] [NAME] -o=

 根据kubectl操作,支持以下输出格式:

Output formatDescription
-o custom-columns=使用逗号分隔的自定义列列表打印表。
-o custom-columns-file=使用  文件中的自定义列模板打印表。
-o json输出 JSON 格式的 API 对象
-o jsonpath=