kubernetes簡介
1,kubernetes是什么?
kubernetes是容器集群管理系統(tǒng),是一個開源的平臺,可以實(shí)現(xiàn)容器集群的自動化部署,自動擴(kuò)容縮,維護(hù)等功能,
特點(diǎn):
可移植:支持公有云,私有云,混合云,多重云(multi-cloud)
可擴(kuò)展:模塊化,插件化,可掛載,可組合
自動化:自動部署,自動重啟,自動復(fù)制,自動伸縮擴(kuò)展
kubernetes是Google2014年創(chuàng)建管理的,是Google十多年大規(guī)模容器管理技術(shù)Borg的開源版本
容器優(yōu)勢總結(jié):
1,快速創(chuàng)建/部署應(yīng)用:與MV虛擬化相比,容器鏡像的創(chuàng)建更加容易
2,持續(xù)開發(fā),集成和部署:提供可靠且頻繁的容器鏡像構(gòu)建/和部署,并使用快速簡單的回滾
3,開發(fā)和運(yùn)行相分離:在bulid或者release階段創(chuàng)建容器鏡像,使得是應(yīng)用和基礎(chǔ)設(shè)施解耦
4,開發(fā),測試和生產(chǎn)環(huán)境一致性:在本地或者外網(wǎng)(生產(chǎn)環(huán)境)運(yùn)行的一致
5,云平臺或者其他操作系統(tǒng):Ubuntu,RHEL,CoreOS,on-prem Google container Engine 或者其他任何環(huán)境中運(yùn)行
6,Loosely coupled,分布式,彈性,微服務(wù)化:應(yīng)用程序分為更小的,獨(dú)立的部件,可以動態(tài)部署和管理
7,資源隔離
8,資源利用率:更高效
kubernetes組件
Master組件
1,kube-apiserver
kube-apiserver用于暴露kubernetes API。任何的資源請求/調(diào)用操作都是通過kube-apiserver提供的接口進(jìn)行的。
2,ETCD
etcd是kubernetes提供的默認(rèn)的存儲系統(tǒng),是保存所有集群數(shù)據(jù),使用時需要為etcd數(shù)據(jù)提供備份計(jì)劃
3,kube-controller-manager
kube-controller-manager運(yùn)行管理控制器,他們是集群中處理常規(guī)任務(wù)的后臺線程,邏輯上,每個控制器是單獨(dú)的線程,單位了降低復(fù)雜性,他們都被編譯成了單個的二進(jìn)制文件并在單個進(jìn)程中運(yùn)行
這些控制器包括:
節(jié)點(diǎn)控制器(node)
副本節(jié)點(diǎn)控制器(Replication):負(fù)責(zé)維護(hù)統(tǒng)中每個副本中的pod
端點(diǎn)控制器(Endpoints):填充Endpoints對象(連接service&&pods)
Servive Account和token控制器:為新的Namespace創(chuàng)建默認(rèn)賬戶訪問API token
4,kube-scheduler
kubr-scheduler監(jiān)視新創(chuàng)建沒有分配到Node的pod,為pod選擇一個Node
5,插件addons
插件(addon)是實(shí)現(xiàn)集群pod和service功能的,Pod有Deployment,ReplicationController等進(jìn)行管理的Namespace插件對象是在kube-system Namespace中創(chuàng)建的。
Node節(jié)點(diǎn)組件
節(jié)點(diǎn)組件運(yùn)行在Node,提供kubernetes運(yùn)行環(huán)境時以及維護(hù)pod
1,kubelet
kubelet是主要的代理的節(jié)點(diǎn),它會監(jiān)視已分配給節(jié)點(diǎn)的pod,具體功能:
1,安裝pod所需要的volume
2,下載pod的secrets
3,pod中運(yùn)行的docker容器
4,定期執(zhí)行容器健康檢查
5,通過在必要時創(chuàng)建鏡像pod,將pod的狀態(tài)報(bào)告給系統(tǒng)的其他部分
6,向系統(tǒng)的其他部分報(bào)告節(jié)點(diǎn)的狀態(tài)
2,kube-proxy
官方介紹:https://kubernetes.io/docs/reference/command-line-tools-reference/kube-proxy/
kube-proxy是是通過在主機(jī)上維護(hù)網(wǎng)絡(luò)規(guī)則并執(zhí)行連接轉(zhuǎn)發(fā)來實(shí)現(xiàn)kubernetes服務(wù)抽象
Kubernetes網(wǎng)絡(luò)代理在每個節(jié)點(diǎn)上運(yùn)行。這反映了每個節(jié)點(diǎn)上Kubernetes API中定義的服務(wù),并且可以在一組后端上執(zhí)行簡單的TCP,UDP和SCTP流轉(zhuǎn)發(fā)或循環(huán)TCP,UDP和SCTP轉(zhuǎn)發(fā)。當(dāng)前可通過與Docker鏈接兼容的環(huán)境變量找到服務(wù)集群的IP和端口,這些環(huán)境變量指定了服務(wù)代理打開的端口。有一個可選的插件,可以為這些群集IP提供群集DNS。用戶必須使用apiserver API創(chuàng)建服務(wù)才能配置代理。
3,docker
docker是用于運(yùn)行容器
了解kubernetes對象
kubernetes對象是kubernetes系統(tǒng)中的持久實(shí)體,kubernetes使用這些實(shí)體來表示集群的狀態(tài)。具體來說可以描述:
1,容器化應(yīng)用正在運(yùn)行(以及在哪些節(jié)點(diǎn)上)
2,這些應(yīng)用的可用資源
3,關(guān)于這些應(yīng)用是如何運(yùn)行的策略如重新策略,升級和錯容
對象(object)和規(guī)范狀態(tài)
每個kukbernetes對象都包含兩個嵌套對象字段,用于管理object的配置:object spec和object status。spec描述了對象所需的狀態(tài),希望object具有的特征,status描述了對象的實(shí)際狀態(tài),并由kubernetes系統(tǒng)提供和更新