Kubernetes——kubectl命令行工具用法详解

kubectl作为客户端CLI工具,可以让用户通过命令行的方式对Kubernetes集群进行操作。

kubectl用法概述

kubectl命令行的语法如下:

kubectl [command] [TYPE] [NAME] [flags]
  • command:子命令,用于操作Kubernetes集群资源对象的命令,例如create、delete、describe、get、apply等

  • TYPE:资源对象的类型,区分大小写,能以单数形式、复数形式或者简写标识

    • kubectl get pod pod1
    • kubectl get pods pod1
    • kubectl get po pod1
  • NAME:资源对象的名称,区分大小写。如果不指定名称,则系统将返回属于TYPE的全部对象的列表

  • flags:kubectl子命令的可选参数,例如使用-s指定apiserver的URL地址而不用默认值

kubectl可操作的资源对象类型如下表:

资源对象的名称缩写
clusters
componentstatusescs
configmapscm
daemonsetsds
deploymentsdeploy
endpoiintsep
eventsev
horizontalpodautoscalershpa
ingressesing
Jobs
limitrangeslimits
nodesno
namespacesns
networkpolicies
nodesno
statefulsets
persistentvolumeclaimspvc
persistentvolumespv
podspo
podsecuritypoliciespsp
podtemplates
replicasetsrs
replicationcontrollersrc
resourcequotasquota
cronjob
secrets
serviceaccounts
servicessvc
storageclassessc
thirdpartyresources

在一个命令行中也可以同时对多个资源对象进行操作,以多个TYPE和NAME的组合标识,如下:

获取多个Pod的信息:
kubectl get pods pod1 pod2

获取多种对象的信息:
kubectl get pod/pod1 rc/rc1

同时应用多个yaml文件,以多个-f file参数表示:
kubectl get pod -f pod1.yaml -f pod2.yaml
kubectl create -f pod1.yaml -f rc1.yaml -f service1.yaml

kubectl子命令详解

子命令语法说明
annotatekubectl annotate(-f FILENAME | TYPE NAME | TYPE/NAME ) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite][--all] [--resource-version=version][flag]添加或更新资源对象的annotation信息
api-versionskubectl api-versions [flags]列出当前系统支持的API版本列表,格式为"group/version"
applykubectl apply -f FILENAME [flags]从配置文件或stdin中对资源对象进行配置更新
attachkubectl attach POD -c CONTAINER [flags]附着到一个正在运行的容器上
autoscalekubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU][flags]对Deployment、ReplicaSet或ReplicationController进行水平自动扩容和缩容的设置
cluster_infokubectl cluster_info [flags]显示集群Master和内置服务的信息
completionkubectl completion SHELL [flags]输出shell命令的执行结果码(bash或zsh)
configkubectl config SUBCOMMAND [flags]修改cubeconfig文件
convertkubectl convert -f FILENAME [flags]转换配置文件为不同的API版本
cordonkubectl cordon NODE [flags]将Node标记为unschedulable,即"隔离"出集群调度范围
createkubectl create -f FILENAME [flags]从配置文件或stdin中创建资源对象
deletekubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | -all])[flags]根据配置文件、ST定、资源名称或label selector删除资源对象
describekubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label])[flags]描述一个或多个资源对象的详细信息
drainkubectl drain NODE [flags]首先将Node设置为unschedulable,然后删除该Node上运行的所有Pod,但不会删除不由piserver管理的Pod
editkubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME)[flags]编辑资源对象的属性,在线更新
execkubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [--COMMAND [args...]]执行一个容器中的命令
explainkubectl explain [--include-extended-apis=true] [--recursive=false] [flags]对资源对象属性的详细说明
exposekubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME)[--port=port][--protocol=TCP|UDP][--target-port=number-or-name][--name=name][----extenal-ip=external-ip-of-service][--type=type]将已经存在的一个RC、Service、Deployment或Pod暴露为一个新的Service
getkubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label])[--watch][--sort-by=FIELD][[-o | --output] =OUTPUT_FORMAT][flags]显示一个或多个资源对象的概要信息
labelkubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ...KEY_N=VAL_N [--overwrite][--all][--resource-version=version][flags]设置或更新资源对象的labels
logskubectl logs POD [-c CONTAINER] [--follow][flags]在屏幕上打印一个容器的日志
Patchkubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags] kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags]以merge形式对资源对象的部分字段的值进行修改
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][--api-prefix=prefix][flags]将本机某个端口号映射到apiserver
replacekubectl replace -f FILENAME [flags]从配置文件或stdin替换资源对象
rolling-updatekubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC)[flags]对RC进行滚动升级
runkubectl run NAME --image=image [--env="key=value"][--port=port][--replicas=replicas][--dry=run=bool][--overrides=inline-json][flags]基于一个镜像在Kubenetes集群上启动一个Deployment
scalekubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version][--current-replicas=count][flags]扩容、缩容一个Deployment、ReplicaSet、RC或Job中Pod的数量
setkubectl set SUBCOMMAND [flags]设置资源对象的某个特定信息,目前仅支持修改容器的镜像
taintkubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [flags]设置Node的taint信息,用于将特定的Pod调度到特定的Node的操作,为Alpha版本的功能
uncordonkubectl uncordon NODE [flags]将Node设置为schedulable
versionkubectl version [--client][flags]

kubectl参数列表

kubectl命令行的公共启动参数如下:

参数名和取值示例说明
–alsologtostderr=false设置为true标识将日志输出到文件的同时输出到stderr
–as=‘’设置本次操作的用户名
–certificate-authority=‘’用于CA授权的cert文件路径
–client-certificate=‘’用于TLS的客户端证书文件路径
–client-key=‘’用于TLS的客户端key文件路径
–cluster=‘’设置要使用的kubeconfig中的cluster名
–context=‘’设置要使用的kubeconfig中的context名
–insecure-skip-tls-verify=false设置为true标识跳过TLS安全验证模式,将是的HTTPS连接不安全
–kubeconfig=‘’kubeconfig配置文件路径,在配置文件中包括Master地址信息及必要的认证信息
–log-backtrace-at=:0记录日志每到"file:行号"时打印一次stack trace
–log-dir=‘’日志文件路径
–log-flush-frequency=5s设置flush日志文件的时间间隔
–logtostderr=true设置为true表示将日志输出到stderr,不输出到日志文件
–match-server-version=false设置为true表示客户端版本号需要与服务端一致
–namespace=‘’设置本次操作所在的namespace
–password=‘’设置apiserver的basic authentication的密码
-s, --server=‘’设置apiserver的URL地址,默认值为localhost:8080
–stderrthreshold=2在该threshold级别之上的日志输出到stderr
–token=‘’设置访问apiserver的安全token
–user=‘’指定kubeconfig用户名
–username=‘’设置apiserver的basic authentication的用户名
–v=0glog日志级别
–vmodule=glog基于模块的详细日志级别

kubectl输出格式

kubectl命令可以用多种格式对结果进行显示,输出的格式通过-o参数指定:
kubectl [command] [TYPE] [NAME] -o=<output_format>

输出格式说明
-o=custom-columns=<spec>根据自定义列名进行输出,以逗号分割
-o=custom-columns-file=<filename>从文件中获取自定义列名进行输出
-o=json以JSON格式显示结果
-o=jsonpath=<template>输出jsonpath表达式定义的字段信息
-o=jsonpath-file=<filename>输出jsonpath表达式定义的字段信息,来源于文件
-o=name仅输出资源对象的名称
-o=wide输出额外信息。对于Pod,将输出Pod所在的Node名
-o=yaml以yaml格式显示结果
常用的输出格式如下

显示Pod的更多信息:
kubectl get pod <pod-name> -o wide

以yaml格式显示Pod的详细信息:
kubectl get pod <pod-name> -o yaml

以自定义列名显示Pod的信息:
kubectl get pod <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
pod-name					52305

另外,还可以将输出结果按某个字段排序,通过–sort-by参数以jsonpath表达式进行指定:
kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>

例如,按照名字进行排序:
kubectl get pods --sort-by=.metadata.name

kubectl操作示例

1. 创建资源对象

根据yaml配置文件一次性创建service和rc:
kubectl create -f my_service.yaml -f my-rc.yaml

根据directory目录下所有.yaml、.yml、.json文件的定义进行创建操作:
kubectl create -f directory

2. 查看资源对象

查看所有Pod列表:
kubectl get pods

查看rc和service列表:
kubectl get rc, service

3. 描述资源对象

显示Node的详细信息:
kubectl describe nodes <node-name>

显示Pod的详细信息:
kubectl describe pods/<pod-name>

显示由RC管理的Pod的信息:
kubectl describe pods <rc-name>

4. 删除资源对象

基于pod.yaml定义的名称删除Pod:
kubectl delete -f pod.yaml

删除所有包含某个label的Pod和service:
kubectl delete pods, services -l name=<label-name>

删除所有Pod:
kubectl delete pods --all

5. 执行容器的命令

执行Pod的date命令,默认使用Pod中的第一个容器执行:
kubectl exec <pod-name> date

指定Pod中某个容器执行date命令:
kubectl exec <pod-name> -c <container-name> date

通过bash获得Pod中某个容器的TTY,相当于登录容器:
kubectl exec -ti <pod-name> -c <container-name> /bin/bash

6. 查看容器的日志

查看容器输出到stdout的日志:
kubectl logs <pod-name>

跟踪查看容器的日志,相当于tail -f命令的结果:
kubectl logs -f <pod-name> -c <container-name>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值