Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。
Pod 是一组(一个或多个) 容器; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。 Pod 所建模的是特定于应用的 “逻辑主机”,其中包含一个或多个应用容器, 这些容器相对紧密地耦合在一起。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于在同一逻辑主机上运行的云应用。
除了应用容器,Pod 还可以包含在 Pod 启动期间运行的 Init 容器。 你也可以在集群中支持临时性容器 的情况下,为调试的目的注入临时性容器。
2.1 什么是 Pod?
Pod 的共享上下文包括一组 Linux 名字空间和可能一些其他的隔离方面, 即用来隔离 Docker 容器的技术。 在 Pod 的上下文中,每个独立的应用可能会进一步实施隔离。
就 Docker 概念的术语而言,Pod 类似于共享名字空间和文件系统卷的一组 Docker 容器。
2.2 使用 Pod
2.2.1 一个实例熟悉Pod
下面是一个 Pod 示例,它由一个运行镜像 nginx:1.14.2 的容器组成。
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
要创建上面显示的 Pod,请运行以下命令:
kubectl apply -f simple-pod.yaml
上一节我们是用命令创建一个pod,通常K8S更提倡用yaml编写各种资源的构建。Pod 通常不是直接创建的,而是使用工作负载资源(控制器)创建的。 一个pod有2种,一种是静态pod,一种是工作负载资源创建的pod。
2.2.2 Pod 怎样管理多个容器
Pod 被设计成支持形成内聚服务单元的多个协作过程(形式为容器)。 Pod 中的容器被自动安排到集群中的同一物理机或虚拟机上,并可以一起进行调度。 容器之间可以共享资源和依赖、彼此通信、协调何时以及何种方式终止自身。
例如,你可能有一个容器,为共享卷中的文件提供 Web 服务器支持,以及一个单独的 “边车 (sidercar)” 容器负责从远端更新这些文件,如下图所示:
有些 Pod 具有 Init 容器和 应用容器。 Init 容器会在启动应用容器之前运行并完成。
Pod 天生地为其成员容器提供了两种共享资源:网络和存储。
一个pod示例,配置多容器,验证网络及存储共享:
kind: Pod
apiVersion: v1
metadata:
name: kubcc5
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- mountPath: /home
name: kubcc5file
- name: redis
image: redis
volumeMounts:
- mountPath: /home
name: kubcc5file
volumes:
- hostPath:
path: /home/kubcc5
name: kubcc5file
共享/home/kubcc5内容,共享生成的Pod的IP地址。
相关视频: https://www.ixigua.com/7139089112140775949?logTag=37e3cb390f782a41f68d
https://www.ixigua.com/7139089450013098504?logTag=afeddc5818e7a0fd55ba
2.3. CKA题目分析
2.3.1 多容器Pod
pod可以拥有一个以上的容器,下面是一个Pod运行多个容器的例子,也是CKA考试的题目之一。
题目内容:创建一个名为kucc4 的pod, 在pod里面分别为以下每个images单独运行一个app container (可能会有1-4个images) : nginx + redis + memcached
kind: Pod
apiVersion: v1
metadata:
name: kubcc4
spec:
containers:
- name: nginx
image: nginx
- name: redis
image: redis
- name: memcached
image: memcached