pod 是一组(一个或者多个)容器。
pod 不等于 Docker 容器,是类似共享名字空间和文件系统卷的一组 Docker 容器。
01 使用 Pod
两种方法:
- 运行单个容器的 Pod
运行多个协同工作的容器的 Pod,多个容器共享网络和存储。
**使用场景**: 可能有一个容器,为共享卷中的文件提供 web 服务器支持,以及一个单独的 sidecar 容器负责从远端更新这些文件。
部署 PHP 程序的场景,Pod 包含 PHP 容器以及更新 PHP 文件的容器?
02 Pod 与控制器
使用工作负载资源创建和管理多个 Pod,资源的控制器能够处理副本的管理和上线,并给 Pod 失效时提供自愈能力。
apiVersion: batch/v1kind: Jobmetadata:name: hellospec:template:spec:containers:- name: helloimage: busyboxcommand: ['sh', '-c', 'echo "hello" && sleep 3600']restartPolicy: OnFailure
特别需要注意,使用 Pod 部署与使用工作负载资源部署的 Pod 名称不一样。
root@i-jr5jk6dq:~# kubectl get pods -n defaultNAME READY STATUS RESTARTS AGEcounter 1/1 Running 0 5h49mhello-8hpvn 1/1 Running 0 11m
03 Pod 模板
apiVersion: batch/v1kind: Jobmetadata:name: hellospec:template:# pod 模板spec:containers:- name: helloimage: busyboxcommand: ['sh', '-c', 'echo "hello" && sleep 3600']restartPolicy: OnFailure# 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
