最新要闻
- 泰坦号事故后:加拿大将展开事故调查
- 车主自曝差点被闷死在特斯拉Model X里 车门锁死 原因揭晓
- 蔡徐坤巡演新加坡站开票 《Hug me(remix版)》同日上线
- 每日简讯:4亿票房端午黑马:《消失的她》官宣海外定档
- 冲入球场拥抱梅西小伙获释后道歉:我真不是没素质的人
- 世界观天下!新会绿美生态园票价(新会绿美生态园票价多少钱)
- 腾讯两大国民APP账号又打通了?QQ悄然支持微信登陆 环球精选
- 环球快报:调查称安卓更易上手:iPhone用户遇到问题概率高出58%
- 环球热资讯!Zen3清库存?突然冒出个很特别的锐龙5 5700
- 虚幻5打造!腾讯动漫《斗罗大陆2》今日两集首播 霍雨浩初入星斗大森林|每日观察
- “空中出租车”亮相巴黎航展:可降落空间直径仅需15米-环球速递
- 古力娜扎曾遭换脸视频威胁勒索:不给钱就毁了你!
- 男生单曲循环《好运来》查出593分大哭:比平时多出50分 超常发挥
- 全球钻石价格较峰值暴跌18%:人造钻石市场规模不断扩大_全球视点
- 环球最新:甲亢遇到异食癖:法国男子一顿吃15人份 急了还吃石头木塞
- 全球热点评!公鸡突然从背后“偷袭”萌娃 飞起两脚踹倒在地 第二天端午节就被炖了
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
k8s 深入篇———— k8s 的pod[五]-全球播资讯
前言
简单整理一下pod的相关知识。
(资料图)
正文
为什么我们需要pod。
前面我们知道了k8s一个最重要的作用是解决容器的编排功能,那么为什么有一个pod的东西。
这就是实际中遇到的问题。
那就是容器和容器之间,那就是如何表达容器和容器之间的关系。
就是有些场景下,容器与容器之间是存在关系的。
如果把k8s 比作操作系统,容器比作进程,那么进程组就是pod。
之所以有这个pod,就是因为一些容器他们之间需要在公共的namespace、cgroup 下面运行。
也可以理解他们原本就应该在一台虚拟机下面执行。
像这样容器间的紧密协作,我们可以称为“超亲密关系”。
这些具有“超亲密关系”容器的典型特征包括但不限于:互相之间会发生直接的文件交换、使用 localhost 或者 Socket 文件进行本地通信、
会发生非常频繁的远程调用、需要共享某些 Linux Namespace(比如,一个容器要加入另一个容器的 Network Namespace)等等。
不过,Pod 在 Kubernetes 项目里还有更重要的意义,那就是:容器设计模式。
首先,关于 Pod 最重要的一个事实是:它只是一个逻辑概念。
也就是说,Kubernetes 真正处理的,还是宿主机操作系统上 Linux 容器的 Namespace和 Cgroups,而并不存在一个所谓的 Pod 的边界或者隔离环境。那么,Pod 又是怎么被“创建”出来的呢?答案是:Pod,其实是一组共享了某些资源的容器。
具体的说:Pod 里的所有容器,共享的是同一个 Network Namespace,并且可以声明共享同一个 Volume。
所以,在 Kubernetes 项目里,Pod 的实现需要使用一个中间容器,这个容器叫作 Infra 容器。
在这个 Pod 中,Infra 容器永远都是第一个被创建的容器,而其他用户定义的容器,则通过 Join Network Namespace 的方式,与 Infra 容器关联在一起。
这样的组织关系,可以用下面这样一个示意图来表达:
这个 Pod 里有两个用户容器 A 和 B,还有一个 Infra 容器。很容易理解,在Kubernetes 项目里,Infra 容器一定要占用极少的资源,所以它使用的是一个非常特殊的镜像,叫作:k8s.gcr.io/pause。
这个镜像是一个用汇编语言编写的、永远处于“暂停”状态的容器,解压后的大小也只有 100~200 KB 左右。
而在 Infra 容器“Hold 住”Network Namespace 后,用户容器就可以加入到 Infra 容器的 Network Namespace 当中了。
所以,如果你查看这些容器在宿主机上的 Namespace文件(这个 Namespace 文件的路径,我已经在前面的内容中介绍过),它们指向的值一定是完全一样的。
当然,其他的所有网络资源,都是一个 Pod 一份,并且被该 Pod 中的所有容器共享;Pod 的生命周期只跟 Infra 容器一致,而与容器 A 和 B 无关。
比如:
apiVersion: "v1"kind: "Pod"metadata: name: two-contrains namespace: name01spec: restartPolicy: "Always" volumes: - name: shared-data hostPath: path: /data containers: - name: nginx-controller image: nginx volumeMounts: - name: shared-data mountPath: /usr/share/nginx/html - name: debian-container image: debian volumeMounts: - name: shared-data mountPath: /pod-data command: ["/bin/sh"] args: ["-c","echo Hello from the debian container ! > /pod-data/index.html"]
pod 声明了一个volume,然后容器nginx-controller、debian-container 使用。
来看下怎么实现的。
来看下docker 现象。
对于volumeMounts 而言,其实就是绑定/pod-data 到 /data 中。
对于网络而言:
其实就是pod 内的几个容器共享网络。
对上面而言用的是infra的网络。
再举一个例子, 介绍一个initContainers:
k8s中的initContainers和Containers都是用于定义Pod中容器的部分,但是它们的主要区别在于:
生命周期不同:initContainers是在Pod中所有容器之前启动的,并且只有在initContainers完成后才会启动其他容器。而Containers则是同时启动的。
用途不同:initContainers主要用于在启动Pod之前完成一些初始化操作,例如配置环境变量、检查依赖等。而Containers则是用于运行应用程序或服务。
状态不同:initContainers完成后会退出,而Containers会继续运行。
总之,initContainers主要用于在Pod启动时完成一些初始化工作,而Containers则是用于运行应用程序或服务。
是的,initContainers是按照它们在Pod中的顺序依次运行的,每个initContainer必须在前一个initContainer完成后才能开始运行。只有所有的initContainers都成功完成后,Pod中的其他容器才会启动。
在定义initContainers时,可以使用spec.initContainers
字段来指定它们的顺序。例如,下面的示例定义了两个initContainers,分别用于执行初始化操作:
spec: initContainers: - name: init-container-1 image: busybox command: ["sh", "-c", "echo "init container 1""] - name: init-container-2 image: busybox command: ["sh", "-c", "echo "init container 2""] containers: - name: my-app image: my-image command: ["sh", "-c", "echo "my app""]
在这个示例中,init-container-1将在init-container-2之前执行。当Pod启动时,先运行init-container-1,然后等待它完成后再运行init-container-2,最后才启动my-app容器。
那么举一个实际中用到的例子,现在这个例子没什么用了,因为现在java 打包就集成了tomcat,而不是在外面包裹一层:
apiVersion: v1kind: Podmetadata: name: javaweb-2spec: initContainers: - image: geektime/sample:v2 name: war command: ["cp", "/sample.war", "/app"] volumeMounts: - mountPath: /app name: app-volume containers: - image: geektime/tomcat:7.0 name: tomcat command: ["sh","-c","/root/apache-tomcat-7.0.42-v2/bin/start.sh"] volumeMounts: - mountPath: /root/apache-tomcat-7.0.42-v2/webapps name: app-volume ports: - containerPort: 8080 hostPort: 8001 volumes: - name: app-volume emptyDir: {}
上面大体意思是将sample.war拷贝到app下面,然后将挂载出来,然后geektime/tomcat:7.0 就可以使用这个war 包了。
实际上,这个所谓的“组合”操作,正是容器设计模式里最常用的一种模式,它的名字叫:sidecar
顾名思义,sidecar 指的就是我们可以在一个 Pod 中,启动一个辅助容器,来完成一些独立于主进程(主容器)之外的工作。
比如,在我们的这个应用 Pod 中,Tomcat 容器是我们要使用的主容器,而 WAR 包容器的存在,只是为了给它提供一个 WAR 包而已。
所以,我们用 Init Container 的方式优先运行 WAR 包容器,扮演了一个 sidecar 的角色。
这样做就有用给好处,就是每次都更新的是war包,而不需要关注tomcat运行环境,减少包的大小。
比如,我现在有一个应用,需要不断地把日志文件输出到容器的 /var/log 目录中。
这时,我就可以把一个 Pod 里的 Volume 挂载到应用容器的 /var/log 目录上。
然后,我在这个 Pod 里同时运行一个 sidecar 容器,它也声明挂载同一个 Volume 到自己的 /var/log 目录上。
这样,接下来 sidecar 容器就只需要做一件事儿,那就是不断地从自己的 /var/log 目录里读取日志文件,转发到 MongoDB 或者 Elasticsearch 中存储起来。这样,一个最基本的日志收集工作就完成了。
跟第一个例子一样,这个例子中的 sidecar 的主要工作也是使用共享的 Volume 来完成对文件的操作。
但不要忘记,Pod 的另一个重要特性是,它的所有容器都共享同一个 NetworkNamespace。
这就使得很多与 Pod 网络相关的配置和管理,也都可以交给 sidecar 完成,而完全无须干涉用户容器。
这里最典型的例子莫过于 Istio 这个微服务治理项目了。
Istio 项目使用 sidecar 容器完成微服务治理的原理,我在后面很快会讲解到。
结
下面一点需要区分:
在 Kubernetes 中,Infra Container 和 Init Container 都是容器,但它们有不同的用途和生命周期。Infra Container 是一个在 Pod 中运行的辅助容器,用于提供一些共享资源或服务,例如网络命名空间、存储卷、日志收集、监控等。Infra Container 在 Pod 启动后一直运行直到 Pod 终止。Init Container 是一种特殊类型的容器,它是在 Pod 中其他容器启动之前运行的,用于初始化或准备一些资源。例如,可以使用 Init Container 下载应用程序代码、初始化数据库、生成配置文件等。Init Container 在它的工作完成后立即退出,然后 Pod 中的其他容器才开始启动。因此,Infra Container 和 Init Container 的主要区别在于它们的用途和生命周期。Infra Container 是一个持久的辅助容器,为 Pod 提供一些共享资源或服务;而 Init Container 是一个短暂的容器,用于在其他容器启动之前初始化或准备一些资源。
然后:
如果在 Kubernetes 中未定义 Infra Container,则 Kubernetes 会自动添加一个名为 `pause` 的 Infra Container。这是一个非常轻量级的容器,它的作用是为 Pod 中的其他容器创建 Linux 命名空间和网络 namespace,并为网络 namespace 分配 IP 地址。在 Pod 中自动添加的 `pause` 容器是一个 Infra Container,它会在其他容器之前启动,并在其他容器退出之后保持运行状态。因此,即使在 Pod 定义文件中未定义 Infra Container,Kubernetes 仍然会确保 Infra Container 在 Pod 启动时运行。需要注意的是,如果在 Pod 定义文件中显式定义 Infra Container,则 Kubernetes 不会自动添加 `pause` 容器。在这种情况下,Infra Container 的定义顺序决定了它的启动顺序。
一般情况下,我们是不填这个Infra Container。
关键词:
k8s 深入篇———— k8s 的pod[五]-全球播资讯
8. Java-AOP 面向切面编程
文心一言 VS 讯飞星火 VS chatgpt (46)-- 算法导论6.1 4题|全球热点评
泰坦号事故后:加拿大将展开事故调查
车主自曝差点被闷死在特斯拉Model X里 车门锁死 原因揭晓
蔡徐坤巡演新加坡站开票 《Hug me(remix版)》同日上线
来一打自建IP Proxy玩玩之Majora
kafka学习之五_多个磁盘的性能验证 世界快看点
Go——常用函数
每日速递:卷福的十年同学会
每日简讯:4亿票房端午黑马:《消失的她》官宣海外定档
冲入球场拥抱梅西小伙获释后道歉:我真不是没素质的人
世界观天下!新会绿美生态园票价(新会绿美生态园票价多少钱)
腾讯两大国民APP账号又打通了?QQ悄然支持微信登陆 环球精选
环球快报:调查称安卓更易上手:iPhone用户遇到问题概率高出58%
java 异常处理,事务管理,事务共用,事务传递 天天微头条
Go-闭包和defer|最新资讯
环球热资讯!Zen3清库存?突然冒出个很特别的锐龙5 5700
虚幻5打造!腾讯动漫《斗罗大陆2》今日两集首播 霍雨浩初入星斗大森林|每日观察
“空中出租车”亮相巴黎航展:可降落空间直径仅需15米-环球速递
古力娜扎曾遭换脸视频威胁勒索:不给钱就毁了你!
男生单曲循环《好运来》查出593分大哭:比平时多出50分 超常发挥
全球钻石价格较峰值暴跌18%:人造钻石市场规模不断扩大_全球视点
环球最新:甲亢遇到异食癖:法国男子一顿吃15人份 急了还吃石头木塞
全球热点评!公鸡突然从背后“偷袭”萌娃 飞起两脚踹倒在地 第二天端午节就被炖了
泰国和美国两地大量鱼类死亡 或与海洋升温有关 快看点
【技术积累】C语言中的指针【一】_世界百事通
Go-自定义数据类型(函数类型)详解
行业风险管理需求强烈
焦点信息:AMD RX 7800被逼急了!硬塞进去个“大胖子”
世界视点!一考生查分 全家一起喊出“666”:打算冲击复旦、交大
Kafka学习之四_Grafana监控相关的学习
一天吃透MySQL面试八股文 环球微速讯
什么是大模型? 每日热讯
内马尔在足球界的地位_内马尔的盘带水平在足球史上处于什么地位 全球要闻
【环球财经】伦敦金属交易所基本金属23日多数下跌_全球信息
白玉兰奖完整名单出炉 年初大热电视剧《狂飙》挂零陪跑-天天实时
中国高空开伞试验运载器发射连续成功:木星、天王星我们来了! 今日热讯
男子微信回了个“OK”表情 结果竟成被告!一点都不冤 速读
环球报道:尼康Z8新故障导致无法锁定镜头:官方承诺免费维修
【天天新要闻】读发布!设计与部署稳定的分布式系统(第2版)笔记10_自动化和缓慢的响应
无线路由器怎么连接电视(无线路由器怎么连接)
【环球新要闻】要考北大!汶川“敬礼娃娃”郎铮高考637分:15年前被埋20小时
关注:OPPO突然放弃自研芯片 真是因为没钱了?3000哲库人不信
看热讯:四川学霸女生高考712分查完分就睡觉、汶川“敬礼娃娃”郎铮637分
微软承认输掉“主机战争”:Xbox难以与竞争对手抗衡 每日头条
环球微动态丨特斯拉AI账号悄然上线:Dojo超级计算机下月开始生产
pro e
无牌产品硬刚国际大牌 就因为带货主播们买地建厂?
复兴号开进青藏铁路 提速至160公里/时 全程不到6小时
微软终于认怂!重新恢复Win11文件管理器经典功能
《人世间》赢麻!成最佳中国电视剧 雷佳音吴越分获白玉兰最佳男女主角_当前热门
“泰坦”号悲剧隐患早已埋下
2023年 年轻人被迫流行功能机了?-每日快看
全球快资讯丨【技术积累】Git中的基础知识【一】
世界信息:登录验证,JWT,过滤器,拦截器使用总结 2023
全球资讯:索尼时隔10年公布全新PS掌机Q!价格够低
焦点资讯:女孩没考好 和妈妈吵架后竟被丢高速:网友观点出奇一致
“4S店之王”破产离场 斯巴鲁中国重大变更:开始独资|当前焦点
大超险些成为007 环球快资讯
南漳县属于哪个省市_南漳县属于哪个市|每日速讯
今日快看!电影相约2000年(相约2000年)
imessage怎么设置不要钱_imessage怎么设置
Springboot web 项目开发流程梳理总结|世界讯息
今日热门!模型剪枝:让深度学习模型更好地应对不同的任务和环境
WEB安全-渗透测试-waf绕过信息收集_世界快看点
【独家焦点】“超人”亨利卡维尔有望成为007新片邦德扮演者:试镜效果棒极了
长安欧尚Z6新能源半年降价3万多 车主集体投诉
天天讯息:ASP.NET Core MVC 从入门到精通之缓存
全球时讯:文心一言 VS 讯飞星火 VS chatgpt (45)-- 算法导论6.1 3题
当前头条:【后端面经-Spring】Spring 中 bean 的生命周期)
美国国债收益率持续下跌,10年期国债收益率下跌8.90个基点 世界资讯
世界通讯!GPS靠边!北斗全球卫星导航系统星座部署完成3年 正突破毫米级甚至更小精度
【忠阳车评】固态电池量产难在哪 世界微资讯
【天天报资讯】微软爆料索尼PS6主机:2028年推出
光刻机一哥荷兰ASML:建立全自主半导体产业链几乎不可能!|环球热讯
K8S安装记录
《暗黑破坏神4》野蛮人双晕结算流分享 野蛮人双晕结算流怎么玩?
高考查分场面代入感太强 男生601分激动得满屋蹦跳:高中三年考最好的一次
重庆两案例入选全国职业教育产教融合典型案例_观天下
5人全部遇难 泰坦号残骸距离泰坦尼克号500米 快看点
【世界快播报】轴距超过Model Y 3.5秒破百 即将上市的起亚EV6到底行不行?
一年4.3万人死于车祸!美国要求所有大货车大客车配备自动刹车系统_世界速递
dll格式用什么软件打开(如何打开dll格式文件) 全球热头条
环球快看点丨全国龙舟身价“天花板”?广东一条龙舟70个房东 身价20亿 这事是真的
今日视点:女子番茄吃多胃痛医生让喝可乐:照做两天后缓解!专业人士科普
泰坦号观光艇内爆5名乘员死亡 一款游戏销量暴涨 玩家:6美元体验惨案
每日看点!BLOG-3----22206117
环球热点评!留给“牛粉”的时间不多了!兰博基尼宣布:Urus将于五年内变为纯电车型
25万美元一趟值吗?致5死泰坦号潜艇内部曝光:没凳子只能盘腿坐 马桶是最佳座位
云南上线购车送油券活动:每车2500元 可在中石油、中石化消费
缅北电诈愈演愈烈,人口贩卖已成全球性危机 焦点快播
强化学习从基础到进阶-案例与实践[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战
ChatGPT和AI会重燃中国的虚拟宇宙吗?-世界聚焦
产业强市|安能智慧物流产业联盟暨苏皖区域总部即将落户句容 焦点快报
山东已出现43℃以上高温 多地异常高温到底是什么原因?专家揭秘
上海高考分数线公布 :本科405分 官方:不会对成绩进行排名
【全球新视野】配置你的 Linux 的 GRUB 启动背景
rust 集合、错误处理、泛型、Trait、生命周期、包 全球新动态
MosaicML 推出 30B 模型 — 挑战 LLaMA、Falcon 和 GPT-全球今日报