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


    1. 示例 Pod 的定义文件

    # 文章中所用 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
    
    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 及其容器的详细信息,包括容器名称、镜像、状态等。

    示例:

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

    例如上面的 multi-container

    kubectl describe pod multi-container -n sre
    

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

    Name:         multi-container
    Namespace:    sre
    Priority:     0
    Node:         node9/192.168.1.37
    Start Time:   Tue, 11 Jun 2024 15:52:07 +0800
    Labels:       >
    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:           >
      redis-app: # 容器名
        Container ID:   docker://xxxxx
        Image:          redis
        Image ID:       xxxxxxx
        Port:           >
    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 格式

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

    例如输出到文件中:

    kubectl get pod multi-container -n sre -o json > test.json
    

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

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

    👍 小知识

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

    # 需要先安装 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 格式

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

    例如输出到文件中:

    kubectl get pod multi-container -n sre -o yaml > test.yaml
    

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

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

    4. 其他操作

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

    • 查看指定容器日志
    kubectl logs <Pod-Name> -c <Container-Name>
    
    • 进入执行容器并执行命令
    kubectl exec -it <Pod-Name> -n <Namespaces> -c <Container-Name> bash
    
    • more…
  • 相关阅读:
    JavaScript Date对象中的常用方法有哪些?
    顺序表之(条条有注释助你吃透顺序表以及基于顺序表实现的通讯录)
    【物理应用】GPS信号捕获跟踪附MATLAB代码
    四 软件架构风格、质量属性、Web架构设计
    Java学习 --- 面向对象之继承
    深度学习笔记_2、多种方法定义神经网络
    YOLO改进系列之注意力机制(EffectiveSE模型介绍)
    SpringBoot_整合Mybatis
    数据库 范式化和反范式化
    【Spring Cloud实战】Spring Cloud Alibaba Sentinel熔断与限流 (最全讲解,附源码)
  • 原文地址:https://blog.csdn.net/peng2hui1314/article/details/139400001