Pod基本概念与Pod应用生命周期

艺帆风顺 发布于 2025-04-02 16 次阅读


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

查看日志:

kubectl logs [-c CONTAINER]
kubectl logs [-c CONTAINER] -f

进入容器终端:

kubectl exec -it [-c CONTAINER] -- bash

删除Pod:

kubectl delete 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自动创建