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:
kubectl的子命令:
command:
kubectl 可选参数:
flags:
kubectl的输出格式:
kubect支持结果以多种格式输出显示,使用-o 参数指定
自定义字段输出
kubectl [command] [type] -o=<output_format>
kubectl get pod -o=custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
# cat template.txt #第一行自定义的字段名称,第二行对应的集群内的字段 字段之间使用空格隔开
NAME RSRC
metadata.name metadata.resourceVersion
# kubectl get pod -o=custom-columns-file=template.txt
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}
按照某个字段排序 --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权威指南第二版