BenjaminYang In solitude, where we are least alone

kubectl命令行工具

kubectl说明:

当没有使用ui,api ,操作kubernetes集群时,使用kubectl来操作集群的 增删改查 

kubectl 相当于一个客户端cli  来与kube-apiserver进行交互,达到操控集群的作用。

 

kubectl 语法:

kubectl命令行语法:

 

kubectl [command] [type] [name] [flags]
  • command

用于操作kubernetes集群资源对象的命令,如create delete apply logs describe get rollout exec  edit等

  • type

资源对象的类型,如 pod  deployment  service 等。。。。

  • name

资源对象的名称,区分大小写,如果不指定具体的资源对象名称,系统将返回 该type的所有资源对象,例如kubectl get pods  系统将返回所有default 名称空间下的所有pod 

  • flags

kubectl的子命令的可选参数,例如 -s 指定 apiserver的 url地址,而不使用默认的。

 

kubectl可操作的资源对象类型

type:

image.png

 

kubectl的子命令:

command:

image.png

image.png

image.png

image.png

 

kubectl 可选参数:

flags:

image.png

kubectl的输出格式:

kubect支持结果以多种格式输出显示,使用-o 参数指定

自定义字段输出

kubectl [command] [type] -o=<output_format>

image.png

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

 

image.png

 

# cat template.txt   #第一行自定义的字段名称,第二行对应的集群内的字段 字段之间使用空格隔开
NAME RSRC
metadata.name metadata.resourceVersion
# kubectl get pod -o=custom-columns-file=template.txt

 

image.png

 

jsonpath和jsonpath-file

 

kubectl get pods -o=jsonpath='{.items[0]}{"\n"}'
kubectl get pods -o=jsonpath='{.items[0].apiVesion}{"\n"}' #其中.items[0] 可以省略
kubectl get pods -o=jsonpath='{.items[0].metadata.labels.app}{"\n"}'
# kubectl get pods -o=jsonpath-file=json.txt 
v1
nginx
# cat json.txt 
{.items[0].apiVersion}
{.items[0].metadata.labels.app}

image.png

image.png

按照某个字段排序 --sort-by=<jsonpath-exp>

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

kubectl 常用命令

一、get

获取所有namespace:

 

kubectl get ns

在指定的namespace下获取资源:

kubectl -n {$nameSpace} get pods

 

以yaml格式输出资源:

kubectl -n {$nameSpace} -o yaml

通用格式:

 

kubectl get {$sourceType} --all-namespaces

常用的资源类型({$resourceType})有:

 

po(pod)

ns(命名空间namespace)

instance(实例)

svc(service服务):定义了一个 Pod 的逻辑分组,一种可以访问它们的策略(微服务)。

cm(configMap):存储全局配置变量的,将分布式系统中不同模块的环境变量统一到一个对象中管理。

ds(deamonSet):在每台计算节点上运行一个守护进程(如日志采集等),有时pod处于pending可能是因为某个deamonSet没起来。

deploy(deployment):用于启动(上线/部署)一个Pod或者ReplicaSet。这个如果有问题,那么其他依赖它来部署的资源就肯定不会正常了。

 

 

二、describe 

描述一个资源:

kubectl -n {$nameSpace} describe {$resourceType} {$resourceName}

 

三、logs

查看日志,--tail指定只看最后1000行:

kubectl -n {$nameSpace} logs --tail=1000 {$podName} | less

 

四、scale

扩容或缩容 Deployment、ReplicaSet、Replication Controller或 Job 中Pod数量。

scale也可以指定多个前提条件,如:当前副本数量或 --resource-version ,进行伸缩比例设置前,系统会先验证前提条件是否成立。

语法

$ scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)

 

示例

将名为foo中的pod副本数设置为3。

 

kubectl scale --replicas=3 rs/foo

 

将由“foo.yaml”配置文件中指定的资源对象和名称标识的Pod资源副本设为3。

kubectl scale --replicas=3 -f foo.yaml

 

如果当前副本数为2,则将其扩展至3。

kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

 

设置多个RC中Pod副本数量。

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

 

五、create

通过配置文件名创建一个集群资源对象。

 

kubeclt create -f {$yamlorJsonFilePath}

 

 

六、edit

编辑一个资源文件,这里以编辑configMap资源对象为例(yaml格式):

kubectl -n {$nameSpace} edit {$resourceType} {$resourceName} -o yaml

 

 

七、rolling-update

执行指定ReplicationController的滚动更新。该命令会创建一个新的RC,等新pod完全起来后删除一个旧的pod,之后重复操作,直到替换掉所有的pod。

kubectl rolling-update {$resourceName} -f {$yamlFile}

 

 

八、delete

指定资源类型和名字删除一个资源:

 

kubectl -n {$nameSpace} delete {$resourceType} {$resourceName}

 

批量删除资源:

 

kubectl -n {$nameSpace} delete {$resourceType} -l {$label}={$labelValue}

 

 

九、exec

exec主要作用是在容器内部执行命令(一般为查看容器内部日志),这里以一个小例子说明kubectl exec命令的作用。

kubectl exec -it nginx-86c57db685-kqndx bash
kubectl exec -it nginx-86c57db685-kqndx -c nginx bash  #-c指定pod 中的具体容器

十、autoscale

使用 Deployment “foo”设定,使用默认的自动伸缩策略,指定目标CPU使用率,使其Pod数量在2到10之间。

 

kubectl autoscale deployment foo --min=2 --max=10

 

使用RC“foo”设定,使其Pod的数量介于1和5之间,CPU使用率维持在80%。

 

kubectl autoscale rc foo --max=5 --cpu-percent=80

 

参考:

http://docs.kubernetes.org.cn/683.html

kubernetes权威指南第二版

 

posted @ 2020-03-09 08:57  benjamin杨  阅读(1595)  评论(0编辑  收藏  举报