k8s部署01-----what is k8s?

簡介 1、Kubernetes代碼託管在GitHub上:https://github.com/kubernetes/kubernetes/。

2、Kubernetes是一個開源的,容器集羣管理系統,Kubernetes的目標是讓部署容器化的應用簡單並且高效(powerful),Kubernetes提供了應用部署,規劃,更新,維護的一種機制。通過Kubernetes你可以:

快速部署應用 快速擴展應用 無縫對接新的應用功能 節省資源,優化硬件資源的使用

3、Kubernetes一個核心的特點就是能夠自主的管理容器來保證雲平臺中的容器按照用戶的期望狀態運行着(比如用戶想讓apache一直運行,用戶不需要關心怎麼去做,Kubernetes會自動去監控,然後去重啓,新建,總之,讓apache一直提供服務),管理員可以加載一個微型服務,讓規劃器來找到合適的位置,同時,Kubernetes也系統提升工具以及人性化方面,讓用戶能夠方便的部署自己的應用(就像canary deployments)。

4、現在Kubernetes着重於不間斷的服務狀態(比如web服務器或者緩存服務器)和原生雲平臺應用(Nosql),在不久的將來會支持各種生產雲平臺中的各種服務,例如,分批,工作流,以及傳統數據庫。

5、在Kubenetes中,所有的容器均在Pod中運行,一個Pod可以承載一個或者多個相關的容器,在後邊的案例中,同一個Pod中的容器會部署在同一個物理機器上並且能夠共享資源。一個Pod也可以包含O個或者多個磁盤卷組(volumes),這些卷組將會以目錄的形式提供給一個容器,或者被所有Pod中的容器共享,對於用戶創建的每個Pod,系統會自動選擇那個健康並且有足夠容量的機器,然後創建類似容器的容器,當容器創建失敗的時候,容器會被node agent自動的重啓,這個node agent叫kubelet,但是,如果是Pod失敗或者機器,它不會自動的轉移並且啓動,除非用戶定義了 replication controller。

6、用戶可以自己創建並管理Pod,Kubernetes將這些操作簡化爲兩個操作:基於相同的Pod配置文件部署多個Pod複製品;創建可替代的Pod當一個Pod掛了或者機器掛了的時候。而Kubernetes API中負責來重新啓動,遷移等行爲的部分叫做“replication controller”,它根據一個模板生成了一個Pod,然後系統就根據用戶的需求創建了許多冗餘,這些冗餘的Pod組成了一個整個應用,或者服務,或者服務中的一層。一旦一個Pod被創建,系統就會不停的監控Pod的健康情況以及Pod所在主機的健康情況,如果這個Pod因爲軟件原因掛掉了或者所在的機器掛掉了,replication controller 會自動在一個健康的機器上創建一個一摸一樣的Pod,來維持原來的Pod冗餘狀態不變,一個應用的多個Pod可以共享一個機器。

7、我們經常需要選中一組Pod,例如,我們要限制一組Pod的某些操作,或者查詢某組Pod的狀態,作爲Kubernetes的基本機制,用戶可以給Kubernetes Api中的任何對象貼上一組 key:value的標籤,然後,我們就可以通過標籤來選擇一組相關的Kubernetes Api 對象,然後去執行一些特定的操作,每個資源額外擁有一組(很多) keys 和 values,然後外部的工具可以使用這些keys和vlues值進行對象的檢索,這些Map叫做annotations(註釋)。

8、Kubernetes支持一種特殊的網絡模型,Kubernetes創建了一個地址空間,並且不動態的分配端口,它可以允許用戶選擇任何想使用的端口,爲了實現這個功能,它爲每個Pod分配IP地址。

9、現代互聯網應用一般都會包含多層服務構成,比如web前臺空間與用來存儲鍵值對的內存服務器以及對應的存儲服務,爲了更好的服務於這樣的架構,Kubernetes提供了服務的抽象,並提供了固定的IP地址和DNS名稱,而這些與一系列Pod進行動態關聯,這些都通過之前提到的標籤進行關聯,所以我們可以關聯任何我們想關聯的Pod,當一個Pod中的容器訪問這個地址的時候,這個請求會被轉發到本地代理(kube proxy),每臺機器上均有一個本地代理,然後被轉發到相應的後端容器。Kubernetes通過一種輪訓機制選擇相應的後端容器,這些動態的Pod被替換的時候,Kube proxy時刻追蹤着,所以,服務的 IP地址(dns名稱),從來不變。

10、所有Kubernetes中的資源,比如Pod,都通過一個叫URI的東西來區分,這個URI有一個UID,URI的重要組成部分是:對象的類型(比如pod),對象的名字,對象的命名空間,對於特殊的對象類型,在同一個命名空間內,所有的名字都是不同的,在對象只提供名稱,不提供命名空間的情況下,這種情況是假定是默認的命名空間。UID是時間和空間上的唯一。

特點 1、可移植:支持公有云,私有云,混合雲,多重雲(multi-cloud)

2、可擴展:模塊化, 插件化, 可掛載, 可組合

3、自動化:自動部署,自動重啓,自動複製,自動伸縮/擴展

設計架構 Kubernetes集羣包含有節點代理kubelet和Master組件(APIs, scheduler, etc),一切都基於分佈式的存儲系統。下面這張圖是Kubernetes的架構圖。

① 在這張系統架構圖中,我們把服務分爲運行在工作節點上的服務和組成集羣級別控制板的服務。

② Kubernetes節點有運行應用容器必備的服務,而這些都是受Master的控制。

③ 每次個節點上當然都要運行Docker。Docker來負責所有具體的映像下載和容器運行。

④ Kubernetes主要由以下幾個核心組件組成:

etcd 保存了整個集羣的狀態; apiserver 提供了資源操作的唯一入口,並提供認證、授權、訪問控制、API註冊和發現等機制; controller manager 負責維護集羣的狀態,比如故障檢測、自動擴展、滾動更新等; scheduler 負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上; kubelet 負責維護容器的生命週期,同時也負責Volume(CVI)和網絡(CNI)的管理; Container runtime 負責鏡像管理以及Pod和容器的真正運行(CRI); kube-proxy 負責爲Service提供cluster內部的服務發現和負載均衡; ⑤ 除了核心組件,還有一些推薦的Add-ons:

kube-dns 負責爲整個集羣提供DNS服務 Ingress Controller 爲服務提供外網入口 Heapster提供資源監控 Dashboard提供GUI Federation提供跨可用區的集羣 Fluentd-elasticsearch提供集羣日誌採集、存儲與查詢 相關名詞 (1)kubelet

        kubelet負責管理pods和它們上面的容器,images鏡像、volumes、etc。

(2)kube-proxy

   每一個節點也運行一個簡單的網絡代理和負載均衡(詳見services FAQ )(PS:官方 英文)。 正如Kubernetes API裏面定義的這些服務(詳見the services doc)(PS:官方 英文)也可以在各種終端中以輪詢的方式做一些簡單的TCP和UDP傳輸。

   服務端點目前是通過DNS或者環境變量( Docker-links-compatible 和 Kubernetes{FOO}_SERVICE_HOST 及 {FOO}_SERVICE_PORT 變量都支持)。這些變量由服務代理所管理的端口來解析。

(3)Kubernetes控制面板

   Kubernetes控制面板可以分爲多個部分。目前它們都運行在一個master 節點,然而爲了達到高可用性,這需要改變。不同部分一起協作提供一個統一的關於集羣的視圖。

(4)etcd

   所有master的持續狀態都存在etcd的一個實例中。這可以很好地存儲配置數據。因爲有watch(觀察者)的支持,各部件協調中的改變可以很快被察覺。

(5)Kubernetes API Server

   API服務提供Kubernetes API (PS:官方 英文)的服務。這個服務試圖通過把所有或者大部分的業務邏輯放到不兩隻的部件中從而使其具有CRUD特性。它主要處理REST操作,在etcd中驗證更新這些對象(並最終存儲)。

(6)Scheduler

   調度器把未調度的pod通過binding api綁定到節點上。調度器是可插拔的,並且我們期待支持多集羣的調度,未來甚至希望可以支持用戶自定義的調度器。

(7)Kubernetes控制管理服務器

   所有其它的集羣級別的功能目前都是由控制管理器所負責。例如,端點對象是被端點控制器來創建和更新。這些最終可以被分隔成不同的部件來讓它們獨自的可插拔。

  replicationcontroller(PS:官方 英文)是一種建立於簡單的 pod API之上的一種機制。一旦實現,我們最終計劃把這變成一種通用的插件機制。

---當才華撐不起你的野心的時候,請努力!---

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章