1、Help
2. get
get命令用于获取集群的一个或一些resource信息,kubectl可以列出集群所有resource的详细。resource包括集群节点、运行的pod,ReplicationController,service等
kubectl get [(-o|--output=)json|yaml|wide|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...] (TYPE [NAME | -l label] | TYPE/NAME ...) [flags] [flags]
- 获取pod信息
kubectl get po
- 获取namespace信息
kubectl get namespace
- 类似可以使用"kubectl get rc”, “kubectl get svc”, “kubectl get nodes”等获取其他resource信息
- 使用选项“-o”
# 以yaml格式输出pod的详细信息
kubectl get po <podname> -o yaml
# 以json格式输出pod的详细信息
kubectl get po <podname> -o json
- 使用”-o=custom-columns=“定义直接获取指定内容的值
kubectl get po <podName> -o=custom-columns=LABELS:.metadata.labels.app
3. describe
describe类似于get,同样用于获取resource的相关信息。不同的是,get获得的是更详细的resource个性的详细信息,describe获得的是resource集群相关的信息.
kubectl describe po <podName>
4. create
kubectl命令用于根据文件或输入创建集群resource
kubectl create -f <fileName>.yaml
5. replace
replace命令用于对已有资源进行更新、替换
kubectl replace -f <fileName>.yaml
6. patch
一个容器已经在运行,这时需要对一些容器属性进行修改,又不想删除容器,或不方便通过replace的方式进行更新.
如前面创建pod的label是app=nginx-2,如果在运行过程中,需要把其label改为app=nginx-3,这patch命令如下.
kubectl patch pod rc-nginx-2-kpiqt -p '{"metadata":{"labels":{"app":"nginx-3"}}}'
7. edit
edit提供了另一种更新resource源的操作,通过edit能够灵活的在一个common的resource基础上,发展出更过的significant resource
kubectl edit po <podName>
8. Delete
根据resource名或label删除resource
kubectl delete -f <fileName>.yaml
kubectl delete po <podName>
kubectl delete po -lapp=<lableName>
9. apply
apply命令提供了比patch,edit等更严格的更新resource的方式
kubectl apply -f <fileName>
10. logs
logs命令用于显示pod运行中,容器内程序输出到标准输出的内容
kubectl logs <podName>
eg:
# 输出多容器pod中的某个nginx容器的日志
kubectl logs <podName> -c nginx
# 输出所有包含app-nginx标签的pod日志
kubectl logs -l app=nginx
# 加上-f参数跟踪日志,类似tail -f
kubectl logs -f my-pod
# 输出该pod的上一个退出的容器实例日志。在pod容器异常退出时很有用
kubectl logs my-pod -p
# 指定时间戳输出日志
kubectl logs my-pod --since-time=2018-11-01T15:00:00Z
# 指定时间段输出日志,单位s/m/h
kubectl logs my-pod --since=1h
11. rolling-update
rolling-update是一个非常重要的命令,对于已经部署并且正在运行的业务,rolling-update提供了不中断业务的更新方式。rolling-update每次起一个新的pod,等新pod完全起来后删除一个旧的pod,然后再起一个新的pod替换旧的pod,直到替换掉所有的pod
rolling-update需要确保新的版本有不同的name,Version和label,否则会报错 。
kubectl rolling-update rc-nginx-2 -f rc-nginx.yaml
如果在升级过程中,发现有问题还可以中途停止update,并回滚到前面版本
kubectl rolling-update rc-nginx-2 —rollback
12. scale
scale用于程序在负载加重或缩小时副本进行扩容或缩小,如前面创建的nginx有两个副本,可以轻松的使用scale命令对副本数进行扩展或缩小
kubectl scale rc <podName> —replicas=<数量>
13. autoscale
scale虽然能够很方便的对副本数进行扩展或缩小,但是仍然需要人工介入,不能实时自动的根据系统负载对副本数进行扩、缩。autoscale命令提供了自动根据pod负载对其副本进行扩缩的功能。
autoscale命令会给一个rc指定一个副本数的范围,在实际运行中根据pod中运行的程序的负载自动在指定的范围内对pod进行扩容或缩容
kubectl autoscale rc <podName> —min=1 —max=4
14. cordon, drain, uncordon
# 标记 my-node 不可调度
kubectl cordon my-node
# 清空 my-node 以待维护
kubectl drain my-node
# 标记 my-node 可调度
kubectl uncordon my-node
15. attach
attach命令类似于docker的attach命令,可以直接查看容器中以daemon形式运行的进程的输出,效果类似于logs -f,退出查看使用ctrl-c。如果一个pod中有多个容器,要查看具体的某个容器的的输出,需要在pod名后使用-c containers name指定运行的容器
kubectl attach kube-dns-v9-rcfuk -c skydns —namespace=kube-system
16. exec
exec命令同样类似于docker的exec命令,为在一个已经运行的容器中执行一条shell命令
kubectl exec <podName>
eg:
# 对my-pod执行ls命令
kubectl exec my-pod ls
# 进入pod的shell,并打开伪终端和标准输入
kubectl exec -t -i nginx-78f5d695bd-czm8z bash
17. port-forward
kubectl port-forward 允许使用资源名称(例如 pod 名称)来选择匹配的 pod 来进行端口转发。
kubectl port-forward <podName> <port>:<port>
eg:
kubectl port-forward redis-master-765d459796-258hz 7000:6379
18. proxy
使用kubectl proxy命令就可以使API server监听在本地的端口
kubectl proxy --port=<port> &
19. run
类似于docker的run命令,直接运行一个image
kubectl run <name> --image=<imageName> --port=<port>
20. label
为kubernetes集群的resource打标签,如前面实例中提到的为rc打标签对rc分组
kubectl label pods <podName> <labelName>=<labelValue>
eg:
# 名为foo的Pod添加label unhealthy=true
kubectl label pods foo unhealthy=true