kubectl命令

文章目录

一、概述

kubectl是最常用的客户端工具之一,它提供了基于命令行访问kubernetes api的简洁方式,能够满足对kubernetes的绝大部分的操作需求。

例如,需要创建资源对象时,kubectl会将json格式的清单内容以post方法提交至api server。

二、语法

kubectl [command] [TYPE] [NAME] [flags]
  1. command:对资源执行相应操作的子命令,如getcreatedeleterundescribe
  2. TYPE:要操作的资源对象的类型,如pods、services等,类型名称区分大小写,但支持使用简写格式
  3. NAME:对象名称,区分字符大小写;省略时,则表示指定TYPE的所有资源对象
  4. flags:命令行选项,-o 用于指定输出格式,-s 指定Kubernetes API 服务器的地址和端口。

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

三、操作

下表包含所有 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 <file-spec-src> <file-spec-dest> [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 <dir> [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 获取,内容以 Kubernetes 1.25.0 版本为准。)

资源名缩写名API 版本按命名空间资源类型
bindingsv1trueBinding
componentstatusescsv1falseComponentStatus
configmapscmv1trueConfigMap
endpointsepv1trueEndpoints
eventsevv1trueEvent
limitrangeslimitsv1trueLimitRange
namespacesnsv1falseNamespace
nodesnov1falseNode
persistentvolumeclaimspvcv1truePersistentVolumeClaim
persistentvolumespvv1falsePersistentVolume
podspov1truePod
podtemplatesv1truePodTemplate
replicationcontrollersrcv1trueReplicationController
resourcequotasquotav1trueResourceQuota
secretsv1trueSecret
serviceaccountssav1trueServiceAccount
servicessvcv1trueService
mutatingwebhookconfigurationsadmissionregistration.k8s.io/v1falseMutatingWebhookConfiguration
validatingwebhookconfigurationsadmissionregistration.k8s.io/v1falseValidatingWebhookConfiguration
customresourcedefinitionscrd,crdsapiextensions.k8s.io/v1falseCustomResourceDefinition
apiservicesapiregistration.k8s.io/v1falseAPIService
controllerrevisionsapps/v1trueControllerRevision
daemonsetsdsapps/v1trueDaemonSet
deploymentsdeployapps/v1trueDeployment
replicasetsrsapps/v1trueReplicaSet
statefulsetsstsapps/v1trueStatefulSet
tokenreviewsauthentication.k8s.io/v1falseTokenReview
localsubjectaccessreviewsauthorization.k8s.io/v1trueLocalSubjectAccessReview
selfsubjectaccessreviewsauthorization.k8s.io/v1falseSelfSubjectAccessReview
selfsubjectrulesreviewsauthorization.k8s.io/v1falseSelfSubjectRulesReview
subjectaccessreviewsauthorization.k8s.io/v1falseSubjectAccessReview
horizontalpodautoscalershpaautoscaling/v2trueHorizontalPodAutoscaler
cronjobscjbatch/v1trueCronJob
jobsbatch/v1trueJob
certificatesigningrequestscsrcertificates.k8s.io/v1falseCertificateSigningRequest
leasescoordination.k8s.io/v1trueLease
endpointslicesdiscovery.k8s.io/v1trueEndpointSlice
eventsevevents.k8s.io/v1trueEvent
flowschemasflowcontrol.apiserver.k8s.io/v1beta2falseFlowSchema
prioritylevelconfigurationsflowcontrol.apiserver.k8s.io/v1beta2falsePriorityLevelConfiguration
ingressclassesnetworking.k8s.io/v1falseIngressClass
ingressesingnetworking.k8s.io/v1trueIngress
networkpoliciesnetpolnetworking.k8s.io/v1trueNetworkPolicy
runtimeclassesnode.k8s.io/v1falseRuntimeClass
poddisruptionbudgetspdbpolicy/v1truePodDisruptionBudget
podsecuritypoliciespsppolicy/v1beta1falsePodSecurityPolicy
clusterrolebindingsrbac.authorization.k8s.io/v1falseClusterRoleBinding
clusterrolesrbac.authorization.k8s.io/v1falseClusterRole
rolebindingsrbac.authorization.k8s.io/v1trueRoleBinding
rolesrbac.authorization.k8s.io/v1trueRole
priorityclassespcscheduling.k8s.io/v1falsePriorityClass
csidriversstorage.k8s.io/v1falseCSIDriver
csinodesstorage.k8s.io/v1falseCSINode
csistoragecapacitiesstorage.k8s.io/v1trueCSIStorageCapacity
storageclassesscstorage.k8s.io/v1falseStorageClass
volumeattachmentsstorage.k8s.io/v1falseVolumeAttachment

五、输出选项

1、格式化输出

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

1.1、语法

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

1.2、支持的输出格式

输出格式描述
-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 对象。

六、kubectl 自动补全

1、检查/安装bash-completion包(BASH中)

kubectl 的 Bash 补全脚本可以用命令 kubectl completion bash 生成。 在 Shell 中导入(Sourcing)补全脚本,将启用 kubectl 自动补全功能。

然而,补全脚本依赖于工具 bash-completion, 所以要先安装它

1.1、检查是否安装

type _init_completion

1.2、安装bash-completion

yum install -y bash-completion
apt-get install bash-completion

上述命令将创建文件 /usr/share/bash-completion/bash_completion,它是 bash-completion 的主脚本。

2、在当前的bash会话中启用kubectl自动补全功能

source <(kubectl completion bash)

3、在bash shell中永久的添加自动补全

echo "source <(kubectl completion bash)" >> ~/.bashrc

4、设置别名

alias k=kubectl
complete -o default -F __start_kubectl k
  • 创建了一个别名 k,使其等同于 kubectl
  • -o default: 参数告诉 Bash 在补全选项时,除了特定的补全函数外,还应该包括默认的文件名补全
  • -F __start_kubectl: 指定补全函数 __start_kubectl,负责处理 kubectl 命令及其子命令、选项和资源的补全逻辑
  • k: 指定上述补全规则应用到的命令别名

image-20240620080025367

七、基本使用

官网kubectl快速使用参考

1、kubectl 创建对象

1.1、使用一个资源清单创建资源

[root@k8s-master ~]# cat httpdpod.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: httpd

---

apiVersion: v1
kind: Pod
metadata:
  name: httpdpod
  namespace: httpd
spec:
  containers:
  - name: httpd-containers
    image: nginx:latest
    
[root@k8s-master ~]# kubectl apply -f httpdpod.yaml
namespace/httpd created
pod/httpdpod created

image-20240620090315304

1.2、使用多个资源清单创建资源

[root@k8s-master ~]# cat dev2.yaml
---
apiVersion: v1
kind: Namespace
metadata:
  name: dev2
[root@k8s-master ~]# cat dev3.yaml
---
apiVersion: v1
kind: Namespace
metadata:
  name: dev3
[root@k8s-master ~]# kubectl apply -f ./dev2.yaml -f ./dev3.yaml
namespace/dev2 created
namespace/dev3 created

image-20240620090726748

1.3、使用目录下所有的资源清单创建资源

[root@k8s-master ~]# cat /tmp/svc-nginx.yaml
apiVersion: v1
kind: Service
metadata:
  name: svc-nginx
  namespace: dev1
spec:
  clusterIP: 172.16.100.100 #固定svc的内网ip
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: ClusterIP
[root@k8s-master ~]# cat /tmp/svc-nginx2.yaml
apiVersion: v1
kind: Service
metadata:
  name: svc-nginx1
  namespace: dev1
spec:
  clusterIP: 172.16.200.200 #固定svc的内网ip
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: nginx
  type: NodePort
[root@k8s-master ~]# kubectl apply -f /tmp/
service/svc-nginx created
service/svc-nginx1 created

image-20240620091424048

1.4、使用url创建资源

https://raw.githubusercontent.com/kubernetes/kubernetes/release-1.4/hack/testdata/recursive/pod/busybox.yaml

apiVersion: v1
kind: Pod
metadata:
  name: busybox0
  labels:
    app: busybox0
spec:
  containers:
  - image: busybox
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
    name: busybox
  restartPolicy: Always

[root@k8s-master ~]# kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/release-1.4/hack/testdata/recursive/pod/busybox.yaml
pod/busybox0 created

1.5、从标准输入创建多个YAML对象

kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: busybox-sleep
spec:
  containers:
  - name: busybox
    image: busybox:1.28
    args:
    - sleep
    - "1000000"
---
apiVersion: v1
kind: Pod
metadata:
  name: busybox-sleep-less
spec:
  containers:
  - name: busybox
    image: busybox:1.28
    args:
    - sleep
    - "1000"
EOF

image-20240620101047268

1.6、启动一个nginx实例

[root@k8s-master ~]# kubectl run nginx --image=nginx
pod/nginx created

1.7、获取pod和svc的文档

kubectl explain pods 	

2、查看和查找资源

2.1、列出namespace中所有的pod

kubectl get pods -A
kubectl get pods --all-namespaces

2.2、列出pod并显示详细信息

kubectl get pods -o wide

image-20240620102557852

2.3、列出指定的deployment

[root@k8s-master ~]# kubectl create deploy nginx-deploy --image=nginx --port=8082 --replicas=5 -n dev1
deployment.apps/nginx-deploy created

[root@k8s-master ~]# kubectl get deploy nginx-deploy -n dev1
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deploy   5/5     5            5           4m5s

image-20240620104423341

2.4、查看node节点信息

kubectl describe nodes

2.5、查看pod详细信息

kubectl describe pods

2.6、列出所有的Service并按照名称排列

kubectl get svc --sort-by=.metadata.name -A
kubectl get svc --sort-by=.metadata.name --all-namespaces

image-20240620110618192

2.7、根据重启次数排序列出pod

kubectl get pods --sort-by='.status.containerStatuses[0].restartCount' --all-namespaces

image-20240620143600504

2.8、获取所有节点的ExternalIP

kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternlIP")].address}'

2.9、 列举所有 PV 持久卷,按容量排序

kubectl get pv --sort-by=.spec.capacity.storage

3、编辑资源

3.1、edit编辑

#编辑dev1命名空间下名称为svc-nginx1的Service
kubectl edit svc/svc-nginx1 -n dev1

image-20240620120115385

3.2、使用其他编辑器

#使用vim编辑API资源
KUBE_EDITOR="vim" kubectl edit svc/svc-nginx1 -n dev1

image-20240620120332561

4、对资源进行扩缩

4.1、对资源进行扩缩

#将名为nginx-deploy的deployment副本数缩为3个
kubectl scale --replicas=3 deploy/nginx-deploy -n dev1

image-20240620140758276

4.2、同时扩展多个资源

kubectl scale --replicas=5 rc/foo rc/bar rc/baz

4.3、根据判断条件扩展

#如果名为 mysql 的 Deployment 的副本当前是 2,那么将它扩缩到 3
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

5、删除资源

5.1、删除指定的资源

#删除deploy-nginx控制器
[root@k8s-master ~]# kubectl delete deploy nginx-deploy -n dev1
deployment.apps "nginx-deploy" deleted

5.2、删除在资源清单指定的资源

[root@k8s-master ~]# kubectl delete -f dev3.yaml
namespace "dev3" deleted

image-20240620143033181

6、kubectl与运行中的pod交互

6.1、获取pod日志

#持续查看Pod kube-flannel-ds-mn2bs的日志
kubectl logs -f kube-flannel-ds-mn2bs -n kube-system

image-20240620145815113

6.2、获取含 name=myLabel 标签的 Pod 的日志(标准输出)

kubectl logs -l name=myLabel  

6.3、交互式的进入容器

kubectl exec -it pod1 -n dev1 -- /bin/bash

image-20240704105714736

6.4、显示默认命名空间中所有 Pod 的度量值

kubectl top pod

7、从容器中复制文件和目录

7.1、将本地/tmp/test文件复制到dev1命名空间中pod1的/tmp/下

image-20240704203716919

7.2、将/tmp/test从远程pod1复制到本地的/etc/bar

kubectl cp dev1/pod1:/tmp/test etc/bar

image-20240704205421736

kubectl cp 要求容器镜像中存在 “tar” 二进制文件。如果 “tar” 不存在,kubectl cp 将失败。

对于进阶用例,例如符号链接、通配符扩展或保留文件权限,需要考虑使用 kubectl exec

8、与Deployments进行交互

8.1、获取一个Deployment的Pod的日志

#获取dev2命名空间下nginx-deploy的Deployment的Pod日志
kubectl logs deploy/nginx-deploy -n dev2

8.2、获取一个 Deployment 的 Pod 的日志(多容器例子)

kubectl logs <pod-name> -c <container-name> -n namespace
kubectl logs nginx-deploy-66b77cb96d-49lcw -c nginx -n dev2

image-20240707101928723

9、与节点和集群进行交互

9.1、显示主控节点和服务的地址

kubectl cluster-info

image-20240707102500408

9.2、将当前集群状态转储到标准输出

kubectl clutser-info dump

9.3、将当前集群状态输出到指定位置

kubectl cluster-info dump --output-directory=/tmp/cluster-state

image-20240707103027186

9.4、显示所有节点的度量值

kubectl top node

9.5、查看当前节点上存在的现有污点

kubectl get nodes -o='custom-columns=NodeName:.metadata.name,TaintKey:.spec.taints[*].key,TaintValue:.spec.taints[*].value,TaintEffect:.spec.taints[*].effect'

image-20240707103443871

10、搜索API资源

10.1、列出所支持的全部资源类型

kubectl api-resources

image-20240707111417743

NAME、SHORTNAMES、APIVERSION、NAMESPACED、KIND

列出所支持的全部资源类型和它们的简称、 API 组、 是否是名字空间作用域Kind

10.2、所有命名空间作用域的资源

kubectl api-resources --namespaced=true

image-20240707111846980

10.3、所有非命名空间作用域的资源

kubectl api-resources --namespaced=false

image-20240707112020067

10.4、用简单格式列举所有资源(仅显示资源名称)

kubectl api-resources -o name

image-20240707112354692

10.5、用扩展格式列举所有资源

kubectl api-resources -o wide

image-20240707112453906

10.6、支持 “list” 和 “get” 请求动词的所有资源

kubectl api-resources --verbs=list,get

image-20240707112652266

11、格式化输出

要以特定格式将详细信息输出到终端窗口,将 -o(或者 --output)参数添加到支持的 kubectl 命令中。

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

以使用 -o=custom-columns 为例

11.1、查看集群中运行着的所有镜像

kubectl get pods -A -o=custom-columns='DATA:spec.containers[*].image'

image-20240707113429112

11.2、列举 default 名字空间中运行的所有镜像,按 Pod 分组

kubectl get pods --namespace default --output=custom-columns="NAME:.metadata.name,IMAGE:.spec.containers[*].image"

image-20240707114349805

11.3、输出 metadata 下面的所有字段

kubectl get pods -A -o=custom-columns='DATA:metadata.*'
  • 20
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值