【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監控整個集群的狀態,並確保集群處於預期的工作狀態

6>

 

 

 

基礎概念:

 

將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列表。

 

 


免責聲明!

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



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