<menuitem id="brlpf"><span id="brlpf"><menuitem id="brlpf"></menuitem></span></menuitem>
<ins id="brlpf"></ins><var id="brlpf"><noframes id="brlpf"><menuitem id="brlpf"></menuitem>
<ins id="brlpf"></ins>
<cite id="brlpf"><noframes id="brlpf">
<del id="brlpf"><noframes id="brlpf"><del id="brlpf"></del>
<cite id="brlpf"><noframes id="brlpf">
<menuitem id="brlpf"><span id="brlpf"></span></menuitem><ins id="brlpf"></ins>
<del id="brlpf"><noframes id="brlpf">

營銷-SEO-頭部優化文字

400-928-0260

上海帝聯信息科技股份有限公司

帝聯動態
首頁 > 帝聯動態 > 行業動態

Google分布式容器技術初體驗

2017-08-11 12:24:18

帝聯云平臺的研發團隊正在嘗試將云平臺的現有業務進行容器化,以實現彈性云平臺,解決目前云平臺資源空閑率過高問題。


Kubernetes是Google開源的容器集群管理系統,是一個良好的分布式服務框架,它實現了服務的配置管理,包括服務發現,負載均衡以及服務依賴管理。服務之間的調度及生命周期管理。


由于Kubernetes包含了上述部分特性,因此最近帝聯云平臺研發團隊對Kubernetes進行了一些嘗試與體驗,我們將通過本文來與大家分享Kubernetes的一些總結。

圖片關鍵詞

Kubernetes架構總覽


Kubernetes基本概念


Pod(最小調度單元)


kubernetes將應用的具體實例抽象為一個pod,一個pod內可以包含多個容器,pod內的容器共享網絡地址等資源。


Replication Controller(管理一組Pod)


Kubernetes 通過RC來控制和監控pod的狀態和數量,來實現自動擴容和縮容。


Service(一組提供相同服務的pod的對外訪問接口)


Service概念是對一組pod的抽象,通過kube-proxy來做到pod的銷毀遷移不會影響到service的服務以及上層調用者,通過service配合dns可以實現上層與底層服務的完全解耦。


Label(標簽)


通過Label來管理pod與service之間的關聯。


Namespace(命名空間)


通過Namespace來組織kubernetes的各個對象,實現多用戶資源隔離。


調度中心Master,主要有四個組件構成:


etcd 作為配置中心和存儲中心,保存了所有組件的定義以及狀態,Kubernetes的多個組件之間的交互也主要通過etcd來進行。


kube-apiserver是Master對外的API接口,提供安全機制,對etcd中的配置以及數據變化進行了封裝。


kube-scheduler 調度器,主要功能是通過監聽etcd來感知pod對象變化,然后根據調度算法來分配pod到指定node,成功調度后調用apiserver來將node和pod進行關聯綁定。


kube-controller-manager 實現Master的主要功能,管理node,pod,replication,service,namespace等。工作機制是通過對集群內的各種事件進行感知,對不同的事件進行不同的邏輯處理。


節點Agent,主要由兩個組件組成:


kubelet 主要包含容器管理,鏡像管理,Volume管理等。同時kubelet也是一個api服務,和pod相關的命令操作都是通過調用接口實現的。比如:查看pod日志,在pod上執行命令等。pod的啟動以及銷毀操作依然是通過監聽etcd的變更進行操作的。但kubelet不直接和etcd交互,而是通過apiserver提供的watch機制,應該是出于安全的考慮。kubelet提供插件機制,用于支持Volume和Network的擴展。


kube-proxy 主要用于實現Kubernetes的service機制。提供一部分SDN功能以及集群內部的智能LoadBalancer。目前版本基于iptables來實現流量轉發。

 

在Kubernetes上構建云平臺頁面業務


圖片關鍵詞


測試頁面業務基于kubernetes的架構圖


搭建測試過程中的一些問題


無法控制Service的負載均衡方式。


Kubernetes的Service默認對后端的多個pod進行負載均衡調用,造成不同區域的請求可能會跨區域轉發造成性能影響。


多物理節點之間使用flannel組成局域網造成性能損耗。


在跨機房的kubernetes集群中使用flannel組成一個局域網時,存在一些網絡消耗。


docker有時無法創建容器,手動也不行。


測試集群進行了一段時間的壓測后,發現某些節點的docker無法重現創建容器,重啟docker進程后恢復。


docker容器無法訪問外網。


基于docker0網橋的實現方式,某些節點上的容器無法訪問外網,重啟docker進程后恢復

官方提供的service方式無法合理利用多網卡機器。


80端口作為稀缺資源,多網卡機器完全可以指定IP綁定端口來實現多網卡機器運行多個80口服務,實現內存、CPU的資源復用。

 

初探Kubernetes可能能為我們帶來的改變


資源的高效利用,通過容器化以及Kubernetes的快速編排的這兩者實現的解耦,可以將多個占用不同資源的業務整合到一臺物理節點上,實現物理節點資源的最大化利用。


快速擴容縮容,減輕面對CDN突發時的運維壓力,Kubernetes的RC的動態伸縮功能實現Pod根據流量來進行動態伸縮,而不再是運維手動擴容和縮容。


故障節點自動遷移,實現故障節點服務自動遷移到其他節點進行恢復。


更完備的CI/CD工具,CI是code-deploy的關鍵工具,但當前由于受限于部署環境的不一致,CI可做的事情有限,大多數還依賴用戶的自定義腳本。


有了Kubernetes這樣的標準環境后,以后此類工具可以覆蓋測試環境部署,集成測試,上線部署等環節,實現標準化的交付工作流。