Pod是一个逻辑抽象概念,kubernetes创建和管理的最小单元,一个Pod由一个容器或多个容器组成。
特点:
一个Pod可以理解为是一个应用实例,提供服务Pod中容器始终部署在一个Node上Pod中容器共享网络、存储资源
Pod主要用法:
运行单个容器:最常见的用法,在这种情况下,可以将Pod看作是单个容器的抽象封装。运行多个容器:边车模式(Sidecar),通过在Pod中定义专门容器,来执行主业务容器需要的辅助工作,这样好处是将辅助功能同主业务容器解耦,实现独立发布和能力重用。
例如:
日志收集
应用监控
Pod对象:资源共享实现机制
Pod管理命令
创建Pod:
kubectl apply -f pod.yaml
或者使用命令: kubectl run nginx --image=nginx
查看Pod:
kubectl get pods
kubectl describe pod <Pod名称>
查看日志:
kubectl logs <Pod名称> [-c CONTAINER]
kubectl logs <Pod名称> [-c CONTAINER] -f
进入容器终端:
kubectl exec -it <Pod名称> [-c CONTAINER] -- bash
删除Pod:
kubectl delete pod <Pod名称>
Pod对象:资源共享实现机制
Pod对象:重启策略+健康检查(应用自修复)
重启策略(restartPolicy):
• Always:当容器终止退出后,总是重启容器,默认策略。• OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。• Never:当容器终止退出,从不重启容器。
健康检查有以下3种类型:
• livenessProbe(存活检查):如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。• readinessProbe(就绪检查):如果检查失败, Kubernetes会把Pod从service endpoints中剔除。• startupProbe(启动检查):检查成功才由存活检查接手, 用于保护
慢启动容器
支持以下三种检查方法:
• httpGet发送HTTP请求,返回200-400范围状态码为成功。• exec:执行Shell命令返回状态码是0为成功。• tcpSocket:发起TCP Socket建立成功。
rollout 查看历史版本
rs 可以看到历史版本号与rs对应关系,从rs可以再得知当前对应的镜像
# 获取发布版本与对应镜像
kubectl describe $(kubectl get rs -o name -n test |grep "web1-") -n test |grep -E "revision:|Image:"
# 回滚到上一个版本或者指定版本
kubectl rollout undo deployment web1 -n test
kubectl rollout undo deployment web1 --to-revision=1 -n test
常规健康检查方法:端口监听、运行进程、HTTP状态码、端口探测
环境变量
创建 Pod 时,可以为其下的容器设置环境变量。
应用场景:
容器内应用程序获取Pod信息容器内应用程序通过用户定义的变量改变默认行为
变量值几种定义方式:
• 自定义变量值• 变量值从Pod属性获取• 变量值从Secret、 ConfigMap获取
Pod对象:Init Container
Init Container:顾名思义,用于初始化工作,执行完就结束,可以理解为一次性任务。• 支持大部分应用容器配置,但不支持健康检查• 优先应用容器执行
应用场景:
• 环境检查:例如确保应用容器依赖的服务启动后再启动应用容器• 初始化配置:例如给应用容器准备配置文件
Pod中会有这几种类型的容器?
1、Infrastructure Container: 基础容器维护整个Pod网络空间2、 InitContainers: 初始化容器先于业务容器开始执行3、 Containers: 业务容器并行启动
Pod对象:静态Pod
静态Pod特点:
Pod由特定节点上的kubelet管理不能使用控制器Pod名称标识当前节点名称
在kubelet配置文件启用静态Pod的参数:
vi /var/lib/kubelet/config.yaml
...staticPodPath: /etc/kubernetes/manifests
注:将部署的pod yaml放到该目录会由kubelet自动创建