Kubernetes概述
Kubernetes是Google開源的一個容器編排引擎,它支持自動化部署、大規模可伸縮、套用容器化管理。在生產環境中部署一個應用程式時,通常要部署該套用的多個實例以便對套用請求進行負載均衡。
在Kubernetes中,我們可以創建多個容器,每個容器裡面運行一個套用實例,然後通過內置的負載均衡策略,實現對這一組套用實例的管理、發現、訪問,而這些細節都不需要運維人員去進行複雜的手工配置和處理。
Kubernetes 特點
•可移植: 支持公有雲,私有雲,混合雲,多重雲(multi-cloud)
•可擴展: 模組化, 外掛程式化, 可掛載, 可組合
•自動化: 自動部署,自動重啟,自動複製,自動伸縮/擴展
Kubernetes 組件
•1Master 組件
•1.1kube-apiserver
•1.2ETCD
•1.3kube-controller-manager
•1.4cloud-controller-manager
•1.5kube-scheduler
•1.6外掛程式 addons
•1.6.1DNS
•1.6.2用戶界面
•1.6.3容器資源監測
•1.6.4Cluster-level Logging
•2節點(Node)組件
•2.1kubelet
•2.2kube-proxy
•2.3docker
•2.4RKT
•2.5supervisord
•2.6fluentd
本文介紹了Kubernetes集群所需的各種二進制組件。
Master 組件
Master組件提供集群的管理控制中心。
Master組件可以在集群中任何節點上運行。但是為了簡單起見,通常在一台VM/機器上啟動所有Master組件,並且不會在此VM/機器上運行用戶容器。請參考構建高可用群集以來構建multi-master-VM。
kube-apiserver
kube-apiserver用於暴露Kubernetes API。任何的資源請求/調用操作都是通過kube-apiserver提供的接口進行。請參閱構建高可用群集。
ETCD
etcd是Kubernetes提供默認的存儲系統,保存所有集群數據,使用時需要為etcd數據提供備份計畫。
kube-controller-manager
kube-controller-manager運行管理控制器,它們是集群中處理常規任務的後台執行緒。邏輯上,每個控制器是一個單獨的進程,但為了降低複雜性,它們都被編譯成單個二進制檔案,並在單個進程中運行。
這些控制器包括:
•節點(Node)控制器。
•副本(Replication)控制器:負責維護系統中每個副本中的pod。
•端點(Endpoints)控制器:填充Endpoints對象(即連線Services&Pods)。
•Service Account和Token控制器:為新的Namespace創建默認帳戶訪問API Token。
cloud-controller-manager
雲控制器管理器負責與底層雲提供商的平台互動。雲控制器管理器是Kubernetes版本1.6中引入的,目前還是Alpha的功能。
雲控制器管理器僅運行雲提供商特定的(controller loops)控制器循環。可以通過將--cloud-providerflag設定為external啟動kube-controller-manager ,來禁用控制器循環。
cloud-controller-manager 具體功能:
•節點(Node)控制器
•路由(Route)控制器
•Service控制器
•卷(Volume)控制器
kube-scheduler
kube-scheduler監視新創建沒有分配到Node的Pod,為Pod選擇一個Node。
外掛程式 addons
外掛程式(addon)是實現集群pod和Services功能的。Pod由Deployments,ReplicationController等進行管理。Namespace 外掛程式對象是在kube-system Namespace中創建。
DNS
雖然不嚴格要求使用外掛程式,但Kubernetes集群都應該具有集群 DNS。
群集 DNS是一個DNS伺服器,能夠為 Kubernetes services提供 DNS記錄。
由Kubernetes啟動的容器自動將這個DNS伺服器包含在他們的DNS searches中。
用戶界面
kube-ui提供集群狀態基礎信息查看。
容器資源監測
容器資源監控提供一個UI瀏覽監控數據。
Cluster-level Logging
Cluster-level logging,負責保存容器日誌,搜尋/查看日誌。
節點(Node)組件
節點組件運行在Node,提供Kubernetes運行時環境,以及維護Pod。
kubelet
kubelet是主要的節點代理,它會監視已分配給節點的pod,具體功能:
•安裝Pod所需的volume。
•下載Pod的Secrets。
•Pod中運行的 docker(或experimentally,rkt)容器。
•定期執行容器健康檢查。
•Reports the status of the pod back to the rest of the system, by creating amirror podif necessary.
•Reports the status of the node back to the rest of the system.
kube-proxy
kube-proxy通過在主機上維護網路規則並執行連線轉發來實現Kubernetes服務抽象。
docker
docker用於運行容器。
RKT
rkt運行容器,作為docker工具的替代方案。
supervisord
supervisord是一個輕量級的監控系統,用於保障kubelet和docker運行。
fluentd
fluentd是一個守護進程,可提供cluster-level logging.。