语法
kubectl命令行语法:
kubectl [command] [TYPE] [NAME] [flags]
- command: 子命令,用于操作资源对象,例如create,get,describe,delete等
- TYPE:资源对象的类型,区分大小写,能以单数,复数或者简写的形式表示,以下TYPE写法等价
kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1
- NAME:资源对象的名称,区分大小写。如果不指定名称,系统将返回属于TYPE的全部对象列表,例如运行kubectl get pods命令后将返回所有pod的列表。
在一个命令行中,也可以同时对多个资源对象进行操作,以多个TYPE和NAME的组合进行表示,例如:
# 获取多个相同资源类型的信息
kubectl get pod example-pod1 example-pod2
# 获取多种不同类型的对象的信息
kubectl get pod/example-pod1 replicationcontoller/example-rc1
# 同时应用多个YAML文件,以多个-f file参数表示
kubectl get pod -f pod1.yaml -f pod2.yaml
kubectl create -f pod1.yaml -f rc1.yaml -f service1.yaml
- flags : kubeclt 子命令的可选参数,例如使用-s或者--server设置API Server的URL地址,而不使用默认值。
常用命令
kubectl的子命令非常丰富,涵盖了对Kubernetes集群的主要操作, 包括资源对象的创建、删除、查看、修改、配置、运行等
可用资源
公共参数
格式化输出
kubectl命令可以对结果进行格式化输出显示,输出的格式化通过-o参数指定。
kubectl [commad] [TYPE] [NAME] -o=<output_format>
常用的格式化输出示例:
- 显示pod的更多信息
kubectl get pod <pod-name> -o wide
- 以YAML格式显示pod的详细信息
kubectl get pod <pod-name> - o yaml
- 以自定义的列名显示pod的信息
kubectl get pods <pod-name> -o=custom-columns-file=template.txt
- 关闭服务端列名。在默认情况下,kubeernetes服务端会将资源对象的某些特定信息显示为列,设置--server-print=false进行关闭。
kubectl get pods <pod-name> --server-print=false
- 将输出结果按照某个字段排序,通过-sort-by参数以jsonpath表达式指定:
kubeclt [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
#按照资源对象的名称进行排序
kubectl get pods --sort-by=.metadata.name
常用操作
- kubectl apply
以文件或者stdin部署或者更新一个或者多个资源
#创建service资源
kubectl apply -f example-service.yaml
#创建rc资源
kubectl apply -f example-controller.yaml
#使用<dirctroy>目录下的所有.yaml,yml和json文件中的定义进行创建
kubectl apply -f <directory>
- kubectl get
列出一个或者多个资源对象的信息
#以文本格式列出所有的pod
kubectl get pods
#以文本格式列出所有pod,包含附加信息,如node ip
kubectl get pods -o wide
#以文本格式列出指定名称的RC
kubectl get replicationcontroller <rc-name>
#以文本格式列出所有的RC和service
kubeclt get rc,services
#以文本格式列出所有的Daemonset ,包含未初始化的Daemonset
kubetl get ds --include-uninitialized
#列出在节点server01上运行的所有的POD
kubectl get pods --filed-selector=spec.nodeName=server01
- kubectl describe
显示一个或者多个资源的详细信息
#显示名称为<node-name>的节点的详细信息
kubectl describe nodes <node-name>
#显示名称为<pod-name>的pod的详细信息
kubectl describe pods/<pod-name>
#显示名称为<rc-name>的RC控制器管理的所有的pod的详细信息:
kubectl describe pods <rc-name>
#描述所有的pod的详细信息
kubectl describe pods
kubectl get和kubectl descirbe命令说明:
- kubectl get常用于查看同一个资源类型的一个或者多个资源对象,可以使用-o或者--ouputet参数自定义输出格式,还可以通过-w或者--watch参数开启对资源对象更新的监控
- kubectl describe命令更加侧重于描述指定i资源的哥哥方面的详细信息,通过对API Sever的多个API调用来构建结果视图,通过kubectl decribe node命令不仅会返回节点i信息,还会返回在其上运行的pod的摘要,节点事件等信息。
- kubeclt delete
该命令可以使用文件,stdin的输入删除指定的资源对象,还可以通过标签选择器,名称,资源选择器等条件来限定待删除的资源范围。
#在使用pod.yaml文件中指定的类型和名称删除pod:
kubectl delete -f pod.yaml
#删除所有带有'<label-key>=<label-value>'标签的pod和service:
kubeclt delete pods.services -l <label0-key>=<label-value>
#删除所有的pod,包括未初始化的pod
kubectl delete pods -all
- kubeclt exec
在pod的容器中运行命令
#在名称为<pod-name>的pod的第一个容器中运行date命令并打印输出结果
kubectl exec <pod-name> --date
#在指定的容器中运行date命令并打印输出结果:
kubectl exec <pod-name> -c <container-name> -- date
#在pod的第一个容器中运行/bin/bash命令进入交互书tty终端界面
kubectl exec -ti <pod-name> -- /bin/bash
- kubeclt logs
打印pod中容器的日志
kubeclt logs <pod-name>
#显示pod中名称为<container-name>的容器输出到stdout的日志
kubectl logs <pod-name> -c <container-name>
#持续监控显示pod中的第一个容器输出到stdout的日志,类似于tail -f
kubectl logs -f <pod-name>
- kubecctl edit
在线编辑运行中的资源对象
kubectl edit deploy nginx
命令运行之后,会通过yaml格式展示该对象的文本格式定义,用户可以对代码进行编辑和保存,从而完成对在新资源的直接修改。
- kubectl port-forward
修改端口
#将pod的80端口映射到宿主机的8888端口,客户端可以通过http://<NODEIP>:8888访问
kubectl port-forward --address 0.0.0.0 \
pod/nginx-6dadadad-sdsads 8888:80
- kubectl cp
吧pod(默认为第一个容器)中的/etc/fastab文件辅助到宿主机器的/tmp目录下
kubectl cp nginx-621313213-adsada-dada:/etc/fstab /tmp
- kubectl label
设置资源对象的标签
#为名为"default"的命令空间设置"testing=true"标签
kubectl lable namespaces default testing=true