时间:2025-04-26 20:37
人气:
作者:admin
Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。
Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器,这些容器共享网络和存储命名空间。
Pod 的设计是 非持久化 的,可能因节点故障、调度策略或更新操作而被销毁重建。
当Pod中有多个容器时,容器之间的通信是通过pause容器来实现的。

Volume 挂载:Pod 级别定义的存储卷(如 emptyDir、PersistentVolumeClaim)可被所有容器挂载。
数据共享:适合需要共享文件或目录的场景(如主容器写日志,Sidecar 容器读取日志并上传)。
同生共死:Pod 内的容器同时启动,当 Pod 终止时,所有容器一起终止。
独立重启:若某个容器崩溃,Pod 会根据 restartPolicy 决定是否重启整个 Pod 或仅重启该容器。
通过 kubectl run 快速创建临时 Pod,适合测试和调试场景。
# 创建一个简单的 Pod(默认生成随机名称)
kubectl run <POD_NAME> --image=<IMAGE> --port=<PORT>
# 示例:运行一个名为 nginx-pod 的 Nginx 容器
kubectl run nginx-pod --image=nginx:latest --port=80
参数说明:
kubectl run debug-pod --image=busybox --command -- sh -c "sleep 3600"
kubectl run --rm -it temp-pod --image=busybox -- sh
kubectl run nginx-pod --image=nginx --dry-run=client -o yaml > pod.yaml
# 列出当前命名空间的所有 Pod
kubectl get pods
# 列出所有命名空间的 Pod
kubectl get pods -A
# 显示 Pod 的详细信息(IP、节点、事件等)
kubectl get pods -o wide
# 以yaml格式显示pod的详细信息
kubectl get pods -o yaml
# 查看某个 Pod 的详细描述(状态、事件、容器配置)
kubectl describe pod <pod-name>
# 查看 Pod 的主容器日志
kubectl logs <pod-name>
# 持续跟踪日志(类似 tail -f)
kubectl logs -f <pod-name>
# 查看 Pod 中指定容器的日志
kubectl logs <pod-name> -c <container-name>
# 进入 Pod 的容器执行命令(默认进入第一个容器)
kubectl exec -it <pod-name> -- /bin/sh
# 进入指定容器
kubectl exec -it <pod-name> -c <container-name> -- /bin/bash
# 删除指定 Pod
kubectl delete pod <pod-name>
# 强制立即删除(不等待优雅终止)
kubectl delete pod <pod-name> --force --grace-period=0
# 创建pod
[root@master01 ~]# kubectl run nginx-pod --image=nginx --port=80
pod/nginx-pod created
[root@master01 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 9s
通过yaml创建pod,创建pod的yaml文件又叫资源清单(manifests),资源清单是用于描述定义K8S集群资源的配置文件。
下面是一个创建pod的资源清单文件示例:
[root@master01 ~/pod]# cat pod-nginx.yaml
apiVersion: v1
# 资源类型,例如 Pod
kind: Pod
# 元数据
metadata:
# Pod名称
name: nginx-pod
# Pod中容器的详细定义
spec:
# Pod中容器列表
containers:
# 容器名称
- name: nginx-container
# 容器的镜像
image: nginx:latest
# 指定容器的端口
ports:
# 容器端口命名
- name: http
# 容器内部监听的端口号
containerPort: 80
[root@master01 ~/pod]# kubectl apply -f pod-nginx.yaml
pod/nginx-pod created
[root@master01 ~/pod]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 25s
创建的pod默认是无法被外部访问的,这个我们后面会讲
# 查看pod的IP地址
[root@master01 ~/pod]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-pod 1/1 Running 0 10s 100.95.185.203 node02 <none> <none>
# 通过pod的IP进行访问
[root@master01 ~/pod]# curl 100.95.185.203
<!DOCTYPE html>
<html>
##..省略万字内容
</html>
删除pod
[root@master01 ~/pod]# kubectl delete -f pod-nginx.yaml
pod "nginx-pod" deleted
[root@master01 ~/pod]# kubectl get pod
No resources found in default namespace.
本文来自博客园,作者:huangSir-devops,转载请注明原文链接:https://www.cnblogs.com/huangSir-devops/p/18848027,微信Vac6666666,欢迎交流
Ubuntu离线环境部署Kubernetes v1.31.3(ARM64)