k8s 小技巧: 查看 Pod 上运行的容器

目录

  • [1. 示例 Pod 的定义文件](#1. 示例 Pod 的定义文件)
  • [2. kubectl describe pod(推荐)](#2. kubectl describe pod(推荐))
  • [3. kubectl get pod](#3. kubectl get pod)
    • [3.1 json 格式](#3.1 json 格式)
    • [3.2 yaml 格式](#3.2 yaml 格式)
  • [4. 其他操作](#4. 其他操作)

1. 示例 Pod 的定义文件

yaml 复制代码
# 文章中所用 pod 的 yaml 定义文件, multi-container.yaml
apiVersion: v1
kind: Pod
metadata:
  name: multi-container
  namespace: sre
spec:
  containers:
    - name: nginx-app
      image: nginx
      imagePullPolicy: IfNotPresent # 如果存在则不拉取镜像
    - name: redis-app
      image: redis
      imagePullPolicy: IfNotPresent
bash 复制代码
kubectl apply -f multi-container.yaml

# 查看是否运行成功 
kubectl get pods -n sre

# 输出如下
NAME                                         READY   STATUS    RESTARTS   AGE
multi-container                              2/2     Running   0          8m48s

要使用 kubectl 获取某个 Pod 中的容器信息,可以使用以下几种方法:

2. kubectl describe pod(推荐)

kubectl describe pod 命令可以提供有关 Pod 及其容器的详细信息,包括容器名称、镜像、状态等。

示例:

sh 复制代码
kubectl describe pod <pod_name> -n <namespace>
  • -n:指定命名空间,如果不指定则默认为 default 命名空间。

例如上面的 multi-container :

sh 复制代码
kubectl describe pod multi-container -n sre

该命令输出中会包括容器的信息,如名称、镜像、状态、资源请求和限制等;在 Containers 就可以看到这个 Pod 中包含的容器名。

yaml 复制代码
Name:         multi-container
Namespace:    sre
Priority:     0
Node:         node9/192.168.1.37
Start Time:   Tue, 11 Jun 2024 15:52:07 +0800
Labels:       <none>
Annotations:  cni.projectcalico.org/podIP: 10.100.104.116/32
              cni.projectcalico.org/podIPs: 10.100.104.116/32
Status:       Running
Containers: # 包含的容器
  nginx-app: # 容器名
    Container ID:   docker://xxxxx
    Image:          nginx
    Image ID:       xxxxxx
    Port:           <none>
  redis-app: # 容器名
    Container ID:   docker://xxxxx
    Image:          redis
    Image ID:       xxxxxxx
    Port:           <none>
Conditions:
	Type              Status
	Initialized       True 
	Ready             True 
	ContainersReady   True 
	PodScheduled      True 
...

3. kubectl get pod

使用 kubectl get pod 命令并结合 -o json 或 -o yaml 输出格式,可以查看 Pod 的详细 JSON 或 YAML 描述。

3.1 json 格式

sh 复制代码
# 输出到控制台
kubectl get pod <pod_name> -n <namespace> -o json

# 输出到文件中
kubectl get pod <pod_name> -n <namespace> -o json > test.json

例如输出到文件中:

sh 复制代码
kubectl get pod multi-container -n sre -o json > test.json

然后在文件中找到层级 spec -> containers 就可以看到运行的容器:

json 复制代码
{
	// ...
	"spec": {
	   "containers": [ // 包含的容器
	         {
	             "image": "nginx",
	             "imagePullPolicy": "IfNotPresent",
	             "name": "nginx-app", // 容器名
	             "resources": {},
	         },
	         {
	             "image": "redis",
	             "imagePullPolicy": "IfNotPresent",
	             "name": "redis-app", // 容器名
	             "resources": {},
	         }
		]
	}
	// ...
}

👍 小知识:

可以通过 jq 工具来解析 JSON 输出:

sh 复制代码
# 需要先安装 jq 工具

# 安装完成后执行下面的命令
kubectl get pod multi-container -n sre -o json | jq '.spec.containers[].name'
  • jq 是一个轻量级且灵活的命令行 JSON 处理工具,用于在 Linux(和其他类 Unix 系统)中解析、筛选、转换、生成和操作 JSON 数据。jq 相当于命令 sed 或 awk,但专门用于处理 JSON 格式的数据。

3.2 yaml 格式

sh 复制代码
# 输出到控制台
kubectl get pod <pod_name> -n <namespace> -o yaml

# 输出到文件中
kubectl get pod <pod_name> -n <namespace> -o yaml > test.yaml

例如输出到文件中:

sh 复制代码
kubectl get pod multi-container -n sre -o yaml > test.yaml

然后在文件中找到层级 spec -> containers 就可以看到运行的容器:

yaml 复制代码
# ...
spec:
  containers: # 包含的容器
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: nginx-app  # 容器名
    resources: {}
  - image: redis
    imagePullPolicy: IfNotPresent
    name: redis-app # 容器名
    resources: {}
# ...

4. 其他操作

获取容器之后就可以进行其他操作了:

  • 查看指定容器日志
bash 复制代码
kubectl logs <Pod-Name> -c <Container-Name>
  • 进入执行容器并执行命令
bash 复制代码
kubectl exec -it <Pod-Name> -n <Namespaces> -c <Container-Name> bash
  • more...
相关推荐
lwx91485214 小时前
Docker-安装SSH服务
docker·容器·ssh
艾伦_耶格宇18 小时前
【kubernetes - 1.28版本】-11 K8S核心组件
java·容器·kubernetes
时间售卖铺19 小时前
Docker实战:一键部署轻量级容器
运维·docker·云原生
月落汀兰19 小时前
拒绝配置写死镜像!K8s 存储卷与配置管理,PV/PVC、ConfigMap、Secret 实战避坑指南
运维·kubernetes
艾伦_耶格宇20 小时前
【kubernetes - 1.28版本】-10 K8S命名空间
云原生·容器·kubernetes
tedcloud1231 天前
Docker Compose 部署 Uptime Kuma:配置 HTTPS、QQ 邮箱告警与数据备份
服务器·网络协议·ui·docker·容器·https·开源
syntaxsage1 天前
Dive:Docker 镜像层可视化分析工具
运维·其他·docker·容器
java_logo1 天前
Docker 部署 Samba:轻松搭建局域网文件共享
运维·docker·容器·文件共享·samba·smb·轩辕镜像
草莓熊Lotso1 天前
【C++ 基于微服务的即时通讯系统】网关基建:cpp-httplib 与 WebSocketpp 从入门到实战
linux·开发语言·数据库·c++·redis·微服务·云原生
todoitbo1 天前
群晖NAS部署JmalCloud:Docker安装、文件管理、博客与公网访问完整教程
运维·docker·容器