国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Kubernetes 架構淺析

開發 開發工具
Kubernetes的目標是讓你可以像管理牲畜一樣管理你的服務,而不是像寵物一樣,同時提高資源的利用率,讓碼農關注在應用開發本身,高可用的事情就交給Kubernetes吧。

本文是去年寫的一篇文章,當時這個公眾號還沒開,首發微博上,后來運維幫轉載,這里和Mesos的文章一并推送一次,方便查閱。

閱讀對象:對Kubernetes尚未深入了解的同學

首先,為什么要用Kubernetes? 使用一個工具先要梳理下使用這個工具的目標,我們不是為了工具而用工具。

Kubernetes的目標用一張被很多人引用過的圖來說明最好:

一句話,Kubernetes的目標是讓你可以像管理牲畜一樣管理你的服務,而不是像寵物一樣,同時提高資源的利用率,讓碼農關注在應用開發本身,高可用的事情就交給Kubernetes吧。這個圖本來是openstack提出的,但純粹IaaS層的解決方案實現不了這個目標,于是有了Kubernetes。

Kubernetes和Borg系出同門,基本是Borg的開源改進版本,引用Google Borg論文里的說法:

  • it (1) hides the details of resource management and failure handling so its users can focus on application development instead; (2) operates with very high reliability and availability, and supports applica- tions that do the same; and (3) lets us run workloads across tens of thousands of machines effectively

我們如何驗證是否達到這個目標了呢?

  1. 隨機關掉一臺機器,看你的服務能否正常
  2. 減少的應用實例能否自動遷移并恢復到其他節點
  3. 服務能否隨著流量進行自動伸縮

我們從一個簡單的多層應用的架構改進來探討下:

說明:

  • mysql應該是一主多從的架構,這里為了簡單進行了省略
  • service后面也會依賴數據庫等資源,這里為了簡單進行了省略
  • 箭頭表示調用和依賴關系

具體分析一下為了達到我們的目標,需要做到改進:

1.Loadbalancer要調用后端應用服務節點,后端應用服務節點掛了或者遷移增加節點,都要變更Loadbalancer的配置。這樣明顯達不到目標,于是計劃將Loadbalancer改造成Smart Loadbalancer,通過服務發現機制,應用實例啟動或者銷毀時自動注冊到一個配置中心(etcd/zookeeper),Loadbalancer監聽應用配置的變化自動修改自己的配置。

2.Web應用對后端資源的依賴,比如Mysql和Memcached,對應資源的ip一般是寫到配置文件的。資源節點變更或者增加都要變更應用配置。

  • Mysql計劃該成域名訪問方式,而不是ip。為了避免dns變更時的延遲問題,需要在內網架設私有dns。高可用采用MHA方案,然后配合服務發現機制自動修改dns。
  • Memcached計劃參照couchbase的方式,通過服務發現機制,使用SmartClient,客戶端應用監聽配置中心的節點變化。難點可能在于對Memcached的改造(可以參考couchbase)。另外也可以通過增加一層代理的機制實現。

3.應用節點遷移時依賴的系統和基礎庫不一樣如何處理?部署方式不一樣如何處理?磁盤路徑,監聽端口等沖突怎么辦?這個可以通過Docker這樣的容器技術,將應用部署運行的方式進行標準化,操作系統和基礎庫的依賴允許應用自定義,對磁盤路徑以及端口的依賴通過Docker運行參數動態注入,而不需要變更應用配置。Docker的自定義變量以及參數,需要提供標準化的配置文件。

4.服務遷移問題 每種服務都需要一個master調度中心,來監控實例狀態,確定要不要進行遷移,負責統一調度。并且每個服務器節點上要有個agent來執行具體的操作,監控該節點上的應用。另外還要提供接口以及工具去操作。

5.網絡以及端口沖突的問題比較麻煩 需要引入類似SDN的解決方案。

6.內存,cpu,以及磁盤等硬件資源,原來的習慣是購買服務器的時候就根據服務器的上的應用類型進行規劃,如果應用和硬件解耦,這種方式需要淘汰。但必須有一種調度機制讓應用遷移的時候可進行篩選。總結一下,通過分析得出,要達到目標,關鍵是解耦,應用進程和資源(包括 cpu,內存,磁盤,網絡)的解耦,服務依賴關系的解耦。

我們上面的改造機制基本是按照個案進行設計,Kubernetes的則是要提供一套全面通用的機制。

然后,我們看看Kubernetes對以上問題的解決方案。

Kubernates架構

先上一張Kubernetes官方的架構圖

1.調度中心master,主要有四個組件構成:

etcd 作為配置中心和存儲服務(架構圖中的Distributed Watchable Storage),保存了所有組件的定義以及狀態,Kubernetes的多個組件之間的互相交互也主要通過etcd。

  1. Kubernetes etcd registry的目錄結構  
  2.  etcdctl ls /registry 
  3.  /registry/minions 保存node節點信息 
  4.  /registry/namespaces  
  5.  /registry/pods 保存所有的pods信息 
  6.  /registry/ranges 
  7.  /registry/serviceaccounts 
  8.  /registry/services 
  9.  /registry/controllers 
  10.  /registry/events Kubernetes組件的變更事件都會寫到這個目錄下 

kube-apiserver 提供和外部交互的接口,提供安全機制,大多數接口都是直接讀寫etcd中的數據。

kube-scheduler 調度器,主要干一件事情:監聽etcd中的pod目錄變更,然后通過調度算法分配node,最后調用apiserver的bind接口將分配的node和pod進行關聯(修改pod節點中的nodeName屬性)。scheduler在Kubernetes中是一個plugin,可以用其他的實現替換(比如mesos)。有不同的算法提供,算法接口如下:

  1. type ScheduleAlgorithm interface { 
  2. Schedule(api.Pod, NodeLister) (selectedMachine string, err error)  

kube-controller-manager 承擔了master的主要功能,比如和CloudProvider(IaaS)交互,管理node,pod,replication,service,namespace等。基本機制是監聽etcd /registry/events下對應的事件,進行處理。具體的邏輯需要專門文章分析,此處不進行詳解。

2.節點上的agent,主要有兩個組件:

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

kube-proxy 主要用于實現Kubernetes的service機制。提供一部分SDN功能以及集群內部的智能LoadBalancer。前面我們也分析了,應用實例在多個服務器節點之間遷移的一個難題是網絡和端口沖突問題。Kubernetes為每個service分配一個clusterIP(虛擬ip)。不同的service用不同的ip,所以端口也不會沖突。Kubernetes的虛擬ip是通過iptables機制實現的。每個service定義的端口,kube-proxy都會監聽一個隨機端口對應,然后通過iptables nat規則做轉發。比如Kubernetes上有個dns服務,clusterIP:10.254.0.10,端口:53。應用對10.254.0.10:53的請求會被轉發到該node的kube-proxy監聽的隨機端口上,然后再轉發給對應的pod。如果該服務的pod不在當前node上,會先在kube-proxy之間進行轉發。當前版本的kube-proxy是通過tcp代理實現的,性能損失比較大(具體參看后面的壓測比較),1.2版本中已經計劃將kube-proxy完全通過iptables實現(https://github.com/kubernetes/kubernetes/issues/3760)

3.Pods Kubernetes將應用的具體實例抽象為pod。每個pod首先會啟動一個google_containers/pause docker容器,然后再啟動應用真正的docker容器。這樣做的目的是為了可以將多個docker容器封裝到一個pod中,共享網絡地址。

4.Replication Controller 控制pod的副本數量,高可用就靠它了。

5.Services service是對一組pods的抽象,通過kube-proxy的智能LoadBalancer機制,pods的銷毀遷移不會影響services的功能以及上層的調用方。Kubernetes對service的抽象可以將底層服務和上層服務的依賴關系解耦,同時實現了和Docker links類似的環境變量注入機制(https://github.com/kubernetes/kubernetes/blob/release-1.0/docs/user-guide/services.md#environment-variables),但更靈活。如果配合dns的短域名解析機制,最終可實現完全解耦。

6.Label key-value格式的標簽,主要用于篩選,比如service和后端的pod是通過label進行篩選的,是弱關聯的。

7.Namespace Kubernetes中的namespace主要用來避免pod,service的名稱沖突。同一個namespace內的pod,service的名稱必須是唯一的。

8.Kubectl Kubernetes的命令行工具,主要是通過調用apiserver來實現管理。

9.Kube-dns dns是Kubernetes之上的應用,通過設置Pod的dns searchDomain(由kubelet啟動pod時進行操作),可以實現同一個namespace中的service直接通過名稱解析(這樣帶來的好處是開發測試正式環境可以共用同一套配置)。主要包含以下組件,這幾個組件是打包到同一個pod中的。

  • etcd skydns依賴,用于存儲dns數據
  • skydns 開源的dns服務
  • kube2sky 通過apiserver的接口監聽kube內部變更,然后調用skydns的接口操作dns

10.Networking Kubernetes的理念里,pod之間是可以直接通訊的(http://kubernetes.io/v1.1/docs/admin/networking.html),但實際上并沒有內置解決方案,需要用戶自己選擇解決方案: Flannel,OpenVSwitch,Weave 等。我們測試用的是Flannel,比較簡單。

11.配置文件 Kubernetes 支持yaml和json格式的配置文件,主要用來定義pod,replication controller,service,namespace等。

Kubernates 可能帶來的改變

  1. 降低分布式應用開發運維的復雜度 縱觀當前的各種分布式架構,hadoop,storm等,都是master-workers模式,框架很大一部分功能在節點的管理,處理程序的調度上,如果基于Kubernetes來實現類似功能,這些基本都可以交給Kubernetes完成,框架只需要負責核心數據的流轉以及收集邏輯。當然,當前Kubernetes的pod還未像Borg一樣直接支持batch job,但按照Kubernetes和Borg的關系,將來應該會支持(http://blog.kubernetes.io/2015/04/borg-predecessor-to-kubernetes.html)。
  2. 更完備的CI/CD(持續集成/持續交付)工具 CI是code-deploy的關鍵工具,但當前由于受限于部署環境的不一致,CI可做的事情有限,大多數還依賴用戶的自定義腳本。有了Kubernetes這樣的標準環境后,以后此類工具可以覆蓋測試環境部署,集成測試,上線部署等環節,實現標準化的交付工作流。
  3. Kubernetes之上的分布式存儲 Kubernetes官方提供了一個在Kubernetes上部署cassandra的例子,只需要重寫一個基于Kubernetes apiserver的SeedProvider,就可以避免靜態配置seed ip,享受Kubernetes帶來的scale-out能力。再如前面我們提到的memcached的高可用例子,如果基于Kubernetes實現一個memcached的smart client,只需要改下客戶端即可,非常簡單。個人認為以后在Kubernetes上的支持多租戶的分布式存儲會更加流行。只要解決了存儲服務的scale-out問題,應用的scale-out一般不會有太大問題。Hypernetes就是一個實現了多租戶的Kubernetes版本。
  4. 企業應用的分發 當前SaaS(on-demand)比較流行的一個很大的原因是原來的on-premise應用的部署運維成本太高,如果Kubernetes等分布式操作系統得到廣泛應用,on-premise的成本降低,on-premise以及托管云模式對SaaS的格局也會帶來影響。這也是我們這樣的創業公司關注Kubernetes的原因之一。
  5. 對IaaS的影響 當前的IaaS平臺的組件逐漸有閉源的趨勢,比如AWS嘗試用Aurora替代Mysql,阿里云用KVStore替換Redis。用戶主要關心的是服務的可靠性,自己運維的時候可能會傾向于開源方案,但如果使用云廠商的服務,就不太關心。按照這樣的趨勢,隨著IaaS的普及,會對整個開源的生態產生影響。但有了Kubernetes這樣的平臺,IaaS廠商主要為Kubernetes提供運行的基礎環境,Kubernetes接管上面的應用和服務,這樣在IaaS廠商之間遷移也很容易。
  6. 微服務 微服務最近很熱,但這個概念其實不新。主要一直受限于運維的復雜度,沒有普及。如果運維系統跟不上,服務拆太細,很容易出現某個服務器的角落里部署著一個很古老的不常更新的服務,后來大家竟然忘記了,最后服務器遷移的時候給丟了,用戶投訴才發現。而隨著Docker以及Kubernetes這樣的工具和平臺逐漸成熟,微服務的時代也到來了。 在Kubernetes上的微服務治理框架可以一攬子解決微服務的rpc,監控,容災問題,個人覺得可以期待。

遇到的一些問題

最后總結一下我遇到的一些問題

  1. 墻 gcr.io已被墻,如果在本地用腳本在虛擬機安裝,請全程翻墻。如果在服務器上就自己想辦法下載,然后在配置文件中指定鏡像地址。
  2. 并發拉取鏡像導致鏡像文件破壞(https://github.com/kubernetes/kubernetes/issues/10623) 這個和docker也相關,建議先用腳本在各node上pull鏡像再部署。
  3. 同一個pod內的多個容器啟動順序問題 同一個pod的多個容器定義中沒有優先級,啟動順序不能保證。比如kube-dns中,etcd要先啟動,然后skydns連接etcd創建基本的目錄,最后kube2sky啟動,將kube中已經定義的數據同步到dns中。如果順序不對dns數據就不正常。如果遇到這種問題按順序重啟一下對應的容器即可。這種問題當前需要應用自己通過重試機制解決。
  4. 容器內訪問外部網絡 如果使用了Flannel方案,但容器內無法訪問公網(node可以的情況),一般是iptables被搞壞了(https://github.com/coreos/flannel/issues/115)。
  5. 當前的Kubernetes沒有應用的概念,我們的應用包含4個自己開發的服務組件,還有一些依賴(mysql,redis,mongodb等),定義下來一共要20多個yaml。要實現一鍵安裝或者更新,還需要做不少工作。
  6. Kubernetes的公網負載均衡的解決方案依賴IaaS的實現,不夠靈活。
  7. kube-proxy的性能問題,簡單的壓測結果如下: 10.254.2.99:80是service地址,后面有兩個pod。11.1.16.15:3000是其中一個pod。代碼是golang官方網站首頁的那個helloword。

【本文為51CTO專欄作者“王淵命”的原創稿件,轉載請通過作者微信公眾號jolestar-blog獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2020-09-23 14:20:07

Kubernetes容器網絡模型

2022-07-24 21:11:19

KubernetesLinux

2022-01-12 11:55:43

Kubernetes多集群Linux

2023-02-28 08:24:49

2009-09-21 12:50:34

Hibernate架構

2016-11-04 21:46:46

UnderscoreJavascript

2022-07-03 13:58:53

YAMLKubernetes容器

2019-09-25 09:28:54

Linux系統架構

2017-02-27 09:03:37

Mesos架構源碼

2023-09-18 23:37:50

Kubernetes架構

2015-04-27 14:42:24

技術架構服務器性能

2020-03-16 08:55:34

云架構SLA云服務

2023-11-01 14:49:07

2011-08-04 08:52:08

架構

2015-07-01 14:24:29

開源云平臺CloudStack

2021-06-10 10:51:27

程序基礎架構

2016-08-16 00:13:14

2009-07-20 15:57:42

ASP.NET安全架構

2022-04-02 08:55:15

架構RocketMQSDK

2017-09-14 10:10:55

數據庫MySQL架構
點贊
收藏

51CTO技術棧公眾號

国产激情久久久| 亚洲国产一区自拍| 国产精品久久久久婷婷二区次| 成人爱爱电影网址| 久久久久国产精品免费免费搜索| 色成年激情久久综合| 97av在线播放| 裸体大乳女做爰69| 91小视频网站| 激情久久一区二区| 亚洲欧美亚洲| 日本一区二区三区四区 | 国产亚洲一区二区精品| 成人免费福利在线| 91n.com在线观看| 亚洲码欧美码一区二区三区| 亚洲欧美日韩在线观看a三区| 亚洲黄色成人久久久| 欧美日本国产视频| 欧洲人成人精品| 亚洲国产日韩a在线播放性色| 国产精品久久久久久久久免费桃花| 国产三级精品在线| 成人精品视频久久久久| 一级片免费看| 欧美成人午夜77777| 中文字幕一区三区| 日韩亚洲精品电影| 亚洲国产精品123| 老司机成人影院| 国产精品亲子伦对白| 91a在线视频| 伊人久久视频| www免费视频观看在线| 日本中文字幕一区二区有码在线 | 欧美精品1区2区3区| 国产成人一区二区三区小说| 嫩草av久久伊人妇女超级a| 粉嫩91精品久久久久久久99蜜桃 | 国产激情一区二区三区| 欧美一激情一区二区三区| 国产精品久久久对白| 九九九伊在人线综合| 91精品电影| 亚洲欧洲黄色网| 欧美日韩一区综合| 亚洲高清在线免费观看| 三区四区电影在线观看| 国产精一品亚洲二区在线视频| 亚洲一区999| 在线观看av网页| 麻豆9191精品国产| 久久久亚洲网站| free性欧美hd另类精品| 中文字幕乱码日本亚洲一区二区| 92看片淫黄大片欧美看国产片| 欧美xxxx做受欧美88bbw| 日韩电视剧在线观看免费网站| 日本天码aⅴ片在线电影网站| 久久国产影院| 日韩欧美自拍偷拍| 一个色的综合| 成人免费网站www网站高清| 国产成人免费高清| 欧美精品在线极品| 最新亚洲人成网站在线观看| 亚洲午夜av| 亚洲第一精品福利| 激情丁香在线| 999精品视频| 亚洲国产欧美日韩另类综合| 亚洲一区二区福利| 日本特级黄色大片| 精品黄色一级片| 欧美极品少妇与黑人| av成人天堂| 成人一级毛片| 欧美在线看片| 久久福利一区| 国产九色精品成人porny| 99精品欧美一区| 超碰在线97国产| 亚洲欧美日韩国产成人精品影院| 一区不卡视频| 国产主播精品| 欧美国产视频日韩| 日韩理论片一区二区| 深夜影院在线观看| 日本一本不卡| 国产精品美女免费看| 日韩av在线直播| 在线一区二区日韩| 欧美国产日产韩国视频| 国产99视频精品免视看7| 成人激情视频在线观看| 日韩高清专区| 色爱综合网站| 国产精品手机播放| 欧美成人资源| 精品国产1区二区| 欧美成年人视频在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 97在线看福利| 欧美亚洲二区| 日韩精品在线影院| 182在线播放| 成年人视频网站| 国产高清免费在线播放| 1024在线看片你懂得| 日韩超碰人人爽人人做人人添| 日本成人看片网址| 国产欧美日韩视频在线| 亚洲精品中文字幕有码专区| 日本在线视频站| 亚洲一区视频在线观看视频| 你懂的av在线| 国产麻豆精品theporn| 精品无码久久久久久久动漫| 日韩毛片视频| 日韩中文字幕在线看| 秋霞国产精品| 综合欧美国产视频二区| 国产调教在线| 国产一区二区三区欧美| 少妇av在线| 亚洲久本草在线中文字幕| 美乳视频一区二区| 蜜桃视频在线观看一区| 国产精品日产欧美久久久久| 国产视频久久网| 日本免费成人网| 97久久精品| 一区二区在线看| 亚洲一区在线直播| 精品一区二区三区四区五区| 久久久久亚洲蜜桃| 乱色588欧美| 女人让男人操自己视频在线观看| 99re6这里只有精品视频在线观看| 大地资源网在线观看免费官网| 欧美爱爱网站| 一本大道久久精品懂色aⅴ| 亚洲欧洲日韩综合二区| 依依综合在线| 亚洲综合免费观看高清完整版| 日本免费高清一区| www.com操| 国产精品拍天天在线| 夜夜嗨aⅴ免费视频| 精品久久久久香蕉网| av综合网址| 欧美日韩一区二区视频在线观看| 337p粉嫩大胆噜噜噜噜噜91av| 第一页在线观看| 欧美一级在线播放| 成人涩涩免费视频| 精品美女在线观看视频在线观看 | 亚洲在线网站| 天天综合天天| 一本色道久久综合狠狠躁篇怎么玩 | 992tv国产精品成人影院| 国产亚洲二区| 日韩欧美一区视频| 欧美日韩在线播放视频| 色噜噜狠狠永久免费| 亚洲人成在线电影| 日日噜噜夜夜狠狠视频欧美人 | 97婷婷涩涩精品一区| 成人永久aaa| 中文字幕资源网在线观看免费| 国产一区二区不卡视频在线观看| 欧美日韩国产中文精品字幕自在自线| 久久久精品国产**网站| 天天干在线影院| 欧美激情性做爰免费视频| www日韩大片| 国产精品亚洲欧美日韩一区在线| 欧美日韩激情四射| 亚洲美女久久久| 九一九一国产精品| 超碰在线cao| 色爽爽爽爽爽爽爽爽| 亚洲一级免费视频| 91在线免费视频观看| 视频在线亚洲| 最近中文字幕mv第三季歌词| 日韩av电影手机在线观看| 一个色在线综合| 99免费精品| 蜜桃av在线免费观看| 欧美亚洲免费高清在线观看| 日韩电影在线观看中文字幕| 综合久久伊人| 国产精品8888| 欧美激情亚洲精品| 亚洲精品久久久久久国产精华液| 国产欧美一区二区三区精品观看 | 国产精品对白久久久久粗| 日本19禁啪啪吃奶大尺度| 成人看片视频|