三、k8s pod详解

发布于:2025-02-13 ⋅ 阅读:(17) ⋅ 点赞:(0)

pod详解的相关的基础知识和初始化容器,以及私有化的镜像仓库*。

pod进阶:pod的状态,pod的探针

pod的详解:

pod是k8s集群管理的最小单位,最小的资源组件,也是最小化运行容器的资源对象。

容器运行在pod里面,一个pod里面可以有多个容器。

一个pod代表的是在k8s集群中运行的进程,k8s的大多数组件都是围绕pod来进行支撑和运行。扩展pod的可能。

控制器就是用来管理pod,绝大多的pod都是基于控制器创建的。

每个pod都有一个独立的ip地址,创建pod的时候由cni网络插件从网段中指定一个ip地址分配给pod。

pod中的多个容器也是共享这一个ip地址。

一般情况下,一个pod里面只允许一个容器。

多个容器的情况下,一个pod的容器都在一个节点上。

pause容器:可以使pod内容器共享两种资源。网络和存储

每创建一个pod都会一个pod容器

网络:pod内的所有容器共享网络空间,包括ip和端口。

pod内的容器可以直接使用localhost互相通信。

存储:pod的生命周期是有限的,容器也会随着pod的销毁而销毁,也会因为pod的重启而重启

定义pod的时候,可以创建多个数据卷和宿主机挂载,pod内的所有容器共享数据卷。

pause容器又被称为初始化容器

初始化容器:

init容器,必须在应用容器启动之前完成,必须是成功,不能失败。

特点:

1、当定义了初始化容器之后,必须是允许到成功完成为止。

2、如果在pod运行过程中,init容器失败了,k8s会一直重启这个pod,知道init容器成功为止(pod重启策略是never就不会重启)

init容器的作用:

init容器必须要先成功运行,所以和应用容器之间是有分离的。

所以在业务容器运行之前,可以为应用容器安装一些需要的工具,代码,环境等等。

3、初始化容器运行完毕之后,就结束了,后面都是和业务容器进行交互。

4、pod内每个容器的名称不能重复

5、重启pod,相当于初始化容器也会重启,也必须成功,才会进入业务容器。

用来给业务容器传参数,初始化不是必须的,根据情况来进行调整。

镜像的拉取策略:

k8s中如何拉取镜像:

pod的核心就是容器,容器必须要有镜像,k8s在拉取镜像的时候可以由用户来定拉取镜像的方式

1、Always每次创建pod都会重新拉取一次镜像(保证镜像永远是最新的)

2、Nerver pod不会主动从网络拉取镜像,只从本地拉取。

3、IfNotPresent:默认模式,只有本地没有镜像时,才会去仓库中重新拉取

拉取策略

创建本地镜像仓库

创建一个登录凭证的清单:

直接把加密信息保存到集群中,无需在输入密码

base64 -w 0:

pod的状态说明:

1、pending,所有创建的资源对象都可能pending,pending属于已经提交给了apiserver,并且保存在了etcd当中。

但是因为种种原因,资源对象无法被创建。

1)、资源不足,节点上的磁盘,内存,cpu不足,无法创建资源对象。

2)、端口被占用,尤其是在pod当中使用hostPort,直接使用了宿主机的端口。

3)、网络原因,cni插件故障,flannel或者calico网络pod有问题,无法分配ip地址给pod。

4)、无节点可以部署资源对象,集群当中没有满足部署条件的节点,节点上有污点,设置了指定部署的条件。

以上的情况,只要满足了条件,pending会自动解除。

2、ContainerCreateing,pod正在拉取镜像,镜像拉取失败,或者超时,会出现

3、imagePullBackoff,镜像拉取失败,超时,镜像名称配置错误,和仓库的密钥配置错误。

4、CrashLoopBackOff:pod内的容器已经启动了,但是以异常状态退出了,就要查看一下pod的日志。也可能是部署的时候节点资源有,但是pod内的容器运行之后,资源不足,也会导致容器异常退出。

5、complete:容器已经运行完毕,以正常状态退出,返回码是0

容器没有可持久化运行的命令,启动之后就会立刻退出。或者是用户使用了command和args,把容器的输出命令覆盖了。

6、error:pod在启动过程中发生错误,自定义执行的命令报错,挂载点不存在,configmap配置和secret,以及pv等不存在。

pod的权限不足,容器无法使用集群资源。

7、Terminating状态,表示资源对象正在被删除和回收资源的过程。

删除pod时i,会进入这个状态,有一个资源回收的过程。

特殊情况下,需要使用立刻删除,正常情况下不需要使用。

8、initialized:pod中的所有容器已经初始化完毕

9、ready 正常状态,表示pod已经部署完毕,可以使用

1/1:表示的业务容器的数量,初始化容器不再这个范围,所有的容器都是ready之后,才可以使用。

pod状态一览:
CrashLoopBackOff:    容器退出,kubelet正在将它重启
InvalidImageName:    无法解析镜像名称
ImageInspectError:   无法校验镜像
ErrImageNeverPull:   策略禁止拉取镜像
ImagePullBackOff:    正在重试拉取
RegistryUnavailable: 连接不到镜像中心
ErrImagePull:        通用的拉取镜像出错
CreateContainerConfigError: 不能创建kubelet使用的容器配置
CreateContainerError: 创建容器失败
m.internalLifecycle.PreStartContainer 执行hook报错
RunContainerError:   启动容器失败
PostStartHookError:   执行hook报错
ContainersNotInitialized: 容器没有初始化完毕
ContainersNotReady:   容器没有准备完毕
ContainerCreating:    容器创建中
PodInitializing:pod   初始化中
DockerDaemonNotReady:  docker还没有完全启动
NetworkPluginNotReady: 网络插件还没有完全启动
Evicte:     pod被驱赶

pod的资源限制:

pod只能使用节点资源的配额:

cpu:

数字表达:1   2    0.5

1个cpu,2个cpu,0.5半个cpu,最小0.1个cpu。

单位表达:millicores为单位

m:1000m    2000m   500m    100m

内存:ki  Mi   Gi   Ti

在工作中,只需要limits字段,可以不写requests。


网站公告

今日签到

点亮在社区的每一天
去签到