# 文章中所用 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 中的容器信息,可以使用以下几种方法:
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
...
使用 kubectl get pod
命令并结合 -o json
或 -o yaml
输出格式,可以查看 Pod
的详细 JSON
或 YAML
描述。
# 输出到控制台
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
相当于命令 sed
或 awk
,但专门用于处理 JSON
格式的数据。# 输出到控制台
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: {}
# ...
获取容器之后就可以进行其他操作了:
kubectl logs <Pod-Name> -c <Container-Name>
kubectl exec -it <Pod-Name> -n <Namespaces> -c <Container-Name> bash