摘要
本文内容转自网络,个人学习记录使用,请勿传播
基本概念
Pod是Kubernets创建和管理的最小单元,一个Pod由一个容器或者多个容器组成,这些容器共享存储、网络资源
Pod的特点
- 一个Pod是一个应用的最小实例,并对外提供服务
- 一个Pod中可以有一个容器或者多个容器
- 一个Pod中的容器始终部署在同一个Node上
- Pod中的所有容器共享网络和存储资源
- Kubernets直接管理Pod,而不是容器
Pod存在的意义
Pod主要用法
- 一个Pod运行一个容器:最常见的用法,这种情况下可以将Pod看成单个容器的抽象封装
- 一个Pod运行多个容器:封装多个有高度耦合的容器在同一个Pod中,共享Pod资源
- 如前后端分离服务的前端服务和后端服务
- 多个容器间有文件交互
- 多个容器间需要通过localhost或socket进行通信
- 多个容器的应用需要发生频繁调用
实现资源共享的机制
网络共享
同一个Pod中的多个容器共享网络
1 | apiVersion: v1 |
共享存储
1 | apiVersion: v1 |
测试
1 | # 通过资源清单创建Pod |
Pod管理命令
1 | # 创建Pod: |
Pod设计思路
健康检查和重启策略
重启策略(restartPolicy)
- Always:当容器终止退出后,总是重启容器,默认策略。
- OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
- Never:当容器终止退出,从不重启容器。
健康检查类型
- livenessProbe(存活检查):如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
- readinessProbe(就绪检查):如果检查失败,Kubernetes会把Pod从service endpoints中剔除。
健康检查的三种方式
- httpGet:发送HTTP请求,返回200-400范围状态码为成功。
- exec:执行Shell命令返回状态码是0为成功。
- tcpSocket:发起TCP Socket建立成功。
HTTP请求
1 | apiVersion: apps/v1 |
验证
1 | $ kubectl get pod |
执行shell命令
1 | apiVersion: apps/v1 |
环境变量
创建 Pod 时,可以为其下的容器设置环境变量。
1 | apiVersion: apps/v1 |
1 | $ kubectl exec -it nginx-env-fd5d86b54-8gp82 sh |
应用场景
- 容器内应用程序获取Pod信息
- 容器内应用程序通过用户定义的变量改变默认行为
变量值定义的几种方式
自定义变量值
变量值从Pod属性获取
- 变量值从Secret、ConfigMap获取
Init Container
用于初始化工作的Pod,执行完一次性任务就会结束。
- 支持大部分应用容器的配置,但是不支持健康检查
- 优先于应用容器运行
应用场景
- 环境检查:可以在应用容器运行前检查依赖环境
- 初始化配置:可以给应用容器准备配置文件,拉取依赖
使用方式
1 | apiVersion: apps/v1 |
Pod中几种容器类型
Infrastructure Container
:基础容器- 维护整个Pod的网络空间
InitContainers
:初始化容器- 先于应用容器运行
Containers
:业务容器- 多个容器并行启动
静态Pod
1 | apiVersion: v1 |
1 | $ cp static-nginx.yaml /etc/kubernetes/manifests/ |
静态Pod特点
- Pod由特定节点上的kubelet管理
- 不能使用控制器
- Pod名称标识当前节点名称
- kubeadm方式部署的集群可以通过move集群组件yaml文件的方式对组件进行重启
静态pod位置配置参数
1 | # 在kubelet配置文件启用静态Pod的参数: |
将部署的pod yaml放到该目录会由kubelet自动创建。