在阿里雲看到一個新的,大家可以看一下:容器服務 kubernetes 系統組件介紹
找到k8s中文社區文檔,里面有名詞解釋:http://docs.kubernetes.org.cn/
(1).Kubernetes概述
Kubernetes簡稱K8s,是Google開源的容器集群編排系統,基於Docker構建一個容器的調度服務,提供了資源調度、均衡容災、服務注冊、動態擴/縮容等功能。官網地址:https://kubernetes.io/
注意:Kubernetes是基於docker容器的雲平台,OpenStack是基於KVM虛擬機的雲平台。
(2).Kubernetes集群架構圖
在官網上,目前有兩種集群架構,一種是沒有雲控制管理器的集群架構,一種是有雲控制管理器的集群架構。這里就必須說到雲控制管理器(cloud controller manager,簡稱CCM)這個概念,根據官網所說,雲控制管理器創建的初衷是為了讓特定的雲服務供應商代碼能和Kubernetes核心互相獨立演化(運行?)。並且雲控制管理器可以與其他主要組件(例如Kubernetes controller manager, API server和scheduler)一起運行,也可以作為插件在Kubernetes上運行。
下圖是官方提供的沒有雲控制管理器時的集群架構圖,我個人覺得需要說明的是三個雲連接標志。第一個,連接到kube-controller-manager的雲連接,在Kubernetes控制管理器中有一個Service Controller功能,該功能是屬於kubernetes集群與外部的雲平台之間的一個接口控制器(Web管理?)。第二個,連接到kube-apiserver的雲連接,該連接是命令行工具kubectl客戶端通過命令行參數轉換為對API Server的REST API調用,並將調用結果輸出(命令行管理)。第三個,連接到minion(下屬)節點的雲連接,實際是連接到kube-proxy,該連接通過kube-proxy使得外部網絡可以訪問跨機器集群中的容器提供的應用服務(客戶訪問)。

還有一個官方提供的有雲控制管理器的集群架構,如下圖。在該架構下,所有雲連接都需要經過雲控制管理器,並且雲控制管理器接管了Kube-controller-manager(Kubernetes控制管理器)中節點控制器、路由控制器、服務控制器,以及kubelet中初始化節點。

(3).Kubernetes常見組件簡單介紹
聲明:這里以沒有雲控制器的集群架構為例。
Kuberbetes一般可以分為Master節點和Minions節點(Minions節點有時也被成為Node節點),有時etcd也會被獨立出來。Master節點包含controller manager、apiserver(API Server)、etcd和scheduler。而MInions節點包含kubelet、kube-proxy(也可以認為是proxy)、Pod和Container。
1)Controller Manager
Controller Manager作為集群內部的管理控制中心,實現集群故障檢測和恢復的自動化工作,負責執行集群內的副本控制器(Replication Controller)、節點控制器(Node Controller)、資源配額控制器(ResourceQuota Controller)、命名空間控制器(Namespace Controller)、服務賬號控制器(ServiceAccount Controller)、令牌控制器(Token Controller)、服務控制器(Service Controller)和服務端點控制器(Endpoint Controller)。
副本控制器(Replication Controller):定期連接Replication Controller和Pod,保證Replication Controller定義的副本數量與實際集群中運行的Pod數量一致。如果部分宿主機出現異常,Replication Controller可以通過默認模板來創建Pod,也可以直接復制已存在的Pod,保證在其他宿主機啟用相同數量的Pod。
服務端點控制器(Endpoint Controller):定期連接Service和Pod,保證Service到Pod的映射總是最新的(實時更新)。
更多Controller Manager詳見:【轉載】Kubernetes核心原理(二)之Controller Manager

2)API Server
API Server提供了Kubernetes各類資源對象(Pod,Replication Controller,Service等)的增刪改查及watch等HTTP Rest接口,是整個系統的數據總線和數據中心。並且只有API Server能與etcd(存儲)進行通信,其他模塊只能通過API Server訪問集群狀態。
更多API Server詳見:【轉載】Kubernetes核心原理(一)之API Server

3)Scheduler
Scheduler收集和分析當前Kubernetes集群中所有Minion/Node節點的資源(內存、CPU)負載情況,然后依此分發新建的Pod到Kubernetes集群中可用的節點。並且,Scheduler實時監測Kubernetes集群中未分發和已分發的所有運行的Pod,同時也監測Minion/Node節點信息,由於會頻繁查找Minion/Node節點,Scheduler會緩存一份最新的信息在本地。另外,Scheduler在分發Pod到指定的Minion/Node節點后,會把Pod相關的信息Binding寫回API Server。
更多Scheduler詳見:【轉載】Kubernetes核心原理(三)之Scheduler

4)etcd
etcd存儲Kubernetes的配置信息,可以理解為是k8s的數據庫,存儲着k8s容器雲平台中所有節點、pods、網絡等信息。
5)Kubelet
Kubelet是Master節點與Node/Minion節點的橋梁,每個Node/Minion節點都會啟動Kubelet,它會處理Master節點下發的命令和任務,管理節點上的Pod和Pod中的容器。並且Kubelet會在API Server上注冊節點信息,定期向Master匯報節點資源使用情況,通過cAdvisor監控容器和節點資源。可以說是Node/Minion節點上的Pod管家。
具體的工作如下:
1、設置容器的環境變量、給容器綁定Volume、給容器綁定Port、根據指定的Pod運行一個單一容器、給指定的Pod創建network 容器。
2、同步Pod的狀態、同步Pod的狀態、從cAdvisor獲取container info、 pod info、 root info、 machine info。
3、在容器中運行命令、殺死容器、刪除Pod的所有容器。
6)Proxy
Proxy是為了解決外部網絡能夠訪問跨機器集群中容器提供的應用服務而設計的,運行在每個Node上。Proxy提供TCP/UDP sockets的proxy,每創建一種Service,Proxy主要從etcd獲取Services和Endpoints的配置信息(也可以從file獲取),然后根據配置信息在Node上啟動一個Proxy的進程並監聽相應的服務端口,當外部請求發生時,Proxy會根據Load Balancer將請求分發到后端正確的容器處理。
Proxy不但解決了同一主宿機相同服務端口沖突的問題,還提供了Service轉發服務端口對外提供服務的能力,Proxy后端使用了隨機、輪循負載均衡算法。

7)Pod和Container
在Kubernetes系統中,調度的最小顆粒不是單純的容器,而是抽象成一個Pod。Pod是一個可以被創建、銷毀、調度、管理的最小的部署單元,可以包括一個或一組容器。
Container:容器,可以運行服務和程序。

參考:https://kubernetes.io/zh/docs/concepts/architecture/cloud-controller/
Kubernetes核心原理(二)之Controller Manager

