Kubernetes容器编排技术---kubectl命令行工具用法详解(三)

kubectl命令行工具用法详解

kubect用法概述

  kubectl命令行的语法如下:  

$ kubectl [command] [TYPE] [NAME] [flags]
  •  command:子命令,用于操作Kubernetes集群资源对象的命令,例如create、delete、describe、get、apply等。
  •  TYPE:资源对象的类型,区分大小写,能以单数形式、负数形式或者简写形式表示。
  •  NAME:  资源对象的名称,区分大小写。如果不指定名称,则系统将返回属于TYPE的全部对象的列表。
  •  flags:kubectl子命令的可选参数

可以通过命令查看可操作的资源类型

通过如下命令查看可操作性资源类型
# kubectl api-resources
通过如下命令查看可操作性资源的具体用法
# kubectl explain <资源名称>
kubectl可操作的资源对象类型
                     资源对象的名称                                缩写          

componentstatuses

cs
daemonsets ds
deployments  
events ev
 endpoints  ep
 horizontalpodautoscalers  hpa
 ingresses  ing
 jobs  
 limitranges  limits
 nodes  no
 namespaces  ns
 pods  po
 persistentvolumes  pv
 persistentvolumeclaims  pvc
 resourcequotas  quota
 replicationcontrollers  rc
 secrets  
 serviceaccounts  
 services  svc

kubectl参数列表

  kubectl的子命令非常丰富,涵盖了对Kubernetes集群的主要操作,包括资源对象的创建、删除、查看、修改、配置、运行等。

kubectl子命令详解
子命令 语法 说明
annotate kubectl annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
[options]
添加或更新资源对象的annotation信息
api-versions kubectl api-versions [flags] [options] 列出当前系统支持的API版本列表,格式为“group/version”
apply kubectl apply (-f FILENAME | -k DIRECTORY) [options] 从配置文件或stdin中对资源对象进行配置更新
attach kubectl apply (-f FILENAME | -k DIRECTORY) [options] 附着到一个正在运行的容器
atuoscale kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [options] 对Deployment、ReplicaSet或ReplicationController进行水平自动扩缩容的设置
cluster-info kubectl cluster-info [flags] [options] 显示集群信息
completion kubectl completion SHELL [options] 输出shell命令的执行结果码(bash或zsh)
config kubectl config SUBCOMMAND [options] 修改kubeconfig文件
convert kubectl convert -f FILENAME [options] 转换配置文件为不同的API版本
cordon kubectl cordon NODE [options] 将Node标记为unschedulable,即“隔离”出集群调度范围
delete kubectl delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | --all)]) [options] 根据配置文件、stdin、资源名称或label selector删除资源对象
describe kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME) [options] 描述一个或多个资源对象的详细信息
drain kubectl drain NODE [options] 首先将Node设置为unschedulable,然后删除该Node上运行的所有Pod,但不会删除不由apiserver管理的Pod
edit kubectl edit (RESOURCE/NAME | -f FILENAME) [options] 编辑资源对象的属性,在线更新
exec kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...] [options]  执行一个容器中的命令
explain kubectl explain RESOURCE [options] 对资源对象属性的详细说明
expose kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name]
[--name=name] [--external-ip=external-ip-of-service] [--type=type] [options]
将已经存在的一个RC、Service、Deployment或Pod暴露为一个新的Service
get kubectl get
[(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...]
(TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags] [options]
显示一个或多个资源对象的概要信息
label kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
[options]
设置或更新资源对象的labels
logs kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER] [options] 屏幕打印
namespace   已被kubectl config set-context替代
patch kubectl patch (-f FILENAME | TYPE NAME) -p PATCH [options] 以merge形式对资源对象的部分字段的值进行修改
port-forward kubectl port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] 将本机的某个端口号映射到Pod端口号,通常用于测试工作
proxy kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [options] 将本机某个端口号映射到apiserver
replace kubectl replace -f FILENAME [options] 从配置文件或stdin替换资源对象
rolling-update kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f
NEW_CONTROLLER_SPEC) [options]
对RC进行滚动升级
rollout kubectl rollout SUBCOMMAND [options] 对Deployment进行管理,可用操作包括:history、pause、resume、undo、status
run kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool]
[--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]
基于一个镜在Kubernetes集群上启动一个Deployment
scale kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)
[options]
扩容、缩容一个Deployment、ReplicaSet、RC或Job中Pod的数量
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] 设置Node的taint信息,用于将特定的Pod调度到特定的Node的操作,为Alpha版本功能
uncordon kubectl uncordon NODE [options] 将Node设置为schedulable
version kubectl version [flags] [options] 打印系统版本信息

kubectl输出格式

常用的输出格式示例如下:

显示pod的更多信息

# kubectl get pod <pod-name> -o wide

以yaml格式显示pod的详细信息

# kubectl get pod <pod-name> -o yaml

 另外,还可以将输出结果按某个字段排序,通过--strt-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中的第1个容器执行

# kubectl exec <pod-name> date

 指定Pod中某个容器执行date命令

# kubectl exec <pod-name> -c <container-name> date

 通过bash获得Pod中某个容器的TTY,相当于登录容器

# kubectl exec -it <pod-name> -c <container-name> /bin/bash

 6.查看容器的日志

查看容器输出到stdout的日志

# kubectl logs <pod-name>

 跟踪查看容器的日志,相当于tail -f命令的结果

# kubectl logs -f <pod-name> -c <container-name>