Kubernetes是Google開源的容器集群管理系統。它構建Ddocker技術之上,為容器化的利用提供資源調度、部署運行、服務發現、擴容縮容等整1套功能,本質上可看做是基于容器技術的mini-PaaS平臺。
Kubernetes is an open-source platform for automating deployment, scaling, and operations of application containers across clusters of hosts, providing container-centric infrastructure.
With Kubernetes, you are able to quickly and efficiently respond to customer demand:
Deploy your applications quickly and predictably.
Scale your applications on the fly.
Seamlessly roll out new features.
Optimize use of your hardware by using only the resources you need.
Our goal is to foster an ecosystem of components and tools that relieve the burden of running applications in public and private clouds.
Kubernetes是Google開源的容器集群管理系統,其提供利用部署、保護、 擴大機制等功能,利用Kubernetes能方便地管理跨機器運行容器化的利用,其主要功能以下:
1) 使用Docker對利用程序包裝(package)、實例化(instantiate)、運行(run)。
2) 以集群的方式運行、管理跨機器的容器。
3) 解決Docker跨機器容器之間的通詢問題。
4) Kubernetes的自我修復機制使得容器集群總是運行在用戶期望的狀態。
當前Kubernetes支持GCE、vShpere、CoreOS、OpenShift、Azure等平臺,除此以外,也能夠直接運行在物理機上。
Kubernetes以RESTFul情勢開放接口,用戶可操作的REST對象有3個:
pod:是Kubernetes最基本的部署調度單元,可以包括container,邏輯上表示某種利用的1個實例。比如1個web站點利用由前端、后端及數據庫構建而成,這3個組件將運行在各自的容器中,那末我們可以創建包括3個container的pod。
service:是pod的路由代理抽象,用于解決pod之間的服務發現問題。由于pod的運行狀態可動態變化(比如切換機器了、縮容進程中被終止了等),所以訪問端不能以寫死IP的方式去訪問該pod提供的服務。service的引入旨在保證pod的動態變化對訪問端透明,訪問端只需要知道service的地址,由service來提供代理。
replicationController:是pod的復制抽象,用于解決pod的擴容縮容問題。通常,散布式利用為了性能或高可用性的斟酌,需要復制多份資源,并且根據負載情況動態伸縮。通過replicationController,我們可以指定1個利用需要幾份復制,Kubernetes將為每份復制創建1個pod,并且保證實際運行pod數量總是與該復制數量相等(例如,當前某個pod宕機時,自動創建新的pod來替換)。
master運行3個組件:
apiserver:作為kubernetes系統的入口,封裝了核心對象的增刪改查操作,以RESTFul接口方式提供給外部客戶和內部組件調用。它保護的REST對象將持久化到etcd(1個散布式強1致性的key/value存儲)。
scheduler:負責集群的資源調度,為新建的pod分配機器。這部份工作分出來變成1個組件,意味著可以很方便地替換成其他的調度器。
controller-manager:負責履行各種控制器,目前有兩類:
endpoint-controller:定期關聯service和pod(關聯信息由endpoint對象保護),保證service到pod的映照總是最新的。
replication-controller:定期關聯replicationController和pod,保證replicationController定義的復制數量與實際運行pod的數量總是1致的。
slave(稱作minion)運行兩個組件:
kubelet:負責管控docker容器,如啟動/停止、監控運行狀態等。它會定期從etcd獲得分配到本機的pod,并根據pod信息啟動或停止相應的容器。同時,它也會接收apiserver的HTTP要求,匯報pod的運行狀態。
proxy:負責為pod提供代理。它會定期從etcd獲得所有的service,并根據service信息創建代理。當某個客戶pod要訪問其他pod時,訪問要求會經過本機proxy做轉發。