微服務無狀態存儲管理
A. 5種微服務注冊中心如何選型這幾個維度告訴你!
1、前言微服務的注冊中心目前主流的有以下四種:
Zookeeper
Eureka
Consul
Kubernetes
那麼實際開發中到底如何選擇呢?這是一個值得深入研究的事情,別著急,今天陳某就帶大家深入了解一下這四類注冊中心以及如何選型的問題。
這是《SpringCloud進階》專欄第四篇文章,往期文章如下:
五十五張圖告訴你微服務的靈魂擺渡者Nacos究竟有多強?
openFeign奪命連環9問,這誰受得了?
阿裡面試這樣問:Nacos、Apollo、Config配置中心如何選型?這10個維度告訴你!
2、為什麼需要注冊中心?隨著單體應用拆分,首當面臨的第一份挑戰就是服務實例的數量較多,並且服務自身對外暴露的訪問地址也具有動態性。可能因為服務擴容、服務的失敗和更新等因素,導致服務實例的運行時狀態經常變化,如下圖:
商品詳情需要調用營銷、訂單、庫存三個服務,存在問題有:
營銷、訂單、庫存這三個服務的地址都可能動態的發生改變,單純只使用配置的形式需要頻繁的變更,如果是寫到配置文件裡面還需要重啟系統,這對生產來說太不友好了
服務是集群部署的形式調用方負載均衡如何去實現
解決第一個問題辦法就是用我們用偉人說過一句話,沒有什麼是加一個中間層解決不了的,這個中間層就是我們的注冊中心。
解決第二問題就是關於負載均衡的實現,這個需要結合我們中間層老大哥來實現。
3、如何實現一個注冊中心?對於如何實現注冊中心這個問題,首先將服務之間是如何交互的模型抽象出來,我們結合實際的案例來說明這個問題,以商品服務為例:
當我們搜索商品的時候商品服務就是提供者;
當我們查詢商品詳情的時候即服務的提供者又是服務的消費者,消費是訂單、庫存等服務;由此我們需要引入的三個角色就是:中間層(注冊中心)、生產者、消費者,如下圖:
整體的執行流程如下:
在服務啟動時,服務提供者通過內部的注冊中心客戶端應用自動將自身服務注冊到注冊中心,包含主機地址、服務名稱等等信息;
在服務啟動或者發生變更的時候,服務消費者的注冊中心客戶端程序則可以從注冊中心中獲取那些已經注冊的服務實例信息或者移除已下線的服務;
上圖還多一個設計緩存本地路由,緩存本地路由是為了提高服務路由的效率和容錯性,服務消費者可以配備緩存機制以加速服務路由。更重要的是,當服務注冊中心不可用時,服務消費者可以利用本地緩存路由實現對現有服務的可靠調用。
在整個執行的過程中,其中有點有一點是比較難的,就是服務消費者如何及時知道服務的生產者如何及時變更的,這個問題也是經典的生產者消費者的問題,解決的方式有兩種:
發布-訂閱模式:服務消費者能夠實時監控服務更新狀態,通常採用監聽器以及回調機制,經典的案例就是Zookeeper;
主動拉取策略:服務的消費者定期調用注冊中心提供的服務獲取介面獲取最新的服務列表並更新本地緩存,經典案例就是Eureka;
對於如何選擇這兩種方式,其實還有一個數據一致性問題可以聊聊,比如選擇定時器肯定就拋棄了一致性,最求的是最終一致,這里就不深入展開了,另外你可能還會說服務的移除等等這些功能都沒介紹,在我看來那隻是一個附加功能,注冊中心重點還是在於服務注冊和發現,其他都是錦上添花罷了。
負載均衡的實現有兩種方式:
服務端的負載均衡;
客戶端的負載均衡;對於實現的方案來說本質上是差不多的,只是說承接的載體不一樣,一個是服務端,一個客戶端,如下圖:
服務端的負載均衡,給服務提供者更強的流量控制權,但是無法滿足不同的消費者希望使用不同負載均衡策略的需求。
客戶端的負載均衡則提供了這種靈活性,並對用戶擴展提供更加友好的支持。但是客戶端負載均衡策略如果配置不當,可能會導致服務提供者出現熱點,或者壓根就拿不到任何服務提供者。
服務端負載均衡典型的代表就是Nginx,客戶端負載均衡典型代表是Ribbon,每種方式都有經典的代表,我們都是可以深入學習的。
常見的負載均衡器的演算法的實現,常見的演算法有以下六種:
1、輪詢法
將請求按順序輪流地分配到後端伺服器上,它均衡地對待後端的每一台伺服器,而不關心伺服器實際的連接數和當前的系統負載。
2、隨機法
通過系統的隨機演算法,根據後端伺服器的列表大小值來隨機選取其中的一台伺服器進行訪問。由概率統計理論可以得知,隨著客戶端調用服務端的次數增多;其實際效果越來越接近於平均分配調用量到後端的每一台伺服器,也就是輪詢的結果。
3、哈希演算法
哈希的思想是根據獲取客戶端的IP地址,通過哈希函數計算得到的一個數值,用該數值對伺服器列表的大小進行取模運算,得到的結果便是客服端要訪問伺服器的序號。採用源地址哈希法進行負載均衡,同一IP地址的客戶端,當後端伺服器列表不變時,它每次都會映射到同一台後端伺服器進行訪問。
4、加權輪詢法
不同的後端伺服器可能機器的配置和當前系統的負載並不相同,因此它們的抗壓能力也不相同。給配置高、負載低的機器配置更高的權重,讓其處理更多的請;而配置低、負載高的機器,給其分配較低的權重,降低其系統負載,加權輪詢能很好地處理這一問題,並將請求順序且按照權重分配到後端。
5.加權隨機法
與加權輪詢法一樣,加權隨機法也根據後端機器的配置,系統的負載分配不同的權重。不同的是,它是按照權重隨機請求後端伺服器,而非順序。
6.最小連接數法
最小連接數演算法比較靈活和智能,由於後端伺服器的配置不盡相同,對於請求的處理有快有慢,它是根據後端伺服器當前的連接情況,動態地選取其中當前積壓連接數最少的一台伺服器來處理當前的請求,盡可能地提高後端服務的利用效率,將負責合理地分流到每一台伺服器。
5、注冊中心如何選型?現在注冊中心的選擇也是五花八門,現階段比較流行有以下幾種:
在介紹這個之前大家有些需要了解的知識有CAP、Paxos、Raft演算法這里我就不進行過多介紹了。開始介紹以上5種實現注冊中心的方式。
1、Zookeeper這個說起來有點意思的是官方並沒有說他是一個注冊中心,但是國內Dubbo場景下很多都是使用Zookeeper來完成了注冊中心的功能。
當然這有很多歷史原因,這里我們就不追溯了,我還是來聊聊作為注冊中心使用的情況下,Zookeeper有哪些表現吧。
1、三種角色
Leader角色:一個Zookeeper集群同一時間只會有一個實際工作的Leader,它會發起並維護與各Follwer及Observer間的心跳。所有的寫操作必須要通過Leader完成再由Leader將寫操作廣播給其它伺服器。
Follower角色:一個Zookeeper集群可能同時存在多個Follower,它會響應Leader的心跳。Follower可直接處理並返回客戶端的讀請求,同時會將寫請求轉發給Leader處理,並且負責在Leader處理寫請求時對請求進行投票。
Observer角色:與Follower類似,但是無投票權。
2、四種節點
PERSISTENT-持久節點:除非手動刪除,否則節點一直存在於Zookeeper上
EPHEMERAL-臨時節點:臨時節點的生命周期與客戶端會話綁定,一旦客戶端會話失效,那麼這個客戶端創建的所有臨時節點都會被移除。
PERSISTENT_SEQUENTIAL-持久順序節點:基本特性同持久節點,只是增加了順序屬性,節點名後邊會追加一個由父節點維護的自增整型數字。
EPHEMERAL_SEQUENTIAL-臨時順序節點:基本特性同臨時節點,增加了順序屬性,節點名後邊會追加一個由父節點維護的自增整型數字。
3、一種機制
Zookeeper的Watch機制,是一個輕量級的設計。因為它採用了一種推拉結合的模式。一旦服務端感知主題變了,那麼只會發送一個事件類型和節點信息給關注的客戶端,而不會包括具體的變更內容,所以事件本身是輕量級的,這就是推的部分。然後,收到變更通知的客戶端需要自己去拉變更的數據,這就是拉的部分。
Zookeeper如何實現注冊中心?簡單來講,Zookeeper可以充當一個服務注冊表(ServiceRegistry),讓多個服務提供者形成一個集群,讓服務消費者通過服務注冊表獲取具體的服務訪問地址(ip+埠)去訪問具體的服務提供者。如下圖所示:
每當一個服務提供者部署後都要將自己的服務注冊到zookeeper的某一路徑上:/{service}/{version}/{ip:port}。
比如我們的HelloWorldService部署到兩台機器,那麼Zookeeper上就會創建兩條目錄:
/HelloWorldService/1.0.0/100.19.20.01:16888
HelloWorldService/1.0.0/100.19.20.02:16888。
這么描述有點不好理解,下圖更直觀,
在Zookeeper中,進行服務注冊,實際上就是在Zookeeper中創建了一個Znode節點,該節點存儲了該服務的IP、埠、調用方式(協議、序列化方式)等。
該節點承擔著最重要的職責,它由服務提供者(發布服務時)創建,以供服務消費者獲取節點中的信息,從而定位到服務提供者真正IP,發起調用。通過IP設置為臨時節點,那麼該節點數據不會一直存儲在ZooKeeper伺服器上。
當創建該臨時節點的客戶端會話因超時或發生異常而關閉時,該節點也相應在ZooKeeper伺服器上被刪除,剔除或者上線的時候會觸發Zookeeper的Watch機制,會發送消息給消費者,因此就做到消費者信息的及時更新。
Zookeeper從設計上來說的話整體遵循的CP的原則,在任何時候對Zookeeper的訪問請求能得到一致的數據結果,同時系統對網路分區具備容錯性,在使用Zookeeper獲取服務列表時,如果此時的Zookeeper集群中的Leader宕機了,該集群就要進行Leader的選舉,又或者Zookeeper集群中半數以上伺服器節點不可用(例如有三個節點,如果節點一檢測到節點三掛了,節點二也檢測到節點三掛了,那這個節點才算是真的掛了),那麼將無法處理該請求。
所以說,Zookeeper不能保證服務可用性。
2、EurekaNetflix我感覺應該是在醞釀更好的東西的,下面我們重點還是來介紹Ereka1.x相關的設計。
Eureka由兩個組件組成:Eureka服務端和Eureka客戶端。Eureka伺服器用作服務注冊伺服器。Eureka客戶端是一個java客戶端,用來簡化與伺服器的交互、作為輪詢負載均衡器,並提供服務的故障切換支持。
Eureka的基本架構,由3個角色組成:1、EurekaServer
提供服務注冊和發現功能;
2、ServiceProvider服務提供方,將自身服務注冊到Eureka,從而使服務消費方能夠找到;
3、ServiceConsumer服務消費方,從Eureka獲取注冊服務列表,從而能夠消費服務
Eureka在設計時就緊遵AP原則,EurekaServer可以運行多個實例來構建集群,解決單點問題,實例之間通過彼此互相注冊來提高可用性,是一種去中心化的架構,無master/slave之分,每一個實例都是對等的,每個節點都可被視為其他節點的副本。
在集群環境中如果某台EurekaServer宕機,EurekaClient的請求會自動切換到新的EurekaServer節點上,當宕機的伺服器重新恢復後,Eureka會再次將其納入到伺服器集群管理之中。
當節點開始接受客戶端請求時,所有的操作都會在節點間進行復制操作,將請求復制到該EurekaServer當前所知的其它所有節點中。
當一個新的EurekaServer節點啟動後,會首先嘗試從鄰近節點獲取所有注冊列表信息,並完成初始化。EurekaServer通過getEurekaServiceUrls()方法獲取所有的節點,並且會通過心跳契約的方式定期更新。
默認情況下,如果EurekaServer在一定時間內沒有接收到某個服務實例的心跳(默認周期為30秒),EurekaServer將會注銷該實例(默認為90秒,eureka.instance.lease-expiration-ration-in-seconds進行自定義配置)。
當EurekaServer節點在短時間內丟失過多的心跳時,那麼這個節點就會進入自我保護模式,這個測試環境的時候需要注意一下。
Eureka的集群中,只要有一台Eureka還在,就能保證注冊服務可用,只不過查到的信息可能不是最新的(不保證強一致性)。
除此之外,Eureka還有一種自我保護機制,如果在15分鍾內超過85%的節點都沒有正常的心跳,那麼Eureka就認為客戶端與注冊中心出現了網路故障,此時會出現以下幾種情況:
Eureka不再從注冊表中移除因為長時間沒有收到心跳而過期的服務;
Eureka仍然能夠接受新服務注冊和查詢請求,但是不會被同步到其它節點上(即保證當前節點依然可用)
當網路穩定時,當前實例新注冊的信息會被同步到其它節點中。
3、NacosNacos無縫支持一些主流的開源生態,如下圖:
Nacos致力於幫助您發現、配置和管理微服務。Nacos提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。
Nacos幫助您更敏捷和容易地構建、交付和管理微服務平台。Nacos是構建以「服務」為中心的現代應用架構(例如微服務範式、雲原生範式)的服務基礎設施。
Nacos除了服務的注冊發現之外,還支持動態配置服務。動態配置服務可以讓您以中心化、外部化和動態化的方式管理所有環境的應用配置和服務配置。動態配置消除了配置變更時重新部署應用和服務的需要,讓配置管理變得更加高效和敏捷。配置中心化管理讓實現無狀態服務變得更簡單,讓服務按需彈性擴展變得更容易。
服務發現和服務健康監測
Nacos支持基於DNS和基於RPC的服務發現。服務提供者使用原生SDK、OpenAPI、或一個獨立的AgentTODO注冊Service後,服務消費者可以使用DNSTODO或HTTP&API查找和發現服務。
Nacos提供對服務的實時的健康檢查,阻止向不健康的主機或服務實例發送請求。Nacos支持傳輸層(PING或TCP)和應用層(如HTTP、Mysql、用戶自定義)的健康檢查。對於復雜的雲環境和網路拓撲環境中(如VPC、邊緣網路等)服務的健康檢查,Nacos提供了agent上報模式和服務端主動檢測2種健康檢查模式。Nacos還提供了統一的健康檢查儀表盤,幫助您根據健康狀態管理服務的可用性及流量。
動態配置服務
動態配置服務可以讓您以中心化、外部化和動態化的方式管理所有環境的應用配置和服務配置。
動態配置消除了配置變更時重新部署應用和服務的需要,讓配置管理變得更加高效和敏捷。
配置中心化管理讓實現無狀態服務變得更簡單,讓服務按需彈性擴展變得更容易。
Nacos提供了一個簡潔易用的UI(控制台樣例Demo)幫助您管理所有的服務和應用的配置。Nacos還提供包括配置版本跟蹤、金絲雀發布、一鍵回滾配置以及客戶端配置更新狀態跟蹤在內的一系列開箱即用的配置管理特性,幫助您更安全地在生產環境中管理配置變更和降低配置變更帶來的風險。
動態DNS服務
動態DNS服務支持權重路由,讓您更容易地實現中間層負載均衡、更靈活的路由策略、流量控制以及數據中心內網的簡單DNS解析服務。動態DNS服務還能讓您更容易地實現以DNS協議為基礎的服務發現,以幫助您消除耦合到廠商私有服務發現API上的風險。
Nacos提供了一些簡單的DNSAPIsTODO幫助您管理服務的關聯域名和可用的IP:PORT列表.
服務及其元數據管理
Nacos能讓您從微服務平台建設的視角管理數據中心的所有服務及元數據,包括管理服務的描述、生命周期、服務的靜態依賴分析、服務的健康狀態、服務的流量管理、路由及安全策略、服務的SLA以及最首要的metrics統計數據。
Nacos支持插件管理
關於Nacos數據的存儲來說,支持臨時也支持持久化。
關於設計來說支持CP也支持AP,對他來說只是一個命令的切換,隨你玩,還支持各種注冊中心遷移到Nacos,反正一句話,只要你想要的他就有。
4、ConsulConsul是HashiCorp公司推出的開源工具,Consul由Go語言開發,部署起來非常容易,只需要極少的可執行程序和配置文件,具有綠色、輕量級的特點。Consul是分布式的、高可用的、可橫向擴展的用於實現分布式系統的服務發現與配置。
Consul的特點服務發現(ServiceDiscovery)
Consul提供了通過DNS或者HTTP介面的方式來注冊服務和發現服務。一些外部的服務通過Consul很容易的找到它所依賴的服務。
健康檢查(HealthChecking)
Consul的Client可以提供任意數量的健康檢查,既可以與給定的服務相關聯(「webserver是否返回200OK」),也可以與本地節點相關聯(「內存利用率是否低於90%」)。操作員可以使用這些信息來監視集群的健康狀況,服務發現組件可以使用這些信息將流量從不健康的主機路由出去。
Key/Value存儲
應用程序可以根據自己的需要使用Consul提供的Key/Value存儲。Consul提供了簡單易用的HTTP介面,結合其他工具可以實現動態配置、功能標記、領袖選舉等等功能。
安全服務通信
Consul可以為服務生成和分發TLS證書,以建立相互的TLS連接。意圖可用於定義允許哪些服務通信。服務分割可以很容易地進行管理,其目的是可以實時更改的,而不是使用復雜的網路拓撲和靜態防火牆規則。
多數據中心
Consul支持開箱即用的多數據中心.這意味著用戶不需要擔心需要建立額外的抽象層讓業務擴展到多個區域。
Consul支持多數據中心,在上圖中有兩個DataCenter,他們通過Internet互聯,同時請注意為了提高通信效率,只有Server節點才加入跨數據中心的通信。
在單個數據中心中,Consul分為Client和Server兩種節點(所有的節點也被稱為Agent),Server節點保存數據,Client負責健康檢查及轉發數據請求到Server;Server節點有一個Leader和多個Follower,Leader節點會將數據同步到Follower,Server的數量推薦是3個或者5個,在Leader掛掉的時候會啟動選舉機制產生一個新的Leader。
集群內的Consul節點通過gossip協議(流言協議)維護成員關系,也就是說某個節點了解集群內現在還有哪些節點,這些節點是Client還是Server。單個數據中心的流言協議同時使用TCP和UDP通信,並且都使用8301埠。跨數據中心的流言協議也同時使用TCP和UDP通信,埠使用8302。
集群內數據的讀寫請求既可以直接發到Server,也可以通過Client使用RPC轉發到Server,請求最終會到達Leader節點,在允許數據延時的情況下,讀請求也可以在普通的Server節點完成,集群內數據的讀寫和復制都是通過TCP的8300埠完成。
Consul其實也可以在應用內進行注冊,後續採用SpringCloud全家桶這套做負載
我們這里聊聊關於Consul的應用外的注冊:
上圖主要多出來兩個組件,分別是Registrator和ConsulTemplate,接下來我們介紹下這兩個組件如何結合可以實現在應用發進行服務發現和注冊。
Registrator:一個開源的第三方服務管理器項目,它通過監聽服務部署的Docker實例是否存活,來負責服務提供者的注冊和銷毀。
ConsulTemplate:定時從注冊中心服務端獲取最新的服務提供者節點列表並刷新LB配置(比如Nginx的upstream),這樣服務消費者就通過訪問Nginx就可以獲取最新的服務提供者信息,達到動態調節負載均衡的目的。
整體架構圖可能是這樣:
我們用Registrator來監控每個Server的狀態。當有新的Server啟動的時候,Registrator會把它注冊到Consul這個注冊中心上。
由於ConsulTemplate已經訂閱了該注冊中心上的服務消息,此時Consul注冊中心會將新的Server信息推送給ConsulTemplate,ConsulTemplate則會去修改nginx.conf的配置文件,然後讓Nginx重新載入配置以達到自動修改負載均衡的目的。
5、KubernetesKubernetes是一個輕便的和可擴展的開源平台,用於管理容器化應用和服務。通過Kubernetes能夠進行應用的自動化部署和擴縮容。
在Kubernetes中,會將組成應用的容器組合成一個邏輯單元以更
B. 微服務基礎服務之docker篇
什麼是docker
Docker 最初是 dotCloud 公司創始人 Solomon Hykes 在法國期間發起的一個公司內部項目,它是基於 dotCloud 公司多年雲服務技術的一次革新,並於 2013 年 3 月以 Apache 2.0 授權協議開源,主要項目代碼在 GitHub 上進行維護。Docker 項目後來還加入了 Linux 基金會,並成立推動 開放容器聯盟(OCI)。
Docker 使用 Google 公司推出的 Go 語言 進行開發實現,基於 Linux 內核的 cgroup,namespace,以及 AUFS 類的 Union FS 等技術,對進程進行封裝隔離,屬於 操作系統層面的虛擬化技術。由於隔離的進程獨立於宿主和其它的隔離的進程,因此也稱其為容器。最初實現是基於 LXC,從 0.7 版本以後開始去除 LXC,轉而使用自行開發的 libcontainer,從 1.11 開始,則進一步演進為使用 runC 和 containerd。
Docker 在容器的基礎上,進行了進一步的封裝,從文件系統、網路互聯到進程隔離等等,極大的簡化了容器的創建和維護。使得 Docker 技術比虛擬機技術更為輕便、快捷。
下面的圖片比較了 Docker 和傳統虛擬化方式的不同之處。傳統虛擬機技術是虛擬出一套硬體後,在其上運行一個完整操作系統,在該系統上再運行所需應用進程;而容器內的應用進程直接運行於宿主的內核,容器內沒有自己的內核,而且也沒有進行硬體虛擬。因此容器要比傳統虛擬機更為輕便。
傳統虛擬化
Docker
為什麼要用docker
對開發和運維(DevOps)人員來說,最希望的就是一次創建或配置,可以在任意地方正常運行。
使用 Docker 可以通過定製應用鏡像來實現持續集成、持續交付、部署。開發人員可以通過 Dockerfile 來進行鏡像構建,並結合 持續集成(Continuous Integration) 系統進行集成測試,而運維人員則可以直接在生產環境中快速部署該鏡像,甚至結合 持續部署(Continuous Delivery/Deployment) 系統進行自動部署。
而且使用 Dockerfile 使鏡像構建透明化,不僅僅開發團隊可以理解應用運行環境,也方便運維團隊理解應用運行所需條件,幫助更好的生產環境中部署該鏡像。
特性容器虛擬機 啟動秒級分鍾級 硬碟使用一般為MB一般為GB 性能接近原生弱於 系統支持量單機支持上千個容器一般幾十個
基本概念
我們都知道,操作系統分為內核和用戶空間。對於 Linux 而言,內核啟動後,會掛載 root 文件系統為其提供用戶空間支持。而 Docker 鏡像(Image),就相當於是一個 root 文件系統。比如官方鏡像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系統的 root 文件系統。
Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時准備的一些配置參數(如匿名卷、環境變數、用戶等)。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。
鏡像(Image)和容器(Container)的關系,就像是面向對象程序設計中的 類 和 實例 一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。
前面講過鏡像使用的是分層存儲,容器也是如此。每一個容器運行時,是以鏡像為基礎層,在其上創建一個當前容器的存儲層,我們可以稱這個為容器運行時讀寫而准備的存儲層為容器存儲層。
按照 Docker 最佳實踐的要求,容器不應該向其存儲層內寫入任何數據,容器存儲層要保持無狀態化。所有的文件寫入操作,都應該使用 數據卷(Volume)、或者綁定宿主目錄,在這些位置的讀寫會跳過容器存儲層,直接對宿主(或網路存儲)發生讀寫,其性能和穩定性更高。
數據卷的生存周期獨立於容器,容器消亡,數據卷不會消亡。因此,使用數據卷後,容器刪除或者重新運行之後,數據卻不會丟失。
鏡像構建完成後,可以很容易的在當前宿主機上運行,但是,如果需要在其它伺服器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry 就是這樣的服務。
一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標簽(Tag);每個標簽對應一個鏡像。
通常,一個倉庫會包含同一個軟體不同版本的鏡像,而標簽就常用於對應該軟體的各個版本。我們可以通過 <倉庫名>:<標簽> 的格式來指定具體是這個軟體哪個版本的鏡像。如果不給出標簽,將以 latest 作為默認標簽。
Centos安裝docker18
常用的docker命令
常用的docker鏡像
redis
mysql
C. kubernetes mesos的區別 分別有什麼特點
1、如果你是一個團隊領導者,想要構建一個專門的docker容器編排系統,並集成你的解決方案和基礎設施,那麼恭喜你,你可以鎖定Kubernetes。如果你想構建一個可靠的平台,用以運行多任務關鍵工作負載,並希望實現這些內容再雲或數據中心上可移植,那麼,Mesos是最適合你的。
2、Kubernetes作為互聯網行業巨頭的谷歌以其超前的市場嗅覺很早認識到Docker鏡像的潛力,並嘗試在谷歌雲平台上交付「容器編排即服務」。並且從頭開始設計了Kubernetes,以編排Docker容器。
該技術於2015年2月正式發布,Kubernetes對應用程序開發人員的吸引力表現在,它減少了對基礎設施和操作團隊的依賴。而Kubernetes對供應商的吸引是在於它提供了一種簡單的方式來讓他們擁抱容器運動,並為他們運行自己的Kubernetes部署提供一個商業化解決方案。
3、Apache Mesos。它最初是UCBerkeley為創建下一代集群管理器而誕生的項目,Mesos在吸取了多方的經驗和改進後,引入了模塊化架構,同樣也採用開源的方法,且其設計完全獨立於底層基礎架構。很快,Mesos就被Twitter、Apple(Siri)、Yelp、Uber、Netflix 以及許多領先的科技公司所採用,以支持他們在微服務、大數據和實時分析到彈性伸縮的一切實踐。
作為一個集群管理器,Mesos的架構支持並實現了以下挑戰 :簡化資源配置,在相同的基礎設施上提供不同的工作負載:分析、無狀態微服務、分布式數據服務和傳統應用程序等,以提高利用率,降低成本和空間。可實現特定應用程序部分自動化操作(如部署、自修復、擴展和升級等),提供高可用的容錯基礎設施。