找回密码
 立即注册
首页 业界区 安全 K8s新手系列之初识pod

K8s新手系列之初识pod

忆雏闲 2025-5-31 23:52:48
Pod的基本概念


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

Pod的核心特性

共享网络命名空间


  • 共享同一 IP:Pod 内的所有容器共享一个 IP 地址,容器间通过 localhost 直接通信。
  • 端口分配:容器需避免端口冲突(如主容器监听 80 端口,日志收集容器监听 8080)。
共享存储卷


  • Volume 挂载:Pod 级别定义的存储卷(如 emptyDir、PersistentVolumeClaim)可被所有容器挂载。
  • 数据共享:适合需要共享文件或目录的场景(如主容器写日志,Sidecar 容器读取日志并上传)。
生命周期一致性


  • 同生共死:Pod 内的容器同时启动,当 Pod 终止时,所有容器一起终止。
  • 独立重启:若某个容器崩溃,Pod 会根据 restartPolicy 决定是否重启整个 Pod 或仅重启该容器。
k8s中pod的管理

使用命令创建pod

通过 kubectl run 快速创建临时 Pod,适合测试和调试场景。
  1. # 创建一个简单的 Pod(默认生成随机名称)
  2. kubectl run <POD_NAME> --image=<IMAGE> --port=<PORT>
  3. # 示例:运行一个名为 nginx-pod 的 Nginx 容器
  4. kubectl run nginx-pod --image=nginx:latest --port=80
复制代码
参数说明:

  • --image: 指定容器镜像(必填)。
  • --port: 暴露容器端口。
  • --env: 设置环境变量(如 --env=KEY=VALUE)。
  • --command: 覆盖容器默认命令(需结合 -- 分隔符)。
  1. kubectl run debug-pod --image=busybox --command -- sh -c "sleep 3600"
复制代码

  • --rm: Pod 退出后自动删除(适合临时任务):
  1. kubectl run --rm -it temp-pod --image=busybox -- sh
复制代码

  • --dry-run=client: 生成模板但不实际创建:
  1. kubectl run nginx-pod --image=nginx --dry-run=client -o yaml > pod.yaml
复制代码
查看pod的信息
  1. # 列出当前命名空间的所有 Pod
  2. kubectl get pods
  3. # 列出所有命名空间的 Pod
  4. kubectl get pods -A
  5. # 显示 Pod 的详细信息(IP、节点、事件等)
  6. kubectl get pods -o wide
  7. # 以yaml格式显示pod的详细信息
  8. kubectl get pods -o yaml
  9. # 查看某个 Pod 的详细描述(状态、事件、容器配置)
  10. kubectl describe pod <pod-name>
复制代码
查看pod的日志
  1. # 查看 Pod 的主容器日志
  2. kubectl logs <pod-name>
  3. # 持续跟踪日志(类似 tail -f)
  4. kubectl logs -f <pod-name>
  5. # 查看 Pod 中指定容器的日志
  6. kubectl logs <pod-name> -c <container-name>
复制代码
进入pod调试
  1. # 进入 Pod 的容器执行命令(默认进入第一个容器)
  2. kubectl exec -it <pod-name> -- /bin/sh
  3. # 进入指定容器
  4. kubectl exec -it <pod-name> -c <container-name> -- /bin/bash
复制代码
删除pod
  1. # 删除指定 Pod
  2. kubectl delete pod <pod-name>
  3. # 强制立即删除(不等待优雅终止)
  4. kubectl delete pod <pod-name> --force --grace-period=0
复制代码
创建第一个pod

命令创建(生产环境不建议使用)
  1. # 创建pod
  2. [root@master01 ~]# kubectl run nginx-pod --image=nginx --port=80
  3. pod/nginx-pod created
  4. [root@master01 ~]# kubectl get pods
  5. NAME        READY   STATUS    RESTARTS   AGE
  6. nginx-pod   1/1     Running   0          9s
复制代码
通过yaml创建第一个pod(强烈建议使用!!!)

通过yaml创建pod,创建pod的yaml文件又叫资源清单(manifests),资源清单是用于描述定义K8S集群资源的配置文件。
下面是一个创建pod的资源清单文件示例:
  1. [root@master01 ~/pod]# cat pod-nginx.yaml
  2. apiVersion: v1
  3. # 资源类型,例如 Pod
  4. kind: Pod
  5. # 元数据
  6. metadata:
  7.   # Pod名称
  8.   name: nginx-pod
  9. # Pod中容器的详细定义
  10. spec:
  11. # Pod中容器列表
  12.   containers:
  13. # 容器名称
  14.   - name: nginx-container
  15.     # 容器的镜像
  16.     image: nginx:latest
  17.     # 指定容器的端口
  18.     ports:
  19.     # 容器端口命名
  20.     - name: http
  21.      # 容器内部监听的端口号
  22.       containerPort: 80
复制代码
创建pod
  1. [root@master01 ~/pod]# kubectl apply -f pod-nginx.yaml
  2. pod/nginx-pod created
复制代码
查看pod
  1. [root@master01 ~/pod]# kubectl get pod
  2. NAME        READY   STATUS    RESTARTS   AGE
  3. nginx-pod   1/1     Running   0          25s
复制代码
访问pod

创建的pod默认是无法被外部访问的,这个我们后面会讲
  1. # 查看pod的IP地址
  2. [root@master01 ~/pod]# kubectl get pod -o wide
  3. NAME        READY   STATUS    RESTARTS   AGE   IP               NODE     NOMINATED NODE   READINESS GATES
  4. nginx-pod   1/1     Running   0          10s   100.95.185.203   node02   <none>           <none>
  5. # 通过pod的IP进行访问
  6. [root@master01 ~/pod]# curl 100.95.185.203
  7. <!DOCTYPE html>
  8. <html>
  9. ##..省略万字内容
  10. </html>
复制代码
删除pod
  1. [root@master01 ~/pod]# kubectl delete -f pod-nginx.yaml
  2. pod "nginx-pod" deleted
  3. [root@master01 ~/pod]# kubectl get pod
  4. No resources found in default namespace.
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册