资源相关
- api-resources
# kubectl api-resources
NAME SHORTNAMES APIVERSION NAMESPACED KIND
bindings v1 true Binding
componentstatuses cs v1 false ComponentStatus
configmaps cm v1 true ConfigMap
endpoints ep v1 true Endpoints
events ev v1 true Event
limitranges limits v1 true LimitRange
namespaces ns v1 false Namespace
记录系统中用到资源的所有信息,我们通常操作资源也是由kubectl
[NAME/SHORTNAMES]
[ACTION(可以通过上面这个命令加上-o wide得出)]
...
2. api-version
其实就是上面的api-resource中的NAME/VERSION
日志相关
- kubectl logs
[PODNAME]
-n xxx
不带有任何阐述查看当前pod在配置文件中定义的第一container的日志 - kubectl logs
[PODNAME]
-c[CONTAINERNAME]
-n xxx
指定容器查看日志 - kubectl logs -l name=xxx -c
[CONTAINERNAME]
-n xxx
筛选指定标签的日志 - kubectl logs --all-containers=true -c
查看所有容器日志
进入容器
- kubectl attach
[PODNAME]
-n xxx
进入容器查看container主进程运行状态 - kubectl exec -it
[PODNAME]
-n logging – sh/bash
独立启动一个shell进入容器,-- 可省略,但是是不规范的写法,后面会弃用
调试端口
kubectl port-forward [pod/PODNAME|svc/SERVICENAME]
--address [host-address]
<local-port>:<pod|svc-port>
这个操作将会把当前机器的本地地址(比如192.168.1.1,–address可以省略)上端口和容器/服务内部的本地网卡端口映射到一起方便执行curl请求等
调试k8s-API
kubectl proxy --address=‘0.0.0.0’ --port=8001
这个操作会把内部k8s api的端口映射到主机的8001上,方便在curl中调试api-server端口,后面的–参数都可以去掉,使用默认值同上
权限检查
- kubectl auth can-i
[anything following the kubectl command]
简单来说就是任何kubectl命令,在kubectl 后面加上 auth can-i 可以检查 - kubectl auth can-i --list
列出当前用户可用的所有权限和状态 - kubectl auth can-i
[do things]
--as system:serviceaccount:my-namespace:my-serviceaccount
这个命令检查名为 my-serviceaccount 的服务账户在 my-namespace 命名空间中是否有创建 Deployments 的权限。
debug
kubectl debug是一个很重要的命令,它可以使你以任意镜像容器(可复制)打到对应的节点,进入命令行进行调试。
- kubectl debug node/
[NODE_NAME]
-it --image=[IMAGE_NAME]
这个命令将把镜像IMAGE_NAME,生成container打到对应名称NODE_NAME的node中,它会将宿主机的目录映射到/host中,以便操作.调试完成后,在对应命名空间执行kubectl get pods,然后kubectl delete pod [POD_NAME] --now
即可 - kubectl debug
[POD_NAME]
-it --image=[DEBUG_IMAGE]
–[COMMAND]
这个命令通常用于调试某个问题容器,在问题容器中插入一个调试container,容器共用网卡(是否共享卷还需要研究),这个容器在pod删除之前将会一直存在,如果退出后,还可以通过kubectl attach [POD_NAME] -c [CONTAINER_NAME] -i -t
再次进入 - kubectl debug
[POD_NAME]
--copy-to=[CUSTOM_NAME]
--set-image=[OLD_IMAGE_NAME]
=[NEW_IMAGE_NAME]
这个配置用于复制一个当前的POD所有信息然后按照你新的POD名称启动,你可以通过–set-image来替换一个原有的container,也可以通过–image=xxx来插入一个新container,这个情况和2
比较接近了,但也有区别,大概就是2
中的容器是在Ephemeral Containers
标签中,而3
中的新容器则完全和pod中的普通容器是一样的。