Kubernetes1-K8s的簡單介紹

1、簡介

  一、什麼是Kubernetes

    簡稱K8s,用8代替8個字符「ubernerte」而成的速寫,K8s是一個開源的容器編排平臺,它是一個跨主機集羣的開源容器調度平臺,用於管理雲平臺中多個主機上的容器化的應用,它能夠自動化應用容器的部署、擴展、的操做,k8s的目標是讓部署容器化的應用簡單而且高效,構建一個軟件和工具的生態系統,以減輕企業在公有云或私有云運行應用程序的負擔,;K8s提供了應用部署、規劃,更新,維護的一種機制。html

    K8s項目由Google公司在2014年啓動,Kubernetes創建在google公司超過十餘年阿運維經驗基礎之上,Google全部的應用都運行在容器上,再與社區中最好的想法和實踐相結合,也許它是如今最受歡迎的容器平臺。java

  二、使用K8s能夠快速高效響應客戶的需求:

    快速、可預測地部署您的應用程序python

    擁有即便擴展應用程序的能力mysql

    不影響現有業務的狀況下,無縫地發佈新功能web

    優化了硬件資源,下降成本算法

  三、K8s具備以下特色:

    便捷性:不管公有云、私有云、混合雲仍是多雲架構都全面支持sql

    可擴展性:它是模塊化、可插拔、可掛載、可組合,支持各類形式的擴展數據庫

    自修復:它能夠自保持應用狀態、可自重啓、自複製、自縮放的,經過聲明式語法提供了強大的自修復能力後端

  四、三個時代說明,K8s爲何如此有用

    

    傳統部署時代:早期,組織都是再物理服務器上運行應用程序,沒法位物理服務器中的應用定義資源邊界,着會致使資源分配問題。好比,若是再物理服務器上運行多個應用程序,可能會出現一個應用佔用大部分資源,其餘應用程序的性能就將降低,解決方案每每是在不一樣服務器上運行每一個應用程序,但這並無隨着資源利用不足而擴展資源,而且維護諸多物理服務器成本也很高。api

    虛擬化部署時代:爲了解決上面提到的資源分配問題,引入了虛擬化,它容許在單個物理服務器的CPU上容許多個虛擬機(VM)。虛擬化容許應用程序在VM之間隔離,並提供安全級別,由於一個應用程序的信息不能被另外一個應用程序自由訪問。

            虛擬化能夠更好的利用物理服務器中資源,並能夠實現更好的可伸縮性,由於能夠輕鬆地添加或更新應用程序,下降硬件成本等等。藉助虛擬化,您能夠將一組物理資源呈現位一組一次性虛擬機。

            每一個VM是一臺完整的計算機,在虛擬化硬件上運行全部組件,包括其本身的操做系統

    容器部署時代:容器相似VM,可是他們具備輕鬆的隔離屬性,能夠在應用程序之間共享操做系統。所以,容器被認爲是輕量的,與VM類似,容器具備本身的文件系統,CPU,內存,進程空間等。因爲他們與基礎架構分離,所以能夠跨雲和OS分發進行移植

  五、補充使用容器的好處

    敏捷的應用程序建立和部署:與使用VM鏡像相比,容器鏡像建立的簡便性和效率更高。

    持續的開發,集成和部署:經過快速簡單的回滾(鏡像不可更改),提供可靠且頻繁的容器鏡像構建和部署。 

    開發和運營的關注點分離:在構建/發佈時,而不時在部署時建立應用程序容器鏡像,從而將應用程序與基礎架構分離。

    可觀察性不只能夠顯示操做系統級別的信息和指標,還能夠顯示應用程序的運行情況和其餘信號。

    跨開發,測試和生成環境一致性:在便捷式計算機上與在雲中相同的運行。

    雲和操做系統分發的可移植性:可在Ubuntu,RHEL,coreOS,本地,google kubernetes engine和其餘任何地方運行。

    鬆散耦合,分佈式,彈性,解放的微服務:應用程序被分解成較小的獨立部分,而且能夠動態部署和管理,而不時在一臺大型單機上運行的總體堆棧。

    資源隔離:可預測的應用程序性能。

    資源利用:高效率和高密度。

  六、K8s提供了哪些功能

    服務發現和負載均衡

      K8s可使用DNS名稱或使用其本身的IP地址公開容器。若是到容器的流量很高,K8s能夠負載均衡分配流量,使部署穩定

    存儲編排

      容許自動掛載選擇的存儲系統,例如本地存儲,公有云提供商等。

    自動部署和回滾

      可使用Kunbernetes描述已經部署容器的所需狀態,並能夠以控制速率將實際狀態更改所需狀態。好比能夠自動化Kubernetes來位您的部署建立新容器,刪除現有容器並將他們的全部資源用於新容器

    自動包裝

      一個Kubernetes集羣,能夠用於容器化任務,能夠指定每一個容器須要多少CPU和內存,使其充分利用資源。   

    自檢

      Kubernetes能夠從新啓動失敗的容器,替換容器,殺死對用戶定義的運行狀態檢查沒有響應的容器,而且在準備好服務以前不會將其通告給客戶端

    加密管理

      Kubernetes容許存儲和管理敏感信息,如密碼,auth令牌和ssh密鑰,能夠部署和更新機密的應用程序配置,而無需從新構建容器鏡像,也無需在堆棧配置中公開。

  七、kubernetes不是什麼

    不是一個傳統意義上一應俱全的Paas系統,它保留用戶的自由選擇,好比:

      不限制支持的應用程序類型,不限制應用程序框架,不限制支持的語言(java/python/ruby)支持多種多樣的工做負載,包括無狀態,有狀態和數據處理工做負載。

      不提供內置服務的中間件(例如:消息中間件)、數據處理框架(例如:spark)、數據庫(例如:mysql)和分佈式存儲(例如Ceph),這些應用能夠容許在K8s上。

      沒有提供點擊即部署的服務市場。

      源代碼到鏡像都是開源的,它不部署源代碼且不構建您的應用程序。持續集成,交付和部署(CI/CD)工做流取決各公司組織的文化和偏好。

      容許用戶選擇其餘的日誌記錄,監控和告警系統,(它也提供一些集成做爲概念證實)。

      不提供也不要求應用程序配置語言/系統,提供一個聲明性API,能夠經過任意形式的聲明性規範。

      不提供也不採用任何全面的機器配置,維護,管理或自動修復系統。

     另外許多Paas系統運行在K8s上面,好比openshift,deis,eldarion,能夠自定義本身的paas與本身選擇的CI系統集成,或與K8s一塊兒使用,將容器鏡像部署到K8s上。

    因爲K8s在應用級別而不是僅僅在硬件級別運行,所以它提供Paas產品通用的一些功能,如:部署、擴展、負載均衡、日誌記錄、監控等。可是K8s不是單一的,默認是可選和可插拔的。

    K8s也不只僅是一個編排系統,它消除了編排的須要,編排表明工做流的執行爲從A到B,而後到C,相反,K8s是包括一套獨立、可組合的控制過程,經過聲明式語法使其連續地朝向指望狀態驅動當前狀態,不須要告訴它具體的從A到C的過程,只須要告訴到C的狀態便可,也不須要集中控制,這使得系統更易於使用,而且強大,更具備彈性和擴展性。

  

2、K8s架構

  一、總體架構

3、常見組件

    請見圖示1:分別包含一、二、三、4

        

  一、master:

    Kubernetes管理節點

  二、apiserver:

    提供接口服務,用戶經過apiserver來管理整個容器集羣平臺。API Server負責和Etcd交互(其餘組件不會直接操做etcd,只有API Server這麼作),整個Kubernetes集羣的全部交互都是以API server爲核心的。如:一、全部對集羣進行的查詢和管理都要經過API來進行;二、全部模塊之間並不會互相調用,而是經過和API Server打交道來完成本身那部分的工做、API Server提供的驗證和受權保證了整個集羣的安全

  三、scheduler Kubernetes 調度服務:

  四、Replication Controllers 複製:

     保證pod的高可用

     Replication Controller是Kubernetes系統中最有用的功能,實現複製多個Pod副本,每每一個應用須要多個Pod來支撐,而且能夠保證其複製的副本數,即便副本所調度分配的宿主機出現異常,經過Replication Controller 能夠保證在其它宿主機啓用同等數量的Pod。Replication Controller 能夠經過repcon模板來建立多個Pod副本,一樣也能夠直接複製已存在Pod,須要經過Label selector來關聯

 

    請見圖示2:包含五、六、七、8

  五、minion:

    真正運行容器container的物理機。Kubernets中須要不少minion集羣,來提供運算

  六、container:

    容器,能夠運行服務和程序

  七、Pod:

    Kubernetes系統中,調度的最小顆粒不是單純的容器,而是抽象成一個Pod,Pod是一個能夠被建立、銷燬、調度、管理的最小部署單元。pod中能夠包括一個或一組容器。

      pod:豆莢的意思,以下圖示理解pod及容器實例:

  八、Kube_prox 代理:

    作端口轉發,至關於LVS-NAT模式中的複製調度器

    Proxy解決了同一宿主機,相同服務端口衝突的問題,還提供了對外服務的能力,Proxy後端使用了隨機、輪詢負載均衡算法。

      

  九、etcd:

    存儲Kubernetes的配置信息,能夠理解爲K8s數據庫,存儲這K8s容器平臺全部節點、pods、網絡等信息

  十、services:

    services是Kunbernetes最外圍的單元,經過虛擬一個訪問IP及服務端口,能夠訪問咱們定義好的Pod資源。目前的版本是經過iptables的nat轉發來實現,鑽發的目標端口爲Kube_proxy生成的隨機端口。

  十一、Lables標籤:

    Lables是用於區分Pod、Service、Replication Controller的key/value鍵值對,僅使用在Pod、Service、Replication Controller之間的關係識別,但對這些單元自己進行操做時得使用name標籤。

  十二、Deployment部署

      Kubernetes Deployment用於更新Pod和Replica Set(下一代的Replication Controller)的方法,能夠在Deployment對象中只描述你所指望的理想專題(預期運行狀態),Deployment控制器會將如今的實際狀態轉換成指望的狀態。例如,將全部的webapp:v1.0.9升級成webapp:v1.1.0,只須要建立Deployment,Kubernetes會按照Deployment自動進行升級,經過Deployment能夠用來建立新的資源

      Deployment能夠幫咱們實現無人值守的上學,大大下降咱們上線的複雜和風險

  1三、Kubelet命令

      Kubelet和Kube-proxy都運行在minion節點上

      Kube-proxy實現Kubernetes網絡相關內容

      Kubelet命令管理pod、pod中容器機讓其的鏡像和卷等信息

  1四、總結:各組件之間的關係

    1)、kubernetes由一個master和多個minion組成,master經過api提供服務接收kubectl的請求來調度管理集羣,kubectl是k8s平臺的一個管理命令

    2)、Replication controller定義了多個pod或者容器須要運行,若是當前集羣中運行的pod或容器達不到配置的數量,replication controller會調度容器在多個minion上運行,保證集羣中的pod數量

    3)、service則定義真實對外提供的服務,一個service會對應後端運行的多個container。

    4)、Kubernetes是一個管理平臺,minion上的kube-proxy擁有提供真實服務公網IP,客戶端訪問K8S中提供的服務,是直接訪問到kube-proxy上的。

    5)、在kubernetes中pod是一個基本單元,一個pod能夠是提供相同功能的多個container,這些容器會被部署在同一個minion上,minion是運行Kubelet中容器的物理機,minion介紹master的指令建立pod或者容器。

 

 參考:互聯網內容

 

轉載請註明出處:http://www.javashuo.com/article/p-etzepibh-gv.html

 

部署:請見Kubernetes2-K8s的集羣部署

 

kubectl:請見Kubernetes3-kubectl管理Kubernetes容器平臺-1 

kubectl:請見Kubernetes3-kubectl管理Kubernetes容器平臺-2  

相關文章
相關標籤/搜索