Kubectl 命令之问题排查和命令调试

2019-10-21 0 By admin

Kubernetes 服务在维护 Pod 过程中,经常会遇到一个Pod 下运行多个容器的情况;这是我们如果要操作容器的话,需要使用参数执行Pod 名称和容器名称。

  1. -c, –container=”: 容器的名称;如果省略,则会选择Pod中的第一个容器。
  2. -p, –pod=”: Pod 名称。

一、Pod容器中执行命令

在Linux 终端向 Pod 容器,发送要执行的命令,并打印出结果。
kubectl exec -n namespace {command}
如果执行的命令多余一个参数的话,则需要在Command 前添加两个横行(–)。
例如:
kubectl exec redis date
kubectl exec redis -- ls / -l

二、登陆到容器进行管理

当我们有多条命令需要在Pod 中操作的话,更为简单的方式,是获得Pod 的TTY。

kubectl exec -it -p <pod-name> -c <container-name> {bash|sh}

三、显示指定对象的详细信息

kubectl describe 可以显示 Kubernetes 服务中多种对象的详细信息。使用kubectl api-resources 命令可以查看此命令支持的对象类型。

kubectl describe nodes
kubectl describe node/node-name  #可以显示node的详细信息。
kubectl describe pod/pod-name    # 用于查看Pod的详细信息。

四、查看容器的运行日志

使用Kubectl logs 查看容器运行的日志;另外也可以通过添加一些参数,对输出日志进行过滤。

kubectl logs <pod-name>
kubectl logs --tail=200 <pod-name> 输出日志的最后200行信息。
kubectl logs --since=1h <pod-name> 输出容器最后一小时的日志。

五、将本地端口映射到Pod 上

当非 Kubernetes 集群的服务器,想要通过网络端口与 Pod 的进行通信;则需要将Node 节点上的端口映射到指定的Pod上。
1、将服务器的8888端口,映射到pod上的5000端口。

kubectl port-forward pod/mypod 8888:5000
2、将服务器上的 5000 和 6000 端口,映射到pod上的5000端口和6000端口。
kubectl port-forward pod/mypod 5000 6000

六、容器和宿主机间拷贝文件或目录

从容器中拷贝文件到宿主机

kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar

从宿主机中拷贝文件到容器

kubectl cp /tmp/foo <some-pod>:/tmp/bar -c <specific-container>