玩转k8s:kubectl命令行工具用法详解

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

玩转k8s:kubectl命令行工具用法详解_第1张图片

玩转k8s:kubectl命令行工具用法详解_第2张图片

本文介绍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操作的描述和语法

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

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

三、资源类型

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

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

资源名 缩写名 API 分组 按命名空间 资源类型
bindings true Binding
componentstatuses cs false ComponentStatus
configmaps cm true ConfigMap
endpoints ep true Endpoints
events ev true Event
limitranges limits true LimitRange
namespaces ns false Namespace
nodes no false Node
persistentvolumeclaims pvc true PersistentVolumeClaim
persistentvolumes pv false PersistentVolume
pods po true Pod
podtemplates true PodTemplate
replicationcontrollers rc true ReplicationController
resourcequotas quota true ResourceQuota
secrets true Secret
serviceaccounts sa true ServiceAccount
services svc true Service
mutatingwebhookconfigurations admissionregistration.k8s.io false MutatingWebhookConfiguration
validatingwebhookconfigurations admissionregistration.k8s.io false ValidatingWebhookConfiguration
customresourcedefinitions crd,crds apiextensions.k8s.io false CustomResourceDefinition
apiservices apiregistration.k8s.io false APIService
controllerrevisions apps true ControllerRevision
daemonsets ds apps true DaemonSet
deployments deploy apps true Deployment
replicasets rs apps true ReplicaSet
statefulsets sts apps true StatefulSet
tokenreviews authentication.k8s.io false TokenReview
localsubjectaccessreviews authorization.k8s.io true LocalSubjectAccessReview
selfsubjectaccessreviews authorization.k8s.io false SelfSubjectAccessReview
selfsubjectrulesreviews authorization.k8s.io false SelfSubjectRulesReview
subjectaccessreviews authorization.k8s.io false SubjectAccessReview
horizontalpodautoscalers hpa autoscaling true HorizontalPodAutoscaler
cronjobs cj batch true CronJob
jobs batch true Job
certificatesigningrequests csr certificates.k8s.io false CertificateSigningRequest
leases coordination.k8s.io true Lease
endpointslices discovery.k8s.io true EndpointSlice
events ev events.k8s.io true Event
ingresses ing extensions true Ingress
flowschemas flowcontrol.apiserver.k8s.io false FlowSchema
prioritylevelconfigurations flowcontrol.apiserver.k8s.io false PriorityLevelConfiguration
ingressclasses networking.k8s.io false IngressClass
ingresses ing networking.k8s.io true Ingress
networkpolicies netpol networking.k8s.io true NetworkPolicy
runtimeclasses node.k8s.io false RuntimeClass
poddisruptionbudgets pdb policy true PodDisruptionBudget
podsecuritypolicies psp policy false PodSecurityPolicy
clusterrolebindings rbac.authorization.k8s.io false ClusterRoleBinding
clusterroles rbac.authorization.k8s.io false ClusterRole
rolebindings rbac.authorization.k8s.io true RoleBinding
roles rbac.authorization.k8s.io true Role
priorityclasses pc scheduling.k8s.io false PriorityClass
csidrivers storage.k8s.io false CSIDriver
csinodes storage.k8s.io false CSINode
storageclasses sc storage.k8s.io false StorageClass
volumeattachments storage.k8s.io false VolumeAttachment

四、输出选项

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

1)格式化输出

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

语法:

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

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

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