
理解Kubernetes
Kubernetes是一個跨多主機(jī)的應(yīng)用程序容器管理平臺
面向容器的應(yīng)用程序,提供豐富管理特性,如自動擴(kuò)展、滾動部署、技術(shù)資源、存儲卷管理
可運(yùn)行在裸機(jī)上、數(shù)據(jù)中心、公有云或混合云
Kubernetes包含應(yīng)用程序容器的主要操作要求:
容器部署、持久化存儲、容器監(jiān)控、計算資源管理、自動擴(kuò)展、高可用(集群聯(lián)邦)
Kubernetes組件


Master與節(jié)點通信
客戶端使用kubectl向API服務(wù)器發(fā)送請求
API服務(wù)器響應(yīng)請求,在etcd中推送和提取響應(yīng)的對象信息
調(diào)度器Scheduler決定應(yīng)該分配那個節(jié)點來執(zhí)行任務(wù)(如運(yùn)行pod)
控制管理器Controller Manager監(jiān)控正在進(jìn)行的任務(wù),當(dāng)狀態(tài)異常時做響應(yīng)
API服務(wù)器通過kubelet從Pod獲取日志,并作為master組件之間的轉(zhuǎn)發(fā)中心

開始使用Kubernetes


控制滾動升級的參數(shù)


所有容器與服務(wù)選擇器相匹配,服務(wù)會將流量分發(fā)到所有Pod,而不需要顯示分配

Kubernetes四種服務(wù)類型
ClusterIP:默認(rèn)服務(wù)類型,暴露服務(wù)的集群內(nèi)部IP,集群中的Pod可以通過IP地址、環(huán)境變量或DNS訪問服務(wù),默認(rèn)情況下Kubernetes會為每個服務(wù)器暴露7個環(huán)境變量,前兩個被插件kube-dns用作服務(wù)發(fā)現(xiàn),有些情況,用戶既不需要負(fù)載均衡也不需要代理,可以設(shè)置ClusterIP為none,headless service
NodePort:Kubernetes將在每個節(jié)點上分配一個特點范圍的端口,任何端口上的流量都將被路由到服務(wù)端口
LoadBalancer:適用于云服務(wù)提供商,通過創(chuàng)建該服務(wù),Kubernetes將通過云服務(wù)提供商向服務(wù)提供負(fù)載均衡器,externalname為及群眾的外部端點創(chuàng)建CNAME的橋梁,使用選擇器的服務(wù)器:服務(wù)使用選擇器來匹配Pod以引導(dǎo)流量

示例:在另一個pod中使用${SVCNAME}_SERVICE_HOST來檢查能否訪問到nginx Pod

不使用選擇器,kubernetes不會創(chuàng)建端點,不知道如何路由流量,沒有選擇器可匹配pod,必須自己創(chuàng)建

容器編排
示例:Kubernetes世界中的kiosk
kiosk作為前端Web服務(wù),為票務(wù)的get\put請求提供的端口;redis作為緩存,管理擁有的票數(shù);還充當(dāng)發(fā)布訂閱系統(tǒng),有票賣出kiosk就向其發(fā)布事件;訂閱者recorder作為記錄器,將寫入時間戳并記錄到MySQL數(shù)據(jù)庫當(dāng)中
先啟動MySQL:recorder要依賴它,創(chuàng)建MySQL前需創(chuàng)建好對應(yīng)的Secret和ConfigMap
將lcredis-service.default通過環(huán)境變量傳到kiosk,kube-dns為service對象創(chuàng)建DNS名稱(服務(wù)),kiosk可通過環(huán)境變量訪問redis主機(jī)
創(chuàng)建Recorder,沒有暴露任何端口,不需要創(chuàng)建service對象
Recorder需要訪問Redis和MySQL,通過Secret傳遞root憑據(jù),Redis和MySQL通過對應(yīng)服務(wù)的DNS
<service_name>.<namespace>進(jìn)行訪問
