k8s 基礎概念和術語

2022-06-27 04:57:09 字數 4651 閱讀 5227

master

k8s裡的master指的是集群控制節點,每個k8s集群裡需要有乙個master節點來負責整個集群的管理和控制,基本k8s所有控制命令都發給它,它負責整個具體的執行過程,後面執行操作基本都是在master節點上執行的,master通常會佔據乙個獨立的伺服器(高可用建議3臺至少),主要原因它太重要,是整個集群的首腦,如果宕機不可用,那麼對集群內容器應用管理都將失效

master節點上執行的程式

kubernetes api server (kube-apiserver):提供了http rest介面的關鍵服務程序,是kubernetes裡所有資源的增刪改查等操作唯一入口,也是集群控制入口程序

kubernetes controller manager (kube-controller-manager):kubernetes裡所有資源物件的自動化控制中心,可以理解資源物件的「大總管」。

kubernetes schedule (kube-scheduler):負責資源排程(pod排程)的程序,相當於公交公司的「排程室」

另外,在master節點上還需要啟動乙個etcd,因為kubernetes裡的所有資源物件的資料全部儲存etcd中的

node

除了master,kubernetes集群的其他機器被稱為node節點,在較早的版本中也稱為minion節點。與master一樣,node節點可以是一台物理主機,也可以是臺虛擬機器。node節點才是kubernetes集群中的工作負載節點,每個node都會被maste分配一些工作負載,當某個node宕機時,其上的工作負載會被master自動轉移到其他節點。

每個node有核心程式kubelet、容器執行時環境和kube-proxy

來自k8s中文社群

kubernetes特性

kubernetes 是一種用於在一組主機上執行核協同容器化應用程式的系統,指在提供可**性、可擴充套件性與高可用性的方式來完全管理容器化應用和生命週期的平台。使用者可以定義應用程式的執行方式,以及與其他應用程式或者外界互動的途徑,並能實現服務的擴容和縮容,執行平滑滾動更新。以及在不同版本之間排程流量以測試功能或回滾有問題的部署,kubernetes提供了介面和和組合的平台原語,使得使用者能夠以高度的靈活性和可靠性定義管理應用程式。簡單總結起來,它具有以下幾個重要特性

(1) 自動封裝:構建與容器之上基於資源依賴以及其他約束自我完成容器的部署且不影響可以性,並通過排程機制混合關鍵型應用和非關鍵型應用的工作負載與同乙個節點以提高資源的利用率。

(2)自我修復(自癒):支援容器故障後自動重啟、節點故障後重新排程容器,以及其他可以節點的健康狀態監測失敗後關閉容器並重新建立等自我修復機制

(3)水平擴充套件:支援通過簡單的命令或者ui手動水平擴充套件,以及基於cpu等資源負載率的自動水平擴充套件機制。

(4)服務發現和負載均衡:kubernetes通過其附加元件之一的kubedns(或coredns)為系統內建了服務發現功能,他為每個server配置dns名稱,並允許集群內部的客戶端直接使用此名稱發出請求,而server則通過iptables或者ipvs內建了負載均衡機制

(5)自動發布和回滾:kubernetes支援「灰度」更新應用程式或其他配置資訊,它會監控更新過程中應用程式的健康狀態,以確保它不會再同一時刻殺掉所有例項,而此過程中一旦發生故障,就會立即執行回滾操作

(6)金鑰和配置管理:kubernetes的configmap實現了配置資料與docker映象的解耦,需要時,僅對配置做出更新而無需重構docker映象,這為開發應用部署帶來了很大的靈活性。此外,對於應用所依賴的一些敏感資訊,如使用者名稱、密碼、令牌、金鑰等資訊,kubernetes專門提供了secret物件為其解耦,及便利; 應用的快速開發和交付,有提供了一定程度上的安全保障。

(7)儲存編排:kubernetes支援pod物件按需自動掛載不同型別的儲存系統,這包括本地儲存、公有雲服務商的雲儲存(如aws和gcp等),以及網路儲存系統(如,nfs、iscsi、glusterfs、ceph、cinder和flocker等)

(8)批量處理執行操作:除了服務型應用、kubernetes還支援批量處理作業及ci(持續整合),如果需要,一樣可是實現容器故障後恢復

kubernetes概念及術語

kubernetes使用共享網路將多個主機或虛擬機器匯集到乙個集群裡,在各個伺服器之間進行通訊,該集群是配置kubernetes的所有元件、功能和負載均衡的物理平台,集群中一台伺服器(或者高可用部署中的一組伺服器)用於master,負載管理整個集群,餘下的其他機器作為node,它們是使用本地和外部資源接收和執行工作負載的伺服器。機器中這些伺服器可以是物理主機,也可以是虛擬機器。

(1) master是集群的閘道器和中樞,負載諸如為使用者和客戶端暴露api、跟蹤其他服務的健康狀態,以最優方式排程工作負載、以及編排其他元件之間的通訊等任務,它是使用者或客戶端與集群之間的核心聯絡點,並負載kubernetes系統的大多數集中式管控邏輯。但master節點即可完成所有的功能,但出於冗餘及負載均衡等目的,生產環境中通常需要協同部署多個此類主機,master節點類似於集群中的蜂王

(2)node 是kubernetes集群中的工作節點,負載接收master的工作指令並根據指令響應地建立或銷毀pod物件,以及調整網路規則以合理地路由和**流量等。理論上講node節點可以是任何形式的計算裝置,不過master會同一將其抽象為node物件進行管理,node類似於封群中的工蜂,生產環境中他們數量眾多;kubernetes將所有node節點資源集結一處形成一台更加強大的「伺服器」,使用者將所有應用程式部署其上式,master會使用排程演算法將其自動指派到某個特定的node節點上執行,在node加入集群或者從集群移除是,master也會按需重新編排影響到的pod。於是,使用者無需關心其應用究竟執行與何處。從抽象的角度講,kubernetes還有眾多元件來支援其內部的業務邏輯,包括執行應用、應用編排、服務暴露、應用恢復等,它們在kubernetes中抽象為pod、service、controller等資源型別。幾個常用的資源抽象

pod:kubernetes中的最小排程單位。同乙個pod中容器共享網路命名空間和儲存資源,這些容器可經過本地回環介面lo直接通訊,但彼此直接有在mount、user及pid等命名空間上保持隔離。儘管pod裡可以包含多個容器,但作為最小排程單元,它應該盡可能保持少數的容器,即通常只包含乙個主容器,以及必要的輔助容器

資源標籤:標籤(label)是將資源進行分類的識別符號,資源標籤其實是鍵值型(key/values)資料。標籤只在指定的物件(pod)等辨識性的屬性,這些屬性僅對使用者存在特定意義,對kubernetes集群來說並不直接表達系統語義。標籤可以在建立物件時附加其上,並能在建立後人以時間修改。乙個物件可以擁有多個標籤,乙個標籤也可以附加與多個物件(通常是同一類物件)之上

標籤選擇器:標籤選擇器(selector)全稱為「lable selector」,它是一種根據lable 過濾符合條件的資源過濾機制;例如,將來附有標籤「role:backend」的所有pod物件挑選出來歸為一組就是標籤選擇器的一種應用場景。使用者通常使用標籤對資源物件進行分類,而後使用標籤選擇器選擇他們。

pod控制器:儘管pod是kubernetes中最小排程單元,但使用者通常不會直接部署及管理pod物件,而是借助於pod控制器controller對其進行管理,用於負載的控制器是一種管理pod生命週期的資源抽象,他們可以是kubernetes上的一類物件而非單個資源物件,包括replicationcontroller、replicaset、deployment、statefulset、job等,它負責確保pod物件的副本數量精確符合定義,否則「多退少補」。使用控制器之後就不需要手動管理pod物件了,使用者只需要宣告應用的期望狀態,控制器就會自動對其進行程序管理。

服務資源(service):service是建立在一組pod物件上的資源抽象,它通過標籤選擇器選定一組pod物件,並為這組物件定義同一訪問入口(通常乙個ip位址),若kubernetes集群存在dns元件,他會在service建立時為其自動分配乙個dns名稱,以便客戶端進行服務發現。到達service ip 後的請求將會負載均衡至其後端各個pod物件上,因此service從本質上講是乙個四層**服務,另外service還可以將集群外部流量引入集群中來。

儲存卷:儲存卷(volume)是獨立於容器檔案系統之外的儲存空間,常用於擴充套件容器儲存空間並為它提供持久儲存能力。kubernetes集群的儲存卷大體分為臨時卷、本地卷和網路卷。臨時卷和本地卷位於node本地,一旦pod被排程至其他node,此種類的儲存卷將無法訪問到,因為臨時卷和本地卷通常用於資料快取,持久化資料則要放在持久卷之上

name和namespace:名稱(name)是kubernetes集群資源中資源物件識別符號,他們的作用域通常是命名空間(namespace),因此命名空間是名稱的額外限制,同乙個命名空間中,同一類資源物件名稱必須具有唯一性,命名空間通常用於租戶和專案資源隔離,從而形成邏輯分組。建立pod和server等資源物件都屬於命名空間級別定義,未指定時,他們都屬於預設的命名空間「defalt」

annotation:annotation(註解):是另一種附加在物件之上的鍵值型別的資料,但他擁有更大的資料容量。annotation常用於將各種非標識型元資料附加到物件上,但不能用於標識和選擇物件,通常也不會被kubernetes直接使用,其主要目的是方便工具或使用者的閱讀及查詢等。

ingress:kubernetes將pod物件和外部網路進行了隔離,pod和service等物件間的通訊都使用其內部專用位址進行,若放開某些pod物件供外部使用者訪問,則需要將請求流量開啟乙個通往kubernetes集群內部的通道,除了service之外,ingress也是這類通道得出實現方法之一

K8S基礎概念

node作為集群中的工作節點,執行真正的應用程式,在node上kubernetes管理的最小執行單元是pod。node上執行著kubernetes的kubelet kube proxy服務程序,這些服務程序負責pod的建立 啟動 監控 重啟 銷毀 以及實現軟體模式的負載均衡。node包含的資訊 no...

K8S基礎概念

node作為集群中的工作節點,執行真正的應用程式,在node上kubernetes管理的最小執行單元是pod。node上執行著kubernetes的kubelet kube proxy服務程序,這些服務程序負責pod的建立 啟動 監控 重啟 銷毀 以及實現軟體模式的負載均衡。node包含的資訊 no...

K8s基礎概念

最近在做新的系統架構,使用了比較新的容器技術k8s來做一整套分布式系統架構。今天來記錄一下k8s的一些基礎概念。純憑記憶,如有錯誤請指正。網上能看到的就不說了,說一些我理解的。k8s是一套google開源的利用容器技術的分布式及系統解決方案。通過對應用程式的容器化管理,實現服務的自動管理,如部署,多...