8.4.1 Pod

笔者在前面介绍说,容器本质是个资源隔离的特殊进程,而对于 Pod ,则可以理解是资源隔离一组特殊进程。Kubernetes 创新地将多个容器组合到一起,产生一个新的也是 Kubernetes 最基本的管理资源单位 Pod。

每个 Pod 由一组容器构建,Kubernetes 通过 Pod 的设计方式将一组紧密相关的进程共享网络、存储等资源,通过对 Pod 生命周期的管理,从而完成这一组容器的生命周期管理。

创建一个 Pod

apiVersion: v1                      # Kubernetes的API Version
kind: Pod                           # Kubernetes的资源类型
metadata:
  name: nginx                       # Pod的名称
spec:                               # Pod的具体规格(specification)
  containers:
  - image: nginx:alpine             # 使用的镜像为 nginx:alpine
    name: container-0               # 容器的名称
    resources:                      # 申请容器所需的资源
      limits:
        cpu: 100m
        memory: 200Mi
      requests:
        cpu: 100m
        memory: 200Mi
  imagePullSecrets:                 # 拉取镜像使用的证书,在CCE上必须为default-secret
  - name: default-secret

Pod 创建完成后,可以使用 kubectl get pods 命令查询 Pod 的状态,如下所示。

$ kubectl get pods

NAME           READY   STATUS    RESTARTS   AGE
nginx          1/1     Running   0          40s

Pod 生命周期

阶段说明
PendingPod 已经被 Kubernetes 接受(存在 etcd 中),等待 scheduler 调度 或者 调度成功拉取镜像
RunningPod 中所有的容器都已创建,并且至少有一个容器正在运行
SucceededPod 中所有的容器都被成功终止,并且不会重启,这个主要是执行 job 任务
FailedPod 中所有的容器都已经终止,并且至少有一个容器是非正常终止
Unknown无法获取 pod 状态,通常是由于 Pod 节点通信出错,或者 kubelet 宕机所致

Pod 的网络

以 Calico 为例,Kubernetes 会默认为每个 pod 分配一个 IP 地址,所有的 Pod IP 地址在同一个网段, kubeadm 在初始化时指定网段参数

kubeadm init --pod-network-cidr=192.168.2.0/24

Pod 中所有的容器会共享该 Pod 的 IP 地址,因此 Pod 内容器间通信,直接用 locahost+port 即可。

Last Updated:
Contributors: isno