【K8S学习笔记】Part2:获取K8S集群中运行的所有容器镜像
本文将介绍如何使用kubectl列举K8S集群中运行的Pod内的容器镜像。
注意:本文针对K8S的版本号为v1.9,其他版本可能会有少许不同。
0x00 准备工作
需要有一个K8S集群,并且配置好了kubectl命令行工具来与集群通信。如果未准备好集群,那么你可以使用Minikube创建一个K8S集群,或者你也可以使用下面K8S环境二者之一:
如果需要查看K8S版本信息,可以输入指令kubectl version。
在本练习中,我们将使用kubectl获取集群中运行的所有Pod,并以指定格式输出各Pod中运行的容器。
0x01 列举所有命名空间中的容器
- 使用命令
kubectl get pods --all-namespaces获取所有命名空间中的所有Pod。 - 使用
-o jsonpath={..image}格式化输出,使其仅仅包含容器镜像名称,这将递归解析返回的json对象中的image字段。- 获取更多关于如何使用jsonpath的信息,参见jsonpath reference。
- 使用标准工具
tr、sort和uniq格式化输出。- 使用
tr以新行替换空格 - 使用
sort对结果排序 - 使用
uniq统计镜像数量
- 使用
kubectl get pods --all-namespaces -o jsonpath="{..image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c
上述命令会对所有返回的项目,递归地返回所有名为image的字段。
此外,另一种方法是使用image字段在Pod内的绝对路径。这能够保证获取正确的字段,即使该字段名称在Pod中重复多次,例如,在一个给定的项目中,可能会有很多字段名称都是name:
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}"
上述的jsonpath按以下方式解析:
.items[*]:针对每一个返回的值.spec:获取spec.containers[*]:针对每个容器.image:获取镜像
注意:当通过名称获取单个Pod时,例如:kubectl get pod nginx,那么路径中的.items[*]部分将会省略,因为返回的是单个Pod,而不是多个Pod的列表。
0x02 通过Pod列举容器
我们可以使用range操作进一步控制输出格式,以此来逐个迭代每一个元素:
kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
sort
0x03 列举Pod标签过滤的容器
如果目标是那些匹配特定标签的Pod,那么可以使用-l标记。下面指令仅仅匹配含有标签app=nginx的Pod:
kubectl get pods --all-namespaces -o=jsonpath="{..image}" -l app=nginx
0x04 列举Pod命名空间过滤的容器
如果目标是那些匹配特定命名空间的Pod,那么可以使用--namespace标记。下面指令仅仅匹配存在于kube-system命名空间中的Pod:
kubectl get pods --namespace kube-system -o jsonpath="{..image}"
0x05 使用go-template列举容器
作为jsonpath的另一个选择,Kubectl支持使用go-template来格式化输出内容:
kubectl get pods --all-namespaces -o go-template --template="{{range .items}}{{range .spec.containers}}{{.image}} {{end}}{{end}}"
0x06 参考内容
*英文原文:https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/ *
【K8S学习笔记】Part2:获取K8S集群中运行的所有容器镜像的更多相关文章
- k8s学习笔记之三:k8s快速入门
一.前言 kubectl是apiserver的客户端工具,工作在命令行下,能够连接apiserver上实现各种增删改查等各种操作 kubectl官方使用文档:https://kubernetes.io ...
- 【K8S学习笔记】初识K8S 及架构组件
K8S是什么?发展历史 Kubernetes (简称 k8s)是 Google 在2014年开源的,对容器生命周期管理的开源平台,致力于对容器集群提供易于管理.高可用.弹性负载与故障转移的能力,提高服 ...
- DOCKER 学习笔记8 Docker Swarm 集群搭建
前言 在前面的文章中,已经介绍如何在本地通过Docker Machine 创建虚拟Docker 主机,以及也可以在本地Windows 创建虚拟主机,也是可以使用的.这一节,我们将继续学习 Docker ...
- Redis学习笔记(二):Redis集群
集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能. 1.节点 一个节点就是一个运行在集群模式下的Redis服务器.启动Redis服务器时,通过判断cluster-enabl ...
- Redis学习笔记(十七) 集群(上)
Redis集群是Redis提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移操作. 一个Redis集群通常由多个节点组成,在刚开始的时候每个节点都是相互独立的,他们处于一个只包含 ...
- Redis学习笔记(九)——集群
一.概述 Redis Cluster与Redis3.0.0同时发布,以此结束了Redis无官方集群方案的时代. Redis Cluster是去中心化,去中间件,也就是说,集群中的每个节点都是平等的关 ...
- Docker Swarm Mode 学习笔记(创建 Swarm 集群)
Swarm 集群由管理节点与工作节点组成. 初始化集群 使用命令:docker swarm init 如果你的 Docker 主机有多个网卡, 拥有多个 IP 地址, 必须使用 --advertise ...
- Spark学习笔记5:Spark集群架构
Spark的一大好处就是可以通过增加机器数量并使用集群模式运行,来扩展计算能力.Spark可以在各种各样的集群管理器(Hadoop YARN , Apache Mesos , 还有Spark自带的独立 ...
- Storm官方文档翻译之在生产环境集群中运行Topology
在进群生产环境下运行Topology和在本地模式下运行非常相似.下面是步骤: 1.定义Topology(如果使用Java开发语言,则使用TopologyBuilder来创建) 2.使用StormSub ...
随机推荐
- 【MySQL】死锁问题分析
1.MySQL常用存储引擎的锁机制: MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-level locking)或表级锁,默认为页面锁 ...
- Windows 8创新之路——样章分享
在电脑里面躺了大约也有半年多的光景了. 在Windows 8.1还有不到一个月的时间里,将这些内容分享出来,也算是对得起自己那段时间的熬夜. 希望大家多提宝贵意见. 谢! 点击标题可浏览SkyDriv ...
- Poj2296
题意:给定n个点,然后在每个点在一个正方形的上边或者下边的中点,并且所有的正方形等大且不能重叠.求正方形最大的边长是多少. 思路:很明显的二分边长+判定.不过判定要用到2-sat,算是2-sat的入门 ...
- 停止一个java的线程执行
找了一个停止线程运行的方法,代码如下: public class stopThread extends Thread { private volatile boolean stop = false; ...
- Azure DevOps Server:Git权限设置
Azure DevOps Server 权限概述 在Azure DevOps Server (之前名称为TFS)中,权限是一个比较复杂的概念.从权限层级上来说,包括服务器级别.团队项目集合级别.团队项 ...
- Python 高级编程——单例模式
单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 在 Py ...
- C#开发邮件收发(同步)
发邮件界面: 收邮件界面: 先分析邮件发送类 邮件发送类使用smtp协议,这里以QQ邮箱为例 using System; using System.Collections.Generic; using ...
- 为什么要先 git add 才能 git commit
1. git 的 add ,是一个容易引起疑问的命令.在 subversion 中的 svn add 动作是将某个文件加入版本控制,而 git add的意义完全不同. 同时, git diff --c ...
- hadoop集群搭建(hdfs)
(搭建hadoop集群的前提是服务器已成功安装jdk以及服务器之间已设置免密码登录,服务器之间的免密码登录可参考<linux服务器间ssh免密码登录>) 1.下载hadoop安装包 wge ...
- mybatis 控制台打印执行的SQL语句
1. Spring boot 集成 mybatis [转载]SpringBoot中Mybatis打印sql 1.1 如果使用的是application.properties文件,加入如下配置: log ...