云原生|kubernetes 你真的学废了吗---实战k8s 一(jsonpath实战)

简介: 云原生|kubernetes 你真的学废了吗---实战k8s 一(jsonpath实战)

前言:

kubernetes是什么大家应该都知道,不用在这赘述了,其中的kubectl命令是我们和kubernetes集群交互的命令行工具,kubectl get 是获取resources也就是资源的各种信息的命令,那么,在实际的集群使用中,我们应该关心资源的哪些维度呢?如何更加优雅的获得我们想知道的信息呢?本文就此将进行一个深入的探讨,以实际的问题来演示。

一,

现在有一个kubernetes集群,假设pod非常多,如何查询出所有pod并按其名称排序?

下面的命令可以看到,第二个命令就是按名字排序了,那么,为什么是--sort-by={.metadata.name}呢?其实主要原因是sort-by后面接的是jsonpath

[root@master ~]# k get po -A
NAMESPACE     NAME                       READY   STATUS              RESTARTS   AGE
default       busybox                    0/1     ContainerCreating   0          11s
default       nginx                      1/1     Running             0          7m29s
kube-system   coredns-76648cbfc9-lb75g   1/1     Running             3          17d
kube-system   kube-flannel-ds-mhkdq      1/1     Running             10         17d
kube-system   kube-flannel-ds-mlb7l      1/1     Running             11         17d
kube-system   kube-flannel-ds-sl4qv      1/1     Running             2          17d
[root@master ~]# k get po -A --sort-by={.metadata.name}
NAMESPACE     NAME                       READY   STATUS      RESTARTS   AGE
default       busybox                    0/1     Completed   2          37s
kube-system   coredns-76648cbfc9-lb75g   1/1     Running     3          17d
kube-system   kube-flannel-ds-mhkdq      1/1     Running     10         17d
kube-system   kube-flannel-ds-mlb7l      1/1     Running     11         17d
kube-system   kube-flannel-ds-sl4qv      1/1     Running     2          17d
default       nginx                      1/1     Running     0          7m55s

二,

查询所有的pod,按其生成的时间从远到近和从近到远排序:

[root@master ~]# kubectl get po --sort-by={.metadata.creationTimestamp} -A
NAMESPACE     NAME                       READY   STATUS      RESTARTS   AGE
kube-system   kube-flannel-ds-mhkdq      1/1     Running     10         17d
kube-system   kube-flannel-ds-mlb7l      1/1     Running     11         17d
kube-system   kube-flannel-ds-sl4qv      1/1     Running     2          17d
kube-system   coredns-76648cbfc9-lb75g   1/1     Running     3          17d
default       nginx                      1/1     Running     0          24m
default       busybox                    0/1     Completed   8          16m
[root@master ~]# kubectl get po --sort-by={metadata.creationTimestamp} -A --no-headers | tac
default       busybox                    0/1   CrashLoopBackOff   7     16m
default       nginx                      1/1   Running            0     23m
kube-system   coredns-76648cbfc9-lb75g   1/1   Running            3     17d
kube-system   kube-flannel-ds-sl4qv      1/1   Running            2     17d
kube-system   kube-flannel-ds-mlb7l      1/1   Running            11    17d
kube-system   kube-flannel-ds-mhkdq      1/1   Running            10    17d

三,

查询所有pod,按重启次数排序,这个命令还是很实用的,可以看到,busybox在不停的重启哦

[root@master ~]# kubectl get pods --sort-by='.status.containerStatuses[0].restartCount' -A
NAMESPACE     NAME                       READY   STATUS             RESTARTS   AGE
default       nginx                      1/1     Running            0          64m
kube-system   kube-flannel-ds-sl4qv      1/1     Running            2          17d
kube-system   coredns-76648cbfc9-lb75g   1/1     Running            3          17d
kube-system   kube-flannel-ds-mhkdq      1/1     Running            10         17d
kube-system   kube-flannel-ds-mlb7l      1/1     Running            11         17d
default       busybox                    0/1     CrashLoopBackOff   15         56m

四,

(1)列出所有命名空间下的所有pod所使用的镜像,并按名称排序,并统计镜像使用的次数:

[root@master ~]# kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" |tr -s '[[:space:]]' '\n' |sort |uniq -c
      1 busybox
      1 nginx:1.18
      3 quay.io/coreos/flannel:v0.13.0
      1 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0

(2)不统计使用次数,不排序,仅仅列出pod使用的镜像:

  [root@master ~]# kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" |tr -s '[[:space:]]' '\n' 
busybox
nginx:1.18
registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0
quay.io/coreos/flannel:v0.13.0
quay.io/coreos/flannel:v0.13.0
quay.io/coreos/flannel:v0.13.0

(3)查询单个pod所使用的镜像:

首先选定一个pod,下面将要选择 coredns-76648cbfc9-lb75g:

[root@master ~]# k get po -A
NAMESPACE     NAME                       READY   STATUS             RESTARTS   AGE
default       busybox                    0/1     CrashLoopBackOff   25         105m
default       nginx                      1/1     Running            0          112m
kube-system   coredns-76648cbfc9-lb75g   1/1     Running            3          17d
kube-system   kube-flannel-ds-mhkdq      1/1     Running            10         17d
kube-system   kube-flannel-ds-mlb7l      1/1     Running            11         17d
kube-system   kube-flannel-ds-sl4qv      1/1     Running            2          17d

查看pod   coredns-76648cbfc9-lb75g所使用的image

[root@master ~]# k get po coredns-76648cbfc9-lb75g -o jsonpath="{.spec.containers[*].image}" -n kube-system |uniq -c
      1 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0

(4)改用go-template模板形式查看所有pod使用的镜像(此条查询等价于(1)):

[root@master ~]# kubectl get pods --all-namespaces -o go-template --template="{{range .items}}{{range .spec.containers}}{{.image}} {{end}}{{end}}" |tr -s '[[:space:]]' '\n' |sort |uniq -c
      1 busybox
      1 nginx:1.18
      3 quay.io/coreos/flannel:v0.13.0
      1 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0

五,

自定义模式查询

[root@master ~]# kubectl get pod nginx  -o custom-columns=CONTAINER:.spec.containers[0].name,IMAGE:.spec.containers[0].image
CONTAINER   IMAGE
nginx       nginx:1.18

下面这个命令大写的CONTAINER和IMAGE是自己定义的column,可随意更改

[root@master ~]# kubectl get pod kube-flannel-ds-mhkdq -n kube-system  -o custom-columns=CONTAINER:.spec.containers[0].name,IMAGE:.spec.containers[0].image
CONTAINER      IMAGE
kube-flannel   quay.io/coreos/flannel:v0.13.0

 

六,

jq简化查询方式

注:jq是一个软件,jsonquery的简写。该软件十分轻量化,centos下安装命令为:yum install jq -y 需要配置epel源。

[root@master ~]# k get po nginx -o json|jq .status.containerStatuses
[
  {
    "containerID": "docker://b177cec0fab830856897aca55643c753d45f349ac32f7d7f9734542935d7529a",
    "image": "nginx:1.18",
    "imageID": "docker-pullable://nginx@sha256:e90ac5331fe095cea01b121a3627174b2e33e06e83720e9a934c7b8ccc9c55a0",
    "lastState": {},
    "name": "nginx",
    "ready": true,
    "restartCount": 0,
    "started": true,
    "state": {
      "running": {
        "startedAt": "2022-09-14T01:33:12Z"
      }
    }
  }
]

使用grep和awk命令可过滤出需要的数据(此例是打印出nginx这个pod所使用的镜像):

[root@master ~]# k get po nginx -o json|jq .status.containerStatuses | grep "\<image\>"|awk '{print $2}'
"nginx:1.18",

以上为方法,可打印出该pod运行在哪个主机节点的IP:

[root@master ~]# k get po nginx -o json|jq |grep hostIP|grep -v "f"
    "hostIP": "192.168.217.16",
[root@master ~]# k get po -A -owide
NAMESPACE     NAME                       READY   STATUS             RESTARTS   AGE    IP               NODE         NOMINATED NODE   READINESS GATES
default       busybox                    0/1     CrashLoopBackOff   51         4h1m   10.244.1.10      k8s-node1    <none>           <none>
default       nginx                      1/1     Running            0          4h8m   10.244.0.17      k8s-master   <none>           <none>

同样,查询kube-flannel-ds-mhkdq这个pod运行在哪个主机上也是十分方便的:

[root@master ~]# k get po kube-flannel-ds-mhkdq -n kube-system -o json|jq |grep hostIP|grep -v "f"
    "hostIP": "192.168.217.17",

综上可以得出,jq可以简化我们的查询工作,不需要编写繁杂的正则表达式了。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3天前
|
存储 运维 Kubernetes
Docker+Kubernetes/K8s+Jenkins视频资料【干货分享】
Docker+Kubernetes/K8s+Jenkins视频资料【干货分享】
Docker+Kubernetes/K8s+Jenkins视频资料【干货分享】
|
3天前
|
存储 Kubernetes Docker
Kubernetes(K8S)集群管理Docker容器(概念篇)
Kubernetes(K8S)集群管理Docker容器(概念篇)
|
14天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
17 4
|
13天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
59 17
|
26天前
|
Kubernetes 安全 网络安全
搭建k8s集群kubeadm搭建Kubernetes二进制搭建Kubernetes集群
搭建k8s集群kubeadm搭建Kubernetes二进制搭建Kubernetes集群
108 0
|
29天前
|
Kubernetes API 调度
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(水平扩展控制)
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(水平扩展控制)
60 0
|
29天前
|
Java fastjson 数据安全/隐私保护
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
40 0
|
1月前
|
Kubernetes Cloud Native Docker
【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0
Kubernetes 是一个开源平台,用于管理容器化工作负载和服务,提供声明式配置和自动化。源自 Google 的大规模运维经验,它拥有广泛的生态支持。本文档详细介绍了 Kubernetes 集群的搭建过程,包括服务器配置、Docker 和 Kubernetes 组件的安装,以及 Master 和 Node 的部署。此外,还提到了使用 Calico 作为 CNI 网络插件,并提供了集群功能的测试步骤。
221 0
|
4天前
|
存储 运维 Kubernetes
Kubernetes 集群的监控与维护策略
【4月更文挑战第23天】 在微服务架构日益盛行的当下,容器编排工具如 Kubernetes 成为了运维工作的重要环节。然而,随着集群规模的增长和复杂性的提升,如何确保 Kubernetes 集群的高效稳定运行成为了一大挑战。本文将深入探讨 Kubernetes 集群的监控要点、常见问题及解决方案,并提出一系列切实可行的维护策略,旨在帮助运维人员有效管理和维护 Kubernetes 环境,保障服务的持续可用性和性能优化。
|
6天前
|
存储 运维 Kubernetes
Kubernetes 集群的持续性能优化实践
【4月更文挑战第22天】在动态且复杂的微服务架构中,确保 Kubernetes 集群的高性能运行是至关重要的。本文将深入探讨针对 Kubernetes 集群性能优化的策略与实践,从节点资源配置、网络优化到应用部署模式等多个维度展开,旨在为运维工程师提供一套系统的性能调优方法论。通过实际案例分析与经验总结,读者可以掌握持续优化 Kubernetes 集群性能的有效手段,以适应不断变化的业务需求和技术挑战。

热门文章

最新文章