k8s-learning-why we need pod

应用场景

应用从虚拟机迁移到容器中

为什么虚拟机中的应用不能无缝迁移到容器中

虚拟机中应用:一组进程,被管理在systemd或者supervisord中

容器的本质:一个容器一个进程

所以将运行在虚拟机中的应用无缝迁移到容器中,与容器的本质是相悖的。

容器无法像虚拟机那样,完全模拟本地物理机环境中的部署方式。

swarm 项目无法成长起来的原因:单容器的工作方式,难以描述真实世界里的复杂的应用架构。

Pod的本质:一种编排思想

扮演传统基础设施里“虚拟机”的角色;而容器则是这个虚拟机中的用户程序

虚拟机应用迁移到docker

方法:松耦合的容器编排技巧,超亲密关系容器的设计思想,

  1. 分析那些进程(组件)运行在这个虚拟机里
  2. 把虚机想象成为一个pod,把进程分别做成镜像
  3. 把有顺序关系的定义为 Init Container。

从传统应用架构,到微服务架构最自然的过渡方式。

Pod 实现原理

pod 是一组共享了某些资源的容器。如network,声明 volume

docker run -net--volumes-from 

Pod里的容器是拓扑关系

中间容器来解决容器启动顺序问题

  • 第一个:Infra容器  k8s.io/pause 100-200KB
  • 第二个:容器 A  Join Infra Network namespace
  • 第三个:容器 B  Join Infra Network namespace

共享volume

apiVersion: v1
kind: Pod
metadata:name: two-containers
spec:restartPolicy: Nevervolumes:- name: shared-datahostPath:path: /datacontainers:- name: nginx-containerimage: nginxvolumeMounts:- name: shared-datamountPath: /usr/share/nginx- name: debian-containerimage: debianvolumeMounts:- name: shared-datamountPath: /pod-datacommand: ["/bin/sh"]args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]

宿主机目录 /data 被同时绑定到上述两个容器中,

例子一:war包与web服务器

一个java Web 应用的WAR包,需要被放在Tomcat的webapps目录下运行起来

docker解决方式:

方法一:把war包直接放在Tomcat 镜像的webapps目录下,做成一个新的镜像运行起来。

              缺点:更新升级时,需要重新制作镜像

方法二:只发布一个tomcat 镜像,声明一个hostPath 的volume , 从而把宿主机上的WAR包挂载进Tomcat容器中巡行。

             缺点:每一个宿主机都要存储WAR包目录。或者独立维护一套分布式存储系统。

pod 解决方式:

sidecar  设计模式

作用:在一个pod 中启动一个辅助容器,完成一些独立于主进程之外的工作

如下面启动一个InitContainer 的方式优先运行一个WAR包容器,扮演一个sidecar的角色。

apiVersion: v1
kind: Pod
metadata:name: javaweb-2
spec:initContainers:- image: geektime/sample:v2name: warconmmand: ["cp", "/sample.war", "/app"]volumeMounts:- mountPath: /appname: app-volumecontainers:- image: geektime/tomcat:7.0name: tomcatcammand: ["sh", "-c", "/root/apache-tomcat-7.0.42-v2/bin/start.sh"]volumeMounts:- mountPath: /root/apache-*/webappsname: app-volumeports:- containerPort: 8080hostPort: 8001volumes:- name: app-volumeemptyDir: {}

例子二:容器的日志收集

在Pod里声明volume挂载到应用容器的/var/log目录。

在pod里运行一个sidecar容器,声明挂载同一个volume 到自己的/var/log目录上。 

特性:

  1. 容器A 容器B 可以使用 locahost 通信
  2. 一个pod只有一个IP地址,也就是这个pod的network namespace 对应的IP地址
  3. 网络资源都是一个pod一份(pod容器的进出流量通过infra容器完成)
  4. pod 的生命周期与infra一致,与 容器 A和B无关

  

例子:

思考题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/220786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

addslashes()函数

addslashes() 函数是 PHP 中用于在字符串中的特定字符前添加反斜杠 \ 的函数。它通常用于准备字符串,以防止其中的字符被误解为具有特殊含义的字符。这个函数的主要用途是在构建 SQL 查询语句或其他需要转义特殊字符的上下文中,以防范一些安全问题&#…

ubuntu20.04里面安装目标检测数据标注软件labelImg的详细过程

1.在github克隆仓库到本地 地址:https://github.com/Ruolingdeng/labelImg.git 或者百度网盘下载 链接:https://pan.baidu.com/s/1p-478j5WOTN0TKmv3qh-YQ?pwdl8bj 提取码:l8bj 2、进入到labelimg的文件夹,安装pyqt相关依赖包 …

好的CRM系统是什么样的?有没有推荐的CRM?

企业如果引入一套优秀的CRM系统,能极大地提升企业的效率,调动人员积极性。同时,带有自动化功能的CRM系统能帮助企业省去日常经营中琐碎无意义的活动,让企业员工把更多时间集中到业务开发上来,实现经济效益的提升。那么…

下一站 GenAI @你!站稳扶好,“码”上发车

点击下方链接,精彩抢先看https://dev.amazoncloud.cn/column/article/657a74432b6d177219412733?trkcndc-detail 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最…

飞天使-linux操作的一些技巧与知识点4-ansible常用的技巧,配置等

文章目录 ansible配置文件的优先级尝试开始进行操作ansible常用模块ansible 的playbook示例安装phpplaybook中变量的引用 ansible yum install -y ansible 测试是否可用 ansible localhost -m ping /etc/ansible/ansible.cfg :主配置文件,配置 ansible…

解决固定资产盘点问题,易点易动来帮忙!

固定资产盘点是企业管理中不可或缺的环节,然而,很多企业在固定资产盘点方面面临一系列问题: 盘点过程繁琐:传统的手动盘点方式需要耗费大量人力和时间,容易出现疏漏和错误,效率低下; 数据记录不…

物联网有哪些关键技术?

物联网有哪些关键技术? 物联网正在以前所未有的速度改变我们的生活和工作方式。作为一个庞大的网络,物联网连接了各种设备,使其能够相互通信和交互,进而实现智能化的目标。然而,要实现物联网的发展和应用,关键技术的支…

随记-nginx docker + SSL 配置 - 配置等资源挂宿主机

随记-Nginx docker SSL 配置 - 配置等资源挂宿主机等 笔者动手配置,随手写的笔者,保证可操作 话说现在padmon是不是已经有代替docker的趋势了,谁能告诉我一把? 配置前准备 # 拉取nginx镜像 docker pull nginx #启动(暂时) doc…

Docker技术基础梳理 - Docker网络管理

为什么需要容器的网络管理? 容器的网络默认与宿主机、与其他容器相互隔离,且容器中可以运行一些网络应用,比如nginx、web应用、数据库等,如果需要让外部也可以访问这些容器中运行的网络应用,那么就需要配置网络来实现…

深度学习代码片段收集

print(number of model params, sum(p.numel() for p in model.parameters() if p.requires_grad))sum(p.numel() for p in model.parameters() if p.requires_grad )可以用来计算参与训练的参数量 model.parameters() 返回模型中所有参数的迭代器。 if p.requires_grad: 这部…

【ITK库学习】使用itk库进行图像滤波ImageFilter:二阶微分

目录 1、itkRecursiveGaussianImageFliter 递归高斯滤波器2、itkLapacianRecursiveGaussianImageFiter 拉普拉斯高斯滤波器 1、itkRecursiveGaussianImageFliter 递归高斯滤波器 该类用于计算具有高斯核近似值的 IIR 卷积的基类。 该类是递归滤波器的基类,它与高斯…

Netty详细文档

Netty教程 文章目录 Netty教程 Netty简介Netty 的介绍Netty 的应用场景互联网行业游戏行业大数据领域其它开源项目使用到 Netty Netty 的学习资料参考 Java BIO编程I/O 模型BIO、NIO、AIO 使用场景分析Java BIO 基本介绍Java BIO 工作机制Java BIO 应用实例问题分析 Java NIO编…

不得不知的Aspera替代方案,让文件传输变得更轻松

aspera作为一款高效的文件传输工具,可以让用户在网络状况不佳时仍然能够进行快速的大文件传输。然而,由于aspera的高昂价格和复杂的部署难度,很多用户开始寻找aspera替代方案来解决文件传输问题。 1、CFT CFT是一款由BMC Software公司开发的…

中国法拍房数量统计预测模型_2023年法拍房数量竟是。。

法拍房主要平台 法拍房主要平台有3家,分别是阿里、京东和北交互联平台。目前官方认定纳入网络司法拍卖的平台共有7家,其中阿里资产司法拍卖平台的挂拍量最大。 阿里法拍房数据显示2017年,全国法拍房9000套;2018年,法…

mybatis与oracle数据库jdbcType类型对应关系

之前都是百度上搜的,各种对应的都有,总觉得有问题,最后直接通过跑代码查看了一下对应关系,我用的oracle是19c。 常见的对应关系如下 oracle类型jdbcTypeVARCHAR2JdbcType.VARCHARNVARCHARJdbcType.NVARCHARCHARJdbcType.CHARCLOB…

机器学习中的混沌工程:拥抱不可预测性以增强系统鲁棒性埃

一、介绍 在动态发展的技术世界中,机器学习 (ML) 已成为一股革命力量,推动各个领域的创新。然而,随着机器学习系统的复杂性不断增加,确保其可靠性和鲁棒性已成为首要问题。这就是混沌工程发挥作用的地方,混沌工程是一门…

Android Compose Transition 动画

Transition 是一种动画效果,用于在组件的状态之间进行平滑的过渡。它可以帮助我们在状态变化时,以一种流畅的方式更新 UI。通过使用 Compose 的 Transition API,您可以在应用中创建各种各样的动画效果,从而增强用户体验并提高应用…

Axure元件库使用与ProcessOn流程图

Axure元件库 自定义Axure元件库: 打开Axure RP软件,并点击菜单栏中的“元件库”选项,选择“新建元件库”。 在弹出的对话框中,选择一个文件夹来保存您的自定义元件库,并给它一个名称。 在Axure RP的主界面上&#x…

四、Java流程控制

第一章 流程控制语句 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。 1.1 流程控制语句分类 ​ 顺序结构 …

低频量化日报

低频量化日报&#xff08;2023-12-13&#xff09; 明日涨停预测指数分位值指数风险溢价比ETF抄底指标<2小规模配债<5亿可转债策略 双低策略四因子策略网格策略最后 写在前面&#xff0c; 由于git服务器的缘故&#xff0c;原来自动写文章的图片全部不能用了&#xff0c; 我…