1. 程式人生 > 實用技巧 >【k8s】基礎概念 + 工作原理

【k8s】基礎概念 + 工作原理

【k8s】基礎概念 + 工作原理

工作原理:

原理圖

工作原理描述:

1、使用者通過kubectl或者API server的REST API介面,提交需要執行的docker容器(建立pod請求);

2、api server將建立pod的相關請求資料儲存到etcd(儲存中心)中;

3、scheduler監聽API server,查詢還未分配的Node的Pod,然後根據排程策略為這些Pod分配節點;

4、kube-let則負責在所在的Node節點上接收主節點發來的指令,管理Pod以及Pod中的容器,並定時向master主節點彙報節點資源的使用情況以及容器的情況;

5、controller-manager 則通過api-service監控整個叢集的狀態,並確保叢集處於預期的工作狀態

基礎概念:
將Docker應用於具體的業務實現,是存在困難的——編排、管理和排程等各個方面,都不容易。於是,人們迫切需要一套管理系統,對Docker及容器進行更高階更靈活的管理。

K8S,就是基於容器的叢集管理平臺,它的全稱,是kubernetes。

一個K8S系統,通常稱為一個K8S叢集(Cluster)。



這個叢集主要包括兩個部分:

    一個Master節點(主節點)

    一群Node節點(計算節點)


Master節點主要還是負責管理和控制。Node節點是工作負載節點,裡面是具體的容器。


Master節點包括API Server、Scheduler、Controller manager、etcd。

API Server是整個系統的對外介面,供客戶端和其它元件呼叫,相當於“營業廳”。

Scheduler負責對叢集內部的資源進行排程,相當於“排程室”。

Controller manager負責管理控制器,相當於“大總管”。
Node節點包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可選),還有就是Pod。

Pod是Kubernetes最基本的操作單元。一個Pod代表著叢集中執行的一個程序,它內部封裝了一個或多個緊密相關的容器。
除了Pod之外,K8S還有一個Service的概念,一個Service可以看作一組提供相同服務的Pod的對外訪問介面。


Kubelet,主要負責監視指派到它所在Node上的Pod,包括建立、修改、監控、刪除等。

Kube-proxy,主要負責為Pod物件提供代理。

Fluentd,主要負責日誌收集、儲存與查詢。
1.ETCD[主節點安裝]
etcd服務是資料中心。用於持久化儲存資訊。要求高可用和資料一致性。即多部署幾個master節點
儲存哪些資訊:k8s有本身的節點資訊、元件資訊、執行的pod、service都需要做持久化

2.kube-api-server[主節點安裝]
api-server提供叢集管理的API介面,包括認證授權、資料校驗、叢集狀態變更、其他模組之間的資料互動和通訊
其他模組,都是通過api-server查詢操作資料,也就是說只有api-server才能直接操作etcd


3.controllerManager[主節點安裝]
controllerManager是kubernetes的大腦,它通過api-service監控整個叢集的狀態,並確保叢集處於預期的工作狀態
組成:controller-manager是由 kube-controller-manager 和 cloud-controller-manager組成
      kube-controller-manager是由 一系列控制器組成,Replication Controller控制副本、Node Controller節點控制、Deployment Controller管理deployment等等
      cloud-controller-manager是在k8s啟用Cloud provider的時候,需要用來配合雲服務提供商的控制


4.Scheduler[主節點安裝]
kube-scheduler負責實現排程策略,分配排程Pod到叢集內的節點上,它監聽api-server,查詢還未分配的Node的Pod,然後根據排程策略為這些Pod分配節點


5.Calico[所有節點安裝]
Calico實現了CNI介面,是kubernetes網路方案的一種選擇。
Calico在每一個計算節點利用Linux Kernel實現了一個高效的vRouter來負責資料轉發,
而每個vRouter通過BGP協議負責把自己上執行的workload的路由資訊像整個Calico網路內傳播——小規模部署可以直接互聯,大規模下可通過指定的BGP route reflector來完成。 這樣保證最終所有的workload之間的資料流量都是通過IP路由的方式完成互聯的。

5.flannel[所有節點安裝]
kubernetes網路方案的另一種選擇

6.kube-ctl[任意節點安裝]
kubectl是Kubernetes的命令列工具,是Kubernetes使用者和管理員必備的管理工具。
kubectl提供了大量的子命令,方便管理Kubernetes叢集中的各種功能。


7.kube-let[工作節點安裝]
kube-let就是會在每個工作節點上都執行一個kubelet服務程序,預設監聽10250埠。
kube-let負責接收並執行master發來的指令,管理Pod以及Pod中的容器。
每個kubelet程序會在API Server上註冊節點自身資訊,定期向master節點彙報節點的資源使用情況,並通過cAdvisor監控節點和容器的資源。


8.kube-proxy[工作節點安裝][對外]
kube-proxy保證叢集內的服務,可以被叢集外訪問到。
每臺工作節點上都應該執行一個kube-proxy服務,它監聽API server中service和endpoint的變化情況,並通過iptables等來為服務配置負載均衡,是讓我們的服務在叢集外可以被訪問到的重要方式。


9.kube-dns[獨立服務][對內]
kube-dns保證叢集內的服務,可以被叢集內的pod互相訪問到。
kube-dns為Kubernetes叢集提供命名服務,主要用來解析叢集服務名和Pod的hostname。目的是讓pod可以通過名字訪問到叢集內服務。它通過新增A記錄的方式實現名字和service的解析。普通的service會解析到service-ip。headless service會解析到pod列表。