1、kubernetes簡介

Kubernetes簡介

文檔信息

中文官網:https://kubernetes.io/zh
中文社區:https://www.kubernetes.org.cn/

Kubernetes是容器集羣管理系統,是一個開源的平臺,可以實現容器集羣的自動化部署、自動擴縮容、維護等功能。

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

Kubernetes 特點

  • 可移植: 支持公有云,私有云,混合雲,多重雲(multi-cloud)
  • 可擴展: 模塊化, 插件化, 可掛載, 可組合
  • 自動化: 自動部署,自動重啓,自動複製,自動伸縮/擴展

kubernetes 概念

kubernetes是什麼

Kubernetes 是一個可移植的,可擴展的開源平臺,用於管理容器化的工作負載和服務,方便了聲明式配置和自動化。它擁有一個龐大且快速增長的生態系統。Kubernetes 的服務,支持和工具廣泛可用。

Kubernetes 組件

Kubernetes 集羣由代表控制平面的組件和一組稱爲節點的機器組成。

Kubernetes API

Kubernetes API 使你可以查詢和操縱 Kubernetes 中對象的狀態。 Kubernetes 控制平面的核心是 API 服務器和它暴露的 HTTP API。 用戶、集羣的不同部分以及外部組件都通過 API 服務器相互通信。

使用Kubernetes 對象

Kubernetes 對象是 Kubernetes 系統中的持久性實體。Kubernetes 使用這些實體表示您的集羣狀態。瞭解Kubernetes對象模型以及如何使用這些對象。

Kubernetes 特性

項目部署也在經歷下面的這樣一個歷程:

傳統部署 -> 虛擬化部署時代 -> 容器部署時代

abc

  • 傳統部署時代:早期,組織在物理服務器上運行應用程序。無法爲物理服務器中的應用程序定義資源邊界,這會導致資源分配問題。例如,如果在物理服務器上運行多個應用程序,則可能會出現-一個應用程序佔用大部分資源的情況,結果可能導致其他應用程序的性能下降。--種解決方案是在不同的物理服務器上運行每個應用程序,但是由於資源利用不足而無法擴展,並且組織維護許多物理服務器的成本很高。
  • 虛擬化部署時代:作爲解決方案,引入了虛擬化功能,它允許您在單個物理服務器的CPU.上運行多個虛擬機(VM)。虛擬化功能允許應用程序在VM之間隔離,並提供安全級別,因爲一一個應用程序的信息不能被另一應用程序自由地訪問。因爲虛擬化可以輕鬆地添加或更新應用程序、降低硬件成本等等,所以虛擬化可以更好地利用物理服務器中的資源,並可以實現更好的可伸縮性。每個VM是一臺完整的計算機,在虛擬化硬件之上運行所有組件,包括其自己的操作系統。
  • 容器部署時代:容器類似於VM,但是它們具有輕量級的隔離屬性,可以在應用程序之間共享操作系統(OS),因此,容器被認爲是輕量級的。容器與VM類似,具有自己的文件系統、CPU、內存、進程空間等。由於它們與基礎架構分離,因此可以跨雲和OS分發進行移植。

容器優勢總結:

  • 敏捷應用程序的創建和部署:與使用VM鏡像相比,提高了容器鏡像創建的簡便性和效率。
  • 持續開發、集成和部署:通過簡單的回滾(由於鏡像不可變性),提供可靠且頻繁的容器鏡像構建和部署。
  • 關注開發與運維的分離:在構建/時而不是在部署時創建應用程序容器鏡像,將應用程序與基礎架構分離。
  • 可觀察性:不僅可以顯示操作系統級別的信息和指標,還可以顯示應用程序的運行狀況和其他指標信號。
  • 跨開發、測試和生產的環境一致性:在便攜式計算機上與在雲中相同地運行。
  • 雲和操作系統分發的可移植性:可在Ubuntu、RHEL、RHEL、CoreOS、本地、Google Kubernetes Engine和其它任何其它地方運行。
  • 以應用程序爲中心的管理:提高抽象級別,從在虛擬硬件上運行OS到使用邏輯資源在OS上運行應用程序。
  • 鬆散耦合、分佈式、彈性、解放的微服務:應用程序被分解成較小的獨立部分,並且可以動態部署和管理-而不是在一臺大型單機上器體運行。
  • 資源隔離:可預測的應用程序性能。

kubernetes功能

  • 多個進程(作爲容器運行)協同工作。(Pod)
  • 存儲系統掛載
  • Distributing secrets
  • 應用健康檢測
  • 應用實例的複製
  • Pod自動伸縮/擴展
  • Naming and discovering
  • 負載均衡
  • 滾動更新
  • 資源監控
  • 日誌訪問
  • 調試應用程序
  • 提供認證和授權

kubernetes 不是

Kubernetes並不是傳統的PaaS(平臺即服務)系統。

  • Kubernetes不限制支持應用的類型,不限制應用框架。不限制受支持的語言runtimes (例如, Java, Python, Ruby),滿足12-factor applications 。不區分 “apps” 或者“services”。Kubernetes支持不同負載應用,包括有狀態、無狀態、數據處理類型的應用。只要這個應用可以在容器裏運行,那麼就能很好的運行在Kubernetes上。
  • Kubernetes不提供中間件(如message buses)、數據處理框架(如Spark)、數據庫(如Mysql)或者集羣存儲系統(如Ceph)作爲內置服務。但這些應用都可以運行在Kubernetes上面。
  • Kubernetes不部署源碼不編譯應用。持續集成的 (CI)工作流方面,不同的用戶有不同的需求和偏好的區域,因此,我們提供分層的 CI工作流,但並不定義它應該如何工作。
  • Kubernetes允許用戶選擇自己的日誌、監控和報警系統。
  • Kubernetes不提供或授權一個全面的應用程序配置語言/系統(例如,jsonnet)。
  • Kubernetes不提供任何機器配置、維護、管理或者自修復系統。

kubernetes組件

當部署完 Kubernetes, 即擁有了一個完整的集羣。

一個 Kubernetes 集羣包含 集羣由一組被稱作節點的機器組成。這些節點上運行 Kubernetes 所管理的容器化應用。集羣具有至少一個工作節點。

工作節點託管作爲應用負載的組件的 Pod 。控制平面管理集羣中的工作節點和 Pod 。 爲集羣提供故障轉移和高可用性,這些控制平面一般跨多主機運行,集羣跨多個節點運行。

這張圖表展示了包含所有相互關聯組件的 Kubernetes 集羣。
module

Control Plane Components(控制平面組件)

老版本爲master,Control Plane Components爲新的稱呼。

控制平面的組件對集羣做出全局決策(比如調度),以及檢測和響應集羣事件(例如,當不滿足部署的replicas字段時,啓動新的pod)。

  • kube-apiserver:API 服務器是 Kubernetes 控制面的組件,該組件公開了 Kubernetes API。 API 服務器是 Kubernetes 控制面的前端。
    Kubernetes API 服務器的主要實現是 kube-apiserver。 kube-apiserver 設計上考慮了水平伸縮,也就是說,它可通過部署多個實例進行伸縮。 你可以運行 kube-apiserver 的多個實例,並在這些實例之間平衡流量。

  • ETCD:etcd是Kubernetes提供默認的存儲系統,保存所有集羣數據,使用時需要爲etcd數據提供備份計劃。

  • kube-controller-manager:kube-controller-manager運行管理控制器,它們是集羣中處理常規任務的後臺線程。邏輯上,每個控制器是一個單獨的進程,但爲了降低複雜性,它們都被編譯成單個二進制文件,並在單個進程中運行。

    • 節點(Node)控制器。
    • 副本(Replication)控制器:負責維護系統中每個副本中的pod。
    • 端點(Endpoints)控制器:填充Endpoints對象(即連接Services&Pod)。
    • Service Account和Token控制器:爲新的Namespace創建默認帳戶訪問API Token。
  • cloud-controller-manager:在主節點上運行控制器的組件。從邏輯上講,每個控制器都是一個單獨的進程,但是爲了降低複雜性,它們都被編譯到同一個可執行文件,並在一個進程中運行。
    cloud-controller-manager控制器包括:

    • 節點控制器(Node Controller):負責在節點出現故障時進行通知和響應。
    • 副本控制器(Replication Controller):負責爲系統中的每個副本控制器對象維護正確數量的 Pod。
    • 端點控制器(Endpoints Controller): 填充端點(Endpoints)對象(即加入 Service 與 Pod)。
    • 服務帳戶和令牌控制器(Service Account & Token Controllers): 爲新的命名空間創建默認帳戶和 API 訪問令牌
  • kube-scheduler:kube-scheduler監視新創建沒有分配到Node的Pod,爲Pod選擇一個Node。

Node 組件

節點組件在每個節點上運行,維護運行的 Pod 並提供 Kubernetes 運行環境。

  • kubelet:一個在集羣中每個節點(node)上運行的代理。它保證容器(containers)都 運行在 Pod 中。

kubelet是主要的節點代理,它會監視已分配給節點的pod,具體功能:
- 安裝Pod所需的volume。
- 下載Pod的Secrets。
- Pod中運行的 docker(或experimentally,rkt)容器。
- 定期執行容器健康檢查。

  • kube-proxy:kube-proxy通過在主機上維護網絡規則並執行連接轉發來實現Kubernetes服務抽象。

  • 容器運行時(Container Runtime):容器運行環境是負責運行容器的軟件。
    Kubernetes 支持多個容器運行環境: Docker、 containerd、CRI-O 以及任何實現 Kubernetes CRI (容器運行環境接口)。

    • docker:docker用於運行容器。
    • RKT:rkt運行容器,作爲docker工具的替代方案。
    • supervisord:supervisord是一個輕量級的監控系統,用於保障kubelet和docker運行。
    • fluentd:fluentd是一個守護進程,可提供cluster-level logging。

插件 (Addons)

插件(addon)是實現集羣pod和Services功能的。Pod由Deployments,ReplicationController等進行管理。Namespace插件對象是在kube-systemNamespace中創建。

  • DNS:儘管其他插件都並非嚴格意義上的必需組件,但幾乎所有 Kubernetes 集羣都應該 有集羣 DNS, 因爲很多示例都需要 DNS 服務。
    羣集 DNS是一個DNS服務器,能夠爲 Kubernetes services提供 DNS記錄。
    由Kubernetes啓動的容器自動將這個DNS服務器包含在他們的DNS searches中。

  • Web 界面(儀表盤):Dashboard 是Kubernetes 集羣的通用的、基於 Web 的用戶界面。 它使用戶可以管理集羣中運行的應用程序以及集羣本身並進行故障排除。kube-ui提供集羣狀態基礎信息查看。

  • 容器資源監控:容器資源監控將關於容器的一些常見的時間序列度量值保存到一個集中的數據庫中,並提供用於瀏覽這些數據的界面。

  • 集羣層面日誌(Cluster-level Logging):集羣層面日誌機制負責將容器的日誌數據保存到一個集中的日誌存儲中,該存儲能夠提供搜索和瀏覽接口。

kubernetes 版本差異

官方文檔:https://kubernetes.io/zh/docs/setup/release/version-skew-policy/

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