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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 云原生|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 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
5天前
|
Kubernetes Docker 容器
里云容器服务Kubernetes版(ACK)上快速部署应用
里云容器服务Kubernetes版(ACK)上快速部署应用
|
2天前
|
存储 Kubernetes 负载均衡
|
6天前
|
存储 Kubernetes 负载均衡
容器服务Kubernetes版(ACK)上快速部署应用
在阿里云ACK上快速部署应用,包括创建Kubernetes集群、使用`kubectl`部署或更新应用镜像、配置Ingress与ALB集成。首先开通ACK和ALB服务,然后创建集群。编写`deployment.yaml`和`ingress.yaml`文件,部署应用和设定路由规则。通过ALB控制台配置负载均衡器,最后验证部署是否可通过ALB访问。如遇问题,参考官方文档或寻求阿里云支持。
|
7天前
|
Kubernetes Cloud Native 微服务
企业级容器部署实战:基于ACK与ALB灵活构建云原生应用架构
这篇内容概述了云原生架构的优势,特别是通过阿里云容器服务Kubernetes版(ACK)和应用负载均衡器(ALB)实现的解决方案。它强调了ACK相对于自建Kubernetes的便利性,包括优化的云服务集成、自动化管理和更强的生态系统支持。文章提供了部署云原生应用的步骤,包括一键部署和手动部署的流程,并指出手动部署更适合有技术背景的用户。作者建议在预算允许的情况下使用ACK,因为它能提供高效、便捷的管理体验。同时,文章也提出了对文档改进的建议,如添加更多技术细节和解释,以帮助用户更好地理解和实施解决方案。最后,展望了ACK未来在智能化、安全性与边缘计算等方面的潜在发展。水文一篇,太忙了,见谅!
|
11天前
|
存储 弹性计算 运维
阿里云容器服务Kubernetes版(ACK)部署与管理体验评测
阿里云容器服务Kubernetes版(ACK)是一个功能全面的托管Kubernetes服务,它为企业提供了快速、灵活的云上应用管理能力。
73 2
|
6天前
|
运维 Cloud Native 持续交付
探索云原生架构:构建现代应用的基石
【7月更文挑战第9天】本文深入探讨了云原生架构的核心概念、关键技术组件以及实施的最佳实践。通过分析云原生技术如何促进微服务架构的实现,容器化技术的利用,以及持续集成与持续部署(CI/CD)流程的自动化,本文旨在为读者提供一个全面的云原生技术框架视图,并揭示其在加速企业数字化转型过程中的关键作用。
|
5天前
|
边缘计算 人工智能 Cloud Native
云原生架构的演变与未来展望
在数字化转型的浪潮中,云原生技术成为企业IT战略的核心。本文深入探讨了云原生架构从起步到成熟的发展脉络,分析了容器化、微服务和持续交付等关键技术如何推动应用现代化,并预测了云原生技术的未来趋势,如边缘计算、AI增强和多云管理。同时,文章也对云原生实践过程中可能遇到的安全挑战、技术复杂性以及人才缺口问题提出了见解,旨在为读者提供一份全面的云原生技术指南。
|
1天前
|
运维 Cloud Native Devops
云原生架构的演进与实践
【7月更文挑战第14天】在数字化转型的浪潮中,云原生技术作为推动现代软件发展的新引擎,正引领着企业IT架构的变革。本文将探索云原生架构的核心概念、关键技术及其对企业IT策略的影响,同时通过案例分析,揭示云原生在实际应用中的成效与挑战,为读者呈现一幅云原生技术发展与应用的全景图。
14 4
|
2天前
|
Kubernetes 负载均衡 Cloud Native
云原生时代的微服务架构演进之路
【7月更文挑战第13天】本文深入探讨了在云原生环境下,微服务架构如何逐步演进以适应日益复杂的业务需求。从微服务的基本概念出发,到容器化技术的融合,再到服务网格的引入,文章详细阐述了微服务在不同阶段的技术挑战和解决方案。同时,通过案例分析,展示了企业如何实践微服务架构,以及在转型过程中可能遇到的技术和管理上的挑战。最终,文章对微服务架构的未来趋势进行了预测,指出了云原生技术如何继续推动微服务的革新。
|
2天前
|
Kubernetes Cloud Native Docker
云原生架构的演进:从容器化到服务网格
本文深入探讨了云原生技术从最初的容器化技术,如Docker和Kubernetes,发展到现代的服务网格架构,如Istio。文章将通过分析云原生技术的演进路径,揭示其在处理微服务复杂性、流量管理和安全性方面的优势。我们将通过具体案例展示服务网格如何优化分布式系统的性能,并预测未来云原生技术的发展趋势。
12 2

推荐镜像

更多