4.1 Pod对象:基本概念

Pod是Kubernetes创建和管理的最小单元,一个Pod由一个容器或多个容器组成,这些容器共享存储、网络。

Pod特点:

  • 一个Pod可以理解为是一个应用实例,提供服务
  • Pod中容器始终部署在一个Node上
  • Pod中容器共享网络、存储资源
  • Kubernetes直接管理Pod,而不是容器

4、管理应用程序生命周期-Pod - 图1

4.2 Pod对象:存在的意义

Pod主要用法:

  • 运行单个容器:最常见的用法,在这种情况下,可以将Pod看做是单个容器的抽象封装
  • 运行多个容器:封装多个紧密耦合且需要共享资源的应用程序

如果有这些需求,你可以运行多个容器:

  • 两个应用之间发生文件交互
  • 两个应用需要通过127.0.0.1或者socket通信
  • 两个应用需要发生频繁的调用

4.3 Pod对象:资源共享实现机制

4、管理应用程序生命周期-Pod - 图2

4.4 Pod对象:资源共享实现机制

4、管理应用程序生命周期-Pod - 图3

4.5 Pod对象:管理命令

  1. # 创建Pod:
  2. kubectl apply -f pod.yaml
  3. # 或者使用命令:kubectl run nginx --image=nginx
  4. # 查看Pod:
  5. kubectl get pods
  6. kubectl describe pod <Pod名称>
  7. # 查看日志:
  8. kubectl logs <Pod名称> [-c CONTAINER]
  9. kubectl logs <Pod名称> [-c CONTAINER] -f
  10. # 进入容器终端:
  11. kubectl exec <Pod名称> [-c CONTAINER] -- bash
  12. # 删除Pod:
  13. kubectl delete pod <Pod名称>

4、管理应用程序生命周期-Pod - 图4

4.6 Pod对象:重启策略+健康检查(应用自修复)

重启策略(restartPolicy)

  • Always:当容器终止退出后,总是重启容器,默认策略。
  • OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
  • Never:当容器终止退出,从不重启容器。

健康检查有以下两种类型

  • livenessProbe(存活检查):如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
  • readinessProbe(就绪检查):如果检查失败,Kubernetes会把Pod从service endpoints中剔除。

支持以下三种检查方法

  • httpGet:发送HTTP请求,返回200-400范围状态码为成功。
  • exec:执行Shell命令返回状态码是0为成功。
  • tcpSocket:发起TCP Socket建立成功。

4.7 Pod对象:重启策略+健康检查(应用自修复)

4、管理应用程序生命周期-Pod - 图5

4.8 环境变量

4、管理应用程序生命周期-Pod - 图6

4.9 Pod对象:Init Container

Init Container:顾名思义,用于初始化工作,执行完就结束,可以理解为一次性任务。

  • 支持大部分应用容器配置,但不支持健康检查
  • 优先应用容器执行

应用场景

  • 环境检查:例如确保应用容器依赖的服务启动后再启动应用容器
  • 初始化配置:例如给应用容器准备配置文件

实例:

4、管理应用程序生命周期-Pod - 图7

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: init-demo
  5. spec:
  6. initContainers:
  7. - name: download
  8. image: busybox
  9. command:
  10. - wget
  11. - "-O"
  12. - "/opt/index.html"
  13. - http://www.ctnrs.com
  14. volumeMounts:
  15. - name: wwwroot
  16. mountPath: "/opt"
  17. containers:
  18. - name: nginx
  19. image: nginx
  20. ports:
  21. - containerPort: 80
  22. volumeMounts:
  23. - name: wwwroot
  24. mountPath: /usr/share/nginx/html
  25. volumes:
  26. - name: wwwroot
  27. emptyDir: {}

因此,Pod中会有这几种类型的容器:

  • Infrastructure Container:基础容器
    • 维护整个Pod网络空间
  • InitContainers:初始化容器
    • 先于业务容器开始执行
  • Containers:业务容器
    • 并行启动

4.10 Pod对象:静态Pod

静态Pod特点:

  • Pod由特定节点上的kubelet管理
  • 不能使用控制器
  • Pod名称标识当前节点名称

在kubelet配置文件启用静态Pod的参数:

  1. vi /var/lib/kubelet/config.yaml
  2. ...
  3. staticPodPath: /etc/kubernetes/manifests
  4. ...
注:将部署的pod yaml放到该目录会由kubelet自动创建。