kubernete中的原子调度单位:pod

简介: kubernete中的原子调度单位:pod

在前面的文章中,我们介绍了容器技术,他的本质是操作系统上的一个进程,那么打包的容器镜像其实就是一个安装包,类似于windows操作系统中的exe文件,那容器所在的kubernete集群其实就是一个操作系统。

       容器和操作系统中进程一样,并不是独立的运行,而是和其他容器之间有着关联的关系。假如我们有3个进程,因为相互之间的关系需要部署在同一台宿主机上,这3个进程每个需要分配1G内存,但是有2个宿主机,A机器有3G内存,B机器有2.5G内存,如果不能统一调度,其中2个进程调度到B机器后,因为内存不足,第3个进程启动失败。而如果我们使用kubernete中的pod,pod会对3个容器统一管理和调度,这样就会直接选择A宿主机。

      调度在一个pod的中的容器,一般具有某些关联关系,比如共享Linux namespace,共享volume,通过localhost进行通信。像Tomcat和它所依赖的war包,就是这样的一个例子。在pod的,实现这个功能,依靠的是一个infra容器,这个容器使用的镜像是k8s.gcr.io/pause,只有不到200k,它的状态永远是pause,作用是启动后控制namespace,pod中的其他容器启动后就可以加入当前这个namespace中,这样pod中的容器共享一份namespace,就可以通过localhost进行通信了。如下图所示:

微信图片_20221212101758.png

因此,infra容器是一个基础容器,它控制着namespace和整个pod的生命周期。

下面我们看一个yaml文件,Tomcat和war在同一个pod的不同容器中

apiVersion: v1
kind: Pod
metadata:
  name: javaweb-2
spec:
  initContainers:
  - image: zjj2006forever/spingboot-rabbitmq
    name: war
    command: ["cp", "/spingboot-rabbitmq.war", "/app"]
    volumeMounts:
    - mountPath: /app
      name: app-volume
  containers:
  - image: tomcat:jdk8-openjdk-slim
    name: tomcat
    command: ["sh","-c","/root/apache-tomcat-8.5.54-v2/bin/start.sh"]
    volumeMounts:
    - mountPath: /root/apache-tomcat-8.5.54-v2/webapps
      name: app-volume
    ports:
    - containerPort: 8080
      hostPort: 8001 
  volumes:
  - name: app-volume
    emptyDir: {}

上面的yaml文件中,定义了一个pod,这个pod中有2个容器,其中一个是运行标准Tomcat8镜像,一个是存放Tomcat下的war包,这儿使用的是我之前做的一个springboot-rabbitmq的镜像。同时我们也看到war包所在的容器类型是initContainer,这个镜像的特点是会比spec.containers中的容器先启动。而且,这2个容器都挂载了一个叫app-volume的volume,这个volume的路径是/app,war包容器启动时会把war包copy到/app目录下,这样Tomcat容器的/root/apache-tomcat-8.5.54-v2/webapps下就可以看到这个war包了。这就是kubernete容器编排的高明之处。

       如果没有pod,那就是两种处理方式,要不就是在Tomcat容器下启动一个war包容器,这种方式不方便升级war包;要不就是把war包放在宿主机上,挂载在容器中,但这种情况不适合分布式场景。

      上面这个配置所使用的设计模式,叫做sidecar,也就是在pod中启动一个辅助容器来配合主容器进程的工作,上面的war容器就是一个sidecar。sidecar有很多场景可以应用,比如pod中可以启动一个sidecar来收集日志。


相关文章
快递鸟/菜鸟电子面单接口的申请方法
电子面单是一种通过热敏纸打印输出纸质物流面单的物流服务。通过热感应显示文字,打印速度比传统针式打印速度提升4~6倍。电子面单以接口形式嵌入到自己的系统、网站上,可以在自己的平台操作打印电子面单。 一.电子面单接口类型及定义 快递电子面单接口:快递公司自己开发的电子面单服务, 商家使用必须快递公司上门做系统对接,使用一家快递则需要对接一次,比较麻烦,而且后期对接成本也较高。
|
11月前
|
存储 JSON 安全
如何使用 JSON Web Tokens 进行身份验证?
总的来说,JWT 是一种强大而灵活的身份验证方式,通过正确使用和管理,可以为应用提供可靠的身份验证机制,同时提高系统的可扩展性和安全性。在实际应用中,需要根据具体的需求和场景,合理设计和实施 JWT 身份验证方案。
342 63
|
SQL 存储 数据处理
实时计算 Flink版产品使用合集之idea本地调试,在哪里查看执行结果
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
9月前
|
SQL 弹性计算 运维
云卓越架构:稳定性支柱整体解决方案综述
阿里云卓越架构聚焦于五大支柱,其中稳定性是关键。常见的云上稳定性风险包括架构单点、容灾设计不足和容量规划不合理等。为提升稳定性,需从架构设计时考虑容灾与容错、实施变更时遵循“三板斧”原则(灰度发布、可观测性和可回滚性),并确保快速响应和恢复能力。此外,通过客观度量、主观评估和巡检等方式识别风险,并进行专项治理。识货APP作为成功案例,通过优化容器化改造、统一发布体系、告警系统和扩缩容机制,实现了99.8%的高可用率,大幅提升了业务稳定性。
|
10月前
|
数据可视化 数据挖掘
OKR工作法能带来什么样的变化?如何根据OKR设定具体的工作目标?
本文深入探讨了OKR(Objectives and Key Results)目标管理框架的起源、定义、实施步骤及其优势,特别介绍了“板栗看板”在OKR管理模式中的应用,展示了如何通过现代化工具提升OKR的实施效果,助力企业明确方向、提高透明度、增强团队协作,最终实现战略目标。
OKR工作法能带来什么样的变化?如何根据OKR设定具体的工作目标?
|
10月前
|
人工智能 搜索推荐 数据挖掘
如何让产品在Go-to-Market战略中脱颖而出?
本文深入探讨了Go-to-Market战略中产品运营的关键作用,涵盖市场需求洞察、产品规划、生命周期管理、上线推广及用户反馈处理等环节,强调通过精准运营策略助力产品成功推向市场,实现商业价值。
|
API 数据安全/隐私保护 开发者
商品详情 API 接口的调用次数是否有限制?
商品详情API接口调用次数受限,旨在保障系统稳定性和防止恶意攻击。平台依据账户类型设定不同限制:普通开发者账户调用次数较少,而企业级账户享有更高限额但需申请并可能收费。此外,平台还设置了短期和长期调用频率限制,以避免高并发请求导致服务器过载。
391 2
|
机器学习/深度学习 自然语言处理 语音技术
FunAudioLLM与其他语音模型多维度对比简析
FunAudioLLM与其他语音模型多维度对比简析
418 13
|
机器学习/深度学习 人工智能 自然语言处理
【人工智能】学习人工智能需要学习哪些课程,从入门到进阶到高级课程区分
基于人工智能的多学科特性和其广泛的应用领域,学习这一技术涉及从基础理论到实践应用的各个层面。入门阶段应重点掌握数学基础、编程语言学习以及数据结构和算法等。进阶阶段需要深入机器学习、深度学习以及自然语言处理等专题。高级课程则包括专业核心课程、认知心理学与神经科学基础以及计算机图形学等课程
792 1
|
移动开发 IDE Android开发
安卓与iOS开发环境的深度剖析
本文将深入探讨安卓(Android)和iOS两大主流移动操作系统的开发环境,从技术架构、开发语言、工具链、生态系统等多个维度进行对比分析。我们将揭示两者在应用开发过程中的异同点,为开发者提供选择平台时的技术参考,同时展望移动开发领域的未来趋势。通过综合比较,本文旨在呈现一个全面、立体的开发环境画像,助力开发者更好地理解并适应不断变化的移动技术生态。
247 0