k8s簡介


k8s簡介

 

k8s概述

Kubernetes(簡稱K8S) 是Google開源的分布式的容器管理平台,方便我們在服務器集群中管理我們容器化應用。

教程主要介紹怎么使用阿里雲容器服務(kubernetes版本)。

 

一、虛擬化技術

1.什么是虛擬化技術

虛擬化,是指通過虛擬化技術將一台計算機虛擬為多台邏輯計算機。
在一台計算機上同時運行多個邏輯計算機,每個邏輯計算機可運行不同的操作系統,並且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。 虛擬化使用軟件的方法重新定義划分IT資源,可以實現IT資源的動態分配、靈活調度、跨域共享,提高IT資源利用率,使IT資源能夠真正成為社會基礎設施,服務於各行各業中靈活多變的應用需求。

2.虛擬化的類型

全虛擬化(Full virtualization): 也稱為原始虛擬化技術, 是另一種虛擬化方法. 該模型使用虛擬機協調客戶操作系統和原始硬件(見圖2). 
這里"協調"是一個關鍵詞, 因為VMM在客戶操作系統和裸硬件之間用於工作協調. 一些受保護的指令必須由Hypervisor(虛擬機管理程序)來捕獲和處理. 因為操作系統是通過Hypervisor來分享底層硬件. 半虛擬化(Paravirtualization):另一種類似於全虛擬化的熱門技術. 它使用Hypervisor(虛擬機管理程序)分享存取底層的硬件, 但是它的客戶操作系統集成了虛擬化方面的代碼.
該方法無需重新編譯或引起陷阱, 因為操作系統自身能夠與虛擬進程進行很好的協作.

3.虛擬化類型的區別

全虛擬化:運行速度要快於硬件模擬, 但是性能方面不如裸機, 因為Hypervisor需要占用一些資源. 全虛擬化最大的優點是操作系統沒有經過任何修改. 它的唯一限制是操作系統必須能夠支持底層硬件
半虛擬化:需要客戶操作系統做一些修改(配合Hypervisor), 這是一個不足之處. 但是半虛擬化提供了與原始系統相近的性能. 與全虛擬化一樣, 半虛擬化可以同時能支持多個不同的操作系統.

二、容器技術

1.什么是容器

容器是輕量級的操作系統級虛擬化,可以讓我們在一個資源隔離的進程中運行應用及其依賴項。運行應用程序所必需的組件都將打包成一個鏡像並可以復用。執行鏡像時,它運行在一個隔離環境中,並且不會共享宿主機的內存、CPU 以及磁盤,這就保證了容器內進程不能監控容器外的任何進程。

2.容器和虛擬化的區別

虛擬機會將虛擬硬件、內核(即操作系統)以及用戶空間打包在新虛擬機當中,虛擬機能夠利用“虛擬機管理程序”運行在物理設備之上。虛擬機依賴於hypervisor,其通常被安裝在“裸金屬”系統硬件之上,這導致hypervisor在某些方面被認為是一種操作系統。
一旦 hypervisor安裝完成, 就可以從系統可用計算資源當中分配虛擬機實例了,每台虛擬機都能夠獲得唯一的操作系統和負載(應用程序)。簡言之,虛擬機先需要虛擬一個物理環境,然后構建一個完整的操作系統,再搭建一層Runtime,然后供應用程序運行。    對於容器環境來說,不需要安裝主機操作系統,直接將容器層(比如LXC或libcontainer)安裝在主機操作系統(通常是Linux變種)之上。在安裝完容器層之后,就可以從系統可用計算資源當中分配容器實例了,並且企業應用可以被部署在容器當中。
但是,每個容器化應用都會共享相同的操作系統(單個主機操作系統)。容器可以看成一個裝好了一組特定應用的虛擬機,它直接利用了宿主機的內核,抽象層比虛擬機更少,更加輕量化,啟動速度極快。 相比於虛擬機,容器擁有更高的資源使用效率,因為它並不需要為每個應用分配單獨的操作系統——實例規模更小、創建和遷移速度也更快。這意味相比於虛擬機,單個操作系統能夠承載更多的容器。
雲提供商十分熱衷於容器技術,因為在相同的硬件設備當中,可以部署數量更多的容器實例。此外,容器易於遷移,但是只能被遷移到具有兼容操作系統內核的其他服務器當中,這樣就會給遷移選擇帶來限制。    因為容器不像虛擬機那樣同樣對內核或者虛擬硬件進行打包,所以每套容器都擁有自己的隔離化用戶空間,從而使得多套容器能夠運行在同一主機系統之上。
我們可以看到全部操作系統層級的架構都可實現跨容器共享,惟一需要獨立構建的就是二進制文件與庫。正
因為如此,容器才擁有極為出色的輕量化特性。

三、kubernetes

1.什么是kubernetes

kubernetes,簡稱K8s,是用8代替8個字符“ubernete”而成的縮寫。是一個開源的,用於管理雲平台中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單並且高效(powerful),Kubernetes提供了應用部署,規划,更新,維護的一種機制

2.kubernetes總體架構

3.kubernetes各組件介紹:

 
Master運行組件:
   Etcd: 保存了整個集群的狀態;
   Apiserver: 提供了資源操作的唯一入口,並提供認證、授權、訪問控制、 API注冊和發現等機制;
   controller manager: 負責維護集群的狀態,比如故障檢測、自勱擴展、滾勱更新等;
   scheduler: 負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上;
Node運行組件:
   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提供集群日志采集、存儲不查詢
 

 

k8s常用概念介紹

  • 節點 (Master node and Worker node)
    節點通常指的就是服務器,在k8s中有兩種節點:管理節點(Master Node)和工作節點(Worker Node)
    管理節點(Master Node):負責管理整個k8s集群,一般由3個管理節點組成HA的架構。
    工作節點(Worker Node):主要負責運行容器。
  • 命名空間 (Namespace)
    k8s命名空間主要用於隔離集群資源、隔離容器等,為集群提供了一種虛擬隔離的策略;默認存在3個名字空間,分別是默認命名空間 default、系統命名空間 kube-system 和 kube-public。
  • Object
    k8s 對象(Object)是一種持久化存儲並且用於表示集群狀態的實體。k8s 對象其實就是k8s自己的配置協議,總之我們可以通過定義一個object讓k8s根據object定義執行一些部署任務、監控任務等等。
  • POD
    Pod是 Kubernetes 部署應用或服務的最小的基本單位。一個Pod 封裝多個應用容器(也可以只有一個容器)、存儲資源、一個獨立的網絡 IP 以及管理控制容器運行方式的策略選項。
  • 副本集 (Replica Set,RS)
    是一種控制器,負責監控和維護集群中pod的副本(replicas)數,確保pod的副本數是我們期望的樣子。
  • 部署 (Deployment)
    表示對k8s集群的一次更新操作,是k8s集群中最常用的Object,主要用於部署應用。支持滾動升級。
  • 服務 (service)
    是對應用的抽象,也是k8s中的基本操作單元,一個服務背后由多個pod支持,服務通過負載均衡策略將請求轉發到容器中。
  • Ingress
    是一種網關服務,可以將k8s服務通過http協議暴露到外部。
  • 無狀態應用 & 有狀態應用
    • 無狀態應用指的是應用在容器中運行時候不會在容器中持久化存儲數據,應用容器可以隨意創建、銷毀;如果一個應用有多個容器實例,對於無狀態應用,請求轉發給任何一個容器實例都可以正確運行。例如:web應用
    • 有狀態應用指的是應用在容器中運行時候需要穩定的持久化存儲、穩定的網絡標識、固定的pod啟動和停止次序。例如:mysql數據庫

k8s架構

 

 

通過上圖可以看出k8s整體架構主要由左邊的master節點和右邊的worker組成,master節點負責對整個集群進行管理,右邊的電腦表示worker節點負責運行我們部署的容器。

基於k8s的常見web應用部署架構

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM