1、kubernetes 是什麼
Google2014年推出的容器叢集管理系統
k8s用于容器化應用程式的部署、擴充和管理
k8s提供了容器編排、資源排程、彈性伸縮、部署管理、服務發現等一系列功能
k8s的目标是讓部署容器化應用簡單高效
總結:可以了解成一個容器平台、微服務平台(非常适合微服務架構)、便攜式雲平台
2、kubernetes 特性
2.1 自我修複:
在節點故障時重新啟動失敗的容器,替換和重新部署,保證預期我們設定的副本的數量;
殺死健康檢查失敗的容器,并且在沒有準備好之前是不會處理用戶端請求的(不對外提供服務),保證線上服務不中斷
2.2 彈性伸縮(比如618活動,保證我們服務的快速縮容和擴容):
使用指令、UI或者基于CPU使用情況自動快速擴容和縮容應用的程式執行個體(容器的副本數),
保證應用業務高峰并發時的高可用性;
在業務低峰時期回收資源,以減小成本運作服務
2.3 自動部署和復原
k8s 采用滾動更新的政策更新應用,一次更新一個Pod,而不是同時删除所有的pod,如果更新過程中出現問題,将復原更改,確定更新不影響業務
2.4 服務發現和負載均衡
k8s為多個容器提供一個統一通路入口(内部IP位址和一個DNS名稱),并且負載均衡關聯的所有容器,使得使用者無需考慮容器IP的問題
2.5 機密資料(密碼,證書)和配置管理
k8s提供存儲能力(可以把密碼加密放在容器存儲中)
管理機密資料和應用程式的配置,而不需要把敏感的資料暴露在鏡像裡,提高敏感資料的安全性,并且可以把一些常用的配置存儲在k8s中,友善應用程式的使用
2.6 存儲編排
挂載外部的存儲系統,無論是來自本地存儲,公有雲,還是網絡存儲(NFS《GlustFS,Ceph)
都作為叢集資源的一部分使用,極大的提高存儲使用靈活性
2.7 批處理
提供一次性任務,定時任務,滿足批量資料處理和分析的場景
3、Kubernetes 叢集架構與元件(http://docs.kubernetes.org.cn/251.html)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yN4ATYhRjN3kDZ3Q2M3gjY4UTMjdDZ2gTZmVzY2kTYi9CX3EzLchDMwIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
總結:
Master 元件:
kube-apiserver :
Kubernetes API 叢集的統一入口,各元件的協調者,以RESTful API提供接口方式,所有的對象資源的
增删改查和監聽操作都交給APIServer處理後再送出給etcd資料庫做持久化存儲
Kube-controller-manager
處理叢集中正常背景任務,一個資源對應一個控制器,而controllerManager就是負責處理這些控制器的
kube-scheduler
根據排程算法為新建立的pod選擇一個Node節點,可以任意部署,可以部署在同一個節點上,也可以部署在不同的節點上
etcd
分布式鍵值存儲系統,用于儲存叢集狀态資料,比如Pod,Service等對象資訊
Node元件:
kubelet:
kubelet 是Master在Node節點上的Agent,管理本機運作容器的生命周期,比如建立容器,Pod挂載資料卷,下載下傳secret,擷取容器和節點狀态等工作,kubelet 将每個Pod轉換成一組容器
kube-proxy:
在Node節點上實作Pod網絡代理,維護網絡規則和四層負載均衡工作。實作讓Pod節點(一個或者多個容器)對外提供服務
docker或rocket
容器引擎,運作容器
4、Kubernetes 核心概念
模型對象
Pod
• 最小部署單元
• 一組容器的集合
• 一個Pod中的容器共享網絡命名空間
• Pod是短暫的
Controllers
• ReplicaSet : 確定預期的Pod副本數量
• Deployment : 無狀态應用部署
• StatefulSet : 有狀态應用部署
• DaemonSet : 確定所有Node運作同一個Pod
• Job : 一次性任務
• Cronjob : 定時任務
更進階層次對象,部署和管理Pod
Service
• 防止Pod失聯
• 定義一組Pod的通路政策
Label : 标簽,附加到某個資源上,用于關聯對象、查詢和篩選
Namespaces : 命名空間,将對象邏輯上隔離
Annotations :注釋