了解k8s及作業原理
- 什么是K8S
- Kubernetes特性
- K8S集群分為兩類節點
- master相關組件
- worker-node相關組件
- 作業原理流程圖
- 三種部署方法
- 常用的資源物件
- pod最小調度單元
- 資源標簽
- 標簽選擇器
- Pod控制器(centroller)
- 服務資源(Service)
- 存盤卷
- Name和Namespace
- Annotation
- Ingress
什么是K8S
Kubernetes是容器集群管理系統,是一個開源的平臺,可以實作容器集群的自動化部署、自動擴縮容、維護等功能,
k8s是一個編排容器的工具,其實也是管理應用的全生命周期的一個工具,從創建應用,應用的部署,應用提供服務,擴容縮容應用,應用更新,都非常的方便,而且可以做到故障自愈,例如一個服務器損壞,可以自動將這個服務器上的服務調度到另外一個主機上進行運行,無需進行人工干涉,k8s可以更快的更新新版本,打包應用,更新的時候可以做到不用中斷服務,服務器故障不用停機,從開發環境到測驗環境到生產環境的遷移極其方便,一個組態檔搞定,一次生成image,到處運行,
Kubernetes特性
Kubernetes是一種用于在一組主機上運行和協同容器化應用程式的系統,旨在提供可預測性、可擴展性與高可用的性的方法來完全管理容器化應用程式和服務的生命周期的平臺,它具有以下幾個重要的特性
- 自動化部署: yaml部署到k8s,會根據應用程式計算資源需求,自動分配到node,
- 系統自愈:當成功部署到k8s中,node節點宕機,k8s會重新將pod調度到可用節點,
- 水平擴展:HPA周期調整RC的副本數量,將用戶定義的resource值匹配,
- 服務發現和負載均衡:內置服務發現功能,為每個容器分配IP,service代理,
- 自動更新和回滾:監控應用狀態,不會同時殺掉應用, 更新出錯,自動恢復到原先狀態,
- 彈性伸縮:實時根據服務器的并發情況,增加或縮減容器數量
K8S集群分為兩類節點
Kubernetes使用共享網路將多個物理機或虛擬機匯集到一個集群中,在各服務器之間進行通信,該集群是配置Kubernetes的所有組件、功能和作業負載的物理平臺,集群中一臺服務器(或高可用部署中的一組服務器)用作Master,負責管理整個集群(管理端-對內 --管理員&運維工程師),余下的其他機器用作Worker Node–提供服務(開放給用戶),它們是使用本地和外部資源接收和運行作業負載的服務器,
Master
Master是集群的網關和中樞,負責諸如為用戶和客戶端暴露API(功能介面 apiserver)、跟蹤其它服務器的健康狀態、以最優方式調度作業負載,以及編排其他組件之間的通信等任務,它是用戶或客戶端與集群之間的核心聯絡點,并負責Kubernetes系統的大多數集中式管控邏輯,
Node
Node是Kubernetes集群的作業節點,負責接收來自Master的作業指令并根據指令相應的創建或洗掉Pod物件(k8s集群最小的單位 - 可以是1或者多個docker),以及調整網路規則以合理地路由和轉發流量等,
master相關組件
kube-apiserver
? Kubernetes API,集群的統一入口,各組件協調者,以 RESTful API提供介面服務,所有物件資源的增刪改查和監聽 操作都交給APIServer處理后再提交給Etcd存盤,
kube-controller-manager
? 處理集群中常規后臺任務,一個資源對應一個控制器,而ControllerManager就是負責管理這些控制器的,
kube-scheduler
? 根據調度演算法為新創建的Pod選擇一個Node節點,可以任意 部署,可以部署在同一個節點上,也可以部署在不同的節點上,
etcd
? 分布式鍵值存盤系統,用于保存集群狀態資料,比如Pod、 Service等物件資訊,
worker-node相關組件
Kubelet
? kubelet是Master在Node節點上的Agent,管理本機運行容器 的生命周期,比如創建容器、Pod掛載資料卷、下載secret、獲 取容器和節點狀態等作業,kubelet將每個Pod轉換成一組容器,
kube-proxy
? 在Node節點上實作Pod網路代理,維護網路規則和四層負載均衡作業,
docker或rocket
? 容器引擎,運行容器,
作業原理流程圖

三種部署方法
Minikube是由kubernetes社區維護的單機版的kubernetes集群,非常適合作為kubernetes入門,或是開發測驗環境使用,Minikube實際是跑在本地的虛擬機中,所以,需要先安裝一套Hypervisor,
部署地址:https://kubernetes.io/docs/tasks/tools/
Kubeadm:純粹的二進制檔案部署非常復雜和麻煩,kubeadm部署工具的選用邏輯也很簡單,kubeadm是官方提供和推薦的,因此可以認為kubeadm是可用而且可靠的,檔案也足夠全面,
部署地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/
二進制:專案致力于讓有意向使用原生kubernetes集群的企業或個人,可以方便的、系統的使用二進制的方式手工搭建kubernetes高可用集群,并且讓相關的人員可以更好的理解kubernetes集群的運作機制,
下載地址:https://github.com/kubernetes/kubernetes/releases
常用的資源物件
pod最小調度單元
Kubernetes并不直接運行容器,而是使用一個抽象的資源物件來封裝一個或者多個容器,這個抽象即為Pod,它是Kubernetes的最小調度單元,同一Pod中的容器共享網路名稱空間和存盤資源,這些容器可經由本地回環介面lo直接通信,但彼此之間又在Mount、User及PID等名稱空間上保持了隔離,
資源標簽
標簽(Label)是將資源進行分類的識別符號,資源標簽其實就是一個鍵值型(key/values)資料,標簽旨在指定物件(如Pod等)辨識性的屬性,這些屬性僅對用戶存在特定的意義,對Kubernetes集群來說并不直接表達核心系統語意,
標簽選擇器
標簽選擇器(Selector)全稱為”Label Selector“,它是一種根據Label來過濾符合條件的資源物件的機制,
Pod控制器(centroller)
盡管Pod是kubernetes的最小調度單元,但用戶通常并不會直接部署及管理Pod物件,而是要借助于另一類抽象——控制器(Controller)對其進行管理,用于作業負載的控制器是一種管理Pod生命周期的資源抽象,它們是kubernetes上的一類物件,而非單個資源物件,
服務資源(Service)
Service是建立在一組Pod物件之上的資源抽象,它通過標簽選擇器選定一組Pod物件,并為這組Pod物件定義一個統一的固定訪問入口(通常是一個IP地址),若Kubernetes集群存在DNS附件,它就會在Service創建時為其自動配置一個DNS名稱以便客戶端進行服務發現,
存盤卷
存盤卷(Volume)是獨立于容器檔案系統之外的存盤空間,常用于擴展容器的存盤空間并為它提供持久存盤能力,Kubernetes集群上的存盤卷大體可以分為臨時卷、本地卷和網路卷,臨時卷和本地卷都位于Node本地,一旦Pod被調度至其他Node,此種型別的存盤卷將無法訪問到,因此臨時卷和本地卷通常用于資料快取,持久化的資料則需要放置于持久卷(persistent volume)之上(網路卷),
Name和Namespace
名稱(Name)是Kubernetes集群中資源物件的識別符號,它們的作用域通常是名稱空間(Namespace),因此名稱空間是名稱的額外的限定機制,在同一名稱空間中,同一型別資源物件的名稱必須具有唯一性,名稱空間通常用于實作租戶或專案的資源隔離,從而形成邏輯分組,
Annotation
Annotation(注釋)是另一種附加在物件之上的鍵值型別的資料,但它擁有更大的資料容量,Annotation常用于將各種非標識型元資料(metadata)附加到物件上,但它不能用于標識和選擇物件,通常也不會被Kubernetes直接使用,其主要目的是方便工具或用戶的閱讀和查找等,
Ingress
Kubernetes將Pod物件和外部網路環境進行了隔離,Pod和Service等物件間的通信都使用其內部專用地址進行,如若需要開放某些Pod物件提供給外部用戶訪問,則需要為其請求流量打開一個通往Kubernetes集群內部的通道,除了Service之外,Ingress也是這類通道的實作方式之一,
k8s詳細博客:http://docs.kubernetes.org.cn/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/226793.html
標籤:其他
