目录
- 1. 示例 Pod 的定义文件
- 2. kubectl describe pod(推荐)
- 3. kubectl get pod
- 3.1 json 格式
- 3.2 yaml 格式
 
- 4. 其他操作
1. 示例 Pod 的定义文件
# 文章中所用 pod 的 yaml 定义文件, multi-container.yaml
apiVersion: v1
kind: Pod
metadata:name: multi-containernamespace: sre
spec:containers:- name: nginx-appimage: nginximagePullPolicy: IfNotPresent # 如果存在则不拉取镜像- name: redis-appimage: redisimagePullPolicy: 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:       <none>
Annotations:  cni.projectcalico.org/podIP: 10.100.104.116/32cni.projectcalico.org/podIPs: 10.100.104.116/32
Status:       Running
Containers: # 包含的容器nginx-app: # 容器名Container ID:   docker://xxxxxImage:          nginxImage ID:       xxxxxxPort:           <none>redis-app: # 容器名Container ID:   docker://xxxxxImage:          redisImage ID:       xxxxxxxPort:           <none>
Conditions:Type              StatusInitialized       True Ready             True ContainersReady   True PodScheduled      True 
...3. kubectl get pod
使用 kubectl get pod 命令并结合 -o json 或 -o yaml 输出格式,可以查看 Pod 的详细 JSON 或 YAML 描述。
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相当于命令- sed或- awk,但专门用于处理- 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: nginximagePullPolicy: IfNotPresentname: nginx-app  # 容器名resources: {}- image: redisimagePullPolicy: IfNotPresentname: redis-app # 容器名resources: {}
# ...
4. 其他操作
获取容器之后就可以进行其他操作了:
- 查看指定容器日志
kubectl logs <Pod-Name> -c <Container-Name>
- 进入执行容器并执行命令
kubectl exec -it <Pod-Name> -n <Namespaces> -c <Container-Name> bash
- more…
