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

簡介

一、Kubernetes代碼託管在GitHub上:https://github.com/kubernetes/kubernetes/node

 

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

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

特色

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

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

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

 

設計架構

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

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

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

 每次個節點上固然都要運行Docker。Docker來負責全部具體的映像下載和容器運行。

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

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

除了核心組件,還有一些推薦的Add-ons

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

相關名詞

(1kubelet

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

 

(2kube-proxy

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

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

 

(3Kubernetes控制面板

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

 

(4etcd

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

 

(5Kubernetes API Server

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

 

(6Scheduler

  調度器把未調度的pod經過binding api綁定到節點上。調度器是可插拔的,而且咱們期待支持多集羣的調度,將來甚至但願能夠支持用戶自定義的調度器。

 

(7Kubernetes控制管理服務器

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

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

相關文章
相關標籤/搜索