详解kubernetes pod的编排和生命周期
k8s master基本架构
k8s的集群运行依赖master节点和node节点的通信,为了更好的理解第4部分的pod生命周期,我们这里先给出k8s master的简单架构图,后续的文章中,我们会分析master、node和pod之间的关系。
master的架构图:
其中:
api server提供了http rest接口,它是k8s中的所有资源增删改查的唯一入口,也是集群控制的入口;
scheduler是负责资源调度的进程;
controller manager是所有资源对象的自动化控制中心;
etcd提供资源对象的数据保存服务
其中每个组件都有很多知识点,这里我们只要有个宏观的印象就可以了,后续的文章中,我们会逐一分析。
pod的编排思想
,我们提到了应用程序往k8s搬迁过程中的注意事项。这里重申一下,当我们想要把虚拟机上的应用程序搬迁到k8s中时,我们需要用pod来构建我们应用程序模块。这个时候,比较重要的一点是划分我们应用程序模块,因为容器和虚拟机的设计模式不同,但是为了更好的理解和对比这二者的关系,我们可以设想下面的对应关系:
k8s-----操作系统
pod----虚拟机
容器----进程
1、k8s相当于物理机的操作系统,k8s管理pod相当于物理机的操作系统管理虚拟机
2、pod相当于虚拟机,pod里面可能包含多个容器,对应于虚拟机中的很多进程
3、容器相当于进程,容器的本质,其实就是一个进程。
有了这样的概念,去理解pod可能会更加形象。再说回我们的应用程序迁移,假设我们的应用程序存在:
web服务、日志分析、mysql数据库
三个关键的模块,其中:
web服务和日志分析存在"超亲密关系",因为日志分析模块要消费web服务模块产生的日志,所以他们必须部署在同一个服务器上。反之、web服务和mysql数据库之间完全可以通过tcp-ip的方式来访问,就没有必要部署在同一台机器上。如果我们用容器运行这个应用,那么web服务需要和日志分析模块打包在同一个pod中,而mysql数据库服务单独部署在一个pod中即可,我们的应用程序迁移到k8s中,可能就是下面的结构:
将不同的进程或者任务,编排在同一个pod中,这本质上,就是pod的一种编排思想
pod对象的属性和容器的属性?
从上面的分析中不难看出,容器是隶属于pod中的一个元素,从yaml文件上看,容器就是pod的整个yaml文件中的一个字段。现在我们看看pod和容器有哪些重要属性。
先看pod的属性:
1、凡是调度、网络、存储、安全相关的属性,基本都是pod相关的。
调度,自然不用说,pod是k8s的最小调度单元;网络,同一个pod中的容器共享pod的网络;存储,可以通过pod挂载卷的方式让不同的容器共享pod的存储;安全,也是以pod为维度来控制的。
2、凡是跟容器的linux namespace相关的属性,也是pod级别的。
pod的设计初衷,就是要容器之间共享namespace。
3、凡是pod中的容器要共享宿主机的namespace,也一定是pod级别的。
这个更加容易理解,因为pod要共享主机的namespace,那么pod中的容器必然是要共享相同的namespace,所以这个设置一定是pod级别的。
再看container的2个重要属性:
1、imagepullpolicy:这个属性定义了镜像拉取的策略,它的默认值是always,也就是每次创建pod都拉取一次镜像,它还有2个其他的取值,分别是never和ifnotpresent,这两个比较容易理解,一种是从来不拉取镜像,一种是只有在不存在镜像的时候才拉取镜像。这里需要注意一点,如果我们的版本号配置的是latest这种的,那么imagepullpolicy会被默认值always。
2、lifecycle:顾名思义,它是在容器的生命周期中执行某些动作,它有两个常见的参数,分别是poststart和prestop,就是在容器开始后或者容器结束前执行的一个特定操作。
pod的生命周期
pod的生命周期,主要体现在pod的api的status部分,pod的生命周期从开始到结束包含下面的几个过程:
1、pending,表示pod的yaml文件已经交给k8s,并且保存在etcd(etcd是k8s中的元信息库)中了。但是它由于调度不成功等原因没有被创建。
2、running,这个词语具有迷惑性,它表示pod已经调度成功,跟一台具体的节点服务器绑定,pod中的容器不一定全部都正常运行了,但是至少有一个在运行。
3、succeeded,这个状态意味着所有的容器都启动完毕,并且已经退出。
4、failed,这个很好理解,就是pod中的容器至少有一个以非0状态退出,也就是异常退出了。
5、unknow。这是一个异常状态,表示当前pod的状态不能正常的汇报给kube-apiserver了,这可能是主从节点之间的通信有问题。
如下所示为一个状态为running的pod
以上就是详解kubernetes pod的编排和生命周期的详细内容,更多关于kubernetes pod的编排和生命周期的资料请关注其它相关文章!
上一篇: 诺基亚N1平板电脑做工如何?诺基亚N1拆机图解评测
下一篇: 快速解决硬盘检测无法通过的方法
推荐阅读
-
详解kubernetes pod的编排和生命周期
-
云原生技术kubernetes调度单位pod的使用详解
-
Vue实例中生命周期created和mounted的区别详解
-
Android Activity生命周期和堆栈管理的详解
-
Vue生命周期和钩子函数的详解与经典面试题
-
过滤器的工作原理和生命周期详解
-
React componentWillMount、componentDidMount、componentWillUpdate和componentDidUpdate生命周期函数的详解
-
详解SpringIOC容器中bean的作用范围和生命周期
-
C语言:变量的作用域和生命周期详解
-
Docker 容器生命周期 架构 以及和VM之间的差异详解