版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
《Kubernetes集群實戰(zhàn)(微課版)》
項目實訓參考指導項目1從Docker轉向Kubernetes實訓1安裝DockerEngine并進行鏡像和容器的基本操作實訓目的(1)了解Docker版本和安裝方式。(2)掌握DockerEngine的安裝方法。(3)掌握鏡像和容器的基本操作方法。實訓內(nèi)容建議參照任務1.1.1通過Docker的軟件倉庫安裝Docker;參照任務1.2.1操作鏡像和容器。(1)準備Docker安裝環(huán)境。操作系統(tǒng)選擇CentOSStream8或CentOSStream9;更改主機名;修改網(wǎng)絡連接配置;禁用防火墻和SELinux;更改時區(qū)。(2)設置Docker軟件倉庫。yuminstall-yyum-utilsyum-con?g-manager--add-repo\/docker-ce/linux/centos/docker-ce.repo(3)安裝DockerEngine軟件包。如果運行的是CentOSStream8,則需要先卸載默認的容器引擎Podman:yumerasepodmanbuilda如果運行的是CentOSStream9,則無需此操作。建議安裝指定版本的DockerEngine:yuminstalldocker-ce-20.10.21docker-ce-cli-20.10.21containerd.io-1.6.10也可以嘗試安裝最新版本:yuminstalldocker-cedocker-ce-clicontainerd.iodocker-buildx-plugindocker-compose-plugin目前最新版本涉及DockerCompose的安裝。(4)啟動Docker并運行hello-world鏡像進行測試。systemctlstartdockerdockerrunhello-world因國內(nèi)網(wǎng)絡環(huán)境限制,實際應用中我們會遇到無法拉取Docker鏡像的情況。最簡單的解決方案是使用鏡像加速器。推薦使用以下鏡像加速器:Daocloud鏡像加速器:https://docker.m.daocloud.io阿里云鏡像加速器:https://XXXXX.華為云鏡像加速器:XXXXX.阿里云和華為云需要登錄賬號,獲取特定的鏡像加速器地址。需要注意的是,之前一些常用的鏡像加速器已變得不好用,列舉如下:Docker官方鏡像(中國區(qū))鏡像加速器:騰訊云鏡像加速器:中國科學技術大學:網(wǎng)易云鏡像加速器:南京大學鏡像加速器:(5)執(zhí)行拉取鏡像、顯示鏡像列表和查看鏡像構建歷史信息的操作。dockerpullubuntu:18.04dockerimagesdockerhistoryubuntu:18.04(6)基于httpd鏡像以后臺方式運行Apache容器并對外開放80端口。dockerrun-d-p80:80--nametestwebhttpd(7)使用dockerexec命令進入Apache容器查看當前目錄。dockerexec-ittestweb/bin/bash(8)停止并刪除Apache容器。dockerstoptestwebdockerrmtestweb實訓2對Node.jsWeb應用程序進行容器化實訓目的(1)了解應用程序容器化的基本步驟。(2)學會應用程序容器化的基本方法。實訓內(nèi)容直接從源碼托管平臺克隆一個公告板應用程序項目node-bulletin-board使用。(1)創(chuàng)建項目目錄。mkdirbulletin&&cdbulletin(2)使用Git工具將node-bulletin-board庫克隆到本地。若實驗環(huán)境中沒有安裝Git客戶端,先執(zhí)行進行安裝:yuminstall-ygit從GitHub網(wǎng)站獲取該項目。[root@docker_devbulletin]#gitclone/docker-training/node-bulletin-board正克隆到'node-bulletin-board'...remote:Enumeratingobjects:213,done.remote:Countingobjects:100%(23/23),done.remote:Compressingobjects:100%(19/19),done.remote:Total213(delta8),reused17(delta4),pack-reused190接收對象中:100%(213/213),197.64KiB|602.00KiB/s,完成.處理delta中:100%(90/90),完成.(3)查看克隆到本地的應用程序和Dockerfile。[root@docker_devbulletin]#lsnode-bulletin-board[root@docker_devbulletin]#cdnode-bulletin-board[root@docker_devnode-bulletin-board]#lsbulletin-board-appLICENSE[root@docker_devnode-bulletin-board]#tree.├──bulletin-board-app│
├──app.js│
├──backend│
│
├──api.js│
│
├──events.js│
│
└──index.js│
├──Dockerfile│
├──fonts│
│
└──geomanist│
│
└──hinted-Geomanist-Book.woff2│
├──index.html│
├──LICENSE│
├──package.json│
├──readme.md│
├──server.js│
└──site.css└──LICENSE[root@docker_devnode-bulletin-board]#cdbulletin-board-app[root@docker_devbulletin-board-app]#catDockerfileFROMnode:6.11.5WORKDIR/usr/src/appCOPYpackage.json.RUNnpminstallCOPY..CMD["npm","start"]該項目從現(xiàn)有的node:6.11.5鏡像開始構建,但是網(wǎng)絡環(huán)境限制,直接拉取官方node鏡像比較困難,注意使用鏡像加速器解決鏡像無法拉取的問題。(4)基于Dockerfile構建鏡像。[root@docker_devbulletin-board-app]#dockerbuild-tbulletinboard:1.0.SendingbuildcontexttoDockerdaemon45.57kBStep1/6:FROMnode:1.5:Pullingfromlibrary/node85b1f47fba49:Pullcompleteba6bd283713a:Pullcomplete817c8cd48a09:Pullcomplete47cc0ed96dc3:Pullcomplete8888adcbd08b:Pullcomplete6f2de60646b9:Pullcomplete1666693bf996:Pullcomplete2fe410df7942:PullcompleteDigest:sha256:fe109b92edafd9821fbc1c80fd7587a1b4e1ff76fec3af675869e23e50bbf45bStatus:Downloadednewerimagefornode:6.11.5>852391892b9fStep2/6:WORKDIR/usr/src/app>Runningin01963b7cf7f0Removingintermediatecontainer01963b7cf7f0>72cf46a04400Step3/6:COPYpackage.json.>a6d3d413a859Step4/6:RUNnpminstall>Runningin3350ea014600npmWARNdeprecatedq@1.5.1:YouorsomeoneyoudependonisusingQ,theJavaScriptPromiselibrarythatgaveJavaScriptdevelopersstrongfeelingsaboutpromises.TheycanalmostcertainlymigratetothenativeJavaScriptpromisenow.Thankyouliterallyeveryoneforjoiningmeinthisbetagainsttheodds.Beexcellenttoeachother.npmWARNdeprecatednpmWARNdeprecated(ForaCapTPwithnativepromises,see@endo/eventual-sendand@endo/captp)npmWARNdeprecatedglob@5.0.15:Globversionspriortov9arenolongersupportednpmWARNdeprecatedinflight@1.0.6:Thismoduleisnotsupported,andleaksmemory.Donotuseit.Checkoutlru-cacheifyouwantagoodandtestedwaytocoalesceasyncrequestsbyakeyvalue,whichismuchmorecomprehensiveandpowerful.>ejs@2.7.4postinstall/usr/src/app/node_modules/ejs>node./postinstall.jsvue-event-bulletin@1.0.0/usr/src/app+--body-parser@1.20.2|+--bytes@3.1.2|+--content-type@1.0.5|+--debug@2.6.9||`--ms@2.0.0|+--depd@2.0.0|+--destroy@1.2.0|+--http-errors@2.0.0||+--inherits@2.0.4||`--toidentifier@1.0.1|+--iconv-lite@0.4.24||`--safer-buffer@2.1.2|+--on-finished@2.4.1||`--ee-first@1.1.1|+--qs@6.11.0||`--side-channel@1.0.6||+--call-bind@1.0.7|||+--es-define-property@1.0.0|||+--function-bind@1.1.2|||`--set-function-length@1.2.2|||+--define-data-property@1.1.4|||+--gopd@1.0.1|||`--has-property-descriptors@1.0.2||+--es-errors@1.3.0||+--get-intrinsic@1.2.4|||+--has-proto@1.0.3|||+--has-symbols@1.0.3|||`--hasown@2.0.2||`--object-inspect@1.13.2|+--raw-body@2.5.2|+--type-is@1.6.18||+--media-typer@0.3.0||`--mime-types@2.1.35||`--mime-db@1.52.0|`--unpipe@1.0.0+--bootstrap@3.4.1+--ejs@2.7.4+--errorhandler@1.5.1|+--accepts@1.3.8||`--negotiator@0.6.3|`--escape-html@1.0.3+--express@4.19.2|+--array-flatten@1.1.1|+--content-disposition@0.5.4|+--cookie@0.6.0|+--cookie-signature@1.0.6|+--encodeurl@1.0.2|+--etag@1.8.1|+--finalhandler@1.2.0|+--fresh@0.5.2|+--merge-descriptors@1.0.1|+--methods@1.1.2|+--parseurl@1.3.3|+--path-to-regexp@0.1.7|+--proxy-addr@2.0.7||+--forwarded@0.2.0||`--ipaddr.js@1.9.1|+--range-parser@1.2.1|+--safe-buffer@5.2.1|+--send@0.18.0||+--mime@1.6.0||`--ms@2.1.3|+--serve-static@1.15.0|+--setprototypeof@1.2.0|+--statuses@2.0.1|+--utils-merge@1.0.1|`--vary@1.1.2+--method-override@2.3.10+--morgan@1.10.0|+--basic-auth@2.0.1||`--safe-buffer@5.1.2|+--on-finished@2.3.0|`--on-headers@1.0.2+--vue@1.0.28|`--envify@3.4.1|+--jstransform@11.0.3||+--base62@1.2.8||+--commoner@0.10.8|||+--commander@2.20.3|||+--detective@4.7.1||||+--acorn@5.7.4||||`--defined@1.0.1|||+--glob@5.0.15||||+--inflight@1.0.6|||||`--wrappy@1.0.2||||+--minimatch@3.1.2|||||`--brace-expansion@1.1.11|||||+--balanced-match@1.0.2|||||`--concat-map@0.0.1||||+--once@1.4.0||||`--path-is-absolute@1.0.1|||+--graceful-fs@4.2.11|||+--mkdirp@0.5.6||||`--minimist@1.2.8|||+--private@0.1.8|||+--q@1.5.1|||`--recast@0.11.23|||+--ast-types@0.9.6|||+--esprima@3.1.3|||`--source-map@0.5.7||+--esprima-fb@15001.1.0-dev-harmony-fb||+--object-assign@2.1.1||`--source-map@0.4.4||`--amdefine@1.0.1|`--through@2.3.8`--vue-resource@0.1.17npmWARNvue-event-bulletin@1.0.0Norepositoryfield.Removingintermediatecontainer3350ea014600>73d897307a01Step5/6:COPY..>f8f8611a51c1Step6/6:CMD["npm","start"]>Runningin499596b83106Removingintermediatecontainer499596b83106>8a25ef93958aSuccessfullybuilt8a25ef93958aSuccessfullytaggedbulletinboard:1.0(5)基于構建的鏡像啟動容器。[root@docker_devbulletin-board-app]#dockerrun--publish8000:8080--detach--namebulletinboardbulletinboard:1.04bf78efdd73bba892af0df5756a4a9d114c415be9c2625176cfadb17540bb2b4(6)在瀏覽器中訪問localhost:8000實際測試公告板應用程序。(7)測試完畢后,停止并刪除該容器。[root@docker_devbulletin-board-app]#dockerrm--forcebulletinboardbulletinboard項目2部署Kubernetes集群實訓1使用kubeadm工具部署三節(jié)點Kubernetes集群實訓目的(1)了解Kubernetes集群的組成。(2)了解Kubernetes集群的部署方式。(3)學會使用kubeadm工具快速部署Kubernetes集群。實訓內(nèi)容建議參照任務2.1.1至任務2.1.6完成本實現(xiàn)任務。(1)簡單規(guī)劃要部署的Kubernetes集群。(2)準備Kubernetes集群安裝環(huán)境(3個節(jié)點主機)。安裝容器運行時containerd時要注意修改配置以解決鏡像下載問題。在Kubernetes中,默認情況下,Pod會從官方DockerHub拉取Docker鏡像,即docker.io鏡像倉庫。默認情況下containerd配置文件/etc/containerd/config.toml中相關設置如下:[plugins."io.containerd.grpc.v1.cri".registry][plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]#沒有任何設置,containerd將直接從DockerHub拉取鏡像考慮到國內(nèi)網(wǎng)絡限制,通常設置鏡像加速器來解決拉取Docker鏡像的問題。本教材編寫時給出的一些鏡像加速器自從2024年6月開始不可用。[plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint=["","",
"",""]其中后面3個當前皆不可用:騰訊云中國區(qū)鏡像"網(wǎng)易而Daocloud鏡像加速器:https://docker.m.daocloud.io目前可用,建議將其加入鏡像加速器列表,該設置改為:[plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint=["https://docker.m.daocloud.io",""](3)部署Kubernetes集群節(jié)點。(4)安裝Pod網(wǎng)絡插件。(5)通過部署Nginx來測試Kubernetes集群的使用。(6)練習crictl命令的使用。實訓2安裝和使用KubernetesDashboard實訓目的(1)了解KubernetesDashboard的基本功能。(2)學會使用KubernetesDashboard對集群進行可視化管理操作。實訓內(nèi)容建議參照任務2.2.1和任務2.2.2完成本實現(xiàn)任務。(1)準備Kubernetes實驗環(huán)境。(2)安裝KubernetesDashboard。(3)獲取dashboard-admin服務賬戶的令牌并登錄Dashboard。(4)熟悉Dashboard的基本操作。(5)嘗試使用Dashboard部署Nginx。(6)刪除所部署的應用程序。項目3熟悉Kubernetes基本操作實訓1操作指定名稱空間中對象的標簽實訓目的(1)了解Kubernetes名稱空間和對象的標簽。(2)學會Kubernetes名稱空間的基本用法。(3)學會Kubernetes對象的基本操作。實訓內(nèi)容注意本實訓的對象操作都要指定名稱空間,在控制平面主機上執(zhí)行操作。(1)準備Kubernetes集群實驗環(huán)境。(2)創(chuàng)建一個實驗用的名稱空間。[root@master01~]#kubectlcreatenamespacemynsnamespace/mynscreated(3)在該名稱空間中創(chuàng)建一個Pod對象并為其添加標簽app=test。[root@master01~]#kubectlrunmynginx--image=nginx-lapp=test-nmynspod/mynginxcreated[root@master01~]#kubectlgetpod--show-labels-nmynsNAMEREADYSTATUSRESTARTSAGELABELSmynginx1/1Running02m34sapp=test(4)將該對象的標簽app=test修改為app=dev。[root@master01~]#kubectllabelpodmynginxapp=dev--overwriteErrorfromserver(NotFound):pods"mynginx"notfound[root@master01~]#kubectllabelpodmynginxapp=dev--overwrite-nmynspod/mynginxlabeled[root@master01~]#kubectlgetpod--show-labels-nmynsNAMEREADYSTATUSRESTARTSAGELABELSmynginx1/1Running04m19sapp=dev(5)為該對象增加標簽ver=1.5。[root@master01~]#kubectllabelpodmynginxver=1.5-nmynspod/mynginxlabeled[root@master01~]#kubectlgetpod--show-labels-nmynsNAMEREADYSTATUSRESTARTSAGELABELSmynginx1/1Running06m50sapp=dev,ver=1.5(6)刪除該對象名為app的標簽。[root@master01~]#kubectllabelpodmynginxapp--nmynspod/mynginxunlabeled[root@master01~]#kubectlgetpod--show-labels-nmynsNAMEREADYSTATUSRESTARTSAGELABELSmynginx1/1Running07m52sver=1.5(7)刪除該對象。[root@master01~]#kubectldeletepodmynginx-nmynspod"mynginx"deleted[root@master01~]#kubectlgetpod-nmynsNoresourcesfoundinmynsnamespace.(8)刪除該名稱空間。[root@master01~]#kubectldeletenamespacemynsnamespace"myns"deleted實訓2創(chuàng)建一個多容器Pod并進行測試實訓目的(1)了解多容器Pod。(2)增加對多容器Pod的認識。實訓內(nèi)容(1)參照任務3.3.1進行操作。(2)編寫定義Pod的配置文件,其中涉及的兩個容器分別運行Nginx和BusyBox,兩個容器共享卷。(3)基于該配置文件創(chuàng)建Pod。(4)查看Pod及其容器的信息,以YAML格式輸出。(5)進入Nginx容器的Shell,使用curl命令向Nginx服務器發(fā)起請求,以驗證結果。(6)使用curl命令向Pod的IP地址發(fā)起請求,進一步驗證結果。(7)刪除該Pod。項目4部署和運行應用程序?qū)嵱?使用Deployment運行Apache服務實訓目的(1)了解Deployment的基本用法。(2)學會使用Deployment運行和管理無狀態(tài)應用程序。實訓內(nèi)容(1)準備Kubernetes集群實驗環(huán)境。(2)使用Deployment創(chuàng)建有3個副本的httpd服務(使用httpd鏡像)。編寫Deployment配置文件(文件名httpd-deploy.yaml):apiVersion:apps/v1#版本號kind:Deployment#類型為Deploymentmetadata:#元數(shù)據(jù)name:httpd-deploylabels:#標簽app:httpdspec:#詳細信息replicas:3#副本數(shù)量strategy:#策略type:RollingUpdate#滾動更新策略rollingUpdate:#滾動更新設置maxSurge:25%#更新過程中允許超出期望Pod副本數(shù)的Pod數(shù)量,用百分比或整數(shù)表示maxUnavailable:25%#更新過程中不可用的Pod數(shù)量上限,用百分比或整數(shù)表示selector:#選擇器,指定該控制器管理哪些PodmatchLabels:#匹配規(guī)則app:httpdtemplate:#定義模板,當副本數(shù)量不足時會根據(jù)模板定義創(chuàng)建Pod副本metadata:labels:app:httpd#Pod的標簽spec:containers:#容器列表(本例僅定義一個容器)-name:httpd#容器的名稱image:httpd:2.2#容器所用的鏡像ports:-containerPort:80#容器需要暴露的端口基于該文件創(chuàng)建創(chuàng)建Deployment:[root@master01~]#kubectlapply-fhttpd-deploy.yamldeployment.apps/httpd-deploycreated查看和測試:[root@master01~]#kubectlgetdeployhttpd-deploy-owideNAMEREADYUP-TO-DATEAVAILABLEAGECONTAINERSIMAGESSELECTORhttpd-deploy0/33040shttpdhttpd:2.2app=httpd[root@master01~]#kubectlgetdeployhttpd-deploy-owideNAMEREADYUP-TO-DATEAVAILABLEAGECONTAINERSIMAGESSELECTORhttpd-deploy3/333116shttpdhttpd:2.2app=httpd[root@master01~]#kubectlgetpods-owideNAMEREADYSTATUSRESTARTSAGEIPNODENOMINATEDNODEREADINESSGATEShttpd-deploy-7ffdc45d4-2xh2c1/1Running067s6node02<none><none>httpd-deploy-7ffdc45d4-5zx521/1Running067s22node02<none><none>httpd-deploy-7ffdc45d4-vjk441/1Running067s78node01<none><none>[root@master01~]#curl6<html><body><h1>Itworks!</h1></body></html>(3)測試Deployment更新。[root@master01~]#kubectlsetimagedeployment.v1.apps/httpd-deployhttpd=httpd:2.4.46deployment.apps/httpd-deployimageupdated(4)測試Deployment回滾。[root@master01~]#kubectlrollouthistorydeployment/httpd-deploydeployment.apps/httpd-deployREVISIONCHANGE-CAUSE1<none>2<none>[root@master01~]#kubectlrolloutundodeployment/httpd-deploydeployment.apps/httpd-deployrolledback(5)將Deployment擴容到5個副本。[root@master01~]#kubectlscaledeployment/httpd-deploy--replicas=5deployment.apps/httpd-deployscaled[root@master01~]#kubectlgetdeployhttpd-deploy-owideNAMEREADYUP-TO-DATEAVAILABLEAGECONTAINERSIMAGESSELECTORhttpd-deploy5/5559m15shttpdhttpd:2.2app=httpd(6)將Deployment縮容到2個副本。[root@master01~]#kubectlscaledeployment/httpd-deploy--replicas=2deployment.apps/httpd-deployscaled[root@master01~]#kubectlgetdeployhttpd-deploy-owideNAMEREADYUP-TO-DATEAVAILABLEAGECONTAINERSIMAGESSELECTORhttpd-deploy2/2229m49shttpdhttpd:2.2app=httpd(7)刪除Deployment。[root@master01~]#kubectldelete-fhttpd-deploy.yamldeployment.apps"httpd-deploy"deleted詳細操作請參考任務4.1中的任務實現(xiàn)部分。實訓2使用DaemonSet在所有工作節(jié)點上部署Nginx實訓目的(1)了解DaemonSet的基本用法。(2)學會使用DaemonSet部署和管理集群守護進程集。實訓內(nèi)容(1)使用DaemonSet在每個工作節(jié)點上運行Nginx。配置文件nginx-daemonset.yaml內(nèi)容如下:apiVersion:apps/v1kind:DaemonSet#資源類型為DaemonSetmetadata:name:nginx-dslabels:k8s-app:nginx#DaemonSet資源的標簽spec:selector:matchLabels:#必須指定與spec.template的標簽匹配的Pod選擇運算符name:nginxtemplate:#創(chuàng)建Pod副本所依據(jù)的模板metadata:labels:#Pod模板必須指定標簽name:nginxspec:tolerations:#容忍度設置,此處設置讓該守護進程集在控制平面節(jié)點或主節(jié)點上運行-key:node-role.kubernetes.io/control-planeoperator:Existseffect:NoSchedule-key:node-role.kubernetes.io/masteroperator:Existseffect:NoSchedulecontainers:-name:nginximage:nginx:1.16.1#鏡像基于該文件創(chuàng)建DaemonSet:[root@master01~]#kubectlcreate-fnginx-daemonset.yamldaemonset.apps/nginx-dscreated[root@master01~]#kubectlgetdaemonsetnginx-ds-owideNAMEDESIREDCURRENTREADYUP-TO-DATEAVAILABLENODESELECTORAGECONTAINERSIMAGESSELECTORnginx-ds33333<none>3m43snginxnginx:1.16.1name=nginx(2)驗證該DaemonSet的Pod的節(jié)點部署。[root@master01~]#kubectlgetpods-owideNAMEREADYSTATUSRESTARTSAGEIPNODENOMINATEDNODEREADINESSGATESnfs-client-provisioner-bfbc644fc-zq5sw1/1Running15(123mago)62d73node01<none><none>nginx-ds-2skg91/1Running04m19s81node01<none><none>nginx-ds-g4l5w1/1Running04m19s09master01<none><none>(3)測試DaemonSet更新。[root@master01~]#kubectlgetds/nginx-ds-ogo-template='{{.spec.updateStrategy.type}}{{"\n"}}'RollingUpdate[root@master01~]#kubectlsetimageds/nginx-dsnginx=nginx:1.17.2daemonset.apps/nginx-dsimageupdated[root@master01~]#kubectlrolloutstatusdsWaitingfordaemonset"nginx-ds"rollouttofinish:1outof3newpodshavebeenupdated...Waitingfordaemonset"nginx-ds"rollouttofinish:1outof3newpodshavebeenupdated...Waitingfordaemonset"nginx-ds"rollouttofinish:1outof3newpodshavebeenupdated...Waitingfordaemonset"nginx-ds"rollouttofinish:2outof3newpodshavebeenupdated...Waitingfordaemonset"nginx-ds"rollouttofinish:2outof3newpodshavebeenupdated...Waitingfordaemonset"nginx-ds"rollouttofinish:2outof3newpodshavebeenupdated...Waitingfordaemonset"nginx-ds"rollouttofinish:2outof3newpodshavebeenupdated...Waitingfordaemonset"nginx-ds"rollouttofinish:2of3updatedpodsareavailable...daemonset"nginx-ds"successfullyrolledout[root@master01~]#kubectlgetdaemonsetnginx-ds-owideNAMEDESIREDCURRENTREADYUP-TO-DATEAVAILABLENODESELECTORAGECONTAINERSIMAGESSELECTORnginx-ds33333<none>10mnginxnginx:1.17.2name=nginx(4)測試DaemonSet回滾。[root@master01~]#kubectlrollouthistoryds/nginx-dsdaemonset.apps/nginx-dsREVISIONCHANGE-CAUSE1<none>2<none>[root@master01~]#kubectlrolloutundods/nginx-ds--to-revision=1daemonset.apps/nginx-dsrolledback[root@master01~]#kubectlrolloutstatusdsdaemonset"nginx-ds"successfullyrolledout[root@master01~]#kubectlgetdaemonsetnginx-ds-owideNAMEDESIREDCURRENTREADYUP-TO-DATEAVAILABLENODESELECTORAGECONTAINERSIMAGESSELECTORnginx-ds33333<none>12mnginxnginx:1.16.1name=nginx(5)刪除DaemonSet對象。[root@master01~]#kubectldelete-fnginx-daemonset.yamldaemonset.apps"nginx-ds"deleted項目5發(fā)布應用程序?qū)嵱?使用Service發(fā)布Apache服務并考察Service工作機制實訓目的(1)了解Service的概念和基本用法。(2)學會使用Service對外發(fā)布應用程序。實訓內(nèi)容參考任務5.1.2創(chuàng)建NodePort類型的Service并發(fā)布Apache服務。(1)編寫Deployment配置文件,基于該配置文件運行兩個副本的Apache(使用httpd鏡像)。配置文件httpd-deploy.yaml:apiVersion:apps/v1#版本號kind:Deployment#類型為Deploymentmetadata:#元數(shù)據(jù)name:httpd-deploylabels:#標簽app:httpd-deployspec:#詳細信息replicas:2#副本數(shù)量selector:#選擇器,指定該控制器管理哪些PodmatchLabels:#匹配規(guī)則app:httpd-podtemplate:#定義模板,當副本數(shù)量不足時會根據(jù)模板定義創(chuàng)建Pod副本metadata:labels:app:httpd-pod#Pod的標簽spec:containers:#容器列表(本例僅定義一個容器)-name:httpd#容器的名稱image:httpd:2.4.46#容器所用的鏡像ports:-name:httpd-portcontainerPort:80#容器需要暴露的端口創(chuàng)建Deployment并查看其副本:[root@master01~]#kubectlcreate-fhttpd-deploy.yamldeployment.apps/httpd-deploycreated[root@master01~]#kubectlgetreplicasets-owideNAMEDESIREDCURRENTREADYAGECONTAINERSIMAGESSELECTORhttpd-deploy-6dc95f869d22239shttpdhttpd:2.4.46(2)編寫Service配置文件,關聯(lián)相應的Pod,注意定義nodePort字段以定義節(jié)點端口。配置文件httpd-service.yaml:apiVersion:v1kind:Servicemetadata:name:httpd-svc#設置service的顯示名字spec:type:NodePort#Service類型selector:app:httpd-pod#指定pod的標簽ports:-port:8080#讓集群知道service綁定的端口targetPort:80#目標Pod的端口nodePort:30088#節(jié)點上綁定的端口(3)基于Service配置文件創(chuàng)建Service以發(fā)布Apache服務。[root@master01~]#kubectlcreate-fhttpd-service.yamlservice/httpd-svccreated[root@master01~]#kubectlgetservice-owideNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGESELECTORhttpd-svcNodePort2<none>8080:30088/TCP40sapp=httpd-pod(4)查看該Service的詳細信息,考察節(jié)點端口信息和Endpoints對象列表。[root@master01~]#kubectldescribeservicehttpd-svcName:httpd-svcNamespace:defaultLabels:<none>Annotations:<none>Selector:app=httpd-podType:NodePortIPFamilyPolicy:SingleStackIPFamilies:IPv4IP:2IPs:2Port:<unset>8080/TCPTargetPort:80/TCPNodePort:<unset>30088/TCPEndpoints:3:80,86:80SessionAffinity:NoneExternalTrafficPolicy:ClusterEvents:<none>(5)列出該Service的Pod,考察Pod的節(jié)點部署情況。[root@master01~]#kubectlgetpods--selector="app=httpd-pod"-owideNAMEREADYSTATUSRESTARTSAGEIPNODENOMINATEDNODEREADINESSGATEShttpd-deploy-6dc95f869d-4gwr91/1Running08m27s3node02<none><none>httpd-deploy-6dc95f869d-tm2ss1/1Running08m27s86node01<none><none>(6)獲取節(jié)點的IP地址,使用節(jié)點地址和節(jié)點端口來訪問發(fā)布的Apache服務。[root@master01~]#kubectlgetnodenode01-owideNAMESTATUSROLESAGEVERSIONINTERNAL-IPEXTERNAL-IPOS-IMAGEKERNEL-VERSIONCONTAINER-RUNTIMEnode01Ready<none>594dv1.25.41<none>CentOSStream84.18.0-338.el8.x86_64containerd://1.6.8[root@master01~]#kubectlgetnodenode02-owideNAMESTATUSROLESAGEVERSIONINTERNAL-IPEXTERNAL-IPOS-IMAGEKERNEL-VERSIONCONTAINER-RUNTIMEnode02Ready<none>594dv1.25.42<none>CentOSStream84.18.0-338.el8.x86_64containerd://1.6.8[root@master01~]#curl1:30088<html><body><h1>Itworks!</h1></body></html>[root@master01~]#curl2:30088<html><body><h1>Itworks!</h1></body></html>[root@master01~]#curl0:30088<html><body><h1>Itworks!</h1></body></html>通過集群中任一節(jié)點,包括控制平面節(jié)點,都可以訪問Service所發(fā)布的應用程序。(7)參照任務5.1.1運行一個curl應用程序的Pod,測試Service的域名解析,進一步驗證基于DNS的服務發(fā)現(xiàn)機制。[root@master01~]#kubectlruncurl--image=radial/busyboxplus:curl-i--ttyIfyoudon'tseeacommandprompt,trypressingenter.[root@curl:/]$nslookuphttpd-svcServer:0Address1:0kube-dns.kube-system.svc.cluster.localName:httpd-svcAddress1:2httpd-svc.default.svc.cluster.local[root@curl:/]$exitSessionended,resumeusing'kubectlattachcurl-ccurl-i-t'commandwhenthepodisrunning(8)刪除本實訓所創(chuàng)建的Kubernetes對象。[root@master01~]#kubectldeletepodcurlpod"curl"deleted[root@master01~]#kubectldelete-fhttpd-service.yamlservice"httpd-svc"deleted[root@master01~]#kubectldelete-fhttpd-deploy.yamldeployment.apps"httpd-deploy"deleted實訓2部署NginxIngress控制器并使用Ingress發(fā)布Apache服務實訓目的(1)了解Ingress的概念和基本用法。(2)學會使用Ingress對外發(fā)布應用程序。參考任務5.2.1和任務5.2.2完成本實訓。實訓內(nèi)容(1)安裝NginxIngress控制器。參照任務5.2.1完成NginxIngress控制器的安裝。完成安裝之后檢查。[root@master01~]#kubectlgetpods--namespace=ingress-nginx-owideNAMEREADYSTATUSRESTARTSAGEIPNODENOMINATEDNODEREADINESSGATESingress-nginx-controller-528xq1/1Running15(13hago)2d2node02<none><none>[root@master01~]#kubectlgetsvc-ningress-nginxNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEingress-nginx-controllerLoadBalancer4<pending>80:30417/TCP,443:30630/TCP2dingress-nginx-controller-admissionClusterIP5<none>443/TCP2d(2)基于實訓1編寫的Deployment配置文件創(chuàng)建Deployment。[root@master01~]#kubectlapply-fhttpd-deploy.yamldeployment.apps/httpd-deploycreated(3)基于實訓1編寫的Service配置文件創(chuàng)建Service。[root@master01~]#kubectlapply-fhttpd-service.yamlservice/httpd-svccreated(4)編寫Ingress配置文件,通過HTTP路由規(guī)則關聯(lián)Service,指定一個域名。配置文件http-ingress.yaml:apiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:http-ingressspec:ingressClassName:nginxrules:-host:#域名http:paths:-path:/pathType:Prefixbackend:service:name:httpd-svcport:number:8080(5)基于Ingress配置文件創(chuàng)建Ingress以發(fā)布Apache服務。[root@master01~]#kubectlcreate-fhttp-ingress.yamlworking.k8s.io/http-ingresscreated[root@master01~]#kubectlgeting-owideNAMECLASSHOSTSADDRESSPORTSAGEhttp-ingressnginx8039s(6)查看Ingress對象的詳細信息進行考察。[root@master01~]#kubectldescribeinghttp-ingressName:http-ingressLabels:<none>Namespace:defaultAddress:IngressClass:nginxDefaultbackend:<default>Rules:HostPathBackends/httpd-svc:8080(4:80,90:80)Annotations:<none>Events:TypeReasonAgeFromMessageNormalSync93snginx-ingress-controllerScheduledforsync(7)測試通過域名訪問發(fā)布的Apache服務。通過/etc/hosts文件配置簡單的域名解析:2node02訪問測試:[root@master01~]#curl<html><body><h1>Itworks!</h1></body></html>最后清理實訓所創(chuàng)建的對象。[root@master01~]#kubectldelete-fhttp-ingress.yamlworking.k8s.io"http-ingress"deleted[root@master01~]#kubectldelete-fhttpd-service.yamlservice"httpd-svc"deleted[root@master01~]#kubectldelete-fhttpd-deploy.yamldeployment.apps"httpd-deploy"deleted項目6管
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年空運中介貨物合同
- 2024建設項目監(jiān)管與服務協(xié)議一
- 專業(yè)仿真綠植訂購協(xié)議2024版版B版
- 2025年度全國重點工程安全員專項聘用合同3篇
- 2025采礦權轉讓合同示范文本:礦業(yè)權整合項目3篇
- 2024建設工程合同講義
- 專業(yè)婚介機構服務合同2024版版B版
- 2024年食品原材料長期供應合同3篇
- 2025年玻璃幕墻工程勞務分包及售后服務協(xié)議3篇
- 2024攝影工作室產(chǎn)品攝影及電商平臺推廣合作合同3篇
- 退化林修復投標方案
- 貴陽市南明區(qū)2023-2024學年四年級數(shù)學第一學期期末質(zhì)量跟蹤監(jiān)視試題含答案
- 第六單元大單元教學設計統(tǒng)編版語文八年級上冊
- 盤古神話中英文版
- 車輛移交安全協(xié)議書
- 辦公室換崗后的心得體會辦公室輪崗心得體會總結(二篇)
- 提高混凝土外觀質(zhì)量-QC小組活動成果交流材料(建設)
- 影像敘事語言智慧樹知到答案章節(jié)測試2023年中國傳媒大學
- 流體力學(清華大學張兆順54講) PPT課件 1
- 銷售人員末位淘汰制度
- 南陽石油分公司非油品業(yè)務經(jīng)營管理制度概要
評論
0/150
提交評論