容器技術(shù) 配置、部署與應(yīng)用(第2版)(微課版)-項目8_第1頁
容器技術(shù) 配置、部署與應(yīng)用(第2版)(微課版)-項目8_第2頁
容器技術(shù) 配置、部署與應(yīng)用(第2版)(微課版)-項目8_第3頁
容器技術(shù) 配置、部署與應(yīng)用(第2版)(微課版)-項目8_第4頁
容器技術(shù) 配置、部署與應(yīng)用(第2版)(微課版)-項目8_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Docker容器技術(shù)配置、部署與應(yīng)用工業(yè)和信息化精品系列教材——云計算技術(shù)項目8

Kubernetes部署容器化應(yīng)用程序人民郵電出版社能力CAPACITY要求了解容器編排解決方案。掌握Kubernetes實驗環(huán)境的搭建方法。了解Kubernetes,學(xué)會使用Kubernetes運行應(yīng)用程序。掌握將容器化應(yīng)用程序手動部署到Kubernetes集群的方法。掌握Kubernetes部署的應(yīng)用程序的CI/CD實施方法。任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)8.1部署Kubernetes集群任務(wù)8.1部署Kubernetes集群任務(wù)說明01OPTION02OPTION03OPTION了解容器編排解決方案了解Kubernetes的基礎(chǔ)知識學(xué)會基于kind部署Kubernetes集群04OPTION初步學(xué)會在Kubernetes集群中運行并發(fā)布簡單的應(yīng)用程序任務(wù)8.1部署Kubernetes集群知識引入8.1.1容器編排解決方案Docker局限性Docker只是容器化平臺管理、擴縮、維護容器化應(yīng)用需專業(yè)編排工具DockerSwarm優(yōu)勢Docker原生集群解決方案與Compose無縫集成,輕松部署到Swarm集群提供服務(wù)發(fā)現(xiàn)、負載均衡、自動擴展等基本功能適用于容器規(guī)模較小場景,與Docker無縫集成可最大化優(yōu)勢DockerSwarm局限性復(fù)雜度和封閉性限制發(fā)展Docker企業(yè)版被收購后,因公司傾向Kubernetes,面臨淘汰任務(wù)8.1部署Kubernetes集群知識引入8.1.1容器編排解決方案Kubernetes優(yōu)勢適用于生產(chǎn)環(huán)境企業(yè)級大規(guī)模容器集群谷歌推出,源于多年運維經(jīng)驗及社區(qū)創(chuàng)意擁有強大核心基礎(chǔ)特性和獨特生態(tài)云原生應(yīng)用程序云計算主流服務(wù)形式可快速擴展的輕量級容器獨立服務(wù),屬容器化應(yīng)用Kubernetes應(yīng)用場景主要應(yīng)用于云架構(gòu)和云原生部署可靈活部署于企業(yè)內(nèi)部、私有云、混合云或公有云任務(wù)8.1部署Kubernetes集群知識引入8.1.2Kubernetes集群的組成任務(wù)8.1部署Kubernetes集群知識引入8.1.3Kubernetes集群的部署工具kubeadmkopskubespraykindminikube任務(wù)8.1部署Kubernetes集群知識引入8.1.4Kubernetes的對象和資源任務(wù)8.1部署Kubernetes集群知識引入8.1.5使用YAML文件描述應(yīng)用程序配置文件概述Kubernetes對象由YAML格式配置文件(清單文件)描述文件定義應(yīng)用程序組件和配置,指定對象預(yù)期狀態(tài)用于在任何Kubernetes環(huán)境中創(chuàng)建和銷毀應(yīng)用程序運維任務(wù)編寫配置文件并提供給Kubernetes實現(xiàn)資源自動編排任務(wù)8.1部署Kubernetes集群知識引入8.1.5使用YAML文件描述應(yīng)用程序必需字段YAML文件中apiVersion、kind、metadata和spec字段必需spec字段最重要,不同對象spec格式不同,包含不同嵌套字段版本注意不同版本下,apiVersion字段值有所不同status字段不需要在YAML文件中定義,由Kubernetes自動生成和維護記錄對象當前實際狀態(tài),Kubernetes控制平面管理對象狀態(tài)使其達到期望狀態(tài)任務(wù)8.1部署Kubernetes集群知識引入8.1.6Kubernetes對象管理方法指令式命令適用于項目開發(fā)階段,或在Kubernetes中運行一次性任務(wù),簡單易用指令式對象配置適用于生產(chǎn)項目,通過代碼管理系統(tǒng)進行管理,可以與流程集成聲明式對象配置適用于生產(chǎn)項目,但使用難度較高,難以調(diào)試任務(wù)8.1部署Kubernetes集群任務(wù)8.1.1基于kind部署Kubernetes集群了解kind任務(wù)實現(xiàn)任務(wù)8.1部署Kubernetes集群任務(wù)8.1.1基于kind部署Kubernetes集群準備安裝環(huán)境安裝kind[$(uname-m)=x86_64]&&curl-Lo./kindhttps://kind.sigs.k8s.io/dl/v0.22.0/kind-linux-amd64#下載kind二進制文件chmod+x./kind#賦予可執(zhí)行權(quán)限mv./kind/usr/local/bin/kind#將kind移動到系統(tǒng)全局路徑/usr/local/bin安裝kubectlcurl-LOhttps://dl.k8s.io/release/v1.29.2/bin/linux/amd64/kubectl#下載kubectl二進制文件chmod+xkubectl#賦予可執(zhí)行權(quán)限mvkubectl/usr/bin/#將kind移動到系統(tǒng)全局路徑/usr/bin/任務(wù)實現(xiàn)任務(wù)8.1部署Kubernetes集群任務(wù)8.1.1基于kind部署Kubernetes集群創(chuàng)建Kubernetes集群編寫集群配置文件testk8s-config.yamlkind:ClusterapiVersion:kind.x-k8s.io/v1alpha4name:testk8s #集群名稱nodes: #定義節(jié)點-role:control-plane #定義控制平面

extraPortMappings: #定義外部端口映射

-containerPort:80 #將主機的80端口映射到容器的80端口

hostPort:80-containerPort:30008 #將主機的30008端口映射到容器的30008端口

hostPort:30008-role:worker #定義工作節(jié)點-role:workercontainerdConfigPatches:#附加containerd的配置,實現(xiàn)鏡像加速器的配置

-|-[plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint=["https://國內(nèi)鏡像加速器網(wǎng)址"]任務(wù)實現(xiàn)任務(wù)8.1部署Kubernetes集群任務(wù)8.1.1基于kind部署Kubernetes集群創(chuàng)建Kubernetes集群基于該集群配置文件創(chuàng)建Kubernetes集群[root@host2~]#kindcreatecluster--configk8s/testk8s-config.yamlCreatingcluster"testk8s"…?Ensuringnodeimage(kindest/node:v1.29.2)???Preparingnodes???????Writingconfiguration???Startingcontrol-plane???InstallingCNI???InstallingStorageClass???Joiningworkernodes??Setkubectlcontextto"kind-testk8s"Youcannowuseyourclusterwith:kubectlcluster-info--contextkind-testk8sHaveaquestion,bug,orfeaturerequest?Letusknow!https://kind.sigs.k8s.io/#community??任務(wù)實現(xiàn)任務(wù)8.1部署Kubernetes集群任務(wù)8.1.1基于kind部署Kubernetes集群試用Kubernetes集群顯示集群信息[root@host2~]#kubectlcluster-infoKubernetescontrolplaneisrunningat:41895CoreDNSisrunningat:41895/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy查看集群的的關(guān)鍵組件[root@host2~]#kubectlgetcomponentstatusWarning:v1ComponentStatusisdeprecatedinv1.19+NAME STATUS MESSAGEERRORcontroller-manager Healthy okscheduler Healthy oketcd-0 Healthy ok任務(wù)實現(xiàn)任務(wù)8.1部署Kubernetes集群任務(wù)8.1.2在Kubernetes集群中運行并發(fā)布應(yīng)用程序創(chuàng)建Deployment對象編輯定義Deployment對象的配置文件nginx-deploy.yamlapiVersion:apps/v1 #版本號kind:Deployment #類型為Deploymentmetadata: #元數(shù)據(jù)

name:nginx-deploylabels: #標簽

app:nginx-deployspec: #詳細信息

replicas:2 #副本數(shù)量

selector: #選擇器,指定該控制器管理的PodmatchLabels: #匹配規(guī)則

app:nginx-pod

任務(wù)實現(xiàn)任務(wù)8.1部署Kubernetes集群任務(wù)8.1.2在Kubernetes集群中運行并發(fā)布應(yīng)用程序創(chuàng)建Deployment對象編輯定義Deployment對象的配置文件nginx-deploy.yamltemplate: #定義模板,當副本數(shù)量不足時會根據(jù)模板定義并創(chuàng)建Pod副本

metadata:labels:app:nginx-pod #Pod的標簽

spec:containers: #容器列表(本例僅定義一個容器)

-name:nginx #容器名稱

image:nginx:1.14.2 #容器所用的鏡像

ports:-name:nginx-portcontainerPort:80 #容器需要暴露的端口任務(wù)實現(xiàn)任務(wù)8.1部署Kubernetes集群任務(wù)8.1.2在Kubernetes集群中運行并發(fā)布應(yīng)用程序創(chuàng)建Deployment對象基于該配置文件創(chuàng)建Deployment對象。[root@host2k8s]#kubectlapply-fnginx-deploy.yamldeployment.apps/nginx-deploycreated查看該Deployment對象每個Pod的IP地址。[root@host2k8s]#kubectlgetpods-owideNAME READY STATUS RESTARTSAGE IP NODE…nginx-deploy-59c566bbbb-mzdtv 1/1 Running0 49skind-worker2nginx-deploy-59c566bbbb-rtts81/1Running049skind-worker進入Kubernetes集群內(nèi)部,通過Pod的IP地址可以訪問部署的應(yīng)用程序。[root@host2k8s]#dockerexec-ittestk8s-control-planebashroot@testk8s-control-plane:/#curl…<h1>Welcometonginx!</h1>任務(wù)實現(xiàn)任務(wù)8.1部署Kubernetes集群任務(wù)8.1.2在Kubernetes集群中運行并發(fā)布應(yīng)用程序創(chuàng)建Service對象創(chuàng)建定義Service對象的配置文件nginx-service.yaml。apiVersion:v1kind:Servicemetadata:name:nginx-svc #設(shè)置Service的顯示名稱spec:type:NodePort #Service類型

selector:app:nginx-pod #指定Pod的標簽

ports:-port:8080 #讓集群知道Service綁定的端口

targetPort:80 #目標Pod的端口

nodePort:30008 #節(jié)點上綁定的端口任務(wù)實現(xiàn)任務(wù)8.1部署Kubernetes集群任務(wù)8.1.2在Kubernetes集群中運行并發(fā)布應(yīng)用程序創(chuàng)建Service對象基于該配置文件創(chuàng)建Service對象。[root@host2k8s]#kubectlapply-fnginx-service.yamlservice/nginx-svccreated查看該Service對象的地址和端口。[root@host2k8s]#kubectlgetservicenginx-svcNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEnginx-svcNodePort12<none>8080:30008/TCP24s任務(wù)實現(xiàn)任務(wù)8.1部署Kubernetes集群任務(wù)8.1.2在Kubernetes集群中運行并發(fā)布應(yīng)用程序創(chuàng)建Service對象測試從Kubernetes集群內(nèi)部訪問Service發(fā)布的應(yīng)用程序。[root@host2k8s]#dockerexec-ittestk8s-control-planebashroot@testk8s-control-plane:/#curl12:8080…<h1>Welcometonginx!</h1>…測試從Kubernetes集群外部訪問Service發(fā)布的應(yīng)用程序。[root@host2k8s]#curl:30008…<h1>Welcometonginx!</h1>…任務(wù)實現(xiàn)任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)8.1部署Kubernetes集群任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)說明01OPTION02OPTION03OPTION了解將開發(fā)的應(yīng)用程序部署到Kubernetes的基本流程初步掌握在Kubernetes集群中手動部署開發(fā)的應(yīng)用程序的實施方法初步掌握基于CI/CD平臺將應(yīng)用程序自動化部署到Kubernete集群的方法任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序知識引入8.2.1將開發(fā)的應(yīng)用程序部署到Kubernetes集群的基本流程(1)編寫應(yīng)用程序代碼。(2)對應(yīng)用程序進行測試。(3)編寫Doclcerfile文件并構(gòu)建鏡像。(4)將構(gòu)建的鏡像推送到注冊中心進行發(fā)布。(5)編寫YAML文件,用于對Kubernetes資源進行編排與部署。(6)利用kubectl工具基于YAML資源配置文件在Kubernetes集群中運行應(yīng)用程序。(7)根據(jù)需要更改YAML文件中的鏡像來實現(xiàn)應(yīng)用程序的升級。任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序知識引入8.2.2Jenkins的Maven項目CI/CD流程任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)8.2.1在Kubernetes集群中手動部署開發(fā)的應(yīng)用程序準備Maven打包環(huán)境(1)確認當前環(huán)境中安裝JDK以便編譯Java代碼。(2)確認已經(jīng)安裝Maven軟件并配置相應(yīng)的環(huán)境變量。準備項目源代碼沿用將項目7任務(wù)7.2.2所用的項目源代碼。修改其中的src/main/java/com/abc/hello/HelloController.java文件。任務(wù)實現(xiàn)任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)8.2.1在Kubernetes集群中手動部署開發(fā)的應(yīng)用程序使用Maven工具將應(yīng)用程序打包(1)執(zhí)行mvncleanpackage命令打包應(yīng)用程序。(2)行所生成的JAR包進行測試。[root@host1spring-boot-hello]#java-jartarget/spring-boot-hello-0.0.1-SNAPSHOT.jar(3)打開另一個終端窗口進行測試。任務(wù)實現(xiàn)任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)8.2.1在Kubernetes集群中手動部署開發(fā)的應(yīng)用程序構(gòu)建應(yīng)用程序的鏡像(1)修改Doclcerfile。FROMopenjdk:8-jreCOPYtarget/spring-boot-hello-0.0.1-SNAPSHOT.jar/app.jarENTRYPOINT["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"](2)執(zhí)行構(gòu)建鏡像的命令。[root@host1spring-boot-hello]#dockerbuild-tspring-boot-hello.[+]Building0.6s(7/7)FINISHED docker:default…=>=>namingtodocker.io/library/spring-boot-hello 0.0s任務(wù)實現(xiàn)任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)8.2.1在Kubernetes集群中手動部署開發(fā)的應(yīng)用程序構(gòu)建應(yīng)用程序的鏡像(3)基于該鏡像運行一個容器以便進行測試。[root@host1~]#dockerrun--rm--namespring-boot-hello-d-p8080:8080spring-boot-hello(4)訪問該容器進行測試。[root@host1~]#curl:8080Hello!PleasetestJavaK8sdeploy!(5)停止該容器。[root@host1~]#dockerstopspring-boot-hellospring-boot-hello任務(wù)實現(xiàn)任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)8.2.1在Kubernetes集群中手動部署開發(fā)的應(yīng)用程序?qū)㈢R像發(fā)布到注冊中心(1)為鏡像打上標簽。[root@host1~]#dockertagspring-boot-hello:5000/spring-boot-hello:1.00(2)推送到Docker倉庫。[root@host1~]#dockerpush:5000/spring-boot-hello:1.00…(3)訪問注冊中心查看spring-boot-hello項目的鏡像列表。[root@host1~]#curl:5000/v2/spring-boot-hello/tags/list{"name":"spring-boot-hello","tags":["latest","1.00"]}任務(wù)實現(xiàn)任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)8.2.1在Kubernetes集群中手動部署開發(fā)的應(yīng)用程序基于Kubernetes資源配置文件運行應(yīng)用程序(1)在host2主機中編輯/etc/hosts文件。(2)刪除之前創(chuàng)建的Kubernetes集群。[root@host2~]#kinddeletecluster--nametestk8s(3)修改集群配置文件testk8s-config.yaml。kind:ClusterapiVersion:kind.x-k8s.io/v1alpha4name:testk8scontainerdConfigPatches: #讓containerd訪問未啟用HTTPS的注冊中心-|-[plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint=["https://國內(nèi)鏡像加速器網(wǎng)址"][plugins."io.containerd.grpc.v1.cri".registry.mirrors.":5000"]endpoint=[":5000"]任務(wù)實現(xiàn)任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)8.2.1在Kubernetes集群中手動部署開發(fā)的應(yīng)用程序基于Kubernetes資源配置文件運行應(yīng)用程序(3)修改集群配置文件testk8s-config.yaml。nodes:-role:control-planeextraMounts: #掛載主機的/etc/hosts文件以支持本地域名解析

-hostPath:/etc/hostscontainerPath:/etc/hostsextraPortMappings: #外部端口映射

-containerPort:80 #將主機的80端口映射到容器的80端口

hostPort:80-containerPort:30008 #將主機的30008端口映射到容器的30008端口

hostPort:30008-role:workerextraMounts: #工作節(jié)點也要掛載主機的/etc/hosts文件以支持本地域名解析

-hostPath:/etc/hostscontainerPath:/etc/hosts-role:workerextraMounts:-hostPath:/etc/hostscontainerPath:/etc/hosts任務(wù)實現(xiàn)任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)8.2.1在Kubernetes集群中手動部署開發(fā)的應(yīng)用程序基于Kubernetes資源配置文件運行應(yīng)用程序(4)基于修改后的集群配置文件重新創(chuàng)建Kubernetes集群。[root@host2~]#kindcreatecluster--configk8s/testk8s-config.yaml(5)編寫Kubernetes資源配置文件spring-boot-hello.yaml。template:metadata:labels:app:sbdemospec:containers:-name:sbdemoimage::5000/spring-boot-hello:1.00imagePullPolicy:Alwaysports:-containerPort:8080任務(wù)實現(xiàn)任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)8.2.1在Kubernetes集群中手動部署開發(fā)的應(yīng)用程序基于Kubernetes資源配置文件運行應(yīng)用程序(6)將應(yīng)用程序部署到Kubernetes。[root@host2k8s]#kubectlapply-fspring-boot-hello.yaml(7)查看該Service對象,可以發(fā)現(xiàn)該應(yīng)用程序正常運行。[root@host2k8s]#kubectlgetsvcsbdemo-svcNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEsbdemo-svcNodePort47<none>8080:30008/TCP2m14s(8)使用節(jié)點地址和節(jié)點端口來訪問發(fā)布的應(yīng)用。[root@host2ch08host2k8s]#curl:30008Hello!PleasetestJavaK8sdeploy!(9)刪除本例所創(chuàng)建的Service和Deployment對象。任務(wù)實現(xiàn)任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)8.2.2基于CI/CD平臺將應(yīng)用程序自動部署到Kubernetes集群準備項目的實施環(huán)境(1)在host1主機上編輯/etc/hosts文件。(2)確認在Jenkins中安裝有MavenIntegration插件并配置Maven安裝選項。(3)在Jenkins中配置PublishOverSSH選項。任務(wù)實現(xiàn)配置SSH服務(wù)器的基本選項任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)8.2.2基于CI/CD平臺將應(yīng)用程序自動部署到Kubernetes集群準備項目源代碼(1)在GitLab服務(wù)器上創(chuàng)建空白項目。(2)將GitLab服務(wù)器上的k8s-demo代碼倉庫復(fù)制到本地。(3)沿用項目7任務(wù)7.2.2中的項目源代碼。(4)修改其中的src/main/java/com/abc/hello/HelloController.java文件。編寫Kubernetes資源配置文件image::5000/spring-boot-hello任務(wù)實現(xiàn)任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)8.2.2基于CI/CD平臺將應(yīng)用程序自動部署到Kubernetes集群在Jenkins中新建流水線項目任務(wù)實現(xiàn)設(shè)置源代碼管理選項任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)8.2.2基于CI/CD平臺將應(yīng)用程序自動部署到Kubernetes集群在Jenkins中新建流水線項目任務(wù)實現(xiàn)設(shè)置腳本路徑任務(wù)8.2在Kubernetes集群中部署開發(fā)的應(yīng)用程序任務(wù)8.2.2基于CI/CD平臺將應(yīng)用程序自動部署到Kubernetes集群修改Jenkinsfile文件stage('Deploy'){steps{sshPublisher(publishers:[sshPublisherDesc(configName:'K8SHost',transfers:[sshTransfer(cleanRemote:false,excludes:'',execCommand:'''cd/spring-boot-hellokubectlapply-fkube.yamlkubectldelete-fkube.yaml&&kubectlapply-fkube.yaml''',execTimeout:120000,flatten:false,makeEmptyDirs:false,noDefau

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論