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

Kubernetes kubeconfig 如何生成 kubectl --kubeconfig_标准输入

Kubernetes kubeconfig 如何生成 kubectl --kubeconfig_API_02

本文介绍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 <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]

将 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 <dir> [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=<output_format>

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

Output format

Description

-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格式的对象:

kubectl get pods web-59ff48c4b4-p7d4l -o yaml

2)自定义列

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

示例:

内联

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

模板文件:

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

其中,template.txt文件包含:

NAME          RSRC
metadata.name metadata.resourceVersion

运行命令,结果如下:

NAME                   RSRC
web-59ff48c4b4-p7d4l   73277318

3)Server-side列

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

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

例子:

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

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

输出类似于

NAME       AGE
pod-name   1m

4)排序列表对象

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

语法:

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

示例:

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

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

五、示例:常用操作

使用以下示例来帮助你熟悉运行常用kubectl操作

1)kubectl apply -以文件或标准输入为准应用或更新资源

# 使用 example-service.yaml 中的定义创建服务。
kubectl apply -f example-service.yaml
# 使用 example-controller.yaml 中的定义创建 replication controller。
kubectl apply -f example-controller.yaml
# 使用 <directory> 路径下的任意 .yaml, .yml, 或 .json 文件 创建对象。
kubectl apply -f <directory>

2)kubectl get - 列出一个或多个资源

# 以纯文本输出格式列出所有 pod。
kubectl get pods
# 以纯文本输出格式列出所有 pod,并包含附加信息(如节点名)。
kubectl get pods -o wide
# 以纯文本输出格式列出具有指定名称的副本控制器。提示:你可以使用别名 'rc' 缩短和替换 'replicationcontroller' 资源类型。
kubectl get replicationcontroller <rc-name>
# 以纯文本输出格式列出所有副本控制器和服务。
kubectl get rc,services
# 以纯文本输出格式列出所有守护程序集,包括未初始化的守护程序集。
kubectl get ds --include-uninitialized
# 列出在节点 server01 上运行的所有 pod
kubectl get pods --field-selector=spec.nodeName=server01

3)kubectl describe - 显示一个或多个资源的详细状态,默认情况下包含未初始化的资源

# 显示名称为 <node-name> 的节点的详细信息。
kubectl describe nodes <node-name>
# 显示名为 <pod-name> 的 pod 的详细信息。
kubectl describe pods/<pod-name>
# 显示由名为 <rc-name> 的副本控制器管理的所有 pod 的详细信息。
# 记住:副本控制器创建的任何 pod 都以复制控制器的名称为前缀。
kubectl describe pods <rc-name>
# 描述所有的 pod,不包括未初始化的 pod
kubectl describe pods

说明:

kubectl get 命令通常用于检索同一类型的一个或多个资源。它具有丰富的参数,允许使用-o或--output参数自定义输出格式。可以指定-w或--watch参数以开始观察特定对象的更新。

kubectl describe命令更侧重于描述指定资源的相关方面。可以调用对API服务器的多个API调用来为用户构建视图。例如,kubectl describe node命令不仅检索有关节点的信息,还检索在其上运行的pod的摘要,为节点生成的事件等。

3)kubectl delete - 从文件、stdin或指定的标签选择器、名称、资源选择器或资源中删除资源。

# 使用 pod.yaml 文件中指定的类型和名称删除 pod。
kubectl delete -f pod.yaml
# 删除所有带有 '<label-key>=<label-value>' 标签的 Pod 和服务。
kubectl delete pods,services -l <label-key>=<label-value>
# 删除所有 pod,包括未初始化的 pod。
kubectl delete pods --all

 4)kubectl exec - 对pod中的容器执行命令

# 从 pod <pod-name> 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。
kubectl exec <pod-name> -- date
# 运行输出 'date' 获取在容器的 <container-name> 中 pod <pod-name> 的输出。
kubectl exec <pod-name> -c <container-name> -- date
# 获取一个交互 TTY 并运行 /bin/bash <pod-name >。默认情况下,输出来自第一个容器。
kubectl exec -ti <pod-name> -- /bin/bash

5)kubectl logs -打印pod中的日志

# 从 pod 返回日志快照。
kubectl logs <pod-name>
# 从 pod <pod-name> 开始流式传输日志。这类似于 'tail -f' Linux 命令。
kubectl logs -f <pod-name>