Kubernetes 設計概要git
(原文:https://github.com/GoogleCloudPlatform/kubernetes/blob/master/DESIGN.md)github
概述網絡
---------------------------------架構
* Kubernetes 構建於 Docker之上,是基於container集羣的調度服務。用戶在須要 container 時,會向 Kubernetes 發起請求,Kubernetes 會從worker節點中選取合適的container迴應。frontend
* 隨着基於container的應用和系統逐漸擴張,已經出現不少便捷的container工具,它們的工做原理大同小異(Kubernetes也不例外)工具
* 更進一步看 Kubernetes 的架構時,咱們更傾向將其做爲 worker節點 和 service 的 master 來看google
關鍵概念:Container Podspa
---------------------------------命令行
* 不一樣於 Docker 基於獨立的 container,Kubernetes 是基於 pod設計
* pod 是一組 containers,被調度分配在同一個物理節點之上
* 除上以外,一個 pod 還擁有相同的 IP 、存儲 和 端口映射
關鍵概念:Lables
---------------------------------
* pods 經過 labels 進行組織,每一個pod均可以有多個lables(key=>value形式)
* label機制是 services 和 replicationControllers 工做的基礎(其操做單元)
* label能夠疊加,以集合的形式使用,
如:
有10個節點擁有label{tier=frontend,stack=prod},但想在replicationController 中分爲兩類
能夠其中(假如)9個節點爲{tier=frontend,stack=prod,canary=no}
另外1個節點爲{tier=frontend,stack=prod,canary=yes}
則可在 replicationController 中分別控制
Kubernetes 節點
---------------------------------
* Kubernetes 節點上運行 Docker containers, Docker 負責管理下載鏡像、運行 container 等細節
* Kubernetes
Kubelet
* Kubelet 是邏輯中繼器,是 Compute Engine image 的一部分
* Kubelet 以 container 爲單位,每一個 conatiner manifest(manifest示例:https://developers.google.com/compute/docs/containers/container_vms#container_manifest)
爲一個 YAML 文件,在其中描述了 pod 的屬性
* Kubelet 包含一簇的 manifest,在其中描述了container/pod的工做機制,而且 Kubelet 要負責保證 containers 依照 manifest 的定義被啓動和執行
* manifest 有如下提供方式
- File:經過命令行傳入,每20秒檢查一次
- HTTP endpoint:做爲參數manifest,也是每20秒檢查一次
- etcd server:Kubelet 可監察 etcd 上的指定文件,對manifest的更改能夠更快的發現並同步
- HTTP server:Kubelet 提供了HTTP接口以提交manifest
Kubernetes Proxy
* 每一個worker節點上運行了一個network proxy
* proxy 支持 TCP流轉發 或 round-robin 轉發
Kubernetes Master
---------------------------------
* etcd
- 穩定可靠地存儲全部 master 的狀態
* Kubernetes API Server
- pod:每一個pod都在API層有表現
- service:service是proxy的配置單元,service會被命名,並指向一個或多個pod
- replicationController:一個複製controller 帶有一個模板,並保證時刻都有必定數量的複製器在運行
- API提供的其餘功能
-- 將pod調度到worker節點上,目前的調度器實現很簡單
-- 維護pod和service配置的一致性
* Kubernetes Controller Manager Server
- repliationController 配置項不是必須的
- repliationController 是基於pod
- 爲了更好的層次,repliationController 的邏輯實際由另外一個server負責,這個新server會監測etcd對repliationController 的操做,而後用 Kubernetes API 去實施 repliation
Network Model
---------------------------------
* Kubernetes 擴展了 Docker 的網絡模型,爲使得每一個 pod 在共享的網絡中只有一個 IP,並能經過這個IP和其餘物理機/container無障礙的通訊