Kubernetes容器技術(shù)項目教程課件:使用Kubectl命令部署服務(wù)_第1頁
Kubernetes容器技術(shù)項目教程課件:使用Kubectl命令部署服務(wù)_第2頁
Kubernetes容器技術(shù)項目教程課件:使用Kubectl命令部署服務(wù)_第3頁
Kubernetes容器技術(shù)項目教程課件:使用Kubectl命令部署服務(wù)_第4頁
Kubernetes容器技術(shù)項目教程課件:使用Kubectl命令部署服務(wù)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

使用Kubectl命令部署服務(wù)目錄CONTENTS任務(wù)1使用命令創(chuàng)建Deployment控制器任務(wù)2創(chuàng)建Sevice服務(wù)發(fā)現(xiàn)任務(wù)1使用命令創(chuàng)Deployment控制器2.1.1Kubectl命令行工具Kubectl命令行工具與Kubernetes集群交互的方式有四種,分別是圖形界面方式,命令行方式、YAML文件方式、API接口方式,其中命令行和YAML文件是經(jīng)常使用的交互方式,kubectl是Kubernetes集群的命令行交互工具,通過kubectl能夠?qū)罕旧磉M(jìn)行管理,并能夠在集群上進(jìn)行容器化應(yīng)用的安裝部署。運行kubectl命令的語法如下所示:指定要對資源執(zhí)行的操作,例如create、get、describe和deletecomand指定資源類型,資源是K8S中的重要概念,K8S中包含多種資源,資源類型是大小學(xué)敏感的,如kubectlgetnodes,這里nodes表示類型的是節(jié)點計算機,使用kubectlapi-resources命令可以查看K8S中所有資源類型。TYPE指定資源的名稱,名稱也大小寫敏感的,如kubectlgetpodspod1,這里獲取pod資源中叫pod1的資源信息。NAME2.1.2創(chuàng)建Pod部署服務(wù)在Kubernetes集群中,Pod是所有業(yè)務(wù)類型的基礎(chǔ),也是K8S管理的最小單位級,它是一個或多個容器的組合。這些容器共享存儲、網(wǎng)絡(luò)和命名空間。對于具體應(yīng)用來說,Pod是它們的邏輯主機,Pod包含業(yè)務(wù)相關(guān)的多個應(yīng)用容器。

1.Pod資源對象創(chuàng)建包含nginx服務(wù)容器的pod在master節(jié)點使用如下命令創(chuàng)建一個包含nginx服務(wù)的pod資源[root@master~]#kubectlrundemo--image=nginxpod/democreated其中kubectlrun是要創(chuàng)建一個pod,--image指定了pod中使用nginx鏡像來運行容器。

2.使用kubectl命令創(chuàng)建Pod2.1.3創(chuàng)建Deployment控制器部署服務(wù)15%18%53%46%76%在使用K8S部署應(yīng)用時,創(chuàng)建一個pod是沒有意義的,因為一個pod無法實現(xiàn)容器應(yīng)用的擴(kuò)容和縮容,也無法實現(xiàn)pod的自動恢復(fù)。解決的辦法是創(chuàng)建控制器,通過控制器可以輕松的實現(xiàn)pod數(shù)量的增加和減少,當(dāng)某個pod運行失敗后,控制器還可以自動啟動1個pod來替代,方便的實現(xiàn)應(yīng)用的擴(kuò)縮容、服務(wù)自恢復(fù)、應(yīng)用版本滾動更新。kubernetes中包含各種控制器,如?狀態(tài)的Deployments、有狀態(tài)化的StatefulSets、守護(hù)進(jìn)程控制器DaemonSets、Job任務(wù)控制器等,每種控制器對應(yīng)不同的應(yīng)?場景,這里先以Deployment無狀態(tài)為例??。運維Deployment控制器01020304在創(chuàng)建控制器時,可以通過--replicas選項指定生成的pod數(shù)量,命令如下:[root@master~]#kubectlcreatedeploymentkzq--image=nginx--replicas=31.創(chuàng)建一個包括3個pod的控制器以上只是查看了控制器的一些簡要信息,可以使用kubectldescribe來查看控制器的詳細(xì)信息,查看kzq控制器的詳細(xì)信息命令如下:[root@master~]#kubectldescribedeployments.appskzq。3.查看控制器詳細(xì)信息使用kubectgetdeployments.apps可以查看當(dāng)前所有的控制器信息,也可以把deployments.apps簡寫為deployment,在輸入命令時,注意使用tab補全命令。2.查看控制器使用kubectl命令查看控制器控制的3個pod信息,命令如下:[root@master~]#kubectlgetpod。4.查看控制器控制的pod信息2.1.3創(chuàng)建Deployment控制器部署服務(wù)2.1.4更新與回退版本在pod中運行的容器,主要任務(wù)是部署服務(wù)或應(yīng)用,提供給使用者訪問使用,這些服務(wù)或應(yīng)用是經(jīng)常會升級版本的,這就需要k8s控制器能非常方便的更新版本,但發(fā)現(xiàn)更新的版本有問題時,及時進(jìn)行回退版本。首先查看pod中運行容器的名稱,命令如下:[root@master~]#kubectldescribepodde-nginx-84d9fbcd7f-nt7rh在結(jié)果中觀察容器Containers下面的第一行就容器的名稱是nginx。升級nginx服務(wù)版本為nginx:1.8.1

創(chuàng)建一個控制器,控制pod數(shù)量是3,運行容器的鏡像是nginx:1.7.9使用kubectcreatedeployment來創(chuàng)建控制器,具體的命令如下:[root@master~]#kubectlcreatedeploymede-nginx--image=nginx:1.7.9--replicas=3創(chuàng)建一個控制器如果發(fā)現(xiàn)升級的版本出現(xiàn)問題后,可以迅速的回退到之前的版本,可以使用kubectlrollout命令,使用kubectlrollout-h可以得到幫助信息如下:[root@master~]#kubectlrollout-h回退nginx服務(wù)版本為nginx:1.7.9任務(wù)2創(chuàng)建Sevice服務(wù)發(fā)現(xiàn)一、創(chuàng)建Sevice服務(wù)發(fā)現(xiàn)用kubectl命令部署名稱為httpd的deployment控制器,使用的鏡像是centos/httpd-24-centos7,升級pod中的應(yīng)用版本為httpd:latest知識目標(biāo):(1)掌握服務(wù)發(fā)現(xiàn)Service的工作原理(2)掌握服務(wù)發(fā)現(xiàn)Service的工作機制。能力目標(biāo):(1)能夠使用Kubectl命令創(chuàng)建服務(wù)發(fā)現(xiàn)Service(2)能夠在集群內(nèi)部和集群外部訪問服務(wù)應(yīng)用教學(xué)內(nèi)容(1)服務(wù)發(fā)現(xiàn)Service的作用(2)創(chuàng)建服務(wù)發(fā)現(xiàn)Service(3)通過Service訪問服務(wù)應(yīng)用接下來就如何訪問這些服務(wù)應(yīng)用了,技術(shù)主管要求你理解服務(wù)發(fā)現(xiàn)Service的作用并能夠創(chuàng)建它,實現(xiàn)用戶對pod中容器服務(wù)和應(yīng)用的訪問。在項目二的任務(wù)一中部署了Deployment控制器,通過Deployment創(chuàng)建了多個Pod副本,進(jìn)而實現(xiàn)了批量的應(yīng)用部署。2.2.1理解Service服務(wù)發(fā)現(xiàn)二、理解Service服務(wù)發(fā)現(xiàn)Service服務(wù)實現(xiàn)的機制Service是Kubernetes的核心資源類型之一,它基于標(biāo)簽選擇器將一組Pod定義成一個邏輯組合,并通過自己的IP地址和端口調(diào)度代理請求到組內(nèi)的Pod對象。Service對象的IP地址也稱為ClusterIP,它位于為Kubernetes集群配置指定的IP地址范圍之內(nèi),是虛擬的IP地址,它在Service對象創(chuàng)建之后保持不變,并且能夠被同一集群中的Pod資源所訪問。由于Pod存在生命周期,有銷毀,有重建,無法提供一個固定的訪問接口給客戶端,而且用戶不可能記住所有同類型的Pod地址,這樣Service資源對象就出現(xiàn)了。Service對象和Pod對象的IP地址,一個是虛擬地址,一個是PodIP地址,都是在集群內(nèi)部可以訪問,無法響應(yīng)集群外部的訪問請求,解決該問題的辦法是在單一的節(jié)點上做端口暴露或讓Pod資源共享工作節(jié)點的網(wǎng)絡(luò)名稱空間2.2.1理解Service服務(wù)發(fā)現(xiàn)

三、Service服務(wù)實現(xiàn)的實現(xiàn)原理(1)iptables代理模式客戶端IP請求時,直接請求本地內(nèi)核serviceip,根據(jù)iptables的規(guī)則直接將請求轉(zhuǎn)發(fā)到到各pod上ipvs為負(fù)載均衡算法提供了更多選項,例如:①rr:輪詢調(diào)度②lc:最小連接數(shù)③dh:目標(biāo)哈希④sh:源哈希⑤sed:最短期望延遲⑥nq:不排隊調(diào)度因為使用iptableNAT來完成轉(zhuǎn)發(fā),也存在不可忽視的性能損耗,如果集群中存在上萬的Service/Endpoint,那么Node上的iptablesrules將會非常龐大,性能就會受影響,iptables代理模式由Kubernetes1.1版本引入,自1.2版本開始成為默認(rèn)類型。如果某個服務(wù)后端pod發(fā)生變化,對應(yīng)的信息會立即反映到apiserver上,而kube-proxy通過watch到etc中的信息變化,將它立即轉(zhuǎn)為ipvs或者iptables中的規(guī)則,這些動作都是動態(tài)和實時的,刪除一個pod也是同樣的原理。(2)ipvs代理模式Kubernetes自1.9-alpha版本引入了ipvs代理模式,自1.11版本開始成為默認(rèn)設(shè)置??蛻舳薎P請求時到達(dá)內(nèi)核空間時,根據(jù)ipvs的規(guī)則直接分發(fā)到各pod上。2.2.1理解Service服務(wù)發(fā)現(xiàn)四、Service服務(wù)實現(xiàn)的實現(xiàn)原理3.Service服務(wù)實現(xiàn)的類型(1)ClusterIP類型為ClusterIP的service,這個service有一個Cluster-IP,其實就一個VIP。具體實現(xiàn)原理依靠kubeproxy組件,通過iptables或是ipvs實現(xiàn)。這種類型的service只能在集群內(nèi)訪問(2)NodePort我們的場景不全是集群內(nèi)訪問,也需要集群外業(yè)務(wù)訪問。那么ClusterIP就滿足不了了。NodePort當(dāng)然是其中的一種實現(xiàn)方案,Kubernetes外部訪問端口默認(rèn)值是30000-32767。50%(3)LoadBalancerLoadBalancer類型的service是可以實現(xiàn)集群外部訪問服務(wù)的另外一種解決方案。不過并不是所有的k8s集群都會支持,大多是在公有云托管集群中會支持該類型(4)ExternalName類型為ExternalName的service將服務(wù)映射到DNS名稱,而不是典型的選擇器,例如my-service或者cassandra。您可以使用spec.externalName參數(shù)指定這些服務(wù)。80%2.2.1理解Service服務(wù)發(fā)現(xiàn)一、創(chuàng)建Service服務(wù)發(fā)現(xiàn)在項目二任務(wù)一中創(chuàng)建了一個包含3個Pod,名稱為de-nginx的deployment控制器,可以為這個deployment創(chuàng)建一個Service,通過Service的IP地址訪問到每個Pod中的服務(wù),命令如下:[root@master~]#kubectlexposedeploymentde-nginx--port=802.2.2創(chuàng)建Service訪問容器應(yīng)用使用kubectlgetservice能夠查看集群中的service,命令如下:[root@master~]#kubectlgetservice結(jié)果如下:NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEde-nginxClusterIP31<none>80/TCP10mkubernetesClusterIP<none>443/TCP20h通過查詢發(fā)現(xiàn),名稱和控制器同名的de-nginx服務(wù)發(fā)現(xiàn)被創(chuàng)建了,另一個名稱為kubernetes的service是集群創(chuàng)建后就自動創(chuàng)建的。通過Service訪問服務(wù)通過curl訪問Service的地址就可以訪問3個Pod中的應(yīng)用,命令如下[root@master~]#curl31二、查看Service服務(wù)發(fā)現(xiàn)2.2.2創(chuàng)建Service訪問容器應(yīng)用二、查看Service服務(wù)發(fā)現(xiàn)修改Pod中容器服務(wù)通過curl集群Service的IP地址,是可以訪問每個Pod中的服務(wù),但是究竟訪問的是哪個Pod中的服務(wù)內(nèi),可以通過命令進(jìn)入到每個Pod的容器中,修改服務(wù)的內(nèi)容,這里需要修改的是nginx服務(wù)的主頁內(nèi)容,然后再通過service地址訪問,就可以知道訪問哪個Pod資源了。修改某個Pod容器中的內(nèi)容,首先要獲取Pod的名稱,命令如下:[root@master~]#kubectlgetpod查看Service詳細(xì)信息使用describe命令可以查看一個Service的詳細(xì)信息,如查看de-nginx這個Service的詳細(xì)信息,使用以下命令。[root@master~]#kubectldescribeservicede-nginx如果pod中只包含一個容器,可以省略-ccontainrName,如果在默認(rèn)的命令空間下,可以省略-nnamespace。修改第1個Pod容器的命令如下,首先進(jìn)入到容器[root@master~]#kubectlexec-itde-nginx-84d9fbcd7f-h9q6l/bin/bash然后進(jìn)入nginx主頁服務(wù)目錄root@de-nginx-84d9fbcd7f-h9q6l:/#cd/usr/share/nginx/html/最后修改主頁內(nèi)容為web1root@de-nginx-84d9fbcd7f-h9q6l:/usr/share/nginx/html#echoweb1>index.html退出容器使用exit命令重點關(guān)注3個字段,分別是①Labels:app=de-nginx②Selector:app=de-nginx③Endpoints:9:80,5:80,6:80其中Lables是Service本身的標(biāo)簽,Selector是對應(yīng)的Pod的標(biāo)簽,Endpoints是后端服務(wù)的IP地址,服務(wù)發(fā)現(xiàn)正是通過Selector和Endpoints實現(xiàn)對后端真實Pod容器的訪問,Endpoints的IP地址就是3個Pod的IP地址??梢允褂胟ubectlgetpod--show-labels查看pod的標(biāo)簽,命令如下:[root@master~]#kubectlgetpod--show-labels2.2.2創(chuàng)建Service訪問容器應(yīng)用二、查看Service服務(wù)發(fā)現(xiàn)6.集群外部訪問服務(wù)僅僅在集群內(nèi)部訪問服務(wù)是不夠的,因為很多流量通常來自于集群外,這就需要修改Service的類型,實現(xiàn)來自外部的訪問。首先查看Service的IP地址類型,命令如下[root@master~]#kubectlgetservice回車后,會打開這個Service的配置文件,將倒數(shù)第3行type:ClusterIP中的ClusterIP修改為NodePort保存就可以了,再次查看集群中的Service,命令如下:[root@master~]#kubectlgetservice通過TYPE發(fā)現(xiàn)IP地址的類型是ClusterIP,即集群類型的IP,如果想實現(xiàn)外部流量的訪問,需要將該類型轉(zhuǎn)換為NodePort節(jié)點端口類型,轉(zhuǎn)換的方法是使用命令編輯這個Service,命令如下:[root@master~]#kubectleditservicede-nginx發(fā)現(xiàn)de-nginx的TYPE類型已經(jīng)修改成NodePort類型,并且在PORT下增加了32646端口,即外部訪問的端口,打開瀏覽器,訪問master或任意一個node節(jié)點的IP地址加上32646端口,即可訪問de-nginx這個Service對應(yīng)的后端服務(wù),發(fā)現(xiàn)de-nginx的TYPE類型已經(jīng)修改成NodePort類型,并且在PORT下增加了32646端口,即外部訪問的端口,打開瀏覽器,訪問master或任意一個node節(jié)點的IP地址加上32646端口,即可訪問de-nginx這個Service對應(yīng)的后端服務(wù),2.2.2創(chuàng)建Service訪問容器應(yīng)用拓展訓(xùn)練使用kubectl命令部署名稱為httpd的deployment控制器,使用的鏡像是httpd,副本數(shù)是3,然后創(chuàng)建Service服務(wù)訪問pod中的httpd服務(wù),修改3個pod容器服務(wù)內(nèi)容分別為html1、html2、html3,再訪問Service服務(wù)驗證負(fù)載均衡情況。項目小結(jié)

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論