Pod的基本概念
- Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。
- Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器,这些容器共享网络和存储命名空间。
- Pod 的设计是 非持久化 的,可能因节点故障、调度策略或更新操作而被销毁重建。
- 当Pod中有多个容器时,容器之间的通信是通过pause容器来实现的。
Pod的核心特性
共享网络命名空间
- 共享同一 IP:Pod 内的所有容器共享一个 IP 地址,容器间通过 localhost 直接通信。
- 端口分配:容器需避免端口冲突(如主容器监听 80 端口,日志收集容器监听 8080)。
共享存储卷
- Volume 挂载:Pod 级别定义的存储卷(如 emptyDir、PersistentVolumeClaim)可被所有容器挂载。
- 数据共享:适合需要共享文件或目录的场景(如主容器写日志,Sidecar 容器读取日志并上传)。
生命周期一致性
- 同生共死:Pod 内的容器同时启动,当 Pod 终止时,所有容器一起终止。
- 独立重启:若某个容器崩溃,Pod 会根据 restartPolicy 决定是否重启整个 Pod 或仅重启该容器。
k8s中pod的管理
使用命令创建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
复制代码 参数说明:
- --image: 指定容器镜像(必填)。
- --port: 暴露容器端口。
- --env: 设置环境变量(如 --env=KEY=VALUE)。
- --command: 覆盖容器默认命令(需结合 -- 分隔符)。
- kubectl run debug-pod --image=busybox --command -- sh -c "sleep 3600"
复制代码
- --rm: Pod 退出后自动删除(适合临时任务):
- kubectl run --rm -it temp-pod --image=busybox -- sh
复制代码
- --dry-run=client: 生成模板但不实际创建:
- kubectl run nginx-pod --image=nginx --dry-run=client -o yaml > pod.yaml
复制代码 查看pod的信息
- # 列出当前命名空间的所有 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的日志
- # 查看 Pod 的主容器日志
- kubectl logs <pod-name>
- # 持续跟踪日志(类似 tail -f)
- kubectl logs -f <pod-name>
- # 查看 Pod 中指定容器的日志
- kubectl logs <pod-name> -c <container-name>
复制代码 进入pod调试
- # 进入 Pod 的容器执行命令(默认进入第一个容器)
- kubectl exec -it <pod-name> -- /bin/sh
- # 进入指定容器
- kubectl exec -it <pod-name> -c <container-name> -- /bin/bash
复制代码 删除pod
- # 删除指定 Pod
- kubectl delete pod <pod-name>
- # 强制立即删除(不等待优雅终止)
- kubectl delete pod <pod-name> --force --grace-period=0
复制代码 创建第一个pod
命令创建(生产环境不建议使用)
- # 创建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(强烈建议使用!!!)
通过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
复制代码 创建pod
- [root@master01 ~/pod]# kubectl apply -f pod-nginx.yaml
- pod/nginx-pod created
复制代码 查看pod
- [root@master01 ~/pod]# kubectl get pod
- NAME READY STATUS RESTARTS AGE
- nginx-pod 1/1 Running 0 25s
复制代码 访问pod
创建的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.
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |