k8s中pod的状态管理

举报
Jet Ding 发表于 2020/09/29 11:36:48 2020/09/29
【摘要】 这篇文章来说一下k8s中pod的状态管理。 在k8s当中,一个pod是一个调度单元。一个pod可以包含一个或者多个容器。每个容器可以是一个网络服务器前端,后端或者整个包含前后端的服务。 接下来我们来看看一个pod的状态变化过程。 Pending当我们创建一个pod的时候,它的第1个状态是Pending。这个状态是说k8s的API已经接受了你的pod请求。但是还没有真正的发起调度。这个地方我们...

这篇文章来说一下k8spod的状态管理。 

k8s当中,一个pod是一个调度单元。一个pod可以包含一个或者多个容器。每个容器可以是一个网络服务器前端,后端或者整个包含前后端的服务。 

接下来我们来看看一个pod的状态变化过程。

 

Pending

当我们创建一个pod的时候,它的第1个状态是Pending。这个状态是说k8sAPI已经接受了你的pod请求。但是还没有真正的发起调度。

这个地方我们假设你有多台机器,也可能是多台虚拟机。调度器用来查找和申请不同的资源,比如说我们需要一个CPU加上2G的内存来使用一个pod

 

Creating

找到这些资源以后,调度器会在某台机子上,为pod的创建做准备。此时pod的状态就会进入到creating。在这个状态下第1件事要做的就是把容器的镜像下载下来。如果在当前机子上已经有了这个镜像的话,这个过程可以跳过。

 

Running

镜像准备好以后,接下来的一个状态就是running。在这个状态下就会启动容器也就是启动你的应用程序,比如后端服务,等等。

 

CrashLoopBackOff

如果在运行的过程中发生了故障导致你的容器崩溃。这个时候k8s会重启这个容器。如果经常崩溃,启动的次数过多的话。这个pod就会进入CrashLoopBackOff状态。进入这个状态以后,k8s不会立即再次启动容器,而是会等一段时间,比如说10秒钟以后再重启。如果继续重启失败的话,就会等20秒以后,以此类推。

这个时候你可能需要研究一下,到底发生了什么事情,继而修复你的程序。

导致这种现象可能的情况有很多,比如说数据库没有准备好,某个依赖服务没有启动起来等等。

 

如果资源非常紧张调度器无法申请到的时候,我们会看到pod处于Pending的状态。

解决这种问题的一般措施如下:

1. 被动的等待资源释放。

2. 主动的释放资源。

3. 增加资源。

 

如果无法获取到容器对应的镜像,也会使一个pod的状态处于Pending

 

检查pods状态的两个常用命令如下:

kubectl get pods

kubectl describe pods

 

HealthReady

每个pod对应一个IP地址和端口,你可以用healthready请求来检查它们是否运转正常。如果返回200类的状态码,说明一切正常,否则的话你可以手工重启或者修复问题。

其他需要关注的pod的状态:

post start

post start, 这是当你的容器启动以后要触发的状态。

pre stop

另一个状态是pre stop,描述的是在你的容器要终止之前要触发的状态。

容器初始化

pod中可以定义容器初始化过程。一般的情况用在某个容器需要做一些初始化的工作,然后才启动其他的容器。

这样的案例,比如说需要做数据库的迁移更新,文件的下载等等相对比较耗时而又必须的工作。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。