Docker和微服務
基于Docker技術(shù)惑朦,開發(fā)者可以自由的將應用程序和基礎(chǔ)鏡像打包起來兽泄,發(fā)布到任何運行流行Linux系統(tǒng)的機器上執(zhí)行,契合了容器“一次構(gòu)建漾月,到處運行”的核心理念病梢。
Docker的誕生,促進了微服務架構(gòu)的快速發(fā)展,但是基于Docker的微服務架構(gòu)仍然面臨如何實現(xiàn)Docker集群的系統(tǒng)管理蜓陌、容器的自動部署觅彰、編排、維護和擴展等問題钮热。針對此填抬,目前Docker官方提供的Swarm、Apache提供的Mesos隧期、Google提供的Kubernetes都可以解決上述的問題飒责,而生產(chǎn)級別的容器集群平臺使用較多的仍是Kubernetes。
Kubernetes 簡介
Kubernetes是Google 2014年推出的開源容器集群管理系統(tǒng)仆潮,基于Docker構(gòu)建一個容器調(diào)度服務宏蛉,為容器化的應用提供資源調(diào)度、部署運行性置、均衡容災拾并、服務注冊、擴容縮容等功能蚌讼,本質(zhì)上可看作是基于容器技術(shù)的mini-PaaS平臺辟灰,提取了PaaS中的業(yè)務編排和管理模塊而形成的。
Kubernetes自開源以來篡石,受到了眾多公司和容器愛好者的關(guān)注芥喇,是目前最優(yōu)秀的容器集群管理的開源醒目之一。已有Microsoft凰萨、IBM 继控、Mesosphere 、RedHat胖眷、Docker武通、CoreOS等公司加入到Kubernetes社區(qū)。
Kubernetes前身是在Google內(nèi)部已經(jīng)應用了十幾年的Borg系統(tǒng)珊搀,積累了大量來自生成環(huán)境的寶貴實踐冶忱。正是因為這些積累,作為一套分布式應用容器集群系統(tǒng)境析,Kubernetes擁有明顯的技術(shù)優(yōu)勢:
- 優(yōu)秀的API設計囚枪,架構(gòu)簡潔高效,組件個數(shù)少劳淆,彼此之間通過接口調(diào)用链沼;
- 基于微服務模式的多層資源抽象,兼顧靈活性和可操作性沛鸵。其提出的Pod模型被很多平臺參考借鑒括勺;
- 可拓展性好,模塊化容易替換,具有很強的伸縮能力疾捍;
- 自動化程度高奈辰,用戶通過模板申明服務后,生命周期都是自動化管理拾氓;
- 支持多種部署環(huán)境冯挎,包括裸機部署、虛擬機咙鞍、常見的云平臺等房官;
- 支持豐富的運維工具;
- 自帶控制臺续滋、客戶端命令等工具翰守,方便用戶直接通過命令與集群交互;
Kubernetes集群架構(gòu)
Kubernetes集群由其提供的一組節(jié)點組成疲酌,這些節(jié)點提供容器資源池供用戶使用蜡峰。管理組件主要包括管理(Master)組件和節(jié)點(Node)組件。
Master組件提供所有集群管理的相關(guān)操作朗恳,如調(diào)度湿颅,監(jiān)控,對資源的操作等粥诫。包括kube-apiserver油航、kube-scheduler、kube-controller-manager怀浆、kube-ui以及Etcd谊囚、DNS等支持組件。
Node組件是Kubernetes中的實際工作的計算實例执赡,節(jié)點可以是虛擬機镰踏、物理服務器或者云服務器,在創(chuàng)建Kubernetes集群時沙合,需要預裝一些必要的軟件來響應Master的管理奠伪,主要包括kubelet、kubeproxy等首懈。
- kube-apiserver:集群核心芳来,API接口、集群各個組件通信的中樞猜拾;集群安全控制;
- etcd:集群的數(shù)據(jù)中心佣盒;
- kube-scheduler:集群Pod的調(diào)度中心挎袜;
- kube-controller-manager:集群狀態(tài)管理器,當集群狀態(tài)與期望不同時,KCM會努力讓集群恢復期望狀態(tài)盯仪,例如:當一個pod死掉紊搪,KCM會努力新建一個pod來恢復對應replicas set期望的狀態(tài);
- kubelet:負責與節(jié)點上的Docker守護進程通信全景;
- kubeproxy: 實現(xiàn)了Service的代理以及軟件模式的負載均衡耀石,主要是為節(jié)點間的通信進行服務。