kubernetes-----kubectl命令管理工具详解

目录

一.kubectl用法概述

二.kubectl子命令详解(command)

三.kubectl参数详解(flags)

四.kubectl输出格式

五.kubectl操作实例


一.kubectl用法概述

  • kubectl是管理k8s集群的命令行工具,通过生成json格式传递给apiserver进行创建、查看、管理的操作
  • kubectl命令行的语法如下所示:
kubectl [command] [TYPE] [NAME] [flags]

其中,command、TYPE、NAME、flages的含义如下。

command:子命令,用于操作kubernetes集群资源对象的命令,例如create、delete、describe、get、apply等。

TYPE:资源对象的类型,区分大小写,能够以单数、复数或者简写形式表示。例如以下3种TYPE是等价的

[root@master ~]# kubectl get pods pod1
[root@master ~]# kubectl get pod pod1
[root@master ~]# kubectl get po pod1

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

flages:kubectl子命令的可选参数,例如使用”-s“指定API Server的URL地址而不用默认值

  • 在一个命令行中也可以同时对多个资源对象进行操作,以多个TYPE和NAME的组合表示

获取多个pod的信息

kubectl get pods pod1 pod2

获取多种对象的信息

kubectl get pod/pod1 rc/rc1

##RC,副本控制器
##RC是kubernettes系统中的核心概念之一,简单来说,它其实定义了一个期望的场景,即声明某种pod的副本数量在任意时刻都符合某个预期值,所以RC的定义包括以下几个:
1.pod期待的副本数量
2.用于筛选目标pod的Label Selector
3.当pod的副本数量小于预期数量时,用于创建新的pod的pod模板(template)

同时应用多个YAML文件,以多个 -f file参数表示

kubectl get pod -f pod1.yaml -f pod2.yaml
kubectl create -f pod1.yaml -f rc1.yaml -f service.yaml

 

二.kubectl子命令详解(command)

  • kubectl的子命令非常丰富,涵盖了对kuernetes集群的主要操作,包括对资源对象的创建、删除、查看、修改、配置、运行等。
子命令 语法 说明
annotate kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... [--overwrite] [--all] [--resource-version=version] [flags] 添加或者更新资源对象的annotation信息
api-versions               kubectl api-versions [flags] 列出当前系统支持的API版本列表格式为”group/version“
apply kubectl apply -f FILENAME [flags] 从配置文件或者stdin中对资源对象进行配置更新

attach

kubectl attach POD -c CONTAINER [flags]

附着到一个正在运行的容器上
auth kubectl auth [flags] [options] 检测RBAC权限设置
autoscale kubectl autoscale (-f FILENAME |TYPE NAME | TYPE/NAME)[--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] 对Deployment、ReplicaSet或者RC进行水平自动扩容和缩容的设置

cluster-info             

kubectl  cluster-info [flags] 显示集群master和内置服务信息
completion kubectl completion SHELL [flags] 输出shell命令的执行结果码
config kubectl config SUBCOMMAND [flags] 修改kubeconfig文件
create kubectl create -f FILENAME [flags] 从配置文件或stdin中创建资源对象
convent kubectl convent -f FILENAME [flags] 转换配置文件为不同的API版本
cordon kubectl NODE [flags] 将Node标记为unschedulable,即”隔离“出集群调度范围
delete kubectl delete (-f FILENAME | TYPE [NAME | -l label | --all]) [flags]  根据配置文件、stdin、资源名称或者label selector删除资源对象
describe kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] 描述一个或者多个资源对象的详细信息
diff kubectl diff -f FILENAME [options] 查看配置文件与当前系统中正在运行的资源对象的差异
drain kubectl drain NODE [flags] 首先将Node设置为unschedulable,然后删除在该Node上运行的所有Pod,但是不会删除不由API server管理的Pod
edit kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] 编辑资源对象的属性,在线更新
exec kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [--COMMAND [args...]] 执行一个容器中的命令
explain kubectl explain [--include-extend-apis=true] [--rescursive=flase] 对资源对象属性的详细说明
expose kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [----external-ip=extetrnal-ip-of-service] [--type=type] [flags] 将已经存在的一个RC、Service、Deployment或者Pod暴露为一个新的Service
get kubectl get (-f filename | type [name | /name | -l label]) [--watch] [--sort-by=field] [[-o | --output] = output_format] [flags] 显示一个或者多个资源对象的概要细信息
label kubectl label (-f filename | type name | type/name) key-1=val-1.... [--overwrite] [--all] [--resource-version-version] [flags] 设置或者更新资源对象的labels
logs kubectl logs pod [-c container] [--follow] [flags]  在终端上打印一个容器的日志
patch kubectl patch (-f filename |type name | type/name) --patch PTACH [flags] 以merge形式对资源对象的部分字段的值进行修改
plugin kubectl plugin [flags] [options] 在kubectl命令行使用用户自定义的插件
port-    forward kubectl port-forward pod [local_port:]remote_port [...[local_port_n:]remote_port_n] [flags] 将本机的某个端口号映射到API server
replace kubectl replace -f filename [flags] 从配置文件或者stdin替换资源对象
rolling-update kubectl rolling-update old_controller_name ([name-controller_name] --image=new_container_image | -f new_controller_spec) [flags] 对RC进行滚动升级
rollout kubectl rollout subcommand [flags]

对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] [flags] 基于一个镜像在kubernetes集群上启动一个Deployment
scale kubectl scale (-f filename | type name | type/name) --replicas=count [--resource-version=version] [--current-replicas=count] [flags]  扩容、缩容一个deployment、replicaSet、RC或者Job中Pod的数量
set  kubectl set subcommand [flags] 设置资源对象的某个特定信息,目前仅仅支持修改容器的镜像

taint

kubectl taint node name key_1=val_1:taint_efect_1... [flags] 设置Node的taint信息,用于将特定的pod调度到特定的node的操作,为Alpha版本的功能
top

kubectl top node

kubectl top pod

查看node或者po资源使用情况,需要在集群中运行Metrics Server

uncordon

kubectl uncordon Node [flags] 将node设置为schedulable
version kubectl version [--client] [flags] 打印系统版本信息

三.kubectl参数详解(flags)

  • kubectl常用参数如下所示:

参数名和取值实例 说明
--alsologtostderr=false 设置为true表示将日志输出到文件的同时输出stderr
--as='' 设置本次操作的用户名
--certifacate-authority='' 用于CA授权的cert文件路径
--client-certificate='' 用于TLS的客户端key文件路径
--cluster='' 设置要使用的kubeconfig中cluster名
--context='' 设置要使用的kubeconfig中的context名
--insecure-skip-tls-verify=false 设置位ture表示跳过TLS安全验证模式,将使得HTTPS连接不安全
--kubeconfig='' kubeconfig配置文件路径,在配置文件中包括Master的地址信息以及必要的认证信息
--log-backtrace-at=:0 记录日志每到“file:行号”时打印一次stack trace
--log-dir='' 日志文件路径
--log-flush-frequency=5s 设置flush日志文件的时间间隔
--logtostderr=ture 设置true表示将日志输出到stderr,不输出到日志文件
--match-server-version=false 设置为true表示客户端版本号需要与服务端一致
--namespace='' 设置本次操作所在的Namesapce
-s,--server='' 设置API server的URL地址,默认值为localhost:8080
--password='' 设置API Server的basic authentication的密码
--stderrthershold=2 在该threshold级别上的日志将输出到stderr
--token=‘’ 设置访问API Server的安全Token
--user='' 指定用户名(应该在kubeconfig配置文件中设置)
--username=‘’ 设置API server的basic authentication的用户名
--v=0 glog日志级别
--vmodule= glog基于模块的详细日志级别
  • 每个子命令(如create、delete、get等)还有特定的flags参数,可以通过  kubecl [command] --help命令查看

四.kubectl输出格式

  • kubectl命令可以用多种格式对结果进行显示,输出的格式通过 -o 参数指定:

kubectl [command] [TYPE] [NAME] -o=
  • 由不同的子命令的输出结果,可选的输出格式如下表

输出格式 说明
-o=custom-columns= 根据自定义列名进行输出,以逗号分隔
-o=custom-columns-file= 从文件中获取自定义列名进行输出
-o=json 以JSON格式显示结果
-o=jsonpath=