Kubernetes技術(shù)分享-文檔資料_第1頁
Kubernetes技術(shù)分享-文檔資料_第2頁
Kubernetes技術(shù)分享-文檔資料_第3頁
Kubernetes技術(shù)分享-文檔資料_第4頁
Kubernetes技術(shù)分享-文檔資料_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1Kubernetes技術(shù)分享架構(gòu)簡介集群搭建常用命令應(yīng)用實例2Kubernetes簡介Kubernetes是谷歌嚴格保密十幾年的秘密武器Borg的一個開源版本,是一個全新的基于容器技術(shù)的分布式架構(gòu)領(lǐng)先方案。Borg是谷歌內(nèi)部使用的大規(guī)模集群管理系統(tǒng),基于容器技術(shù),目的是實現(xiàn)資源管理的自動化,以及跨多個數(shù)據(jù)中心的資源利用率的最大化;K8s是第一個將”一切以服務(wù)為中心,一切圍繞服務(wù)運轉(zhuǎn)”作為指導(dǎo)思想的創(chuàng)新型產(chǎn)品K8s是Go語言開發(fā),是Docker的上層架構(gòu),就好像Java與J2EE的關(guān)系一樣K8s是一個開放的開發(fā)平臺,不局限于任何語言3Kubernetes主要功能主要功能k8s能方便地管理跨機器

2、運行容器化的應(yīng)用提供應(yīng)用部署、維護、擴展機制集群管理、安全防護、準入機制、多應(yīng)用支撐、服務(wù)注冊、服務(wù)發(fā)現(xiàn)、智能負載均衡、故障發(fā)現(xiàn)、自我修復(fù)、服務(wù)滾動升級、在線擴容、資源配額管理使用Docker對應(yīng)用程序包裝、實例化、運行以集群的方式運行、管理跨機器的容器解決Docker跨機器容器之間的通訊問題k8s的自我修復(fù)機制使得容器集群總是運行在用戶期望的狀態(tài)4為什么使用為什么使用Kubernetes?K8s不僅僅支持Docker,還支持Rocket,這是另一種容器技術(shù)。全面擁抱微服務(wù)架構(gòu)使用k8s我們系統(tǒng)可以隨時的整體遷移k8s系統(tǒng)具備了超強的橫向擴容能力k8s提供完善的管理工具,涵蓋了包括開發(fā)、部署測

3、試、運維監(jiān)控在內(nèi)的各個環(huán)節(jié)5K8s集群6K8s架構(gòu)7K8s體系結(jié)構(gòu)8Master集群控制管理節(jié)點,所有的命令都經(jīng)由master處理負責(zé)整個集群的管理和控制,基本上Kubernetes所有的控制命令都是發(fā)給它,它來負責(zé)具體的執(zhí)行過程,我們后面所有執(zhí)行的命令基本都是在Master節(jié)點上運行的Kubernetes API Server(kube-apiserver),提供Http Rest接口的關(guān)鍵服務(wù)進程,是Kubernetes里所有資源的增、刪、改、查等操作的唯一入口,也是集群控制的入口進程Kubernetes Controller Manager(kube-controller-manager

4、),Kubernetes里所有資源對象的自動化控制中心,可以理解為資源對象的“大總管”Kubernetes Scheduler(kube-scheduler),負責(zé)資源調(diào)度(Pod調(diào)度)的進程,相當(dāng)于公交公司的“調(diào)度室”1.etcd Server,Kubernetes里所有的資源對象的數(shù)據(jù)全部是保存在etcd中,(集群部署,不與master放同一臺機器)9Master10Master11etcdetcd是一個高可用的鍵值存儲系統(tǒng),主要用于共享配置和服務(wù)發(fā)現(xiàn)。對比與ZooKeeper,etcd更輕量級1.etcd是由CoreOS開發(fā)并維護的,靈感來自于 ZooKeeper 和 Doozer,提供

5、了與ZooKeeper相似的功能,它使用Go語言編寫,并通過Raft一致性算法處理日志復(fù)制以保證強一致性。Raft是一個新的一致性算法,適用于分布式系統(tǒng)的日志復(fù)制,Raft通過選舉的方式來實現(xiàn)一致性。Google的容器集群管理系統(tǒng)Kubernetes、開源PaaS平臺Cloud Foundry和CoreOS的Fleet都廣泛使用了etcd。在分布式系統(tǒng)中,如何管理節(jié)點間的狀態(tài)一直是一個難題,etcd像是專門為集群環(huán)境的服務(wù)發(fā)現(xiàn)和注冊而設(shè)計,它提供了數(shù)據(jù)TTL失效、數(shù)據(jù)改變監(jiān)視、多值、目錄監(jiān)聽、分布式鎖原子操作等功能,可以方便的跟蹤并管理集群節(jié)點的狀態(tài)12etcd簡單: 支持curl方式的用戶A

6、PI(HTTP+JSON)安全: 可選的SSL客戶端證書認證快速: 單實例每秒 1000 次讀寫能力可靠: 使用Raft保證強一致性Etcd的應(yīng)用場景包括服務(wù)發(fā)現(xiàn)(Service Discovery)、消息發(fā)布與訂閱、負載均衡、分布式通知與協(xié)調(diào)、分布式鎖、分布式隊列。如果你熟悉ZooKeeper, 你會發(fā)現(xiàn)etcd實現(xiàn)了ZooKeeper的功能13Node除了Master,Kubernetes集群中的其他機器被稱為Node節(jié)點, 早期版本也稱為Minion節(jié)點Node節(jié)點才是Kubernetes集群中的工作負載節(jié)點,每個Node都會被Master分配一些工作負載(Docker容器),當(dāng)某個No

7、de宕機,其上的工作負載會被Master自動轉(zhuǎn)移到其他節(jié)點上去kubelet,負責(zé)Pod對應(yīng)的容器的創(chuàng)建、啟停等任務(wù),同時與Master節(jié)點密切協(xié)作,實現(xiàn)集群管理的基本功能。一旦Node被納入集群管理范圍,kubelet進程就會向Master匯報自身的情報,這樣Master可以獲知每個Node的資源使用情況,并實現(xiàn)高效均衡的資源調(diào)度策略。而某個Node超過指定時間不上報信息,會被Master判定為“失聯(lián)”,Node狀態(tài)被標記為不可用(Not Ready),隨后Master會觸發(fā)“工作負載大轉(zhuǎn)移”的自動流程;kube-proxy,實現(xiàn)Kubernetes Service的通信與負載均衡機制的重要

8、組件;1.Docker Engine(docker),Docker引擎,負責(zé)本機的容器創(chuàng)建和管理工作;14Node15 Pod是最小部署單元,一個Pod由一個或多個容器組成,Pod中容器共享存儲和網(wǎng)絡(luò),在同一臺Docker主機上運行。 同一個Pod里的容器共享同一個網(wǎng)絡(luò)命名空間,可以使用localhost互相通信 每個Pod都有一個特殊的被稱為“根容器”的Pause容器,還包含一個或多個緊密相關(guān)的用戶業(yè)務(wù)容器;一個Pod里的容器與另外主機上的Pod容器能夠直接通信;如果Pod所在的Node宕機,會將這個Node上的所有Pod重新調(diào)度到其他節(jié)點上;普通Pod及靜態(tài)Pod,前者存放在etcd中,后

9、者存放在具體Node上的一個具體文件中,并且只能在此Node上啟動運行;Docker Volume對應(yīng)Kubernetes中的Pod Volume;每個Pod可以設(shè)置限額的計算機資源有CPU和Memory; Requests,資源的最小申請量;Limits,資源最大允許使用的量;Pod16Pod17Pod、容器與、容器與Node關(guān)系關(guān)系18Endpoint(IP+Port) 標識服務(wù)進程的訪問點Event 是一個事件記錄,記錄了事件最早產(chǎn)生的時間、最后重復(fù)時間、重復(fù)次數(shù)、發(fā)起者、類型,以及導(dǎo)致此事件的原因等信息。Event通常關(guān)聯(lián)到具體資源對象上,式排查故障的重要參考信息;Endpoint、E

10、vent19Service Service一個應(yīng)用服務(wù)抽象,定義了Pod邏輯集合和訪問這個Pod集合的策略。 Service代理Pod集合對外表現(xiàn)是為一個訪問入口,分配一個集群IP地址,來自這個IP的請求將負載均衡轉(zhuǎn)發(fā)后端Pod中的容器。 Service通過LableSelector選擇一組Pod提供服務(wù)。 在K8s集群中微服務(wù)的負載均衡是由Kube-proxy實現(xiàn)的,在K8s的每個節(jié)點上都有一個Service其實就是我們經(jīng)常提起的微服務(wù)架構(gòu)中的一個“微服務(wù)”,kubernetes中的核心。通過分析、識別并建模系統(tǒng)中的所有服務(wù)為微服務(wù)Kubernetes Service,最終我們的系統(tǒng)由多個提

11、供不同業(yè)務(wù)能力而又彼此獨立的微服務(wù)單元所組成,服務(wù)之間通過TCP/IP進行通信,從而形成了我們強大而又靈活的彈性網(wǎng)絡(luò),擁有了強大的分布式能力、彈性擴展能力、容錯能力20Service21Service22Service 如上圖示,每個Pod都提供了一個獨立的Endpoint(Pod IP+ContainerPort)以被客戶端訪問,多個Pod副本組成了一個集群來提供服務(wù),一般的做法是部署一個負載均衡器來訪問它們,為這組Pod開啟一個對外的服務(wù)端口如8000,并且將這些Pod的Endpoint列表加入8000端口的轉(zhuǎn)發(fā)列表中,客戶端可以通過負載均衡器的對外IP地址+服務(wù)端口來訪問此服務(wù)。運行在N

12、ode上的kube-proxy其實就是一個智能的軟件負載均衡器,它負責(zé)把對Service的請求轉(zhuǎn)發(fā)到后端的某個Pod實例上,并且在內(nèi)部實現(xiàn)服務(wù)的負載均衡與會話保持機制。Service不是共用一個負載均衡器的IP地址,而是每個Servcie分配一個全局唯一的虛擬IP地址,這個虛擬IP被稱為Cluster IP。23Service Node IP Node節(jié)點的IP地址,是Kubernetes集群中每個節(jié)點的物理網(wǎng)卡的IP地址,是真是存在的物理網(wǎng)絡(luò),所有屬于這個網(wǎng)絡(luò)的服務(wù)器之間都能通過這個網(wǎng)絡(luò)直接通信; Pod IP Pod的IP地址,是Docker Engine根據(jù)docker0網(wǎng)橋的IP地址段

13、進行分配的,通常是一個虛擬的二層網(wǎng)絡(luò),位于不同Node上的Pod能夠彼此通信,需要通過Pod IP所在的虛擬二層網(wǎng)絡(luò)進行通信,而真實的TCP流量則是通過Node IP所在的物理網(wǎng)卡流出的; Cluster IP Service的IP地址。特性如下: 僅僅作用于Kubernetes Servcie這個對象,并由Kubernetes管理和分配IP地址;無法被Ping,因為沒有一個“實體網(wǎng)絡(luò)對象”來響應(yīng);只能結(jié)合Service Port組成一個具體的通信端口; Node IP網(wǎng)、Pod IP網(wǎng)域Cluster IP網(wǎng)之間的通信,采用的是Kubernetes自己設(shè)計的一種編程方式的特殊的路由規(guī)則,與I

14、P路由有很大的不同;24LabelLabel可以附加到各種資源對象上,一個資源對象可以定義任意數(shù)量的Label。給某個資源定義一個Label,相當(dāng)于給他打一個標簽,隨后可以通過Label Selector(標簽選擇器)查詢和篩選擁有某些Label的資源對象。我們可以通過給指定的資源對象捆綁一個或多個Label來實現(xiàn)多維度的資源分組管理功能,以便于靈活、方便的進行資源分配、調(diào)度、配置、部署等管理工作; Label Selector示例:select * from pod where pods name=XXX,env=YYY,支持操作符有=、!=、in、not in;25 部署和升級Pod,聲明

15、某種Pod的副本數(shù)量在任意時刻都符合某個預(yù)期值; Pod期待的副本數(shù);用于篩選目標Pod的Label Selector;當(dāng)Pod副本數(shù)量小于預(yù)期數(shù)量的時候,用于創(chuàng)建新Pod的Pod模板(template);Replication Controller(RC) 26 下一代的Replication Controlle,RC與RS唯一區(qū)別就是lableselector支持不同,RS支持新的基于集合的標簽,RC僅支持基于等式的標簽。Replication Controlle只支持基于等式的selector(env=dev或environment!=qa)但Replica Set還支持新的、基于集合的

16、selector(version in (v1.0, v2.0)或env notin (dev, qa)),這對復(fù)雜的運維管理帶來很大方便。Replica Set 27擁有更加靈活強大的升級、回滾功能。在新的版本中,官方推薦使用Replica Set和Deployment來代替RC,兩者相似度90%,相對于RC一個最大升級是我們隨時指導(dǎo)當(dāng)前Pod“部署”的進度。Deployment使用了Replica Set,除非需要自定義升級功能或根本不需要升級Pod,一般情況下,我們推薦使用Deployment而不直接使用Replica Set; 典型使用場景: 創(chuàng)建一個Deployment對象來生成對應(yīng)

17、的Replica Set并完成Pod副本的創(chuàng)建過程; 檢查更新Deployment的狀態(tài)來查看部署動作是否完成(Pod副本的數(shù)量是否達到預(yù)期的值); 更新Deployment以創(chuàng)建新的Pod;(比如鏡像升級) 如果當(dāng)前Deployment不穩(wěn)定,則回滾到一個早先的Deployment版本; 掛起或者恢復(fù)一個Deployment;Deployment 28意思是Pod橫向自動擴容,目標是實現(xiàn)自動化、智能化擴容或縮容。 Pod負載度量指標: CPUUtilizationPercentage 通常使用一分鐘內(nèi)的平均值,可以通過Heapster擴展組件獲取這個值。一個Pod自身的CPU利用率是該Pod

18、當(dāng)前CPU的使用量除以它的Pod Request的值。例如Pod Request定義值為0.4,當(dāng)前Pod使用量為0.2,則它的CPU使用率為50%。但如果沒有定義Pod Request值,則無法使用CPUUtilizationPercentage來實現(xiàn)Pod橫向自動擴容的能力; 應(yīng)用程序自定義的度量指標,比如服務(wù)在每秒內(nèi)的相應(yīng)的請求書(TPS或QPS)Horizontal Pod Autoscaler(HPA)29數(shù)據(jù)卷,是Pod中能夠被多個容器訪問的共享目錄。定義在Pod之上,被一個Pod里的多個容器掛載到具體的文件目錄之下;與Pod生命周期相同。可以讓一個Pod里的多個容器共享文件、讓容

19、器的數(shù)據(jù)寫到宿主機的磁盤上或者寫文件到 共享存儲中Volume30命名空間將對象邏輯上分配到不同Namespace,可以是不同的項目、用戶等區(qū)分管理,并設(shè)定控制策略,從而實現(xiàn)多租戶。 命名空間也稱為虛擬集群。Namespace31Node、Pod、Replication Controller和Service等都可以看作是一種“資源對象”,幾乎所有的資源對象都可以通過Kubernetes提供的kubectl工具執(zhí)行增、刪、改、查等操作并將其保存在ectd中持久化存儲。Kubectl32關(guān)閉CentOS自帶的防火墻服務(wù) systemctl disable firewall # systemctl

20、stop firewall 安裝Etcd和Kubernetes軟件(會自動安裝docker軟件) yuminstallyetcdkubernetes 按順序啟動所有服務(wù) systemctlstartetcd systemctlstart docker # systemctl start kube-apiserver # systemctl start kube-controller-manager # systemctl start kube-scheduler # systemctl start kubelet # systemctl start tube-proxy64位位 CentOS7

21、 單機版單機版Kubernetes集群環(huán)境安裝集群環(huán)境安裝33由于篇幅,k8s集群安裝文檔,后續(xù)附件提供Kubernetes集群環(huán)境安裝集群環(huán)境安裝34訪問地址:3:30001/#!/login獲取token: #kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep tokenKubernetes-dashboard35Grafana地址:2:301

22、08/Kubernetes監(jiān)控監(jiān)控36Kubernetes負載均衡負載均衡nginx ingress37Kubernetes 暴露服務(wù)的方式目前只有三種:LoadBlancer Service、NodePort Service、Ingress;前兩種估計都應(yīng)該很熟悉,下面詳細的了解下這個 Ingress Ingress由兩部分組成:Ingress Controller 和 Ingress 服務(wù)。 Ingress Contronler 通過與 Kubernetes API 交互,動態(tài)的去感知集群中 Ingress 規(guī)則變化,然后讀取它,按照自定義的規(guī)則,規(guī)則就是寫明了哪個域名對應(yīng)哪個servic

23、e,生成一段 Nginx 配置,再寫到 Nginx-ingress-control的 Pod 里,這個 Ingress Contronler 的pod里面運行著一個nginx服務(wù),控制器會把生成的nginx配置寫入/etc/nginx.conf文件中,然后 reload 一下 使用配置生效。以此來達到域名分配置及動態(tài)更新的問題。Kubernetes負載均衡負載均衡nginx ingress38Demo地址:1/demo/查看nginx-ingress容器里的nginx配置,是動態(tài)變化的查看容器日志,輪詢訪問兩臺tomcatKubernetes負載均衡負載均衡nginx ingres

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論