Kubernetes常见操作_kubectl top(1)

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

 kubectl get pods -A --field-selector=status.phase!=Running | grep -v Complete

顺便一说,–field-selector 是个值得深入一点的参数。

3、如何获取节点列表及其内存容量:

 kubectl get no -o json | \
   jq -r '.items | sort\_by(.status.capacity.memory)[]|[.metadata.name,.status.capacity.memory]| @tsv'

4、获取节点列表,其中包含运行在每个节点上的 Pod 数量:

 kubectl get po -o json --all-namespaces | \
   jq '.items | group\_by(.spec.nodeName) | map({"nodeName": .[0].spec.nodeName, "count": length}) | sort\_by(.count)'

5、有时候 DaemonSet 因为某种原因没能在某个节点上启动。手动搜索会有点麻烦:

 $ ns=my-namespace
 $ pod_template=my-pod
 $ kubectl get node | grep -v \"$(kubectl -n ${ns} get pod --all-namespaces -o wide | fgrep ${pod\_template} | awk '{print $8}' | xargs -n 1 echo -n "\|" | sed 's/[[:space:]]\*//g')\"

6、使用 kubectl top 获取 Pod 列表并根据其消耗的 CPU 或 内存进行排序:

 # cpu
 $ kubectl top pods -A | sort --reverse --key 3 --numeric
 # memory
 $ kubectl top pods -A | sort --reverse --key 4 --numeric

7、获取 Pod 列表,并根据重启次数进行排序:

kubectl get pods —sort-by=.status.containerStatuses[0].restartCount

当然也可以使用 PodStatus 以及 ContainerStatus 的其它字段进行排序。

获取其它数据

1、运行 Ingress 时,经常要获取 Service 对象的 selector 字段,用来查找 Pod。过去要打开 Service 的清单才能完成这个任务,现在使用 -o wide 参数也可以:

 $ kubectl -n jaeger get svc -o wide
 NAME                            TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)                                  AGE   SELECTOR
 jaeger-cassandra                ClusterIP   None              <none>        9042/TCP                                 77d   app=cassandracluster,cassandracluster=jaeger-cassandra,cluster=jaeger-cassandra

2、如何输出 Pod 的 requests 和 limits:

 $ kubectl get pods -A -o=custom-columns='NAME:spec.containers[\*].name,MEMREQ:spec.containers[\*].resources.requests.memory,MEMLIM:spec.containers[\*].resources.limits.memory,CPUREQ:spec.containers[\*].resources.requests.cpu,CPULIM:spec.containers[\*].resources.limits.cpu'
 NAME                                  MEMREQ       MEMLIM        CPUREQ   CPULIM
 coredns                               70Mi         170Mi         100m     <none>
 coredns                               70Mi         170Mi         100m     <none>
 ...

3、kubectl run(以及 create、apply、patch)命令有个厉害的参数 --dry-run,该参数让用户无需真正操作集群就能观察集群的行为,如果配合 -o yaml,就能输出命令对应的 YAML:

 $ kubectl run test --image=grafana/grafana --dry-run -o yaml
 apiVersion: apps/v1
 kind: Deployment
 metadata:
   creationTimestamp: null
   labels:
     run: test
   name: test
 spec:
   replicas: 1
   selector:
     matchLabels:
       run: test

简单的把输出内容保存到文件,删除无用字段就可以使用了。

1.18 开始 kubectl run 生成的是 Pod 而非 Deployment。

4、获取指定资源的描述清单:

 kubectl explain hpa
 KIND:     HorizontalPodAutoscaler
 VERSION:  autoscaling/v1
 DESCRIPTION:
      configuration of a horizontal pod autoscaler.
 FIELDS:
    apiVersion    <string>
 ...

网络

1、获取集群节点的内部 IP:

 $ kubectl get nodes -o json | jq -r '.items[].status.addresses[]? | select (.type == "InternalIP") | .address' | \
   paste -sd "\n" -
 9.134.14.252

2、获取所有的 Service 对象以及其 nodePort:

 $ kubectl get -A svc -o json | jq -r '.items[] | [.metadata.name,([.spec.ports[].nodePort | tostring ] | join("|"))]| @tsv'

 kubernetes  null
 ...

3、在排除 CNI(例如 Flannel)故障的时候,经常会需要检查路由来识别故障 Pod。Pod 子网在这里非常有用:

 $ kubectl get nodes -o jsonpath='{.items[\*].spec.podCIDR}' | tr " " "\n"                                                            fix-doc-azure-container-registry-config  ✭
 10.120.0.0/24
 10.120.1.0/24
 10.120.2.0/24

日志

1、使用可读的时间格式输出日志:

 $ kubectl logs -f fluentbit-gke-qq9w9  -c fluentbit --timestamps
 2020-09-10T13:10:49.822321364Z Fluent Bit v1.3.11
 2020-09-10T13:10:49.822373900Z Copyright (C) Treasure Data
 2020-09-10T13:10:49.822379743Z
 2020-09-10T13:10:49.822383264Z [2020/09/10 13:10:49] [ info] Configuration:

2、只输出尾部日志:

 kubectl logs -f fluentbit-gke-qq9w9  -c fluentbit --tail=10
 [2020/09/10 13:10:49] [ info] ___________
 [2020/09/10 13:10:49] [ info]  filters:
 [2020/09/10 13:10:49] [ info]      parser.0
  ...

3、输出一个 Pod 中所有容器的日志:

kubectl -n my-namespace logs -f my-pod —all-containers

4、使用标签选择器输出多个 Pod 的日志:

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值