拓冰建站拓冰建站
首页 / 资讯中心 / 正文

五、pod定义

Kubernetes Pod 知识完整梳理1. Pod 是什么定义Pod是 Kubernetes 中最小的调度单元也是应用运行的基本载体。它包含一个或多个容器这些容器共享网络、存储和生命周期像一个“逻辑主机”。2. Pod 内部的特殊容器pause基础设施容器地位每个Pod里必定有一个pause容器它是Pod中第一个启动的容器。三大核心职责也就是你图中提到的初始化网络栈创建并持有 Pod 的 Network Namespace申请 Pod 的唯一 IP。后续所有业务容器加入该命名空间共享同一个 IP 和端口空间可通过localhost互相访问。挂载存储卷首先挂载 Pod 定义的 Volume后续业务容器共享这些挂载点实现文件交换。回收僵尸进程PID 1 职责在 Pod 的 PID 命名空间中pause作为一号进程负责回收孤儿进程和僵尸进程防止资源泄漏。类比pause是“房东”负责申请门牌号IP、买公共家具存储卷并打扫公共区域回收进程。业务容器是“租客”享受基础设施各干各的活。3. Pod 内的网络共享Networking所有容器共享同一个Network Namespace。相同点IP 地址相同端口空间共享不能绑定同一个端口。互通方式容器间可通过localhost直接通信无需经过宿主机网卡。4. Pod 内的存储共享StoragePod 可定义多个Volume。所有容器都能挂载这些 Volume实现数据共享例如A容器写日志B容器读取并推送。5. Pod 的原子调度SchedulingPod 是调度的最小单位不会被拆散到不同节点。要么所有容器一起被调度到同一个 Node要么都不调度保证整体性。6.写一个简单的pod#1、pod内容如下 [rootk8s-master01 xuexi]# cat 1.pod.yaml apiVersion: v1 kind: Pod metadata: name: pod-demo namespace: default labels: app: myapp spec: containers: - name: myapp-1 image: wangyanglinux/myapp:v1.0 - name: busybox-1 image: wangyanglinux/tools:busybox command: - /bin/sh - -c - sleep 3600 #2、实例化pod配置文件 kubectl create -f 1.pod.yaml #查看实例化的pod kubectl get pod #如果需要删除 kubectl delete pod pod-demo7.pod的部分常用命令#显示ip和node节点 [rootk8s-master01 xuexi]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-demo 2/2 Running 0 41m 10.244.58.197 k8s-node02 none none #进入pod的容器里 -i交互模式 t打开终端 -c指定容器名 --分隔符后面写的执行的命令 [rootk8s-master01 ~]# kubectl exec -it pod-demo -c myapp-1 -- /bin/bash pod-demo:/# #根据标签查询pod [rootk8s-master01 xuexi]# cat 1.pod.yaml apiVersion: v1 kind: Pod metadata: name: pod-demo namespace: default labels: app: myapp spec: containers: - name: myapp-1 image: wangyanglinux/myapp:v1.0 - name: busybox-1 image: wangyanglinux/tools:busybox command: - /bin/sh - -c - sleep 3600 #通过l app标签名即可查询 [rootk8s-master01 xuexi]# kubectl get pod -l appmyapp NAME READY STATUS RESTARTS AGE pod-demo 2/2 Running 5 (11m ago) 7h7m [rootk8s-master01 xuexi]# #查看容器日志 [rootk8s-master01 xuexi]# kubectl logs pod-demo -c myapp-1# 获取当前的资源pod $ kubectl get pod -A, --all-namespaces 查看当前所有名称空间的资源 -n 指定名称空间默认值 defaultkube-system 空间存放是当前组件资源 --show-labells 查看当前的标签 -l 筛选资源key、keyvalue -o wide 详细信息包括 IP、分配的节点 # 进入 Pod 内部的容器执行命令 $ kubectl exec -it podName -c cName -- command -c 可以省略默认进入唯一的容器内部 # 查看资源的描述 $ kubectl explain pod.spec # 查看 pod 内部容器的日志 $ kubectl logs podName -c cName #查看名为 pod-demo-1 这个 Pod 的“详细状态信息”和“生命周期事件” kubectl describe pod pod-demo-18.排错方法#我这里写了一个3.pod.yaml apiVersion: v1 kind: Pod metadata: name: pod-demo3 namespace: default labels: app: myapp spec: containers: - name: myapp-1 image: wangyanglinux/myapp:v1.0 - name: busybox-1 image: wangyanglinux/myapp:v2.0 ~ #资源生成pod #kunectl crate -f 3.pod.yaml #查看启动有1个没启动且启动了4次都没启动成功 [rootk8s-master01 xuexi]# kubectl get pod NAME READY STATUS RESTARTS AGE pod-demo3 1/2 CrashLoopBackOff 4 (35s ago) 5m48s #首选使用describe排查事件 思路看一下可以看到1镜像成功了2失败了 [rootk8s-master01 xuexi]# kubectl describe pod pod-demo3 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 3m20s default-scheduler Successfully assigned default/pod-demo3 to k8s-node02 Normal Pulled 3m18s kubelet Container image wangyanglinux/myapp:v1.0 already present on machine Normal Created 3m18s kubelet Created container myapp-1 Normal Started 3m18s kubelet Started container myapp-1 Warning Failed 103s kubelet Failed to pull image wangyanglinux/myapp:v2.0: rpc error: code Canceled desc context canceled Warning Failed 103s kubelet Error: ErrImagePull Normal BackOff 103s kubelet Back-off pulling image wangyanglinux/myapp:v2.0 Warning Failed 103s kubelet Error: ImagePullBackOff Normal Pulling 89s (x2 over 3m18s) kubelet Pulling image wangyanglinux/myapp:v2.0 #继续使用logs进入容器排查可以看到80端口被第1个myapp-1占用了因为2个都是用的nginx用到80端口pod三大特性同一个pod里pid、cid、网络端口公用 [rootk8s-master01 xuexi]# kubectl logs pod-demo3 -c myapp-1 [rootk8s-master01 xuexi]# kubectl logs pod-demo3 -c busybox-1 2026/09/02 09:29:11 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address in use) 2026/09/02 09:29:11 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address in use) 2026/09/02 09:29:11 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address in use) 2026/09/02 09:29:11 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address in use) 2026/09/02 09:29:11 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address in use) nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address in use) 2026/09/02 09:29:11 [emerg] 1#1: still could not bind() nginx: [emerg] still could not bind()
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门