注:基于Kubenetes 版本:Server v1.17.2、Client v1.17.9

kubectl命令行全景图

kubectl🔗

有趣的kubectl命令

获取正在Running的Pod

kubectl get pods -A --field-selector=status.phase==Running
NAMESPACE     NAME                                     READY   STATUS    RESTARTS   AGE
kelu          cka2-75dbf7c54-gm4r4                     1/1     Running   0          23h
kube-system   calico-kube-controllers-ccf66db4-cpvqp   1/1     Running   0          3d20h
kube-system   calico-node-8d4th                        1/1     Running   0          3d2h
kube-system   calico-node-szmzb                        1/1     Running   0          3d20h

查看节点内存容量

kubectl get no -o json |    jq -r '.items | sort_by(.status.capacity.memory)[]|[.metadata.name,.status.capacity.memory]| @tsv'
rq-bjptest01    3848040Ki
rqinterntest2   7986060Ki

查看各个节点上的Pod数量

kubectl get po -o json --all-namespaces |  jq '.items | group_by(.spec.nodeName) | map({"nodeName": .[0].spec.nodeName, "count": length}) | sort_by(.count)'
[
  {
    "nodeName": "rq-bjptest01",
    "count": 3
  },
  {
    "nodeName": "rqinterntest2",
    "count": 8
  }
]
kubectl get pods --all-namespaces -o json | jq '.items[] | .spec.nodeName' -r | sort | uniq -c
     17 rqkubedev03
     30 rqkubedev04
     23 rqkubedev05

查看POD以及镜像

kubectl get pods -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'
NAME                              IMAGES
details-v1-5974b67c8-gqz94        docker.io/istio/examples-bookinfo-details-v1:1.16.2,docker.io/istio/proxyv2:1.7.2
gitea-5bb577b964-w64gg            harbor.caih.local/gitea/gitea:1.10.1
productpage-v1-64794f5db4-hw2fl   docker.io/istio/examples-bookinfo-productpage-v1:1.16.2,docker.io/istio/proxyv2:1.7.2

查看各个节点上的POD

kubectl get pods --all-namespaces -o json | jq '.items | map({podName: .metadata.name, nodeName: .spec.nodeName}) | group_by(.nodeName) | map({nodeName: .[0].nodeName, pods: map(.podName)})'
[
  {
    "nodeName": "rqkubedev03",
    "pods": [
      "123-84654b5d8f-sm2dt",
      "reviews-v2-6cb6ccd848-ndsqq",
      "fleet-agent-6cc4bd5c67-b877w",
      "jaeger-es-index-cleaner-1602806100-5ngzz",
      "jaeger-es-index-cleaner-1602806100-b47gk",
      "jaeger-es-index-cleaner-1602806100-kkx2z",
      "jaeger-es-index-cleaner-1602806100-rg6z8",
      "jaeger-es-index-cleaner-1602806100-s47n4",

查看Pod占用的内存和CPU并按内存或者CPU排序

# 内存
kubectl top pods -A | sort --reverse --key 4 --numeric
caihcloud              jenkinsm-6fc5d7fc46-2tl6q                            29m          1995Mi
istio-system           prometheus-788c945c9c-mdrjf                          97m          1424Mi
kube-system            kube-apiserver-rqkubedev04                           149m         957Mi
kube-system            kube-apiserver-rqkubedev03                           69m          476Mi
caihcloud              jenkinsslaveswarm-6c6f5d8d9b-8ns5w                   2m           464Mi

# CPU
kubectl top pods -A | sort --reverse --key 3 --numeric
kube-system            kube-apiserver-rqkubedev04                           150m         964Mi
istio-system           prometheus-788c945c9c-mdrjf                          89m          1426Mi
kube-system            kube-apiserver-rqkubedev03                           42m          532Mi
kube-system            calico-node-6n65m                                    42m          46Mi
kube-system            calico-node-fg6tk                                    34m          49Mi

获取重启次数降序排序的Pod

kubectl get pods -A --sort-by=.status.containerStatuses[0].restartCount | tac
kube-system            kube-scheduler-rqkubedev03                           0/1     CrashLoopBackOff   593        2d2h
traefik-v2             traefik-gfnw5                                        1/1     Running            27         23d
kube-system            kube-controller-manager-rqkubedev03                  1/1     Running            24         23d
kube-system            kube-controller-manager-rqkubedev04                  1/1     Running            22         23d
kube-system            kube-apiserver-rqkubedev03                           1/1     Running            21         23d
NAMESPACE              NAME                                                 READY   STATUS             RESTARTS   AGE

获得所有POD的request和limits

kubectl get pods -A  -o custom-columns='NAME:metadata.name,MEM_REQUEST:spec.containers[*].resources.requests.memory,MEM_LIMIT:spec.containers[*].resources.limits.memory,CPU_REQUEST:spec.containers[*].resources.requests.cpu,CPU_LIMIT:spec.containers[*].resources.limits.cpu'       
NAME                                                 MEM_REQUEST   MEM_LIMIT     CPU_REQUEST   CPU_LIMIT
123-84654b5d8f-sm2dt                                 <none>        <none>        <none>        <none>
backend-c56f64647-grql6                              10Mi          1Gi           10m           <none>
caihcloud-67ffdf9fc9-wzmts                           10Mi          1Gi           10m           <none>
caihcloud-ui-9fbb954dc-trtn7                         10Mi          1Gi           10m           <none>
caihcloudm-caihcloudm-api-5cfffcc96-mz6pt            10Mi          1Gi           10m           200m
caihcloudm-caihcloudm-api-5cfffcc96-xdwsb            10Mi          1Gi           10m           200m

获取节点的IP

kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name} {.status.addresses[?(@.type=="InternalIP")].address}{"\n"}{end}'
rqkubedev03 10.19.0.57
rqkubedev04 10.19.0.58
rqkubedev05 10.19.0.59

获取Service的Nodeport信息

kubectl get -A svc -o json | jq -r '.items[] | [.metadata.name,([.spec.ports[].nodePort | tostring ] | join("|"))]| @tsv'
backend 23168|20675
caihcloud       37386
caihcloud-ui    26105
caihcloudm-caihcloudm-api       36236
caihcloudm-caihcloudm-prerender 31964

获取POD网段

kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}' | tr " " "\n"
10.193.0.0/24
10.193.1.0/24
10.193.2.0/24

输出一个POD中所有的容器的日志

kubectl logs caihcloudm-caihcloudm-api-5cfffcc96-mz6pt -n caihcloud —all-containers

按标签输出POD的日志

kubectl -n caihcloud logs -f -l app=caihcloudm-caihcloudm-api

获取前一个容器的日志(容器异常挂掉的场景)

kubectl logs caihcloud-67ffdf9fc9-wzmts -n caihcloud --previous