




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
云計(jì)算虛擬化技術(shù)基礎(chǔ)與實(shí)踐容器集群管理目錄CONTENT01.容器集群管理技術(shù)02.DockerSwarm概述03.DockerSwarm集群搭建與實(shí)踐04.Kubernetes概述05.Kubernetes集群搭建與實(shí)踐本章重點(diǎn)了解容器集群管理的概念。了解常用的容器集群管理工具。理解DockerSwarm中的重要概念。掌握DockerSwarm集群的搭建方法。理解Kubernetes中的重要概念及其功能架構(gòu)。掌握Kubernetes集群的搭建方法。掌握在Kubernetes集群中部署應(yīng)用的簡(jiǎn)單方式。容器集群管理技術(shù)容器技術(shù)快速發(fā)展容器集群管理優(yōu)勢(shì)011.容器技術(shù)快速發(fā)展由Docker引領(lǐng)先鋒,容器在過(guò)去的幾年里得到了飛速發(fā)展。容器技術(shù)提供了組件化環(huán)境,能夠幫助應(yīng)用在云之間輕松遷移。容器技術(shù)還提供輕量化打包應(yīng)用的方式,是所有DevOps(Development和Operations的組合)工具的重要組成部分。幾乎所有需要快速且經(jīng)常更改和重新部署的應(yīng)用程序都非常適合集裝箱化。使用微服務(wù)架構(gòu)的應(yīng)用程序是一種自然選擇,容器為基于微服務(wù)的應(yīng)用程序提供了一個(gè)理想的應(yīng)用程序部署單元和自包含的執(zhí)行環(huán)境。容器解決了開(kāi)發(fā)人員的生產(chǎn)力問(wèn)題,使DevOps工作流變得異常流暢。2.容器集群管理優(yōu)勢(shì)運(yùn)行一個(gè)容器就像一個(gè)單獨(dú)的樂(lè)器,單獨(dú)播放它的交響樂(lè)樂(lè)譜。容器集群管理允許指揮家通過(guò)管理和塑造整個(gè)樂(lè)團(tuán)的聲音來(lái)統(tǒng)一管弦樂(lè)隊(duì)。在單機(jī)上運(yùn)行容器,無(wú)法發(fā)揮它的最大效能,只有形成集群,才能最大程度發(fā)揮容器的良好隔離、資源分配與編排管理的優(yōu)勢(shì)。所以用戶需要一套管理系統(tǒng),對(duì)Docker及容器進(jìn)行更高級(jí)更靈活的管理,按照用戶的意愿和整個(gè)系統(tǒng)的規(guī)則,完全自動(dòng)化的處理好容器之間的各種關(guān)系,這些任務(wù)都屬于容器集群管理的范疇。目前,正在影響現(xiàn)代基礎(chǔ)設(shè)施的兩個(gè)趨勢(shì)分別是容器和DevOps。DevOps生態(tài)系統(tǒng)正不斷發(fā)展,提供著持續(xù)集成、持續(xù)測(cè)試、持續(xù)部署和持續(xù)監(jiān)控的功能,從而提高了軟件開(kāi)發(fā)的速度。另一方面,容器正與DevOps實(shí)踐相結(jié)合,以實(shí)現(xiàn)大規(guī)模的快速部署。2.容器集群管理優(yōu)勢(shì)容器集群管理的優(yōu)勢(shì)包括以下幾個(gè)方面:1.容器的短生命周期和增加的部署密度使得基礎(chǔ)設(shè)施監(jiān)控愈加重要,需要被單獨(dú)監(jiān)控的事物以指數(shù)的數(shù)量級(jí)增加。容器有助于提高開(kāi)發(fā)人員的生產(chǎn)效率,容器集群管理工具則是為組織優(yōu)化其DevOps和運(yùn)營(yíng)投資提供了幫助。2.容器集群管理工具提供容器調(diào)度和集群管理的技術(shù),提供基于容器應(yīng)用可擴(kuò)展性的基本機(jī)制,用于跨多個(gè)主機(jī)協(xié)調(diào)創(chuàng)建、管理和更新多個(gè)容器。3.容器集群管理工具可用于自動(dòng)化管理任務(wù),能夠進(jìn)行資源的調(diào)配和部署,能夠進(jìn)行負(fù)載均衡和流量路由,能夠監(jiān)控容器運(yùn)行狀況,根據(jù)需求對(duì)容器進(jìn)行配置應(yīng)用,還能保障容器間交互的安全性和可用性。4.容器集群管理的優(yōu)勢(shì)還包括:高效的資源管理;可無(wú)縫擴(kuò)展的服務(wù);集群的高可用性;低成本的大規(guī)模運(yùn)營(yíng)等。DockerSwarm概述DockerSwarm簡(jiǎn)介DockerSwarm關(guān)鍵概念DockerSwarm常見(jiàn)命令021.
DockerSwarm簡(jiǎn)介DockerSwarm是Docker公司推出的用來(lái)管理Docker集群的平臺(tái),主要使用Go語(yǔ)言開(kāi)發(fā)完成,代碼開(kāi)源在/docker/swarm。DockerSwarm和DockerCompose一樣,都是Docker官方容器編排項(xiàng)目。DockerCompose是一個(gè)在單個(gè)服務(wù)器或主機(jī)上創(chuàng)建多個(gè)容器的工具DockerSwarm則可以在多個(gè)服務(wù)器或主機(jī)上創(chuàng)建容器集群服務(wù),對(duì)于微服務(wù)的部署,顯然DockerSwarm更加適合。從Dockerv1.12開(kāi)始,DockerSwarmKit項(xiàng)目開(kāi)啟并且被集成進(jìn)DockerEngine,并內(nèi)置服務(wù)發(fā)現(xiàn)工具。其主要作用是把若干臺(tái)Docker主機(jī)抽象為一個(gè)整體,并且通過(guò)一個(gè)入口統(tǒng)一管理這些Docker主機(jī)上的各種Docker資源。與Kubernetes相比,DockerSwarm更加輕量級(jí),具有的功能也較Kubernetes更少。1.
DockerSwarm簡(jiǎn)介如圖DockerSwarm集群,里面有多臺(tái)物理服務(wù)器,每臺(tái)服務(wù)器上都裝有Docker并且開(kāi)啟了基于HTTP的DockerAPI。SwarmManager用來(lái)管理集群中的容器資源。它的管理對(duì)象是集群層面的,只能籠統(tǒng)地向集群發(fā)出指令而不能具體到某臺(tái)具體的服務(wù)器上。Manager向外暴露了一個(gè)HTTP接口,外部用戶通過(guò)這個(gè)HTTP接口來(lái)實(shí)現(xiàn)對(duì)集群的管理。DockerSwarm的基本架構(gòu)2.DockerSwarm關(guān)鍵概念Swarm集群的管理和編排是使用嵌入Docker引擎的SwarmKit。當(dāng)DockerEngine初始化了一個(gè)Swarm或者加入到一個(gè)存在的Swarm時(shí),它就啟動(dòng)了SwarmNode。沒(méi)啟動(dòng)SwarmNode時(shí),Docker執(zhí)行的是容器命令。運(yùn)行SwarmNode后,Docker增加了編排Service的能力。Docker允許在同一個(gè)Docker主機(jī)上既運(yùn)行SwarmService,又運(yùn)行單獨(dú)的容器。Node一個(gè)節(jié)點(diǎn)Node是Docker引擎集群的一個(gè)實(shí)例。Swarm中的每個(gè)DockerEngine都是一個(gè)Node,有兩種類型的Node:ManagerNode和WorkerNode。Service服務(wù)Service定義了WorkerNode上要執(zhí)行的任務(wù)。Swarm的主要編排任務(wù)就是保證Service處于期望的狀態(tài)下。Task任務(wù)Task是在Docker容器中執(zhí)行的命令,Manager節(jié)點(diǎn)根據(jù)指定數(shù)量的任務(wù)副本分配任務(wù)給Worker節(jié)點(diǎn)。Task是Service的執(zhí)行實(shí)體,Task啟動(dòng)Docker容器并在容器中執(zhí)行任務(wù)。2.DockerSwarm關(guān)鍵概念ManagerNode負(fù)責(zé)執(zhí)行編排和集群管理工作,保持并維護(hù)Swarm狀態(tài)。Swarm中如果有多個(gè)ManagerNode,集群會(huì)自動(dòng)協(xié)商并選舉出一個(gè)Leader執(zhí)行編排任務(wù)。WorkerNode接受并執(zhí)行由ManagerNode派發(fā)的任務(wù)。在默認(rèn)配置下,ManagerNode同時(shí)也是一個(gè)WorkerNode,不過(guò)也可以將其配置成Manager-onlyNode,讓其專職負(fù)責(zé)編排和集群管理工作。WorkerNode會(huì)定期向ManagerNode報(bào)告自己的狀態(tài)和它正在執(zhí)行的任務(wù)狀態(tài),這樣Manager就可以維護(hù)整個(gè)集群的狀態(tài)。為了在Swarm中部署應(yīng)用,需要在ManagerNode上執(zhí)行部署命令,ManagerNode會(huì)將部署任務(wù)拆解并分配給一個(gè)或多個(gè)WorkerNode完成部署。3.DockerSwarm常見(jiàn)命令命令說(shuō)明dockerswarminit用于創(chuàng)建一個(gè)新的Swarm。執(zhí)行該命令的節(jié)點(diǎn)會(huì)成為第一個(gè)管理節(jié)點(diǎn),并且會(huì)切換到Swarm模式。dockerswarmjoin-token用于查詢加入管理節(jié)點(diǎn)和工作節(jié)點(diǎn)到現(xiàn)有Swarm時(shí)所使用的命令和Tokendockerswarmjoin加入Swarm集群dockerswarmleave離開(kāi)Swarm集群dockerswarmupdate對(duì)Swarm集群更新配置dockernodels用于列出Swarm中的所有節(jié)點(diǎn)及相關(guān)信息dockernoderm
只能刪除down狀態(tài)的節(jié)點(diǎn),要?jiǎng)h除active狀態(tài)的,需要加上force參數(shù)dockerservicels查看服務(wù)列表dockerserviceps查看具體服務(wù)信息dockerserviceinspect用于獲取關(guān)于服務(wù)的詳盡信息dockerservicecreate用于創(chuàng)建一個(gè)新服務(wù)dockerserviceupdate用于對(duì)運(yùn)行中的服務(wù)的屬性進(jìn)行變更dockerservicelogs用于查看服務(wù)的日志DockerSwarm集群搭建與實(shí)踐DockerSwarm集群搭建DockerSwarm集群服務(wù)創(chuàng)建DockerSwarm服務(wù)擴(kuò)容DockerSwarm集群節(jié)點(diǎn)離開(kāi)DockerSwarm集群服務(wù)滾動(dòng)升級(jí)031.DockerSwarm集群搭建本小節(jié)以一個(gè)Manager節(jié)點(diǎn)和兩個(gè)Worker節(jié)點(diǎn)為例,講解集群的搭建過(guò)程。首先準(zhǔn)備三臺(tái)物理器或者虛擬機(jī),這里都已經(jīng)安裝好DockerEngine。具體情況如下:manager是ManagerNode,IP為04。worker1和worker2是WorkerNode,IP為06和07。manager、worker1和worker2均為L(zhǎng)inux虛擬機(jī)節(jié)點(diǎn),系統(tǒng)為CentOS7。1.DockerSwarm集群搭建第一步,初始化Manager節(jié)點(diǎn)。在Manager節(jié)點(diǎn)上,使用dockerswarminit創(chuàng)建Swarm,同時(shí)讓manager成為ManagerNode。第二步,在manager節(jié)點(diǎn)上,使用dockernodels查看剛創(chuàng)建的節(jié)點(diǎn)的狀態(tài)信息。第三步,切換到worker1和worker2虛擬機(jī)節(jié)點(diǎn)上,執(zhí)行dockerswarmjoin-token<TOKEN><MANAGER-IP>創(chuàng)建Worker節(jié)點(diǎn)。第四步,在manager節(jié)點(diǎn)上,查看創(chuàng)建的節(jié)點(diǎn)。2.DockerSwarm集群服務(wù)創(chuàng)建第一步,以上文中的集群為基礎(chǔ),在Manager節(jié)點(diǎn)上部署一個(gè)基本的Nginx服務(wù),--replicas參數(shù)指定創(chuàng)建3個(gè)正在運(yùn)行的服務(wù)數(shù),--publish公開(kāi)指定端口是8080映射容器80,同時(shí)使用Nginx鏡像。第二步,在manager節(jié)點(diǎn)上,通過(guò)dockerservicels查看當(dāng)前Swarm中的服務(wù)。第三步,在manager節(jié)點(diǎn)上,使用dockerserviceps查看具體的Nginx服務(wù)。2.DockerSwarm集群服務(wù)創(chuàng)建[root@manager~]#dockerservicecreate--replicas3--namenginx--publish8080:80nginxbxgyfpvoinaea4z8cljwcga5r1/3:running2/3:running3/3:running[root@manager~]#dockerservicelsIDNAMEMODEREPLICASIMAGEPORTSbxgyfpvoinaenginxreplicated3/3nginx:latest*:8080->80/tcp[root@manager~]#dockerservicepsnginxIDNAMEIMAGENODEDESIREDSTATECURRENTSTATEERRORPORTSjqsbyc0rwggjnginx.1nginx:latestworker2RunningRunning9minutesagobzrrih3mct9rnginx.2nginx:latestmanagerRunningRunning11minutesagoxk59l01mzjyznginx.3nginx:latestworker1RunningRunning3minutesago3.DockerSwarm集群服務(wù)擴(kuò)容如果想要提高可用性,就需要對(duì)服務(wù)進(jìn)行擴(kuò)容。將Nginx服務(wù)數(shù)目提升到5個(gè),具體步驟如下:第一步,在manager節(jié)點(diǎn)上,使用dockerservicescale命令對(duì)service進(jìn)行擴(kuò)容。第二步,在manager節(jié)點(diǎn)上,使用dockerserviceps命令查看服務(wù)情況。第三步,在worker1節(jié)點(diǎn)上,通過(guò)dockerps-a查看服務(wù)情況。4.DockerSwarm集群節(jié)點(diǎn)離開(kāi)如果想要某一個(gè)Node離開(kāi)DockerSwarm,可以通過(guò)在Node所在的DockerEngine中運(yùn)行dockerswarmleave命令來(lái)實(shí)現(xiàn)。第一步,如果worker2想要離開(kāi)DockerSwarm,可以在worker2節(jié)點(diǎn)上執(zhí)行dockerswarmleave命令。第二步,在manager節(jié)點(diǎn)上,查看節(jié)點(diǎn)情況。第三步,在manager節(jié)點(diǎn)上,使用dockerserviceps命令查看5個(gè)Nginx服務(wù)的分布情況。5.DockerSwarm集群服務(wù)滾動(dòng)升級(jí)將Redis版本滾動(dòng)升級(jí)至更高版本,具體過(guò)程如下:第一步,在manager節(jié)點(diǎn)上,首先利用redis:3.0.6鏡像創(chuàng)建3個(gè)Redis服務(wù)。第二步,在manager節(jié)點(diǎn)上,查看redisservice是否已經(jīng)啟動(dòng)成功。第三步,在manager節(jié)點(diǎn)上,當(dāng)所有的Task已經(jīng)啟動(dòng)后,使用“dockerserviceupdate”命令將所有服務(wù)升級(jí)到3.0.7版本,用--image參數(shù)指定升級(jí)的版本。第四步,在manager節(jié)點(diǎn)上,再次使用“dockerserviceps”命令查看滾動(dòng)升級(jí)后服務(wù)的狀態(tài)變化。Kubernetes概述Kubernetes簡(jiǎn)介Kubernetes組件Kubernetes重要概念Kubernetes功能與架構(gòu)041.Kubernetes簡(jiǎn)介01020304Google于2014年將Brog系統(tǒng)開(kāi)源為Kubernetes。Kubernetes構(gòu)建在GoogleBrog十五年運(yùn)行大規(guī)模分布式系統(tǒng)的經(jīng)驗(yàn)基礎(chǔ)之上,并結(jié)合了開(kāi)源社區(qū)最好的想法和實(shí)踐。Kubernetes(縮寫為K8s或Kube)是一個(gè)開(kāi)源的,可移植的,用于集群管理的業(yè)務(wù)流程框架。Kubernetes的名字起源于希臘語(yǔ),含義是舵手、領(lǐng)航員、向?qū)?。Kubernetes適用于多種生產(chǎn)環(huán)境,包括裸機(jī),內(nèi)部部署虛擬機(jī),大多數(shù)云提供商,以及三者的組合/混合。自Kubernetes推出以來(lái),它已被移植到Azure、DC/OS以及幾乎所有的云平臺(tái)。Kubernetes是基于Docker的開(kāi)源容器集群管理系統(tǒng),為容器化的應(yīng)用提供資源調(diào)度、部署運(yùn)行、服務(wù)發(fā)現(xiàn)、擴(kuò)容縮容等一整套功能。1.Kubernetes簡(jiǎn)介Kubernetes脫胎于Google內(nèi)部久負(fù)盛名的大規(guī)模集群管理系統(tǒng)Borg,是Google在容器化基礎(chǔ)設(shè)施領(lǐng)域十余年實(shí)踐經(jīng)驗(yàn)的沉淀和升華。Google利用Kubernetes的架構(gòu)和設(shè)計(jì)思想成功將其所有應(yīng)用(搜索、地圖、視頻、金融、社交、人工智能等)運(yùn)行在超過(guò)100萬(wàn)臺(tái)服務(wù)器、超過(guò)80個(gè)數(shù)據(jù)中心,每周的20億個(gè)容器上,所以Kubernetes是唯一具有超過(guò)10年以上大規(guī)模容器生產(chǎn)使用技術(shù)經(jīng)驗(yàn)和積淀的開(kāi)源項(xiàng)目。Kubernetes擁有廣泛的行業(yè)合作伙伴,包括英特爾、微軟和紅帽等。很多公司都發(fā)布了Kubernetes發(fā)行版,包括RedHatOpenShift、CanonicalDistributionofKubernetes、CoreOSTectonic和IntelMirantis。1.Kubernetes簡(jiǎn)介Kubernetes提供高度的互操作性,以及自我修復(fù)、自動(dòng)升級(jí)回滾以及存儲(chǔ)編排。Kubernetes通過(guò)無(wú)需重新設(shè)計(jì)應(yīng)用即可遷移的方式,來(lái)實(shí)現(xiàn)工作負(fù)載可移植和負(fù)載均衡。Kubernetes消除了部署和擴(kuò)展應(yīng)用過(guò)程中的很多手動(dòng)操作。用戶可以將多主機(jī)組成集群運(yùn)行容器,無(wú)論是物理機(jī)還是虛擬機(jī),Kubernetes都提供了很好的平臺(tái)可以簡(jiǎn)單高效的管理這些集群。這些集群可以跨越分布于不同公有云、私有云、混合云的主機(jī)。因此,Kubernetes是托管需要快速擴(kuò)展的云原生應(yīng)用的理想平臺(tái)。Kubernetes編排允許用戶構(gòu)建跨多個(gè)容器的應(yīng)用程序服務(wù),跨集群調(diào)度容器,擴(kuò)展這些容器,并隨著時(shí)間推移管理它們的運(yùn)行狀況。在用戶、社區(qū)和大廠的支持中,Kubernetes逐步成為企業(yè)基礎(chǔ)架構(gòu)的部署標(biāo)準(zhǔn)和新一代的應(yīng)用服務(wù)層。2.Kubernetes組件1.集群(Cluster):在Kubernetes中,集群是計(jì)算、存儲(chǔ)和網(wǎng)絡(luò)資源的組合。集群由各個(gè)節(jié)點(diǎn)組成,這些節(jié)點(diǎn)可以是物理服務(wù)器,也可以是虛擬機(jī),Kubernetes利用這些節(jié)點(diǎn)提供的基礎(chǔ)資源來(lái)運(yùn)行各種應(yīng)用程序。集群是Kubernetes容器集群的基礎(chǔ)環(huán)境。2.Master:Master是整個(gè)集群的主控節(jié)點(diǎn)。在每個(gè)Kubernetes集群中,都至少有一個(gè)Master節(jié)點(diǎn)來(lái)負(fù)責(zé)整個(gè)集群的管理和控制。幾乎所有的集群控制命令都是在Master節(jié)點(diǎn)上執(zhí)行。在實(shí)際應(yīng)用中,為了實(shí)現(xiàn)高可用性,可以部署多個(gè)Master節(jié)點(diǎn)。3.Node:Node(節(jié)點(diǎn))是Kubernetes集群中的計(jì)算機(jī),可以是虛擬機(jī)或物理機(jī),多個(gè)Node協(xié)同工作。每個(gè)Node(節(jié)點(diǎn))都由Master管理。一個(gè)Node(節(jié)點(diǎn))可以有多個(gè)Pod(容器組),KubernetesMaster會(huì)根據(jù)每個(gè)Node(節(jié)點(diǎn))上可用資源的情況,自動(dòng)調(diào)度Pod(容器組)到最佳的Node(節(jié)點(diǎn))上。2.Kubernetes組件Master節(jié)點(diǎn)上通常會(huì)運(yùn)行KubernetesAPIServer進(jìn)程、Kubernetes控制器管理器、Kubernetes調(diào)度器和Etcd組件。Master的架構(gòu)圖2.Kubernetes組件Master節(jié)點(diǎn)KubernetesAPIServer即KubernetesAPI服務(wù)器,它的進(jìn)程名為kube-apiserver。KubernetesControllerManager,即Kubernetes控制器管理器,它是集群內(nèi)部的管理控制中心,負(fù)責(zé)集群內(nèi)的Node節(jié)點(diǎn)、Pod副本、服務(wù)端點(diǎn)(Endpoint)、命名空間(Namespace)、服務(wù)賬號(hào)(ServiceAccount)和資源配額(ResourceQuota)等的控制和管理。KubernetesScheduler,即Kubernetes調(diào)度器,它用于監(jiān)聽(tīng)最近創(chuàng)建但還未分配Node的Pod資源,根據(jù)特定的調(diào)度算法把Pod調(diào)度到指定的工作節(jié)點(diǎn)(Node)上。Etcd組件是一個(gè)輕量級(jí)的分布式鍵值存儲(chǔ)組件,用于保存集群中所有的配置信息和各個(gè)對(duì)象的狀態(tài)信息,只有APIServer進(jìn)程才能直接訪問(wèn)和操作Etcd。2.Kubernetes組件Node(節(jié)點(diǎn))是Kubernetes集群中的計(jì)算機(jī),可以是虛擬機(jī)或物理機(jī),多個(gè)Node協(xié)同工作。每個(gè)Node(節(jié)點(diǎn))都由Master管理。一個(gè)Node(節(jié)點(diǎn))可以有多個(gè)Pod(容器組),KubernetesMaster會(huì)根據(jù)每個(gè)Node(節(jié)點(diǎn))上可用資源的情況,自動(dòng)調(diào)度Pod(容器組)到最佳的Node(節(jié)點(diǎn))上。Node的組成分為三部分,分別為Kubelet、Kube-proxy和ContainerRuntime。Node架構(gòu)圖2.Kubernetes組件Node節(jié)點(diǎn)在Kubernetes集群中,每個(gè)Node都會(huì)運(yùn)行Kubelet進(jìn)程。Kubelet用來(lái)處理Master節(jié)點(diǎn)下發(fā)的任務(wù),管理Pod和其中的容器。Kubelet負(fù)責(zé)維護(hù)容器的生命周期,也負(fù)責(zé)管理存儲(chǔ)卷等資源。每個(gè)Node上的Kubelet會(huì)在APIServer上注冊(cè)信息,定期向Master匯報(bào)節(jié)點(diǎn)資源的使用情況。APIServer進(jìn)程接收到這些信息后,會(huì)將Node的狀態(tài)信息更新到Etcd中。Kubelet通過(guò)APIServer進(jìn)程監(jiān)聽(tīng)Pod信息,是Node上的Pod管家。Kube-proxy運(yùn)行在所有的Node節(jié)點(diǎn)上,監(jiān)聽(tīng)每個(gè)節(jié)點(diǎn)上KubernetesAPI中定義的服務(wù)變化,并創(chuàng)建路由規(guī)則來(lái)進(jìn)行服務(wù)負(fù)載均衡。ContainerRuntime是負(fù)責(zé)運(yùn)行容器的組件,負(fù)責(zé)下載鏡像、創(chuàng)建和運(yùn)行容器等。Kubernetes支持多種容器,包括Docker、containerd、cri-o、rktlet以及任何基于KubernetesCRI(ContainerRuntimeInterface,容器運(yùn)行環(huán)境接口)的實(shí)現(xiàn)。3.Kubernetes重要概念1.容器組(Pod)Kubernetes中最基本的操作單元就是Pod。一個(gè)Pod可以包含一個(gè)或多個(gè)緊密相關(guān)的容器,多個(gè)容器應(yīng)用之間通常是緊密耦合的。Pod可以看作是一個(gè)容器環(huán)境下的邏輯宿主機(jī),Pod在Node上被創(chuàng)建、啟動(dòng)或者銷毀。每個(gè)Pod中運(yùn)行著一個(gè)或多個(gè)容器,多個(gè)容器擁有同樣的生命周期,共享網(wǎng)絡(luò)、命名空間和存儲(chǔ)卷資源。Pod支持多種容器環(huán)境,Docker是最流行的容器環(huán)境。Pod示例圖3.Kubernetes重要概念1.容器組(Pod)每一個(gè)Pod都會(huì)被指派一個(gè)唯一的IP地址,在Pod中的每一個(gè)容器共享網(wǎng)絡(luò)命名空間,包括IP地址和網(wǎng)絡(luò)端口。在同一個(gè)Pod中的容器可以互相通信。單容器Pod,是最常見(jiàn)的應(yīng)用方式。對(duì)于多容器Pod,Kubernetes會(huì)保證所有的容器都在同一臺(tái)物理主機(jī)或虛擬主機(jī)中運(yùn)行。多容器Pod是相對(duì)高階的使用方式,除非應(yīng)用耦合特別嚴(yán)重,一般不推薦使用這種方式。Pod作為一個(gè)可以獨(dú)立運(yùn)行的服務(wù)單元,以更高的抽象層次為應(yīng)用部署提供了極大的方便,簡(jiǎn)化了應(yīng)用部署的難度。另外,Pod作為最小的應(yīng)用實(shí)例可以獨(dú)立運(yùn)行,因此可以方便的進(jìn)行部署、水平擴(kuò)展和收縮、方便進(jìn)行調(diào)度管理與資源的分配。3.Kubernetes重要概念2.服務(wù)(Service)在Kubernetes中,Service是一個(gè)抽象的概念,它定義了Pod邏輯集合和訪問(wèn)這些Pod的策略。一個(gè)服務(wù)可以看作是一組提供相同服務(wù)的Pod的對(duì)外訪問(wèn)接口,服務(wù)通過(guò)標(biāo)簽選擇器(LabelSelector)選擇Pod。Service的主要作用在于提供服務(wù)自動(dòng)發(fā)現(xiàn)和負(fù)載均衡。服務(wù)自動(dòng)發(fā)現(xiàn)可以防止Pod失聯(lián),因?yàn)樵鰟hPod都能被感知。負(fù)載均衡可以通過(guò)定義一組Pod的訪問(wèn)策略來(lái)實(shí)現(xiàn)。Service通常擁有以下的特點(diǎn):擁有一個(gè)指定的名字,例如mysql-server。擁有一個(gè)虛擬IP地址和端口號(hào),銷毀之前不會(huì)改變,只能內(nèi)網(wǎng)訪問(wèn)。能夠提供某種遠(yuǎn)程服務(wù)能力。能夠被映射到提供這種服務(wù)能力的一組容器應(yīng)用上。3.Kubernetes重要概念2.服務(wù)(Service)Service有三種常用的類型:ClusterIP、NodePort和LoadBalancer。ClusterIP:是默認(rèn)的ServiceType(服務(wù)類型),分配一個(gè)集群內(nèi)部IP地址,即VIP,只能在集群內(nèi)部訪問(wèn)(同命名空間內(nèi)的Pod)。NodePort:分配一個(gè)集群內(nèi)部的IP地址,并在每個(gè)節(jié)點(diǎn)上啟用一個(gè)端口來(lái)暴露服務(wù),可以從集群外部訪問(wèn)。訪問(wèn)地址格式為NodelP:NodePort。LoadBalancer:與NodePort類似,分配一個(gè)集群內(nèi)部IP地址,并在每個(gè)節(jié)點(diǎn)上啟用一個(gè)端口來(lái)暴露服務(wù)。除此之外,Kubernetes會(huì)請(qǐng)求底層云平臺(tái)上的負(fù)載均衡器,將每個(gè)節(jié)點(diǎn)(NodelP:NodePort)作為后端添加進(jìn)去。3.Kubernetes重要概念3.控制器(Controller)Kubernetes通常不會(huì)直接創(chuàng)建Pod,而是創(chuàng)建控制器,然后通過(guò)控制器來(lái)管理Pod??刂破髦卸x了Pod的部署特性,比如有幾個(gè)副本,在什么樣的Node上運(yùn)行等。為了滿足不同的業(yè)務(wù)場(chǎng)景,Kubernetes提供了多控制器,包括Deployment控制器、ReplicaSet控制器、DaemonSet控制器、StatefuleSet控制器和Job控制器等。Deployment控制器是最常用的Controller,可以通過(guò)創(chuàng)建Deployment來(lái)部署應(yīng)用。ReplicaSet控制器實(shí)現(xiàn)了Pod的多副本管理。DaemonSet控制器用于每個(gè)Node最多只運(yùn)行一個(gè)Pod副本的場(chǎng)景。StatefuleSet控制器能夠保證Pod的每個(gè)副本在整個(gè)生命周期中名稱是不變的。Job控制器基于特定任務(wù)而運(yùn)行,當(dāng)運(yùn)行任務(wù)的容器完成工作后,Job控制器成功退出。3.Kubernetes重要概念4.卷(Volume)默認(rèn)情況下,容器的數(shù)據(jù)都是非持久化的,在容器銷毀之后數(shù)據(jù)也會(huì)跟著消失,因此,在Docker中提供了卷機(jī)制可以將數(shù)據(jù)持久化。為了實(shí)現(xiàn)數(shù)據(jù)的持久性存儲(chǔ),Docker在宿主機(jī)和容器內(nèi)做映射,保證在容器的生命周期結(jié)束后,數(shù)據(jù)依舊可以實(shí)現(xiàn)持久性存儲(chǔ)。從根本上來(lái)說(shuō),一個(gè)卷僅僅是一個(gè)可被容器組中的容器訪問(wèn)的文件目錄。這個(gè)目錄是怎么來(lái)的,取決于該卷的類型,不同類型的卷使用不同的存儲(chǔ)介質(zhì)。使用卷時(shí),需要先在容器組中定義一個(gè)卷,并將其掛載到容器的掛載點(diǎn)上。同一個(gè)容器組中的不同容器各自獨(dú)立地掛載卷,即同一個(gè)容器組中的兩個(gè)容器可以將同一個(gè)卷掛載到各自不同的路徑上。3.Kubernetes重要概念容器組、容器、掛載點(diǎn)、卷和存儲(chǔ)介質(zhì)之間的關(guān)系4.卷(Volume)一個(gè)容器組可以包含多個(gè)卷和多個(gè)容器;一個(gè)容器通過(guò)掛載點(diǎn)來(lái)決定某一個(gè)卷被掛載到容器的什么路徑;不同類型的卷對(duì)應(yīng)不同的存儲(chǔ)介質(zhì),圖中列出了NFS(NetworkFileSystem)、PVC(PersistentVolumeClaim)和ConfigMap(用來(lái)存儲(chǔ)配置文件的Kubernetes資源對(duì)象,保存key-value配置數(shù)據(jù)對(duì))三種存儲(chǔ)介質(zhì)。3.Kubernetes重要概念5.命名空間(Namespace)命名空間的主要作用是對(duì)Kubernetes集群資源進(jìn)行劃分。這種劃分不是物理劃分,而是邏輯劃分,是對(duì)一組資源和對(duì)象的抽象集合,用于實(shí)現(xiàn)多租戶的資源隔離。命名空間可以將系統(tǒng)內(nèi)部的對(duì)象分配到不同的命名空間中,形成邏輯上的不同項(xiàng)目、小組或者用戶組,從而使得在共享使用整個(gè)集群的資源時(shí)能夠單獨(dú)管理。命名空間實(shí)現(xiàn)邏輯隔離,可以把多個(gè)用戶項(xiàng)目分割到不同的環(huán)境,這種方式可以有效防止跨項(xiàng)目的污染。例如,用戶可以安裝不同版本的Jenkins,如果它們的環(huán)境變量是在不同的命名空間,就不會(huì)沖突。Kubernetes集群在啟動(dòng)后,會(huì)創(chuàng)建一個(gè)名為default的默認(rèn)命名空間,如果不特別指明命名空間,那么用戶創(chuàng)建的Pod、服務(wù)等都會(huì)被系統(tǒng)創(chuàng)建到默認(rèn)的命名空間中。4.Kubernetes功能與架構(gòu)Kubernetes的主要功能:資源調(diào)度:資源調(diào)度是一套分布式系統(tǒng)最基本的核心指標(biāo)。資源管理:控制Pod對(duì)計(jì)算資源、網(wǎng)絡(luò)資源、存儲(chǔ)資源的使用。服務(wù)發(fā)現(xiàn):管理外在的程序或者內(nèi)部的程序如何訪問(wèn)Kubernetes里面的某個(gè)Pod。健康檢查:監(jiān)控檢測(cè)服務(wù)是否正常運(yùn)行。自動(dòng)伸縮:因?yàn)樯婕暗江h(huán)境的快速遷移和復(fù)制,虛擬機(jī)時(shí)代之前都非常難實(shí)現(xiàn)。容器化時(shí)代很自然的解決了這個(gè)問(wèn)題,Kubernetes保證了資源的按需擴(kuò)容。更新升級(jí):Kubernetes為服務(wù)的滾動(dòng)和平滑升級(jí)提供了很好的機(jī)制。4.Kubernetes功能與架構(gòu)Kubernetes架構(gòu)圖Kubernetes架構(gòu)Kubernetes屬于主從的分布式集群架構(gòu),包含Master和Nodes。Master作為控制節(jié)點(diǎn),調(diào)度管理整個(gè)系統(tǒng);Nodes是運(yùn)行節(jié)點(diǎn),負(fù)責(zé)運(yùn)行應(yīng)用。Pod是Kubernetes創(chuàng)建或部署的最小單位。一個(gè)Pod封裝一個(gè)或多個(gè)容器(Container)、存儲(chǔ)資源(Volume)、一個(gè)獨(dú)立的網(wǎng)絡(luò)IP以及管理控制容器運(yùn)行方式的策略選項(xiàng)。Kubernetes集群搭建與實(shí)踐安裝前準(zhǔn)備安裝Master節(jié)點(diǎn)部署Master節(jié)點(diǎn)安裝Node節(jié)點(diǎn)將Node節(jié)點(diǎn)加入集群部署Kubernetes第一個(gè)應(yīng)用05Kubernetes集群搭建與實(shí)踐Kubernetes集群的安裝部署有不同的方式,可以使用二進(jìn)制包的方式進(jìn)行安裝,也可以使用官方社區(qū)推出用于快速部署Kubernetes的kubeadm工具進(jìn)行安裝。此外,Kubernetes可以部署在一臺(tái)主機(jī)上,也可以部署在多臺(tái)主機(jī)上。由于Kubernetes是分布式集群,本書以兩個(gè)節(jié)點(diǎn)為例,使用kubeadm的方式進(jìn)行Kubernetes的安裝與部署。1.安裝前準(zhǔn)備1.安裝要求一臺(tái)或多臺(tái)服務(wù)器或虛擬機(jī)。硬件配置:2GB內(nèi)存或更多,2個(gè)CPU或更多,硬盤30GB或更多(Master節(jié)點(diǎn)最低是2核CPU)。集群中所有機(jī)器之間網(wǎng)絡(luò)能夠互相連通。集群中所有機(jī)器可以訪問(wèn)外網(wǎng),因?yàn)榘惭b過(guò)程需要拉取鏡像。各節(jié)點(diǎn)禁止Swap分區(qū)。2.安裝目標(biāo)在所有節(jié)點(diǎn)上安裝Docker和kubeadm。部署KubernetesMaster。部署容器網(wǎng)絡(luò)插件。部署KubernetesNode,將節(jié)點(diǎn)加入Kubernetes集群中。1.安裝前準(zhǔn)備本書以VMware中的CentOS7虛擬機(jī)作為Kubernetes集群的各個(gè)節(jié)點(diǎn),一共使用了兩個(gè)節(jié)點(diǎn),一個(gè)Master節(jié)點(diǎn),一個(gè)Node節(jié)點(diǎn)。節(jié)點(diǎn)類型節(jié)點(diǎn)操作系統(tǒng)節(jié)點(diǎn)名稱節(jié)點(diǎn)IP地址MasterCentOS7master0NodeCentOS7node11Kubernetes集群的節(jié)點(diǎn)構(gòu)成2.安裝Master節(jié)點(diǎn)注意事項(xiàng):本小節(jié)內(nèi)容不僅需要在Master節(jié)點(diǎn)上進(jìn)行操作,也需要在Node節(jié)點(diǎn)進(jìn)行操作。如果讀者是使用VMware中的CentOS進(jìn)行配置安裝,在安裝Master節(jié)點(diǎn)之后,部署Master節(jié)點(diǎn)之前,最好對(duì)Master節(jié)點(diǎn)拍攝快照,以便在后續(xù)克隆生成Node節(jié)點(diǎn)。首先禁用Master節(jié)點(diǎn)的Swap分區(qū)關(guān)閉防火墻。禁用Selinux。配置/etc/hosts,在文件末尾分別添加Master和Node1的IP地址。[root@localhost~]#swapoff–a[root@localhost~]#systemctlstopfirewalld[root@localhost~]#systemctldisablefirewalld[root@localhost~]#setenforce0[root@master~]#vim/etc/hostslocalhostlocalhost.localdomainlocalhost4localhost4.localdomain4::1localhostlocalhost.localdomainlocalhost6localhost6.localdomain60master1node12.安裝Master節(jié)點(diǎn)使用yum命令安裝Docker,默認(rèn)安裝Docker的最新版本。(若已安裝,跳過(guò)該步驟)配置Docker加速。(若已配置,跳過(guò)該步驟)安裝Kubernetes相關(guān)組件,這些組件包括kubelet,kubeadm和kubectl。在安裝Kubernetes這些組件時(shí),如果無(wú)法科學(xué)上網(wǎng),是不能使用Kubernetes官方的源來(lái)安裝kubelet,kubeadm和kubectl組件的。所以在安裝kubelet,kubeadm和kubectl之前,使用以下命令,添加國(guó)內(nèi)阿里云的YUM軟件源。設(shè)置kubelet開(kāi)機(jī)自啟動(dòng)。[root@master~]#yuminstalldocker[root@masterdocker]#vimdaemon.json{"registry-mirrors":[""]}[root@master~]#yuminstall-ykubelet-1.15.0kubeadm-1.15.0kubectl-1.15.0[root@master~]#systemctlenablekubelet3.部署Master節(jié)點(diǎn)注意事項(xiàng):如果讀者M(jìn)aster節(jié)點(diǎn)是使用的VMware的虛擬機(jī),在進(jìn)行本部分配置之前對(duì)虛擬機(jī)拍攝快照,以方便后續(xù)Node節(jié)點(diǎn)的克隆。通過(guò)kubectlversion查看Kubernetes的安裝版本為v1.15.0。進(jìn)行kubeadm的初始化注意事項(xiàng):以下命令中,--apiserver-advertise-address選項(xiàng)的IP地址0是本例中Master節(jié)點(diǎn)IP,讀者在配置時(shí)應(yīng)修改為自己的Master節(jié)點(diǎn)IP。[root@masterdocker]#kubectlversion[root@master~]#kubeadminit\>--apiserver-advertise-address=0\>--image-repository/google_containers\>--kubernetes-versionv1.15.0\>--service-cidr=/16\>--pod-network-cidr=/163.部署Master節(jié)點(diǎn)接下來(lái)執(zhí)行以下命令,執(zhí)行完以后才能使用集群。安裝Pod網(wǎng)絡(luò)插件,配置flannel網(wǎng)絡(luò)。[root@master~]#mkdir-p$HOME/.kube[root@master~]#sudocp-i/etc/kubernetes/admin.conf$HOME/.kube/config[root@master~]#sudochown$(id-u):$(id-g)$HOME/.kube/config[root@master~]#kubectlapply-f/coreos/flannel/master/Documentation/kube-flannel.yml3.部署Master節(jié)點(diǎn)在Master中查看Pod,看到所有Pod都運(yùn)行起來(lái),說(shuō)明Kubernetes的Master節(jié)點(diǎn)搭建成功。[root@master~]#kubectlgetpods-nkube-systemNAMEREADYSTATUSRESTARTSAGEcoredns-bccdc95cf-n6kwx1/1Running020mcoredns-bccdc95cf-rg4sq1/1Running020metcd-master1/1Running019mkube-apiserver-master1/1Running019mkube-controller-manager-master1/1Running019mkube-flannel-ds-lp7jq1/1Running057skube-proxy-56psw1/1Running020mkube-scheduler-master1/1Running019m[root@master~]#4.安裝Node節(jié)點(diǎn)注意事項(xiàng):讀者可以從頭開(kāi)始配置一個(gè)全新的Node節(jié)點(diǎn),這時(shí)需要將11.5.2小節(jié)中安裝Master節(jié)點(diǎn)的內(nèi)容全部在Node節(jié)點(diǎn)進(jìn)行安裝設(shè)置。但如果讀者的Master節(jié)點(diǎn)是使用的VMware中的虛擬機(jī),那么只需將在部署Master節(jié)點(diǎn)前將Master克隆即可形成Node節(jié)點(diǎn)。全新配置一個(gè)Node節(jié)點(diǎn)時(shí),步驟和11.5.2中完全一致,只需將Node節(jié)點(diǎn)IP地址進(jìn)行修改即可??寺∩蒒ode時(shí),從部署Master節(jié)點(diǎn)之前的快照進(jìn)行克隆,然后修改其IP地址即可。修改Node節(jié)點(diǎn)IP地址時(shí),使用vim打開(kāi)文件/etc/sysconfig/network-scripts/ifcfg-ens33,修改IP地址為1。[root@master~]#vim/etc/sysconfig/network-scripts/ifcfg-ens33[修改IP地址為1]4.安裝Node節(jié)點(diǎn)注意事項(xiàng):此處Node的IP地址是本例中為Node規(guī)劃的IP,且該IP需要和Master的IP地址處于同一個(gè)網(wǎng)段,讀者需修改為自己使用的IP地址。修改完成后重新啟動(dòng)網(wǎng)絡(luò),再使用命令“ifconfigens33”查看IP地址是否已經(jīng)修改。確認(rèn)Node節(jié)點(diǎn)上的Swap和SELinux已經(jīng)關(guān)閉,如果未關(guān)閉確認(rèn)再次關(guān)閉。[root@master~]#servicenetworkrestart[root@master~]#ifconfigens33[root@node1~]#getenforce
Enforcing[root@node1~]#swapoff-a[root@node1~]#set
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工工資提成合同協(xié)議
- 武漢市合同房補(bǔ)充協(xié)議
- 正規(guī)服裝合作合同協(xié)議
- 2025房產(chǎn)如何撰寫買賣合同
- 商品共同經(jīng)營(yíng)合同協(xié)議
- 櫻桃產(chǎn)地采購(gòu)合同協(xié)議
- 2025實(shí)習(xí)勞動(dòng)合同模板示例
- 死亡賠償協(xié)議書格式
- 2025簽訂汽車維修合同應(yīng)注意的事項(xiàng)
- 員工下班后協(xié)議書范本
- 2023年廣東省初中生物地理學(xué)業(yè)考試真題集合試卷及答案高清版
- 靜脈輸液輸液反應(yīng)課件
- 廣東省廣州市天河區(qū)2023年中考二?;瘜W(xué)試題(含解析)
- 《動(dòng)物王國(guó)開(kāi)大會(huì)》說(shuō)課-優(yōu)質(zhì)課件
- 病媒生物監(jiān)測(cè)記錄表
- 醇的性質(zhì)高中化學(xué)一等獎(jiǎng)公開(kāi)課一等獎(jiǎng)省優(yōu)質(zhì)課大賽獲獎(jiǎng)?wù)n件
- 電廠煙囪外壁防腐工程項(xiàng)目施工方案
- 《教師職業(yè)道德》全書word版
- 唯美復(fù)古風(fēng)人間煙火氣相冊(cè)宣傳模板課件
- 合同制消防員績(jī)效考核細(xì)則詳解
- 門禁一卡通系統(tǒng)解決方案
評(píng)論
0/150
提交評(píng)論