目录
1. 示例 Pod 的定义文件
# 文章中所用 pod 的 yaml 定义文件, multi-container.yamlapiVersion: 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:0Node: 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 格式
# 输出到控制台
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: 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…
版权归原作者 Roc.Chang 所有, 如有侵权,请联系我们删除。