范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Docker与k8s的恩怨情仇(五)Kubernetes的创新

  上节中我们提到了社区生态的发展使得Kubernetes得到了良性的发展和传播。比起相对封闭的Docker社区开放的CNCF社区获得了更大成功,但仅仅是社区的活力对比还不足以让Docker这么快地败下阵来,其根本原因是Kubernetes的对容器编排技术的理解比起Docker更胜一筹。这种优势几乎是压倒性的降维打击,Docker毫无还手之力。
  接下来便为大家介绍在这场容器大战之中,Kubernetes如何占据优势地位。容器编排
  所谓容器编排,其实就是处理容器和容器之间的关系,在一个分布式的大型系统里,不可能是以多个单一个体存在的,它们可能是一个与多个,一群与一群这样相互交织着。
  Docker的容器编排功能
  Docker构建的是以Docker容器为最核心的PaaS生态,包括以Docker Compose为主的简单容器关系编排,以及以Docker Swarm为主的线上运维平台。用户可以通过Docker Compose处理自己集群中容器之间的关系,并且通过Docker Swarm管理运维自己的集群,可以看到这一切其实就是当初Cloud Foundry的PaaS功能,所主打的就是和Docker容器的无缝集成。
  Docker Compose做到的是为多个有交互关系建立一种"连接",把它们全部编写在一个docker-compose.yaml文件中,然后统一发布(我后面说到的组里的ELK功能就是这样做的),这样做也有优点,就是对于简单的几个容器之间的交互来说非常便利。但是对于大型的集群来说却有些杯水车薪,并且这种每出现一种新需求就需要单独做一项新功能的开发模式,将使后期代码维护变得十分困难。
  Kubernetes如果要和Docker对抗,肯定不能仅仅只做Docker容器管理这种Docker本身就已经支持的功能了,这样的话别说分庭抗礼,可能连Docker的基本用户都吸引不到。因此在Kubernetes设计之初,就确定了不以Docker为核心依赖的设计理念。在Kubernetes中,Docker仅是容器运行时实现的一个可选项,用户可以依据自己的喜好任意调换自己需要的容器内容且Kubernetes为这些容器都提供了接口。此外,Kubernetes准确地抓住了Docker容器的一个致命性的弱点进行了自身创新。
  接下来就让我们一起来了解,这个给Docker造成降维打击的内容究竟是什么?Kubernetes的容器编排功能
  与Docker这种站在容器视角上只能处理容器之间的关系所不同,Kubernetes所做的是从软件工程的设计理念出发,将关系进行了不同类的划分,定义了紧密关系(Pod之间)和交互关系(Service之间)的概念,然后再对不同的关系进行特定的编排实现。
  乍一听你可能是一头雾水。这里举个不太实际但是一看就懂的例子:如果把容器之间的关系比作人之间的关系,Docker能处理的是仅仅是站在单一个体的角度上,处理人与人之间的人际关系;而Kubernetes确是上帝,站在上帝视角不仅能处理人与人之间的人际关系,还能处理狗与狗之间的狗际关系,最主要的是能处理人与狗之间的交往关系。
  而实现上述紧密关系的原理,就是Kubernetes创新的Pod。
  Pod是Kubernetes所创新的一个概念,其原型是Borg中的Alloc,是Kubernetes运行应用的最小执行单元,由一个或者多个紧密协作的容器组合而成,其出现的原因是针对容器的一个致命性弱点——单一进程这问题的扩展,让容器有了进程组的概念。通过第一节,我们知道了容器的本质是一个进程,其本身就是超级进程,其他进程都必须是它的子进程,因此在容器中,没有进程组的概念,而在日常的程序运行中,进程组是常常配合使用的。使用Pod处理紧密关系
  为了给大家介绍Pod处理紧密关系的原理,这里举一个进程组的例子:
  Linux中有一个负责操作系统日志处理的程序rsyslogd是由三个模块组成,分别是:imklog模块、muxsock模块以及rsyslogd自己的main函数主进程。这三个进程组一定要运行在同一台机器上,否则它们之间的基于Socket的通信和文件的交换都会出现问题。
  而上述的这个问题,如果出现在Docker中,就不得不使用三个不同的容器分别描述了,并且用户还得自己模拟处理它们三个之间的通信关系,这种复杂度可能比使用容器运维都高的多。并且对于这个问题的运维,Docker Swarm也有自己本身的问题。以上述的例子为基础,如果三个模块分别都需要1GB的内存运行,如果Docker Swarm运行的集群中有两个node,node-1剩余2.5GB,node-2剩余3GB。这种情况下分别使用docker run 模块运行上述三个容器,基于Swarm的affinity=main约束,他们三个都必须要调度到同一台机器上,但是Swarm却很有可能先分配两个去node-1,然后剩余的一个由于还剩0.5GB不满足调度而使这次调度失败。这种典型的成组调度(gang scheduling)没有被妥善处理的例子在Docker Swarm中经常存在。
  基于上述的需求,Kubernetes有了Pod这个概念来处理这种紧密关系。在一个Pod中的容器共享相同的Cgroups和Namespace,因此它们之间并不存在边界和隔离环境,它们可以共享同一个网络IP,使用相同的Volume处理数据等等。其中的原理就是在多个容器之间创建其共享资源的链接。但是为了解决到底是A共享B,还是B共享A,以及A和B谁先启动这种拓扑性的问题,一个Pod其实是由一个Infra容器联合AB两个容器共同组成的,其中Infra容器是第一个启动的:
  Infra容器是一个用汇编语言编写的、主进程是一个永远处于"暂停"状态的容器,其仅占用极少的资源,解压之后也仅有100KB左右。实例演示在Kubernetes中的Pod
  介绍了一通,接下来我们在实例中为大家演示Pod长什么样子。
  我们在任意一个装有Kubernetes的集群中通过以下的yaml文件和shell命令运行处一个Pod,这个YAML文件具体是什么意思暂时不用理会,之后我会对这个YAML做一说明,我们目前只需要明白:Kubernetes中的所有资源都可以通过以下这种YAML文件或者json文件描述的,现在我们只需要知道这是一个运行着busybox和nginx的Pod即可:
  创建这个hello-pod.yaml文件之后运行以下命令:
  通过上述命令,我们就成功创建了一个pod,我们可以从执行结果看到infra容器的主进程成为了此Pod的PID==1的超级进程,说明了Pod是组合而成的:
  至此,我们应该要理解Pod是Kubernetes的最小调度单位这个概念了,并且也应该把Pod作为一个整体而不是多个容器的集合来看待。
  我们再看看描述这个Pod的文件类型YAML。
  YAML的语法定义:
  YAML是一种专门编写配置文件的语言,其简洁且强大,在描述配置文件方面远胜于JSON,因此在很多新兴的项目比如Kubernetes和Docker Compose等都通过YAML来作为配置文件的描述语言。与HTML相同,YAML也是一个英文的缩写:YAML Ain"t Markup Language,聪明的同学已经看出来了,这是一个递归写法,突出了满满的程序员气息。其语法有如下特征:大小写敏感使用缩进表示层级关系,类似Python缩进不允许使用Tab,只允许使用空格缩进的空格数目不重要,只要相同层级的元素左侧对齐即可数组用短横线-表示NULL用波浪线~表示
  明确了以上概念,我们把YAML改写成一个JSON,看看这之间的区别:
  这两种写法在Kubernetes中是等效的,上述的JSON可以正常运行,但是Kubernetes还是更推荐使用YAML。从上面的对比中我们也能发现,在之前的使用中一直很好用的JSON现在也略显笨拙,需要些大量的字符串标志。
  看完语法,我们再来说说上述YAML中的各个节点在Kubernetes所表示的意思。Kubernetes中的有一种类似于Java语法万物皆对象的概念,所有内部的资源,包括服务器node、服务service以及运行组Pod在kubernetes中皆是以对象的形式存储的,其所有对象都由一下固定的部分组成:
  apiVersion:在官方文档中并没有给出相应的解释,但是从名字可以看出这是一个规定API版本的字段,但是此字段不能自定义,必须符合Kubernetes的官方约束,目前我们用到的基本都是v1稳定版kind:指明当前的配置是什么类型,比如Pod、Service、Ingress、Node等,注意这个首字母是大写的metadata:用于描述当前配置的meta信息,比如name,label等spec:指明当前配置的具体实现
  所有的Kubernetes对象基本都满足以上的格式,因此最开始Pod的YAML文件的意思是"使用v1稳定版本的API信息,类型是Pod,名称是hello-pod,具体实现是开启ProcessNamespace,有两个容器。
  知道了YAML的概念,让我们在回归主题。为了解决容器单一进程问题,只创建Pod的原因之一是Google通过Pod实现了自己的容器设计模式,而Google则为Kubernetes编写了最适合的容器设计模式。
  举个最常用的例子:
  Java项目并不能像.Net Core项目那样编译完成后直接自宿主运行,必须要把编译生成的war包拷贝到服务宿主程序比如Tomcat的运行目录下才可以正常使用。但是在实际情况中越大的公司分工越明确,很大概率负责Java项目开发和服务宿主程序开发的团队并不是同一团队。
  为了让上述情况中的两个团队可以各自独立开发并且还可以紧密合作,我们可以使用Pod解决这个问题。
  下面这个yaml文件就定义了一个满足上述需求的Pod:
  在这个yaml文件中,我们定义了一个java程序和tomcat程序的容器,并且对这两个容器之间的容器进行了一次挂载操作:将java程序的/app路径以及tomcat程序的/root/apache-tomcat/webapps同时挂载到了sample-volume这个挂载卷上,并且最后定了这个挂载卷就是一个内存数据卷。并且定义了java程序所在的容器是一个initContainer,说明此容器是在tomcat容器之前启动的,并且启动之后执行了一个cp的命令。
  在上述Pod描述了这样一个场景:程序运行开始运行时,Java容器启动,把自己的war包sample.war拷贝到了自己的/app目录下;之后tomcat容器启动,执行启动脚本,执行的war包从自己的/root/apache-tomcat/webapps路径下获得。
  可以看到通过上述的配置描述,我们既没有改动Java程序,也没有改动tomcat程序,却让它们完美地配合工作了,完成了解耦操作。这个例子就是容器设计模式中的Sidecar模式,还有很多设计模式,感兴趣的同学可以去进一步自行学习。总结
  以上介绍的就是Kubernetes为了解决紧密关系而抽象出来的概念Pod的基础内容了,需要注意的是,Pod提供的只是一种编排的思想,而不是具体的技术方案,在我们使用的Kubernetes框架中,Pod只不过是以Docker作为载体实现了而已,如果你使用的底层容器是虚拟机,比如virtlet,那这个Pod创建时就根本不需要Infra Container,因为虚拟机天生就支持多进程协同。
  在说完了Pod的基础的内容,在下一节中我们将会为大家介绍在接下来的容器编排战争之中,Kubernetes又是如何脱颖而出。
  请敬请期待下文哦~求关注,不迷路!

你有多久没换过手机了?今天看到一个年轻人为什么不愿意换手机的话题,深有感触。的确,我自己和身边的朋友换手机的频率没有以前那么高了。手机有点小毛病,也是能修则修,对手机产家可能会有一些要求,但是对是否是新2022年3月31日币圈大事件今日晚报历史准确率达82的加密货币社区预测4月底比特币的价格将超5万美元3月31日消息,CoinMarketCap加密货币社区认为,到4月31日,比特币将从目前的价格攀升超过8,交易价格为新能源车辆使用成本到底有多高,免费的永远是最贵的随着油价的上涨,新能源锂电车热度又被推上了一个新的高度。同期不谋而合的各大锂电池厂家也掀起涨价潮,同时带动的是电池车涨价风波此起彼伏不管是奥迪还是雅迪涨就完了。甚至连保险公司也跟随云南大力推进光伏发电发展未来3年新增新能源装机将达5000万千瓦昆明信息港讯记者王奕然3月30日,为进一步规范光伏资源开发管理,加快推进光伏发电项目建设接网和消纳,云南省人民政府印发了关于加快光伏发电发展的若干政策措施(以下简称措施),明确在未教你一键永久关闭手机系统更新,告别卡顿,让你的手机再多用两年相信大家在使用手机的时候,无论你使用的是安卓系统的手机,还是苹果iOS系统的手机,都经常会收到系统升级的提示,那很多朋友。可能都不了解这个系统升级到底对我们的手机是好还是不好!那如手机已成黄昏产业?四年换一次手机恐成常态年轻人多久换一次手机?这个答案的期限在不断延长。记得智能手机初问世的10年前后,年轻人每年都要换一次手机,卖肾也要换,慢慢地变成两年一换。近期行业报告显示,全球用户平均每31个月换士兰微2022年营收目标100亿左右主要增长点是IPM模块等产品士兰微2022年营收目标100亿左右主要增长点是IPM模块等产品财联社3月31日电,士兰微披露机构投资者调研活动公告,年报中提到的2022年营收目标100亿左右,主要增长点是IPM京东净亏损52亿,阿里巴巴下滑75,如今的电商到底发生了什么根据京东阿里巴巴的财务报告显示,京东在第四季度属于母公司净亏损达到52亿,去年同期盈利则是243亿。2021年去年净亏损是36亿。去年第三季度,阿里巴巴营收是2425亿,净利润是2重磅推荐github突破7。2kstarOpenIM消息推送api支持应用与IM融合OpenIM消息推送api打通了应用和IM系统之间的通知桥梁,让应用消息可以及时触达到目标用户。以办公场景为例,比如员工入职通知,放假通知等业务通知,由oa系统处理具体的业务逻辑,AI行为树的理解基于前面几次的面试,自己进行行了总结在问到我项目里的怪物AI逻辑的时候,我自己项目里用的是状态机制,算是行为树的一层,但是复杂的行为树有很多很多层,比较能完成的实习NPC或者怪物行免费又好用的社交软件,都在这了市面上的社交软件越来越多,到底什么社交软件才能称得上是真正的小众干净软件。在试用了大量社交软件之后,我发现了这三款真正好用的社交软件,一起来看看吧一夜逅从上线至今收获了无数用户的好
各品牌最值得买的手机全在这,这12款性能强劲,最低仅1799最近有朋友想换新机,自己心仪的品牌有很多,看来看去都挑花了眼,不知道到底选哪个品牌哪款手机了。不要紧,今天快哥整理了各大品牌最性价比的手机,一共12款来给大家做参考,建议保存收藏,同样是骁龙778G芯片,价格却相差1400元,这两款手机该怎么选?同处理器价格有较大差异很常见,比如今年要介绍的两款手机,分别是realmeQ3s和荣耀60,两款手机的起售价相差1400元,那么买贵的一定就是交智商税吗?我觉得并不是,因为现在手机1月份安卓手机好评榜魅族18排名第五回顾2021年的智能手机市场,很少给人留下深刻印象的机型,如果非要挑个机皇,Android阵营几乎没有能够独挑大梁的机型,一个现状是,目前手机行业竞争激烈,单个机型偏科严重。尽管去2022做自媒体用什么手机好?这12款最好的拍照手机,助你梦想成真进入2022年,自媒体事业方兴未艾。智能手机的兴起可以说对紧凑型相机市场的影响比其他任何产品都大,其原因很容易理解。随着手机制造商多年来改进和扩展手机中传感器的能力,将摄像头集成到合肥和郑州,如果让你选择一个城市居住,你会选择哪一个?选合肥。郑州虽老却没有底蕴,合肥虽新,却势头正盛。环境合肥也比郑州好很多,科技创新和人才也是未来的发展方向虽然没有去过郑州,感觉郑州应该杂乱,环境不会很好。合肥环境应该比郑州好些。现在用苹果xsmax的朋友感觉这手机怎么样?6月7号入手移动版iPhonexsmax64G版本,用了一个月,说一下自己的感受吧!优势续航升级到iOS12。4之后,我已经忘记充电宝长什么样了,也告别走哪都带着充电气的尴尬信号基一周趣评世界机器人大会闭幕手术机器人被纳入社保戏说一周趣事,秒知行业大势。大家好,欢迎来到本周的一周趣评。2021年9月13日9月17日,属于智能制造行业精彩一周即将过去,5G半导体自动驾驶等领域都展现出了哪些有趣动态和精彩故可帮助盲人避开障碍物的人工智能控制鞋奥地利公司TecInnovation最近推出了智能鞋,该鞋使用超声波传感器帮助视力障碍患者检测最远4米远的障碍物。这款智能鞋被称为InnoMake,旨在成为世界各地数百万人赖以安全阿里健康大药房五周年又有大动作入驻淘特开通24小时药师咨询本报讯为了更好地满足用户夜间用药需求,9月16日,阿里健康大药房对外宣布,将旗下药师服务正式升级为724小时执业药师咨询服务。超过2000名持有国家执业药师资格证书的药师,将在线为OPPOWatch2ECG版正式发布,健康管理从心出发9月16日,OPPOWatch2系列的新成员OPPOWatch2ECG版正式发布。OPPOWatch2ECG版继承了此系列首创的UDDE双擎混动技术,并进一步深耕运动健康领域。它支iPhone13系列今晚预售(附攻略),你需要为它准备这些高质量配件你们好,这里是Seek思科,为你寻找苹果最新资讯苹果隐藏技巧苹果良心APP以及苹果优质配件。如果你需要这些,不妨点个关注。iPhone13系列是真香还是假香的评价可能都有,但iPh