1.基本介绍
kubectl 作为客户端CLI工具,可以通过命令行的方式对Kubernetes集群进行操作。
1.1 命令格式介绍
kubectl命令行的语法如下:
$ kubectl [command] [TYPE] [NAME] [flags]
- command:子命令,用于操作Kubernetes集群资源对象的命令,例如create、delete、describe、get、apply等。
- TYPE:资源对象的类型,区分大小写,能以单数形式、复数形式或者简写形式表示。例如以下3种TYPE是等价的。
- NAME:资源对象的名称,区分大小写。如果不指定名称,则系统将返回属于TYPE的全部对象的列表,例如$ kubectl get pods将返回所有Pod的列表。
- flags:kubectl子命令的可选参数,例如使用“-s”指定apiserver的URL地址而不用默认值。
$ kubectl get pod podtest $ kubectl get pods podtest $ kubectl get po podtest
2 基础命令
先介绍一下几个基础命令
- create
- delete
- get
- run
- expose
- set
- explain
- edit
2.1 create
create 命令:根据文件或者输入来创建资源
创建Deployment和Service资源
$ kubectl create -f test-deployment.yaml $ kubectl create -f test-service.yaml
2.2 delete
delete 命令:删除资源
2.2.1 根据yaml删除资源
根据yaml文件删除对应的资源,但是yaml文件并不会被删除,如下
$ kubectl delete -f test-deployment.yaml $ kubectl delete -f test-service.yaml
2.2.1 根据名称删除资源
可以通过具体的资源名称来进行删除,使用这个删除资源,同时删除deployment和service资源
$ kubectl delete 具体的资源名称 $ kubectl delete test-deploy
2.3 get
get 命令 :获得资源信息
2.3.1查看pod列表
$ kubectl get pod
显示pod节点的标签信息
$ kubectl get pod --show-labels
根据指定标签匹配到具体的pod
$ kubectl get pods -l app=demo
查看pod详细信息,可以查看pod具体运行在哪个节点上
$ kubectl get pod -o wide
2.3.2 查看node
查看node节点列表
$ kubectl get node
显示node节点的标签信息
$ kubectl get node --show-labels
2.3.3 查看svc
查看服务的详细信息,显示了服务名称,类型,集群ip,端口,时间等信息
$ kubectl get svc $ kubectl get svc -n kube-system
2.3.4 查看all
查看所有的资源信息
$ kubectl get all $ kubectl get --all-namespaces
2.3.5 查看ns
$ kubectl get ns $ kubectl get namespaces
2.3.4 查看deploy
查看已经部署了的所有应用,可以看到容器,以及容器所用的镜像,标签等信息
$ kubectl get deploy -o wide $ kubectl get deployments -o wide
2.3 run
run 命令:在集群中创建并运行一个或多个容器镜像。
语法:
run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]
示例:运行一个名称为nginx,副本数为3,标签为app=test,镜像为nginx:1.11,端口为80的容器实例
$ kubectl run nginx --replicas=3 --labels="app=test" --image=nginx:1.11 --port=80
2.4 explain
explain 命令:用于显示资源文档信息
$ kubectl explain rs
2.5 edit
edit 命令: 用于编辑资源信息
编辑Deployment nginx的一些信息
$ kubectl edit deployment nginx
编辑service类型的nginx的一些信息
$ kubectl edit service/nginx
3.故障命令
故障排查和调试命令:
- describe
- logs
- exec
- attach
- port-foward
- proxy
- cp
- auth
3.1 describe
describe命令:显示特定资源的详细信息
查看test-nginx pod的详细状态
$ kubectl describe pod test-nginx
3.2 logs
logs命令:用于在pod中打印一个容器的日志
执行kubectl logs -h
可以查看kubectl logs的帮助信息
语法
:
- kubectl logs [-f] [-p] POD [-c CONTAINER]
-f:
- --follow[=false]: 指定是否持续输出日志
- --interactive[=true]: 如果为true,当需要时提示用户进行输入。默认为true
- --limit-bytes=0: 输出日志的最大字节数。默认无限制
-p:
- --previous[=false]: 如果为true,输出pod中曾经运行过,但目前已终止的容器的日志
- --since=0: 仅返回相对时间范围,如5s、2m或3h,之内的日志。默认返回所有日志。只能同时使用since和since-time中的一种
- --since-time="": 仅返回指定时间(RFC3339格式)之后的日志。默认返回所有日志。只能同时使用since和since-time中的一种
- --tail=-1: 要显示的最新的日志条数。默认为-1,显示所有的日志
- --timestamps[=false]: 在日志中包含时间戳
-c:
- --container="": 容器名
3.2.1 查看容器快照
返回仅包含一个容器的pod nginx的日志快照
$ kubectl logs nginx
3.2.2 查看已停止的容器
返回pod test中已经停止的容器web-test的日志快照
$ kubectl logs -p -c test web-1
# 持续输出pod ruby中的容器web-1的日志 $ kubectl logs -f -c ruby web-1 # 仅输出pod nginx中最近的20条日志 $ kubectl logs --tail=20 nginx # 输出pod nginx中最近一小时内产生的所有日志 $ kubectl logs --since=1h nginx
3.3 exec
exec命令:用于进入pod中查看pod内部信息
kubectl exec -it podName -c containerName -n namespace -- shell comand
-c:--container="": 容器名。如果未指定,使用pod中的一个容器。
-p: --pod="": Pod名。
-i: --stdin[=false]: 将控制台输入发送到容器。
-t: --tty[=false]: 将标准输入控制台作为容器的控制台输入。
示例:
# 默认在pod test的第一个容器中运行“date”并获取输出 $ kubectl exec test date # 在pod test的容器ruby-container中运行“date”并获取输出 $ kubectl exec test -c ruby-container date # 切换到终端模式,将控制台输入发送到pod test的ruby-container的“bash”命令,并将其输出到控制台/ # 错误控制台的信息发送回客户端。 $ kubectl exec test -c ruby-container -i -t -- bash -il