资源相关

  1. 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

日志相关

  1. kubectl logs [PODNAME] -n xxx
    不带有任何阐述查看当前pod在配置文件中定义的第一container的日志
  2. kubectl logs [PODNAME] -c [CONTAINERNAME] -n xxx
    指定容器查看日志
  3. kubectl logs -l name=xxx -c [CONTAINERNAME] -n xxx
    筛选指定标签的日志
  4. kubectl logs --all-containers=true -c
    查看所有容器日志

进入容器

  1. kubectl attach [PODNAME] -n xxx
    进入容器查看container主进程运行状态
  2. 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端口,后面的–参数都可以去掉,使用默认值同上

权限检查

  1. kubectl auth can-i [anything following the kubectl command]
    简单来说就是任何kubectl命令,在kubectl 后面加上 auth can-i 可以检查
  2. kubectl auth can-i --list
    列出当前用户可用的所有权限和状态
  3. kubectl auth can-i [do things] --as system:serviceaccount:my-namespace:my-serviceaccount
    这个命令检查名为 my-serviceaccount 的服务账户在 my-namespace 命名空间中是否有创建 Deployments 的权限。

debug

kubectl debug是一个很重要的命令,它可以使你以任意镜像容器(可复制)打到对应的节点,进入命令行进行调试。

  1. 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即可
  2. kubectl debug [POD_NAME] -it --image=[DEBUG_IMAGE][COMMAND]
    这个命令通常用于调试某个问题容器,在问题容器中插入一个调试container,容器共用网卡(是否共享卷还需要研究),这个容器在pod删除之前将会一直存在,如果退出后,还可以通过kubectl attach [POD_NAME] -c [CONTAINER_NAME] -i -t 再次进入
  3. 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中的普通容器是一样的。