Kubernetes是一个知名的分散式管理、编排Container工具,帮助你将不同的dockerized的APP部属在不同的环境中(e.g. 不同机器、不同云端)的container。由Google开源并由GO语言撰写。由於Kubernetes太长,很多人都称他为K8S(中间有8个字母)。Kubernetes本身是一个希腊文,意思是船舵或是飞行员的,icon设计为一个船舵,得到了Kubernetes就能在云端与Container化的暗潮中前行。
本文参考自:Kubernetes Crash Course for Absolute Beginners
Kubernetes解决了什麽? 现代化应用趋於MincroServices导致Container应用上升,过去常写script来管理,但是这实在是太复杂了。因此Kubernetes作为编排Container工具诞生了。Kubernetes有以下几个优点:
K8S可以区分成至少一个Master与许多Node(Worker)端。采Clustering架构,在Master中会有重要的4个执行部分:
Worker Node分成三个部分:
Virtual Network将Node之间、Master与Node之间串联起来,简单的来说,Virtual Machine将所有Clustering串联起来成为一台大机器。
Kubernetes的重要component:
Node
: Virtula or Physic MachinePod
: Pod为K8s的最小执行单位,运行再Node上。可以看成是执行的container再外包一层用来与K8s沟通,每个Pod执行1个App (Node.js、DB)。把每个Pod看成是一个独立的container,那彼此该怎麽沟通呢?整个K8S基於Virtual Machine来沟通,每一个Pod会得到他专属的虚拟IP,彼此利用这个IP来互相沟通。
当一个Pod消失後(Container crash之类的原因),重新建立新的Pod不会继承该IP(即使同样的container)而会给予新的IP,这对App来说是个麻烦。解法如下:
Service
: 将虚拟IP与Pod的生命周期切开,Service会保留虚拟IP给下一个继承该Service的PodIngress
: 一种内外桥接的Services,将外部网路转换为虚拟网路的开口。假如今天要让APP连接Server,我们会在程序内写上Server的URL、PORT,当这些改变,就得重新build一个新的Image并pull出新的Pod。这就很麻烦了。
configMap
: 帮助你在pod外部输入你的变数,并且可以在Pod运行中修改。我们只需要将程序内的变数改成configMap的参数即可。secrets
: 保存那些需要加密的变数,用法基本上同configMapvolumes
: 如Docker一样,当pod消失data消失。要持久化保存应将资料存在Volumes,可以将资料存在local或是远端其他K8s clustering中。将storge想成在clustering之外的插键,因为K8s并不管pod资料的保存。K8s采用clustering架构,为了能够避免使用者服务暂停,我们可以将POD分配到多个Node之中,而每一个POD由Service所连结,因此可以获得同样的虚拟IP。Service同样的可以用於load balance来动态调整Node之间的负担。当一个Node上的pod死掉时可以经由另一个Node的Pod接手避免使用者服务中断。
事实上,在开启clustering时你不会建立第二个Pod,而是会定义一个pods的blueprint,确立会需要多少个pod复制。我们把这个blueprint称作为Deployment。Deployment就是pod的blueprint,可以看成是pod的更上层封装(正如pod是container的封装来符合k8s的应用接口),Deployment让你能够更好的在分散式架构中扩展与删减pods。
Deployment
: pods的blueprint,解释如上。但是会发现如果我们要在资料库上多开几个Pod,他们就必须要share同一个data storage。多个database去存取一个data storage会发生data inconsistency的错误,也就是同一笔资料同时一个pod写一个pod读导致的错误。因此我们会在K8s建立Statefuleset来避免data inconsistency。
Statefulset
: 同Deployment来扩展与删减pod,但是多了同步的功能来避免错误。不过其实Statefulset一般来说很难部属,推荐将Database放在K8s clustering之外。
<<: Day16:今天来谈一下Microsoft Cloud App Security
前言 我们目前完成了两个工作表的制作,再来就是要学习如何让多个工作表可以一起互动,而仪表板的功能就是...
今天我们要让之前的程序能跟 Chat Bot 连动。 需要 Worker 吗? 直接从程序中 POS...
前言 我们是要处理快速易用的网页,所以在,API方面要做到可以尽量少存取资料库来得到最大化资源使用。...
回顾30天,也让我回忆了今年从金融业被抓去做开发工程师的日子。这30天中,讲述了Vue的基本介绍、性...
嗨大家!连假第一天过得如何?~ 今天想跟大家分享的主题是各种网页渲染模式,就是 SSG、SSR、CS...