K8s基礎原理
k8s中文社區: https://www.kubernetes.org.cn/
k8s快速入門: http://www.dockone.io/article/932
簡介
Kubernetes 簡單的說就是一個容器集群編排工具
Kubernetes 是為生產環境而設計的容器調度管理系統,對於負載均衡、 服務發現、高可用、滾動升級、自動伸縮等容器雲平台的功能要求有原生支持
一個K8s集群是由分布式存儲(etcd)、服務節點(Minion, etcd現在稱為Node)和控制節點(Master)構成的。所有的集群狀態都保存在etcd中,Master節點上則運行集群的管理控制模塊。Node節點是真正運行應用容器的主機節點,在每個Minion節點上都會運行一個Kubelet代理,控制該節點上的容器、鏡像和存儲卷等。
1. Master(管理節點)核心組件:
- API-Server ---k8s系統對外接口,提供Restful API供客戶端和其他組件調用,支持水平擴展
- Scheduler ---負責對資源進行調度,具體負責分配某個請求的Pod到某個節點上
- Controller ---對不同資源的管理器,維護集群的狀態,包括故障檢測、自動擴展、滾動更新等
- Etcd ---作為K/V數據庫,存放集群狀態和配置相關數據
2. Node(工作節點)核心組件:
- Kubelet --- 節點上最主要的工作代理,匯報節點狀態並實現容器組的生命周期管理
- Kube-proxy --- 代理對抽象應用地址的訪問,負責配置正確的服務發現和負載均衡轉發規則(通常利用iptables規則)
- Container runtime --- 本地容器引擎 (標准僅支持docker(rkt,cri-o,frakti等其他類型的容器使用CRI封裝好的外部命令))
3. Addons(可選組件):
- DNS --- 記錄啟動的容器組和服務地址,為集群提供dns服務
- CNI --- 容器網絡插件必選(Flannel,calio,...)
- WebUI --- web界面
- ...
4. 資源類型:
基礎資源:Pod / Service / Namespace / Volume
高級資源控制器(建立在基礎資源之上):ReplicaSet / Deployment / Daemonset / statefulSet / Job
- Client通過service-ip(cluster-ip)訪問Service
- Service通過Label(Label select)來關聯到Pod
- Service也有可能會被刪除,所以Client還是要通過DNS解析獲得service-ip
- Pod --- 容器運行所在地,也是k8s操作的最小單元。 同一個Pod內的容器默認時共享網絡的,並且可以使用同一存儲卷
5. Kubernetes Network
K8S的架構圖:
K8S組件: