pod 是一组(一个或者多个)容器。

pod 不等于 Docker 容器,是类似共享名字空间和文件系统卷的一组 Docker 容器。

01 使用 Pod

两种方法:

  • 运行单个容器的 Pod
  • 运行多个协同工作的容器的 Pod,多个容器共享网络和存储。

    1. **使用场景**: 可能有一个容器,为共享卷中的文件提供 web 服务器支持,以及一个单独的 sidecar 容器负责从远端更新这些文件。

    部署 PHP 程序的场景,Pod 包含 PHP 容器以及更新 PHP 文件的容器?


02 Pod 与控制器

使用工作负载资源创建和管理多个 Pod,资源的控制器能够处理副本的管理和上线,并给 Pod 失效时提供自愈能力。

  1. apiVersion: batch/v1
  2. kind: Job
  3. metadata:
  4. name: hello
  5. spec:
  6. template:
  7. spec:
  8. containers:
  9. - name: hello
  10. image: busybox
  11. command: ['sh', '-c', 'echo "hello" && sleep 3600']
  12. restartPolicy: OnFailure

特别需要注意,使用 Pod 部署与使用工作负载资源部署的 Pod 名称不一样。

  1. root@i-jr5jk6dq:~# kubectl get pods -n default
  2. NAME READY STATUS RESTARTS AGE
  3. counter 1/1 Running 0 5h49m
  4. hello-8hpvn 1/1 Running 0 11m

03 Pod 模板

  1. apiVersion: batch/v1
  2. kind: Job
  3. metadata:
  4. name: hello
  5. spec:
  6. template:
  7. # pod 模板
  8. spec:
  9. containers:
  10. - name: hello
  11. image: busybox
  12. command: ['sh', '-c', 'echo "hello" && sleep 3600']
  13. restartPolicy: OnFailure
  14. # Pod 模板结束

04 Pod 网络

  • Pod 都有唯一的 IP 地址
  • Pod 中的每个容器共享网络名字空间,包括 IP 地址和端口
  • Pod 内的容器使用 localhost 通信
  • Pod 内的容器与外部 Pod 的资源通信,需要使用其他方式
  • Pod 内的容器所看到的系统主机名与为 Pod 配置的 name 属性值相同

05 容器的特权模式

https://kubernetes.io/zh/docs/concepts/workloads/pods/#privileged-mode-for-containers

  • 场景

06 静态 Pod

静态 Pod 直接有特点节点上的 kubelet 守护进程管理。

静态 Pod 的 spec 不能引用其他的 API 对象。

在 SuperEdge 中 littleAPIServer 可以以静态 Pod 部署。

07 容器探针

https://kubernetes.io/zh/docs/concepts/workloads/pods/#container-probes