前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >15 个 Kubectl 现有命令使用技巧 - 拿来即用

15 个 Kubectl 现有命令使用技巧 - 拿来即用

作者头像
公众号: 云原生生态圈
发布2020-11-02 11:13:50
4210
发布2020-11-02 11:13:50
举报
文章被收录于专栏:云原生生态圈云原生生态圈

集群节点与pods

  1. 获取集群中所有non-running的pods(k是kubectl的命令别名)
代码语言:javascript
复制
☸️  CloudnativeEcosystem? default  ~  ? ? k get pods -A --field-selector=status.phase!=Running | \
    grep -v Complete
  1. 获取集群中所有节点以及他们的内存大小
代码语言:javascript
复制
☸️  CloudnativeEcosystem? default  ~  ? ? k get no -o json | \
  jq -r '.items | sort_by(.status.capacity.memory)[]|[.metadata.name,.status.capacity.memory]| @tsv'

master.devopsman.cn     2029760Ki
node1.devopsman.cn      2029760Ki
node2.devopsman.cn      2029760Ki
  1. 查看每个node节点上运行多少pods
代码语言:javascript
复制
☸️  CloudnativeEcosystem? default  ~  ? ? k get po -o json --all-namespaces | \
  jq '.items | group_by(.spec.nodeName) | map({"nodeName": .[0].spec.nodeName, "count": length}) | sort_by(.count)'
[
  {
    "nodeName": "node1.devopsman.cn",
    "count": 4
  },
  {
    "nodeName": "master.devopsman.cn",
    "count": 8
  },
  {
    "nodeName": "node2.devopsman.cn",
    "count": 11
  }
]

pods资源限制limits与requests

  1. 使用Kubectl top获取消耗CPU和内存资源的Pod列表的方法,可以按需排序
代码语言:javascript
复制
☸️  CloudnativeEcosystem? default  ~  ? ? k top pods -A | sort --reverse --key 3 --numeric
...
kube-system      coredns-66bff467f8-7hktk                            2m           18Mi            
default          traefik-577bb96ffb-tx2p2                            2m           32Mi            
kube-system      metrics-server-58f6f5594b-rsh8h                     1m           13Mi            
kube-system      kube-sealyun-lvscare-node2.devopsman.cn             1m           10Mi            
kube-system      kube-proxy-msrxn                                    1m           27Mi            
kube-system      kube-proxy-fts6g                                    1m           23Mi            
kube-system      calico-kube-controllers-84445dd79f-zbtk4            1m           14Mi            
default          nginx-744f4df6df-8wmmj                              0m           6Mi             
NAMESPACE        NAME                                                CPU(cores)   MEMORY(bytes) 
  1. 按照podsrestart的次数进行排序,当然还可以使用其他状态进行排序
代码语言:javascript
复制
☸️  CloudnativeEcosystem? default  ~  ? ? bash -c "kubectl get pods --sort-by=.status.containerStatuses[0].restartCount"
NAME                                                READY   STATUS    RESTARTS   AGE
nginx-744f4df6df-8wmmj                              1/1     Running   1          14d
traefik-577bb96ffb-tx2p2                            1/1     Running   1          14d
dev-cluster-nfs-client-provisioner-755dcfbb-4fp86   1/1     Running   5          14d

6. 获取所有pods的limitsrequests,并自定义列表头

代码语言:javascript
复制
☸️  CloudnativeEcosystem? default  ~  ? ? k 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
...
dev-cluster-nfs-client-provisioner   <none>   <none>   <none>   <none>
nginx                                128Mi    128Mi    500m     500m
coredns                              70Mi     170Mi    100m     <none>
coredns                              70Mi     170Mi    100m     <none>
coredns                              70Mi     170Mi    100m     <none>
etcd                                 <none>   <none>   <none>   <none>
  1. 如果不知道当前版本的资源文件如何写,哪些explain会帮助你获取最正确的信息
代码语言:javascript
复制
☸️  CloudnativeEcosystem? default  ~  ? ? k explain sts                                                 KIND:     StatefulSet
VERSION:  apps/v1 # apiVersion

DESCRIPTION:
     StatefulSet represents a set of pods with consistent identities. Identities
     are defined as:
     - Network: A single stable DNS and hostname.
     - Storage: As many VolumeClaims as requested. The StatefulSet guarantees
     that a given network identity will always map to the same storage identity.

集群网络

  1. 想要获取集群节点internal IP的方法
代码语言:javascript
复制
☸️  CloudnativeEcosystem? default  ~  ? ? k get nodes -o json | \
  jq -r '.items[].status.addresses[]? | select (.type == "InternalIP") | .address' | \
  paste -sd "\n" -
192.168.99.128
192.168.99.133
192.168.99.134
  1. 获取集群中所有的svc以及各自的nodePort
代码语言:javascript
复制
☸️  CloudnativeEcosystem? default  ~  ? ? k get --all-namespaces svc -o json | \
  jq -r '.items[] | [.metadata.name,([.spec.ports[].nodePort | tostring ] | join("|"))]| @tsv'
kubernetes      null
nginx-svc       null
traefik null|null|null
traefikudp      30667
kube-dns        null|null|null
metrics-server  null
rmq-cluster     null
rmq-cluster-balancer    31489|32051
  1. flannel或者其他的容器网络插件CNI出现问题的时候,检查pod的路由信息是很重要的,下面列出pod的子网
代码语言:javascript
复制
☸️  CloudnativeEcosystem? default  ~  ? ? k get nodes -o jsonpath='{.items[*].spec.podCIDR}' | tr " " "\n"
100.64.0.0/24
100.64.2.0/24
100.64.1.0/24

集群日志

  1. 打印带有可读时间戳的日志
代码语言:javascript
复制
☸️  CloudnativeEcosystem? default  ~  ? ? k logs -f nginx-744f4df6df-8wmmj --timestamps                         
2020-10-05T08:43:32.3816926Z /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
2020-10-05T08:43:32.381727847Z /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
2020-10-05T08:43:32.387449329Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
  1. 查看最新的pod日志
代码语言:javascript
复制
☸️  CloudnativeEcosystem? default  ~  ? ? k logs -f nginx-744f4df6df-8wmmj --timestamps --tail=50
2020-10-05T08:43:32.3816926Z /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
2020-10-05T08:43:32.381727847Z /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
2020-10-05T08:43:32.387449329Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
2020-10-05T08:43:32.398286535Z 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
2020-10-05T08:43:32.419095055Z 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
2020-10-05T08:43:32.419117067Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
2020-10-05T08:43:32.42342319Z /docker-entrypoint.sh: Configuration complete; ready for start up
  1. 打印pods内所有容器container的日志
代码语言:javascript
复制
☸️  CloudnativeEcosystem? default  ~  ? ? k logs -f nginx-744f4df6df-8wmmj --timestamps --tail=50 --all-containers

2020-10-05T08:43:32.3816926Z /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
2020-10-05T08:43:32.381727847Z /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
2020-10-05T08:43:32.387449329Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
2020-10-05T08:43:32.398286535Z 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
  1. 获取previous容器的日志,比如已经crashed
代码语言:javascript
复制
☸️  CloudnativeEcosystem? default  ~  ? ? k logs --help |grep 'previous'
  # Return snapshot of previous terminated ruby container logs from pod web-1
  -p, --previous=false: If true, print the logs for the previous instance of the container in a pod if it exists.

☸️  CloudnativeEcosystem? default  ~  ? ? k logs -f nginx-744f4df6df-8wmmj --timestamps --tail=50 --previous                
2020-10-05T05:16:40.322078192Z /docker-entrypoint.sh: Configuration complete; ready for start up
2020-10-05T05:17:31.117726669Z 100.110.232.4 - - [05/Oct/2020:05:17:31 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like G
2020-10-05T05:17:31.433713897Z 100.110.232.4 - - [05/Oct/2020:05:17:31 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://web.devopsman.cn/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36" "192.168.99.1"
2020-10-05T05:17:49.607617864Z 100.110.232.4 - - [05/Oct/2020:05:17:49 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36" "192.168.99.1"
  1. 通过label过滤想查看的所有pod的日志
代码语言:javascript
复制
☸️  CloudnativeEcosystem? default  ~  ? ? k logs -f -l app=nginx 
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生生态圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • pods资源限制limits与requests
  • 集群网络
  • 集群日志
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档