

k8s pod两问
source link: https://www.ishells.cn/archives/k8s-pod-questions
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

aliyun kubernetes观后记:
有了容器,为什么要用Pod呢?
在操作系统中,一个程序的运行实际上由多个线程组成,这多个线程共享进程的资源,相互协作,完成程序的工作,这也是操作系统中进程组的概念
。
在容器中,
PID = 1
的进程就是该应用本身,比如 main 进程。如果我们通过创建一个容器,在容器中启动 Helloworld 的4个进程这种方法来跑这个Helloworld程序。那么问题来了。
容器是“单进程模型”,这个单进程并不是指容器只能运行一个进程,而是说 容器 = 应用 = 进程,如果容器中有多个进程,只有一个可以作为该容器的 PID = 1 的进程。容器本身也只能管理 PId=1 的进程,其它启动的进程都是托管的状态。
容器本身不具有同时管理多个进程的能力。诸如,上述 Helloworld 程序其有4个进程,分别是
main、api、log、compute
,如果 PID = 1 的进程是main进程,那么谁来管理剩余的3个进程呢?而如果在程序运行过程中,PID = 1 的进程死掉了,HelloWorld 的剩余三个进程是不会被回收的,这是一个非常严重的问题.
那么上述的 HelloWorld程序应该如何以容器的形式跑起来呢?1、使应用程序本身具备“进程管理”的功能(这意味着该程序需要具备systemed的能力)。这就平白增添了开发者的负担
2、直接将容器 PID = 1 的进程改为systemed或者在容器中运行一个systemed来达到管理多进程的目的。这将会导致
管理容器 = 管理systemed != 管理应用本身
.这样做的问题是,如果容器中实际run的进程是systemed,那么再接下来的过程中,提供服务的应用是不是退出了,是不是出现异常失败了,都是无法直接感知的,因为实际上管理的是systemed
.这也就是为什么在容器中运行一个复杂容器困难程度很大的原因。简述第二点的问题就是,如果将容器 PID =1 的程序设置为systemed,那么管理容器就相当于管理systemed,那么这时候实际提供服务的应用的生命周期就不与容器的生命周期一致了。
在K8S中,Pod就相当于一个进程组,比如 具有四个进程的HelloWorld程序就会被定义为一个具有四个容器的Pod。也就是说职责不同、相互协作的进程需要放在容器内运行的这样的一个场景下,k8s并不会把它们塞到一个容器中,因为这会导致上述提到的两个问题
。k8s会把诸如 Helloworld 的 4个独立的进程 放到4个不同的容器中,然后把他们定义在一个Pod中。同时也就是说在Kubernetes中,Pod只是一个逻辑概念,真正在物理上存在的东西是真实运行的那几个容器。
Pod的一般创建过程是什么?
用户首先通过cli或ui的方式提交一个POD请求到kubernetes集群Master层面的API Server,然后API Server会将用户的这次Pod创建请求写入到Etcd数据库中,随后Scheduler调度器会通过Watch监听机制得到(有一个Pod需要被调度的)信息,Scheduler会根据Pod所请求的资源大小或相应要求(比如节点亲和性、Pod亲和性)完成一次调度决策,在完成此次调度决策之后,Scheduler会告知API Server该Pod会被调度到某一个节点上。而当API Server接收到调度信息之后,会将这次调度结果再次写入到Etcd中。这时候通过watch机制一直在监听API Server的该节点上的kubelet组件,会将API Server的这次创建Pod的请求所理解并转换为具体创建Pod的操作,也就是调用Container Runtime去完成Pod的创建。
Recommend
-
31
Pod详解 Pod介绍 Pod 是k8s的重要概念,要掌握 每个Pod都有一个特殊的被称为“根容器”的Pause容器 Pause容器对应的镜像属于k8s平台的一部分,除了Pause容器还包含一个或多个紧密相关的业务容器
-
53
在 Kubernetes 中,为了保证业务不中断或业务SLA不降级,需要将应用进行集群化部署。通过 PodDisruptionBudget 控制器可以设置应用POD集群处于运行状态最低个数,也可以设置应用POD集群处于运行状态的最低百...
-
12
目录: Pod的调度 Pod的扩容和缩容 Pod的滚动升级 一、Pod的调度 Pod只是容器的载体,通常需要通过RC、Deployment、DaemonSet、Job等对象来完成Pod的调度和自动控制功能。 1、R...
-
9
feininan3天前原文链接:https://www.cnblogs.com/chopper-poet/p/15328054.html...
-
6
nginx或者其它负载均衡软件都有一个能力,就是当客户请求一个网页时,第一次访问的是A服务器,第二次也就会让你访问A服务器,而在k8s里,也有这种机制和能力。 k8s的Session affinity Service同样也支持Session affinity(粘性会话)...
-
13
k8s入门之pod(四) pod是k8s项目中的最小编排单位,它是运行中的一组(一个或多个)容器,...
-
10
1. Pod调度 1.1. Deployment:自动调度 Deployment可以创建指定副本数量的Pod,用于无状态服务。运行时,Pod会被调度到不同Node上,并会自动维持副本数量。 同理还可以推广到StatefulSet等上面
-
10
0. Pod相关定义 Pod:[Pod Kubernetes](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/) Pod Template:[PodTemplate Kubernetes](https://kub...
-
5
K8s | Depolymnet、ReplicaSet、Pod之间的关系只有容器能保证自己始终是 Running 状态的前提下,ReplicaSet 调整 Pod 的个数才有意义也正是 Deployment 只允许容器的 restartPolicy=Always的原因deploy...
-
6
K8s | 深入理解Pod对象 | jiaccc13 为什么需要Pod?背景:容器的“单进程模型”容器没有管理多个进程的能力,因为容器里 PID=1 的进程就是应用本身,其他的进程都是这个 PID=1 进程的子进程,用户进程没有管理其他进程的能力
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK