K8s新手系列之初识pod

Pod的基本概念

  • Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。

  • Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器,这些容器共享网络和存储命名空间。

  • Pod 的设计是 非持久化 的,可能因节点故障、调度策略或更新操作而被销毁重建。

  • 当Pod中有多个容器时,容器之间的通信是通过pause容器来实现的。
    image

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.
posted @ 2025-04-26 20:37  huangSir-devops  阅读(250)  评论(0)    收藏  举报
作者:你的名字
出处:你的博客链接
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。