1. 程式人生 > >Kubernetes1-K8s的簡單介紹

Kubernetes1-K8s的簡單介紹

一、簡介

  1、什麼是Kubernetes

    簡稱K8s,用8代替8個字元“ubernerte”而成的速寫,K8s是一個開源的容器編排平臺,它是一個跨主機叢集的開源容器排程平臺,用於管理雲平臺中多個主機上的容器化的應用,它可以自動化應用容器的部署、擴充套件、的操作,k8s的目標是讓部署容器化的應用簡單並且高效,構建一個軟體和工具的生態系統,以減輕企業在公有云或私有云執行應用程式的負擔,;K8s提供了應用部署、規劃,更新,維護的一種機制。

    K8s專案由Google公司在2014年啟動,Kubernetes建立在google公司超過十餘年阿運維經驗基礎之上,Google所有的應用都執行在容器上,再與社群中最好的想法和實踐相結合,也許它是現在最受歡迎的容器平臺。

  2、使用K8s可以快速高效響應客戶的需求:

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

    擁有即使擴充套件應用程式的能力

    不影響現有業務的情況下,無縫地釋出新功能

    優化了硬體資源,降低成本

  3、K8s具有如下特點:

    便捷性:無論公有云、私有云、混合雲還是多雲架構都全面支援

    可擴充套件性:它是模組化、可插拔、可掛載、可組合,支援各種形式的擴充套件

    自修復:它可以自保持應用狀態、可自重啟、自複製、自縮放的,通過宣告式語法提供了強大的自修復能力

  4、三個時代說明,K8s為什麼如此有用

    

    傳統部署時代:早期,組織都是再物理伺服器上執行應用程式,無法位物理伺服器中的應用定義資源邊界,著會導致資源分配問題。比如,如果再物理伺服器上執行多個應用程式,可能會出現一個應用佔用大部分資源,其他應用程式的效能就將下降,解決方案往往是在不同伺服器上執行每個應用程式,但這並沒有隨著資源利用不足而擴充套件資源,並且維護諸多物理伺服器成本也很高。

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

            虛擬化可以更好的利用物理伺服器中資源,並可以實現更好的可伸縮性,因為可以輕鬆地新增或更新應用程式,降低硬體成本等等。藉助虛擬化,您可以將一組物理資源呈現位一組一次性虛擬機器。

            每個VM是一臺完整的計算機,在虛擬化硬體上執行所有元件,包括其自己的作業系統

    容器部署時代:容器類似VM,但是他們具有輕鬆的隔離屬性,可以在應用程式之間共享作業系統。因此,容器被認為是輕量的,與VM相似,容器具有自己的檔案系統,CPU,記憶體,程序空間等。由於他們與基礎架構分離,因此可以跨雲和OS分發進行移植

  5、補充使用容器的好處

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

    持續的開發,整合和部署:通過快速簡單的回滾(映象不可更改),提供可靠且頻繁的容器映象構建和部署。 

    開發和運營的關注點分離:在構建/釋出時,而不時在部署時建立應用程式容器映象,從而將應用程式與基礎架構分離。

    可觀察性不僅可以顯示作業系統級別的資訊和指標,還可以顯示應用程式的執行狀況和其他訊號。

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

    雲和作業系統分發的可移植性:可在Ubuntu,RHEL,coreOS,本地,google kubernetes engine和其他任何地方執行。

    鬆散耦合,分散式,彈性,解放的微服務:應用程式被分解成較小的獨立部分,並且可以動態部署和管理,而不時在一臺大型單機上執行的整體堆疊。

    資源隔離:可預測的應用程式效能。

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

  6、K8s提供了哪些功能

    服務發現和負載均衡

      K8s可以使用DNS名稱或使用其自己的IP地址公開容器。如果到容器的流量很高,K8s可以負載均衡分配流量,使部署穩定

    儲存編排

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

    自動部署和回滾

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

    自動包裝

      一個Kubernetes叢集,可以用於容器化任務,可以指定每個容器需要多少CPU和記憶體,使其充分利用資源。   

    自檢

      Kubernetes可以重新啟動失敗的容器,替換容器,殺死對使用者定義的執行狀態檢查沒有響應的容器,並且在準備好服務之前不會將其通告給客戶端

    加密管理

      Kubernetes允許儲存和管理敏感資訊,如密碼,auth令牌和ssh金鑰,可以部署和更新機密的應用程式配置,而無需重新構建容器映象,也無需在堆疊配置中公開。

  7、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的狀態即可,也不需要集中控制,這使得系統更易於使用,並且強大,更具有彈性和擴充套件性。

  

二、K8s架構

  1、整體架構

三、常見元件

    請見圖示1:分別包含1、2、3、4

         

  1、master:

    Kubernetes管理節點

  2、apiserver:

    提供介面服務,使用者通過apiserver來管理整個容器叢集平臺。API Server負責和Etcd互動(其他元件不會直接操作etcd,只有API Server這麼做),整個Kubernetes叢集的所有互動都是以API server為核心的。如:1、所有對叢集進行的查詢和管理都要通過API來進行;2、所有模組之間並不會互相呼叫,而是通過和API Server打交道來完成自己那部分的工作、API Server提供的驗證和授權保證了整個叢集的安全

  3、scheduler Kubernetes 排程服務:

  4、Replication Controllers 複製:

     保證pod的高可用

     Replication Controller是Kubernetes系統中最有用的功能,實現複製多個Pod副本,往往一個應用需要多個Pod來支撐,並且可以保證其複製的副本數,即使副本所排程分配的宿主機出現異常,通過Replication Controller 可以保證在其它宿主機啟用同等數量的Pod。Replication Controller 可以通過repcon模板來建立多個Pod副本,同樣也可以直接複製已存在Pod,需要通過Label selector來關聯

 

    請見圖示2:包含5、6、7、8

  5、minion:

    真正執行容器container的物理機。Kubernets中需要很多minion叢集,來提供運算

  6、container:

    容器,可以執行服務和程式

  7、Pod:

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

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

  8、Kube_prox 代理:

    做埠轉發,相當於LVS-NAT模式中的複製排程器

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

       

  9、etcd:

    儲存Kubernetes的配置資訊,可以理解為K8s資料庫,儲存這K8s容器平臺所有節點、pods、網路等資訊

  10、services:

    services是Kunbernetes最外圍的單元,通過虛擬一個訪問IP及服務埠,可以訪問我們定義好的Pod資源。目前的版本是通過iptables的nat轉發來實現,鑽發的目標埠為Kube_proxy生成的隨機埠。

  11、Lables標籤:

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

  12、Deployment部署

      Kubernetes Deployment用於更新Pod和Replica Set(下一代的Replication Controller)的方法,可以在Deployment物件中只描述你所期望的理想專題(預期執行狀態),Deployment控制器會將現在的實際狀態轉換成期望的狀態。例如,將所有的webapp:v1.0.9升級成webapp:v1.1.0,只需要建立Deployment,Kubernetes會按照Deployment自動進行升級,通過Deployment可以用來建立新的資源

      Deployment可以幫我們實現無人值守的上學,大大降低我們上線的複雜和風險

  13、Kubelet命令

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

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

      Kubelet命令管理pod、pod中容器機讓其的映象和卷等資訊

  14、總結:各元件之間的關係

    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或者容器。

 

 參考:網際網路內容

轉載請註明出處:https://www.cnblogs.com/zhangxingeng/p/11670786.html