kubernetes(k8s)
應(yīng)用部署演進過程
我們從上圖可以看到,應(yīng)用越來越看重應(yīng)用本身了,慢慢的不受物理機的差異,不受操作系統(tǒng)的差異,開發(fā)者可以花更多精力去到應(yīng)用本身。
k8s概念
簡單理解,k8s就是傳統(tǒng)的云平臺上的linux。
kubernetes是一個以Google Borg(google內(nèi)部容器管理平臺)為原型,重新設(shè)計和實現(xiàn)的容器管理和調(diào)度編排工具。
2014年由谷歌開源。
同樣功能的工具還有docker公司的Swarm和apache的Mesos,但目前kubernetes好像笑到了最后。
容器編排管理平臺
k8s可以以容器組pod為基本編排和調(diào)度單位
k8s提供資源分配管理功能
k8s提供健康檢查,伸縮,滾動升級功能
k8s提供聲明式的對象配置模型
微服務(wù)架構(gòu)平臺
k8s提供服務(wù)發(fā)現(xiàn)與內(nèi)部路由
k8s提供對服務(wù)的快速部署和自動的負載均衡
可移植云平臺
k8s被各大云廠商承認并支持,在各個云平臺之上,又搞了一層通用平臺,即可實現(xiàn)跨云移植
k8s架構(gòu)
k8s集群是由一群節(jié)點(node)組成,這些節(jié)點可能部署在物理服務(wù)器或云服務(wù)器上。
每個節(jié)點都安裝了node組件,node組件是真正運行負載的組件
另外有個特殊節(jié)點上安裝了master組件,那這個節(jié)點也就是master節(jié)點
master組件
集群的控制中心,每個集群至少一個master組件,
高可用就多個master節(jié)點裝多個master組件
master組件包含:apiserver,etcd數(shù)據(jù)庫,controller manager,scheduler
apiserver是master組件的核心,提供各種api接口,是整個集群的唯一入口,其他master組件都通過調(diào)用api接口實現(xiàn)各自的功能
scheduler通過apiserver接口監(jiān)聽新建pod副本信息,通過調(diào)度算法為該pod選擇一個最合適的node節(jié)點,調(diào)度算法包括先預選出一批預選節(jié)點,再優(yōu)選處一個積分最高的節(jié)點,調(diào)度算法也可自定義配置
controller manager是集群內(nèi)各種controller資源的核心管理者,controller資源有集群內(nèi)的node,pod副本,服務(wù)端點,命名空間,服務(wù)賬號,資源配額等。當某個node宕機時,controller manager就會及時發(fā)現(xiàn)并執(zhí)行修復流程,保證集群始終可用。
etcd數(shù)據(jù)庫是一個高效的k-v數(shù)據(jù)庫,存儲著集群中所有的對象和狀態(tài)。一般和master組件安裝在同一個node上,高可用模式需要部署數(shù)據(jù)量集群
node組件
通過code controller可以動態(tài)的在集群中添加或刪除node資源
node組件包含:kubelet,kube-proxy
kubelet組件是node中唯一一個以非容器形式進程組件,節(jié)點啟動就被自動拉起,常駐節(jié)點中,也稱節(jié)點管家,管理節(jié)點使用狀況,定期向master匯報,是master node和worker node連接的橋梁。
kube-proxy組件就是個代理,主要是負責將到達的請求負載均衡的轉(zhuǎn)發(fā)到后端的多個pod實例上。
一個node組件管著一批pod在執(zhí)行任務(wù)
pod
pod是集群的調(diào)度基本單元。
是一個有特定關(guān)系的容器的集合。
一個pod就代表集群中的一個進程。
pod一般不由用戶創(chuàng)建,pod的ip也是不穩(wěn)定的。
kubectl工具
最左邊的kubectl是一個k8s的命令行工具,用戶使用命令行的方式與集群交互
k8s概念
k8s對象:
一種持久化用于表示集群狀態(tài)的實體,一般使用yaml文件描述對象,對象信息包括有哪些容器在運行,運行在哪個node上,有哪些可用資源,應(yīng)用的各種策略(重啟策略,容錯策略等)。
所有k8s對象狀態(tài)的集合,就是整個k8s集群的狀態(tài)。
通過kubectl工具或者api可以直接管理k8s對象。
可以類比java中的對象的概念,k8s對象,也有屬性,方法,另外還有狀態(tài)信息
class k8s{// 對象的類型,包括Pod,Service,Deployment等Kind kind;//對象的元數(shù)據(jù),包括name,namespace,labels,annotationsMetadata metadata;//對象的規(guī)格信息,比如replicas(表示副本信息),selector(標簽匹配)等Spec spec;//增刪改查等方法public Return method(){...}//對象狀態(tài),保存在etcd數(shù)據(jù)庫中Status status; }Name和UID
集群中的所有k8s對象,都是由name和UID明確標識。
不同類型對象的name可以是一樣的。
UID是每個實例化的對象唯一一個,而且是整個集群的生命周期內(nèi)唯一。
可以用api通過對象的name訪問到該對象:
/api/{version}/namespaces/{namespace}/{kind}/name
namespace
namespace不僅僅是個屬性,本身也是一個對象
作用是將物理集群劃分為多個虛擬集群
namespace直接完全隔離,常用作隔離不同的用戶權(quán)限
k8s集群內(nèi)置3個namespace:default,kube-system,kube-public。
label
label標簽是用于建立集群對象直接的靈活的,松耦合的多維關(guān)聯(lián)關(guān)系。
本質(zhì)上就是k-v鍵值對。
一個對象上可以有多個標簽
不同類型的對象,可以通過相同的標簽建立關(guān)聯(lián)關(guān)系
作用:為了標識對象,選擇出對象
annotations
annotations注解,可以將任意非標識性元數(shù)據(jù)附加到對象上
annotations本質(zhì)也是k-v鍵值對
一般存對象的版本信息,時間戳等。
總結(jié)
以上是生活随笔為你收集整理的kubernetes(k8s)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java apktoo_apktool.
- 下一篇: gtx1660是什么级别的_GTX166