00-kubectl 命令

官方文档

总览

背景

Kubectl 是一个用于操作 kubernetes(k8s)集群的命令行接口,通过利用 kubectl 的各种命令可以实现各种功能,是在使用 kubernetes 中非常常用的工具。

语法

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

其中 commandTYPENAMEflags 分别是:

  • command:指定要对一个或多个资源执行的操作,例如 creategetdescribedelete

  • TYPE:指定资源类型。资源类型不区分大小写, 可以指定单数、复数或缩写形式。例如,以下命令输出相同的结果:

    1
    2
    3
    kubectl get pod pod1
    kubectl get pods pod1
    kubectl get po pod1
  • NAME:指定资源的名称。名称区分大小写。如果省略名称,则显示所有资源的详细信息。例如:kubectl get pods

    在对多个资源执行操作时,你可以按类型和名称指定每个资源,或指定一个或多个文件:

    • 要按类型和名称指定资源:

    • 要对所有类型相同的资源进行分组,请执行以下操作: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<#>

    • 使用 YAML 而不是 JSON,因为 YAML 对用户更友好, 特别是对于配置文件。
      例子:kubectl get -f ./pod.yaml

  • flags: 指定可选的参数。例如,可以使用 -s--server 参数指定 Kubernetes API 服务器的地址和端口。

注意:

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

kubectl 帮助

如果你需要帮助,在终端窗口中运行。

1
2
3
4
5
6
kubectl help        # 查看子命令列表
kubectl -h # 查看子命令列表
kubectl options # 查看全局选项
kubectl <command> --help # 查看子命令的帮助
kubectl [command] [PARAMS] -o=<format> # 设置输出格式(如 json、yaml、jsonpath 等)
kubectl explain [RESOURCE] # 查看资源的定义

集群内身份验证和命名空间覆盖

默认情况下,kubectl 命令首先确定它是否在 Pod 中运行,从而被视为在集群中运行。

它首先检查 KUBERNETES_SERVICE_HOSTKUBERNETES_SERVICE_PORT 环境变量以及 /var/run/secrets/kubernetes.io/serviceaccount/token 中是否存在服务帐户令牌文件。如果三个条件都被满足,则假定在集群内进行身份验证。

为保持向后兼容性,如果在集群内身份验证期间设置了 POD_NAMESPACE 环境变量,它将覆盖服务帐户令牌中的默认命名空间。任何依赖默认命名空间的清单或工具都会受到影响。

POD_NAMESPACE 环境变量

如果设置了 POD_NAMESPACE 环境变量,对命名空间资源的 CLI 操作对象将使用该变量值作为默认值。 例如,如果该变量设置为 seattlekubectl get pods 将返回 seattle 命名空间中的 Pod。 这是因为 Pod 是一个命名空间资源,且命令中没有提供命名空间。

直接使用 --namespace <value> 会覆盖此行为。

kubectl 如何处理 ServiceAccount 令牌

假设:

  • 有 Kubernetes 服务帐户令牌文件挂载在 /var/run/secrets/kubernetes.io/serviceaccount/token 上,并且
  • 设置了 KUBERNETES_SERVICE_HOST 环境变量,并且
  • 设置了 KUBERNETES_SERVICE_PORT 环境变量,并且
  • 你没有在 kubectl 命令行上明确指定命名空间。

然后 kubectl 假定它正在你的集群中运行。 kubectl 工具查找该 ServiceAccount 的命名空间 (该命名空间与 Pod 的命名空间相同)并针对该命名空间进行操作。 这与集群外运行的情况不同; 当 kubectl 在集群外运行并且你没有指定命名空间时, kubectl 命令会针对你在客户端配置中为当前上下文设置的命名空间进行操作。 要为你的 kubectl 更改默认的命名空间,你可以使用以下命令:

1
kubectl config set-context --current --namespace=<namespace-name>

kubectl 一些 command (操作)

操作 语法 描述
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 格式。注意 - 需要安装 kubectl-convert 插件。
cordon kubectl cordon NODE [options] 将节点标记为不可调度。
cp kubectl cp <file-spec-src> <file-spec-dest> [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] 在当前起作用的配置和文件或标准输之间作对比 (BETA)
drain kubectl drain NODE [options] 腾空节点以准备维护。
edit kubectl edit (-f FILENAME / TYPE NAME / TYPE/NAME) [flags] 使用默认编辑器编辑和更新服务器上一个或多个资源的定义。
events kubectl events 列举事件。
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] 使用策略合并流程更新资源的一个或多个字段。
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] 管理资源的上线。有效的资源类型包括:Deployment、 DaemonSet 和 StatefulSet。
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 一些 TYPE (资源类型)

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

(以下输出可以通过 kubectl api-resources 获取,内容以 Kubernetes 1.25.0 版本为准。)

资源名 缩写名 API 版本 按命名空间 资源类型
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
podtemplates v1 true PodTemplate
replicationcontrollers rc v1 true ReplicationController
resourcequotas quota v1 true ResourceQuota
secrets v1 true Secret
serviceaccounts sa v1 true ServiceAccount
services svc v1 true Service
mutatingwebhookconfigurations admissionregistration.k8s.io/v1 false MutatingWebhookConfiguration
validatingwebhookconfigurations admissionregistration.k8s.io/v1 false ValidatingWebhookConfiguration
customresourcedefinitions crd,crds apiextensions.k8s.io/v1 false CustomResourceDefinition
apiservices apiregistration.k8s.io/v1 false APIService
controllerrevisions apps/v1 true ControllerRevision
daemonsets ds apps/v1 true DaemonSet
deployments deploy apps/v1 true Deployment
replicasets rs apps/v1 true ReplicaSet
statefulsets sts apps/v1 true StatefulSet
tokenreviews authentication.k8s.io/v1 false TokenReview
localsubjectaccessreviews authorization.k8s.io/v1 true LocalSubjectAccessReview
selfsubjectaccessreviews authorization.k8s.io/v1 false SelfSubjectAccessReview
selfsubjectrulesreviews authorization.k8s.io/v1 false SelfSubjectRulesReview
subjectaccessreviews authorization.k8s.io/v1 false SubjectAccessReview
horizontalpodautoscalers hpa autoscaling/v2 true HorizontalPodAutoscaler
cronjobs cj batch/v1 true CronJob
jobs batch/v1 true Job
certificatesigningrequests csr certificates.k8s.io/v1 false CertificateSigningRequest
leases coordination.k8s.io/v1 true Lease
endpointslices discovery.k8s.io/v1 true EndpointSlice
events ev events.k8s.io/v1 true Event
flowschemas flowcontrol.apiserver.k8s.io/v1beta2 false FlowSchema
prioritylevelconfigurations flowcontrol.apiserver.k8s.io/v1beta2 false PriorityLevelConfiguration
ingressclasses networking.k8s.io/v1 false IngressClass
ingresses ing networking.k8s.io/v1 true Ingress
networkpolicies netpol networking.k8s.io/v1 true NetworkPolicy
runtimeclasses node.k8s.io/v1 false RuntimeClass
poddisruptionbudgets pdb policy/v1 true PodDisruptionBudget
podsecuritypolicies psp policy/v1beta1 false PodSecurityPolicy
clusterrolebindings rbac.authorization.k8s.io/v1 false ClusterRoleBinding
clusterroles rbac.authorization.k8s.io/v1 false ClusterRole
rolebindings rbac.authorization.k8s.io/v1 true RoleBinding
roles rbac.authorization.k8s.io/v1 true Role
priorityclasses pc scheduling.k8s.io/v1 false PriorityClass
csidrivers storage.k8s.io/v1 false CSIDriver
csinodes storage.k8s.io/v1 false CSINode
csistoragecapacities storage.k8s.io/v1 true CSIStorageCapacity
storageclasses sc storage.k8s.io/v1 false StorageClass
volumeattachments storage.k8s.io/v1 false VolumeAttachment

kubectk 一些 flags (输出选项)

有关如何格式化或排序某些命令的输出的信息,请参阅以下章节。有关哪些命令支持不同输出选项的详细信息, 请参阅 kubectl 参考文档。

格式化输出

所有 kubectl 命令的默认输出格式都是人类可读的纯文本格式。要以特定格式在终端窗口输出详细信息, 可以将 -o--output 参数添加到受支持的 kubectl 命令中。

语法

1
kubectl [command] [TYPE] [NAME] -o <output_format>

取决于具体的 kubectl 操作,支持的输出格式如下:

输出格式 描述
-o custom-columns=<spec> 使用逗号分隔的自定义列列表打印表。
-o custom-columns-file=<filename> 使用 <filename> 文件中的自定义列)模板打印表。
-o json 输出 JSON 格式的 API 对象
-o jsonpath=<template> 打印 jsonpath 表达式定义的字段
-o jsonpath-file=<filename> 打印 <filename> 文件中 jsonpath 表达式定义的字段。
-o name 仅打印资源名称而不打印任何其他内容。
-o wide 以纯文本格式输出,包含所有附加信息。对于 Pod 包含节点名。
-o yaml 输出 YAML 格式的 API 对象。

示例

在此示例中,以下命令将单个 Pod 的详细信息输出为 YAML 格式的对象:

1
kubectl get pod web-pod-13je7 -o yaml

请记住:有关每个命令支持哪种输出格式的详细信息, 请参阅 kubectl 参考文档。

自定义列

要定义自定义列并仅将所需的详细信息输出到表中,可以使用 custom-columns 选项。 你可以选择内联定义自定义列或使用模板文件:-o custom-columns=<spec>-o custom-columns-file=<filename>

示例

内联:

1
kubectl get pods <pod-name> -o custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion

模板文件:

1
kubectl get pods <pod-name> -o custom-columns-file=template.txt

其中,template.txt 文件包含:

1
2
NAME          RSRC
metadata.name metadata.resourceVersion

运行这两个命令之一的结果类似于:

1
2
NAME           RSRC
submit-queue 610995
Server-side 列

kubectl 支持从服务器接收关于对象的特定列信息。 这意味着对于任何给定的资源,服务器将返回与该资源相关的列和行,以便客户端打印。 通过让服务器封装打印的细节,这允许在针对同一集群使用的客户端之间提供一致的人类可读输出。

此功能默认启用。要禁用它,请将该 --server-print=false 参数添加到 kubectl get 命令中。

例子

要打印有关 Pod 状态的信息,请使用如下命令:

1
kubectl get pods <pod-name> --server-print=false

输出类似于:

1
2
NAME       AGE
pod-name 1m

排序列表对象

要将对象排序后输出到终端窗口,可以将 --sort-by 参数添加到支持的 kubectl 命令。 通过使用 --sort-by 参数指定任何数字或字符串字段来对对象进行排序。 要指定字段,请使用 jsonpath 表达式。

语法

1
kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>

示例

要打印按名称排序的 Pod 列表,请运行:

1
kubectl get pods --sort-by=.metadata.name

kubectl 常用参数分类

  • Basic Commands(Beginner)基础命令(初级)

    1
    2
    3
    4
    kubectl create  # 通过 yaml/json 文件或者标准输入创建一个资源对象,支持很多子命令 例如namespace pod deployment service等
    kubectl expose # 将 json/yaml 文件中定义的资源对象的端口暴露给新的 service 资源对象
    kubectl run # 创建并运行一个或多个容器镜像
    kubectl set # 配置资源对象设置特定功能
  • Basic Commands(Intermediate)基础命令(中级)

    1
    2
    3
    4
    kubectl explain # 查看资源对象的详细信息(一般用一编写yaml的时候做一个提示 kubectl explain deployment 会出现deployment下面可以写的字段以及字段属性还有 可以逐级使用)
    kubectl get # 获取一个或多个资源对象的信息
    kubectl edit # 使用默认编辑器编辑服务器上定义的资源对象
    kubectl delete # 通过 json/yaml 文件、标准舒服、资源名称或标签选择器来删除资源
  • DeployCommands 部署命令

    1
    2
    3
    4
    kubectl rollout     # 资源管理对象的部署
    kubectl rollout-update 使用rc(replication controller)来做滚动恩星
    kubectl scale # 扩容或者缩容deployment replicaset replication contrller等
    kubectl autoscale # 自动设置在k8s系统中运行的pod数量(水平自动伸缩)
  • Cluster Manager Commands 集群管理命令

    1
    2
    3
    4
    5
    6
    7
    kubectl cetificate  # 修改证书资源对象
    kubectl cluster-info # 查看集群信息
    kubectl top # 显示资源 cpu 内存 存储使用情况
    kubectl cordon # 标记节点为不可调度
    kubectl uncordon # 指定节点为可调度
    kubectl drain # 安全的驱逐节点的所有pod
    kubectl taint # 将一个或多个节点设置为污点
  • Troubleshooting adn Debugging Commands 故障排查和调试命令

    1
    2
    3
    4
    5
    6
    7
    8
    kubectl describe    # 显示一个或多个资源对象的详细信息
    kubectl logs # 输出pod资源对象中一个容器的日志
    kubectl attach # 连接到一个运行的容器
    kubectl exec # 在指定容器内执行命令
    kubectl port-forward # 将本机指定端口映射到pod资源对象的端口
    kubectl proxy # 将本机指定端口映射到kube-apiserver
    kubectl cp # 用于pod与主机交换文件
    kubectl auth # 检查验证
  • Advanced Commands 高级命令

    1
    2
    3
    4
    5
    6
    7
    kubectl diff    # 对比本地 json/yaml 文件与 kube-apiserver中运行的配置文件是否有差异
    kubectl apply # 通过 json/yaml 文件 标准输入对资源进行配置更新或者创建
    kubectl patch # 通过 patch 方式修改资源对象字段(补丁式)
    kubectl replace # 通过 json/yaml 文件或者标准输入来替换资源对象
    kubectl wait # 在一个或者多个资源上等待条件达成
    kubectl convert # 转换 json/yaml 文件为不同的资源版本
    kubectl kustomize # 定制 kubernetes 配置
  • Settings Commands 设置命令

    1
    2
    3
    kubectl label       # 增删改资源的标签
    kubectl annotate # 更新一个或者多个资源对象的注释(annotaion)信息
    kubectl completion # 命令自动补全
  • Other Commands 其他命令

    1
    2
    3
    4
    5
    6
    kubectl config  # 管理kubeconfig配置文件
    kubectl plugin # 运行命令行插件功能
    kubectl version # 查看客户端服务端的系统版本信息
    kubectl api-versions # 列出当前kubernetes系统支持的资源组和资源版本表现形式为/
    kubectl api-resources # 列出当前kubernetes系统支持的resource资源列表
    kubectl options # 查看支持的参数列表

00-kubectl 命令
https://flepeng.github.io/042-云原生-02-kubernetes-13-命令-kubectl-00-kubectl-命令/
作者
Lepeng
发布于
2023年3月1日
许可协议