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 的详细 JSONYAML 描述。

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 相当于命令 sedawk,但专门用于处理 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...
相关推荐
plusplus1681 小时前
Kubernetes“城市规划”指南:告别资源拥堵与预算超支,打造高效云原生都市
云原生·容器·kubernetes
qq_312920113 小时前
K8s存储类(StorageClass)设计与Ceph集成实战
ceph·容器·kubernetes
Nazi63 小时前
kubeadm部署k8s集群环境搭建
云原生·容器·kubernetes
Brilliantee4043 小时前
藏在 K8s 幕后的记忆中枢(etcd)
容器·kubernetes·etcd
bing.shao3 小时前
gRPC 选型 etcd 的核心优势分析
数据库·微服务·云原生·golang·etcd
焯集新人5 小时前
K8S高可用集群
云原生·容器·kubernetes
楚禾Noah5 小时前
【通用常识】YAML 中的高阶语法
运维·docker·容器
小白不想白a6 小时前
【Ansible】变量、机密、事实
运维·云原生·ansible
东心十13 小时前
Win11安装WSL、Docker Desktop
运维·docker·容器
tb_first16 小时前
k8sday13数据存储(1.5/2)
linux·运维·服务器·云原生·容器·kubernetes