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

什麼是K8S

K8S是雲計算資源的管理平臺、管理框架,基於K8S雲計算項目可以:雲計算平臺部署、各個資源管理、調度、生成資源池、創建虛擬機、刪除虛擬機、重啓虛擬機等,Docker虛擬化是K8S雲計算項目中一個模塊,是K8S用於管理創建虛擬機、刪除虛擬機、鏡像、容器的組件;

使用Kubernetes可以實現如下功能:
自動化容器的部署和複製;
隨時擴展或收縮容器規模;
將容器組織成組,並且提供容器間的負載均衡;
很容易地升級應用程序容器的新版本;
提供容器彈性,如果容器失效就替換它等。

工作原理

原理圖
在這裏插入圖片描述

工作原理描述:

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負責管理控制器,相當於“大總管”。
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列表。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章