版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Kubernetes集群實戰(zhàn)(微課版)工業(yè)和信息化精品系列教材——云計算技術項目1
從Docker轉向Kubernetes能力CAPACITY要求了解應用程序部署方式的演變。了解Docker的基本知識,學會安裝Docker。掌握Docker鏡像和容器的基本操作方法。初步掌握應用程序容器化的方法。初步了解Kubernetes。任務1.2掌握Docker的基本操作方法任務1.1認識與安裝Docker任務1.3構建鏡像并將應用程序容器化任務1.4轉向Kubernetes任務1.1認識與安裝Docker任務說明01OPTION02OPTION03OPTION了解應用程序部署方式及其演變理解Docker的基本概念和架構掌握DockerEngine的安裝方法04OPTION了解docker命令的基本用法任務1.1認識與安裝Docker相關知識1.1.1應用程序部署方式的演變?nèi)蝿?.1認識與安裝Docker相關知識1.1.2什么是Docker借鑒集裝箱裝運貨物的思想,讓開發(fā)人員將應用程序及其依賴打包到一個輕量級、可移植的容器中,然后發(fā)布到任何運行Docker容器引擎的環(huán)境中,以容器形式來運行該應用程序。Docker是一個用于開發(fā)、發(fā)布和運行應用程序的開放平臺。Docker重新定義了應用程序在不同環(huán)境中的移植和運行方式。任務1.1認識與安裝Docker相關知識1.1.2什么是DockerDocker優(yōu)勢應用程序快速、一致交付。響應式部署和伸縮應用程序。在同樣的硬件上運行更多的工作負載。任務1.1認識與安裝Docker相關知識1.1.3
Docker架構任務1.1認識與安裝Docker相關知識1.1.4
Docker版本DockerDesktop適合開發(fā)人員和測試人員在macOS、Windows或Linux環(huán)境中使用。任務1.1認識與安裝Docker相關知識1.1.4
Docker版本DockerEngine——原DockerCEDocker的核心組件,用于構建和容器化應用程序的開源容器化技術。Docker守護進程(dockerd)Docker客戶端(docker)用于定義程序與Docker守護進程交互的接口RESTAPILinux操作系統(tǒng),尤其是服務器版適合直接安裝DockerEngine。任務1.1認識與安裝Docker任務實現(xiàn)任務1.1.1安裝DockerEngine安裝方式大多數(shù)用戶通過Docker的軟件倉庫進行安裝,以便安裝和升級。有些用戶選擇下載軟件包手動安裝,完全手動管理升級。在測試和開發(fā)環(huán)境中可選擇使用自動化便捷腳本安裝Docker。任務1.1認識與安裝Docker任務實現(xiàn)任務1.1.1安裝DockerEngine準備安裝環(huán)境(1)
創(chuàng)建虛擬機。(2)安裝CentOSStream8操作系統(tǒng)。(3)設置主機名。(4)修改網(wǎng)絡連接設置。(5)禁用防火墻。(6)禁用SELinux。(7)更改時區(qū)設置。任務1.1認識與安裝Docker任務實現(xiàn)任務1.1.1安裝DockerEngine設置Docker倉庫(1)安裝所需的yum-utils包。(2)設置DockerEngine穩(wěn)定版的倉庫地址。安裝DockerEngine軟件包(1)卸載Podman(僅限于CentOSStream8)。(2)安裝指定版本的DockerEngine。yuminstalldocker-ce-20.10.21docker-ce-cli-20.10.21containerd.io-1.6.10(3)啟動Docker并將Docker設置為開機自動啟動。(4)查看Docker版本以驗證是否安裝成功。任務1.1認識與安裝Docker任務實現(xiàn)任務1.1.1安裝DockerEngine運行hello-world鏡像進行驗證[root@docker_dev~]#dockerrunhello-worldUnabletofindimage'hello-world:latest'locallylatest:Pullingfromlibrary/hello-world2db29710123e:PullcompleteDigest:sha256:faa03e786c97f07ef34423fccceeec2398ec8a5759259f94d99078f264e9d7afStatus:Downloadednewerimageforhello-world:latestHellofromDocker!Thismessageshowsthatyourinstallationappearstobeworkingcorrectly.Togeneratethismessage,Dockertookthefollowingsteps:1.TheDockerclientcontactedtheDockerdaemon.2.TheDockerdaemonpulledthe"hello-world"imagefromtheDockerHub.(amd64)3.TheDockerdaemoncreatedanewcontainerfromthatimagewhichrunstheexecutablethatproducestheoutputyouarecurrentlyreading.4.TheDockerdaemonstreamedthatoutputtotheDockerclient,whichsentittoyourterminal.……任務1.1認識與安裝Docker任務實現(xiàn)任務1.1.2了解docker命令的基本用法docker命令的基本語法docker[選項]命令短格式的為一個連字符(-)加上單個字符,如-d。長格式為兩個連字符加上字符串,如--daemon。多值選項(如-a=[])可以在單個命令行中多次定義:dockerrun-astdin-astdout-i-tubuntu/bin/bashdockerrun-astdin-astdout-astderrubuntu/bin/ls對于較長的單行命令通常使用續(xù)行符(\)進行換行:dockerrun--device=/dev/sdc:/dev/xvdc\>--device=/dev/sdd--device=/dev/zero:/dev/nulo\>-i-t\>ubuntuls-l/dev/{xvdc,sdd,nulo}任務1.1認識與安裝Docker任務實現(xiàn)任務1.1.3運行一個容器[root@docker_dev~]#dockerrun-i-tubuntu/bin/bashUnabletofindimage'ubuntu:latest'locallylatest:Pullingfromlibrary/ubuntue96e057aae67:PullcompleteDigest:sha256:4b1d0c4a2d2aaf63b37111f34eb9fa89fa1bf53dd6e4ca954d47caebca4005c2Status:Downloadednewerimageforubuntu:latestroot@fb615540724e:/#ls#查看容器中的當前目錄列表binbootdevetchomeliblib32lib64libx32mediamntoptprocrootrunsbinsrvsystmpusrvarroot@fb615540724e:/#uname-a#查看容器中當前操作系統(tǒng)內(nèi)核信息Linuxfb615540724e4.18.0-338.el8.x86_64#1SMPFriAug2717:32:14UTC2021x86_64x86_64x86_64GNU/Linuxroot@fb615540724e:/#cat/etc/issue#查看容器中當前操作系統(tǒng)發(fā)行版信息Ubuntu22.04.1LTS\n\lroot@fb615540724e:/#exit#結束/bin/bash命令,從容器中退出exit[root@docker_dev~]##切回到本地命令行任務1.2掌握Docker的基本操作方法任務1.1認識與安裝Docker任務1.3構建鏡像并將應用程序容器化任務1.4轉向Kubernetes任務1.2掌握Docker的基本操作方法任務說明01OPTION02OPTION03OPTION了解Docker鏡像的基礎知識了解Docker容器的基礎知識了解Docker倉庫的基礎知識04OPTION掌握鏡像和容器的基本操作方法05OPTION學會Dokcer注冊中心的建立和使用任務1.2掌握Docker的基本操作方法相關知識鏡像、容器和倉庫的關系任務1.2掌握Docker的基本操作方法相關知識1.2.1Docker鏡像基礎知識鏡像的概念鏡像在IT領域通常是指一系列文件或一個磁盤驅動器的精確副本。Ghost鏡像→虛擬機鏡像→Docker鏡像Docker鏡像是按照Docker要求定制的應用程序。一個Docker鏡像包括一個應用程序以及能夠運行它的基本操作系統(tǒng)環(huán)境。Docker鏡像是一個特殊的文件系統(tǒng),除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了為運行準備的一些配置參數(shù)。任務1.2掌握Docker的基本操作方法相關知識1.2.1Docker鏡像基礎知識鏡像的基本信息使用dockerimages命令列出本地主機上的鏡像:[root@docker_dev~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEubuntulatesta8780b506fa44weeksago77.8MBhello-worldlatestfeb5d9fea6a514monthsago13.3kB鏡像ID是鏡像唯一標識,采用UUID形式表示,全長64個十六進制字符。標簽用于標記同一倉庫的不同鏡像版本。鏡像可以通過鏡像ID、鏡像名稱(包括標簽)或者鏡像摘要值(內(nèi)容尋址標識符)來標識或引用。任務1.2掌握Docker的基本操作方法相關知識1.2.1Docker鏡像基礎知識鏡像描述文件DockerfileDockerfile文件用來描述鏡像,定義如何構建Docker鏡像。Dockerfile是一個文本文件,包含要構建鏡像的所有指令。Docker通過讀取Dockerfile中的指令自動構建鏡像。hello-world鏡像的Dockerfile內(nèi)容FROMscratchCOPYhello/CMD["/hello"]任務1.2掌握Docker的基本操作方法相關知識1.2.1Docker鏡像基礎知識Docker鏡像操作命令dockerimage子命令docker子命令功能dockerimagebuilddockerbuild從Dockerfile構建鏡像dockerimagehistorydockerhistory顯示鏡像的歷史記錄dockerimageimportdockerimport從tarball文件導入內(nèi)容以創(chuàng)建文件系統(tǒng)鏡像dockerimageinspectdockerinspect顯示一個或多個鏡像的詳細信息dockerimageloaddockerload從tar檔案文件或標準輸入(STDIN)裝載鏡像dockerimagelsdockerimages輸出鏡像列表dockerimageprune無刪除未使用的鏡像dockerimagepulldockerpull從注冊服務器拉取鏡像或鏡像倉庫dockerimagepushdockerpush將鏡像或鏡像倉庫推送到注冊服務器dockerimagermdockerrmi刪除一個或多個鏡像dockerimagesavedockersave將一個或多個鏡像保存到tar存檔(默認情況下流式傳輸?shù)絊TDOUT)dockerimagetagdockertag為指向源鏡像的目標鏡像添加一個名稱任務1.2掌握Docker的基本操作方法相關知識1.2.2Docker容器基礎知識容器與容器ID在Docker中容器是指從鏡像創(chuàng)建的應用程序運行實例。鏡像是靜態(tài)的定義,容器是鏡像運行時的實體,基于同一鏡像可以創(chuàng)建若干不同的容器。容器的實質(zhì)是進程,容器進程在屬于自己的獨立的命名空間內(nèi)運行。容器可以擁有自己的根文件系統(tǒng)、自己的網(wǎng)絡配置、自己的進程空間,甚至自己的用戶ID空間。容器的唯一標識容器ID與鏡像ID一樣采用UUID形式表示,是由64個十六進制字符組成的字符串。通過容器名稱來代替容器ID引用容器。任務1.2掌握Docker的基本操作方法相關知識1.2.2Docker容器基礎知識可寫的容器層任務1.2掌握Docker的基本操作方法相關知識1.2.2Docker容器基礎知識容器操作命令dockercontainer子命令docker子命令功能dockercontainerattachdockerattach將本地的標準輸入、輸出和錯誤流附加到正在運行的容器上,也就是連接到正在運行的容器上,其實就是進入容器dockercontainercommitdockercommit從當前容器創(chuàng)建新的鏡像dockercontainercpdockercp在容器和本地文件系統(tǒng)之間復制文件和目錄dockercontainercreatedockercreate創(chuàng)建新的容器dockercontainerdiffdockerdiff檢查容器創(chuàng)建以來其文件系統(tǒng)上文件或目錄的更改dockercontainerexecdockerexec從正在運行的容器中執(zhí)行命令dockercontainerexportdockerexport將容器的文件系統(tǒng)導出為一個歸檔文件dockercontainerinspectdockerinspect顯示一個或多個容器的詳細信息dockercontainerkilldockerkill“殺死”一個正在運行的容器dockercontainerlogsdockerlogs獲取容器的日志信息dockercontainerlsdockerps輸出容器列表dockercontainerpausedockerpause暫停一個或多個容器內(nèi)的所有進程任務1.2掌握Docker的基本操作方法相關知識1.2.2Docker容器基礎知識容器操作命令dockercontainer子命令docker子命令功能dockercontainerportdockerport列出容器的端口映射或特定的映射dockercontainerprune無刪除所有停止執(zhí)行的鏡像dockercontainerrenamedockerrename對容器重命名dockercontainerrestartdockerrestart重啟一個或多個容器dockercontainerrmdockerrm刪除一個或多個容器dockercontainerrundockerrun創(chuàng)建一個新的容器并執(zhí)行命令dockercontainerstartdockerstart啟動一個或多個已停止的容器dockercontainerstatsdockerstats顯示容器資源使用統(tǒng)計信息的實時流dockercontainerstopdockerstop停止一個或多個正在運行的容器dockercontainertopdockertop顯示容器的正在運行的進程dockercontainerunpausedockerunpause恢復一個或多個容器內(nèi)的被暫停的所有進程dockercontainerupdatedockerupdate更新一個或多個容器的配置dockercontainerwaitdockerwait阻塞一個或多個容器的運行,直到容器停止運行,然后輸出退出碼任務1.2掌握Docker的基本操作方法相關知識1.2.3Docker注冊中心與倉庫區(qū)分注冊中心與倉庫的概念Registry——注冊中心或注冊服務器,存放倉庫Repository——倉庫,集中存放鏡像文件一個注冊中心往往有很多倉庫。每個倉庫集中存放某一類鏡像,往往包括多個鏡像文件,不同的鏡像通過不同的標簽來區(qū)分。任務1.2掌握Docker的基本操作方法相關知識1.2.3Docker注冊中心與倉庫官方Docker注冊中心DockerHub提供大規(guī)模的公開倉庫,存放數(shù)量龐大的鏡像供用戶下載。使用國內(nèi)鏡像源來提高鏡像的下載速度和穩(wěn)定性。Docker官方鏡像操作系統(tǒng)數(shù)據(jù)庫中間件應用軟件任務1.2掌握Docker的基本操作方法相關知識1.2.3Docker注冊中心與倉庫第三方Docker注冊中心阿里云Registry提供Docker注冊服務——容器鏡像服務(ARC)。Ghost鏡像→虛擬機鏡像→Docker鏡像Docker鏡像是按照Docker要求定制的應用程序。一個Docker鏡像包括一個應用程序以及能夠運行它的基本操作系統(tǒng)環(huán)境。Docker鏡像是一個特殊的文件系統(tǒng),除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了為運行準備的一些配置參數(shù)。任務1.2掌握Docker的基本操作方法任務實現(xiàn)任務1.2.1掌握鏡像和容器的基本操作(1)拉取鏡像——使用dockerpull命令。(2)顯示本地的鏡像列表——使用dockerimages命令。(3)查看鏡像的構建歷史——使用dockerhistory命令。(4)啟動容器并讓其以守護進程的形式在后臺運行——使用dockerrun–d命令。(5)顯示容器列表——執(zhí)行dockerps命令。(6)獲取容器的日志信息——使用dockerlogs命令。(7)進入容器——使用dockerexec命令。(8)刪除容器——使用dockerrm命令。任務1.2掌握Docker的基本操作方法任務實現(xiàn)任務1.2.2自建Docker注冊中心基于容器安裝運行Registry創(chuàng)建并啟動一個運行DockerRegistry的容器。#dockerrun-d-p5000:5000--restart=always--namemyregistry-v/opt/data/registry:/var/lib/registryregistry從該注冊中心獲取所有的鏡像倉庫來測試DockerRegistry服務。#curl:5000/v2/_catalog{"repositories":[]}任務1.2掌握Docker的基本操作方法任務實現(xiàn)任務1.2.2自建Docker注冊中心使用自建的注冊中心將鏡像上傳到自建注冊中心的鏡像倉庫。#dockertaghello-world:5000/hello-world:v1#dockerpush:5000/hello-world:v1Thepushreferstorepository[:5000/hello-world]e07ee1baac5f:Pushed#curl:5000/v2/_catalog{"repositories":["hello-world"]}從自建注冊中心的鏡像倉庫下載鏡像。#dockerpull:5000/hello-world:v1v1:Pullingfromhello-world任務1.2掌握Docker的基本操作方法任務1.1認識與安裝Docker任務1.3構建鏡像并將應用程序容器化任務1.4轉向Kubernetes任務1.3構建鏡像并將應用程序容器化任務說明01OPTION02OPTION03OPTION了解Dockerfile文件了解Docker鏡像構建的方法了解應用程序容器化的基本步驟04OPTION掌握應用程序容器化的基本操作方法任務1.3構建鏡像并將應用程序容器化相關知識1.3.1鏡像的構建Dockerfile的格式基本格式#注釋指令參數(shù)指令不區(qū)分大小寫,建議大寫。指令可以有參數(shù)。Docker按順序執(zhí)行其中的指令。以“#”符號開頭的行都將被視為注釋,除非是解析器指令。解析器指令是可選的,它會影響處理Dockerfile中后續(xù)行的方式。所有解析器指令都必須位于Dockerfile的首部。任務1.3構建鏡像并將應用程序容器化相關知識1.3.1鏡像的構建Dockerfile常用指令指令功能基本語法FROM設置基礎鏡像FROM<鏡像>[AS<名稱>]FROM<鏡像>[:<標簽>][AS<名稱>]FROM<鏡像>[@<摘要值>][AS<名稱>]RUN運行命令RUN<命令>RUN["可執(zhí)行程序","參數(shù)1","參數(shù)2"]CMD指定容器啟動時默認執(zhí)行的命令CMD["可執(zhí)行程序","參數(shù)1","參數(shù)2"]CMD["參數(shù)1","參數(shù)2"]CMD命令參數(shù)1參數(shù)2LABEL向鏡像添加標記LABEL<鍵>=<值><鍵>=<值><鍵>=<值>…EXPOSE聲明容器運行時偵聽的網(wǎng)絡端口EXPOSE<端口>[<端口>…]ENV指定環(huán)境變量ENV<鍵><值>ENV<鍵>=<值>…COPY將源文件復制到容器COPY[--chown=<用戶>:<組>]<源>…<目的>COPY[--chown=<用戶>:<組>]["<源>",…,"<目的>"]ADD將源文件復制到容器ADD[--chown=<用戶>:<組>]<源>…<目的>ADD[--chown=<用戶>:<組>]["<源>",…"<目的>"]ENTRYPOINT配置容器的默認入口點ENTRYPOINT["可執(zhí)行文件","參數(shù)1","參數(shù)2"]ENTRYPOINT命令參數(shù)1參數(shù)2VOLUME創(chuàng)建掛載點VOLUME["掛載點路徑"]WORKDIR配置工作目錄WORKDIR工作目錄路徑任務1.3構建鏡像并將應用程序容器化相關知識1.3.1鏡像的構建Dockerfile構建的基本語法基本用法dockerbuild[選項]路徑|URL|-通過Dockerfile和構建上下文(BuildContext)構建鏡像。構建上下文以遞歸方式處理。鏡像構建由Docker守護進程而不是命令行接口運行。使用-f選項指定Dockerfile文件的具體位置。使用-t選項指定鏡像標簽。Docker默認重用過程中的中間鏡像(緩存),以加速構建過程。任務1.3構建鏡像并將應用程序容器化相關知識1.3.2應用程序鏡像的內(nèi)容(1)選擇基礎鏡像。(2)安裝必要的軟件包。(3)添加自定義文件。(4)定義容器運行時的用戶權限,盡可能避免容器以root特權運行。(5)定義要對外暴露的端口。(6)定義應用程序的入口點(EntryPoint)。(7)定義配置方式。(8)持久化應用程序數(shù)據(jù)。任務1.3構建鏡像并將應用程序容器化相關知識1.3.3應用程序容器化的基本步驟制定鏡像構建方案準備應用程序代碼創(chuàng)建Docker鏡像,為應用程序的每個組件創(chuàng)建和測試單個容器將容器及其所需的支持基礎設施組裝成一個完整的應用程序測試、分發(fā)和部署完整的容器化應用程序任務1.3構建鏡像并將應用程序容器化任務實現(xiàn)將應用程序進行容器化獲取應用程序(1)安裝Git工具。#yuminstall-ygit(2)創(chuàng)建項目目錄。#mkdir-p/dev-app/01#cd/dev-app/01(3)將getting-started-app庫克隆到本地。#gitclone//docker/getting-started-app.git(4)查看克隆庫的內(nèi)容。[root@docker_dev01]#lsgetting-started-apppackage.jsonspecsrcyarn.lock任務1.3構建鏡像并將應用程序容器化任務實現(xiàn)將應用程序進行容器化構建應用程序的容器鏡像(1)創(chuàng)建一個名為Dockerfile的文件。#cdgetting-started/app#touchDockerfile(2)編輯Dockerfile。FROMnode:18-alpineWORKDIR/appCOPY..RUNyarninstall--productionCMD["node","src/index.js"]EXPOSE3000任務1.3構建鏡像并將應用程序容器化任務實現(xiàn)將應用程序進行容器化構建應用程序的容器鏡像(3)生成容器鏡像。#dockerbuild-tgetting-started.SendingbuildcontexttoDockerdaemon4.626MBStep1/6:FROMnode:18-alpine18-alpine:Pullingfromlibrary/node8921db27df28:PullcompleteStep6/6:EXPOSE3000>Runninginbdc9a021da12Removingintermediatecontainerbdc9a021da12>1cd88218f441Successfullybuilt1cd88218f441Successfullytaggedgetting-started:latest任務1.3構建鏡像并將應用程序容器化任務實現(xiàn)將應用程序進行容器化啟動應用程序容器(1)使用dockerrun命令啟動容器。#dockerrun-dp3000:3000getting-started(2)訪問任務列表應用程序。任務1.3構建鏡像并將應用程序容器化任務實現(xiàn)將應用程序進行容器化啟動應用程序容器(3)在應用程序中進行任務管理操作。任務1.3構建鏡像并將應用程序容器化任務實現(xiàn)將應用程序進行容器化更新應用程序(1)修改src/static/js/app.js文件。<pclassName="text-center">Youhavenotodoitemsyet!Addoneabove!</p>(2)再次使用dockerbuild命令構建鏡像的更新版本。#dockerbuild-tgetting-started.SendingbuildcontexttoDockerdaemon4.626MBStep1/6:FROMnode:18-alpine>264f8646c2a6Step2/6:WORKDIR/app>Usingcache#使用緩存Successfullybuilt579996f02fb9Successfullytaggedgetting-started:latest(3)刪除前面基于getting-started鏡像運行的容器。dockerstopbaa2801e1029&&dockerrmbaa2801e1029任務1.3構建鏡像并將應用程序容器化任務實現(xiàn)將應用程序進行容器化更新應用程序(4)使用更新后的代碼重新構建的鏡像啟動新的容器。#dockerrun-dp3000:3000getting-started(5)打開Web瀏覽器訪問更新后的應用程序。任務1.3構建鏡像并將應用程序容器化任務實現(xiàn)將應用程序進行容器化分享應用程序(1)針對自建的注冊中心設置相應的標簽。#dockertaggetting-started:5000/getting-started:1.1(2)執(zhí)行鏡像上傳命令。#dockerpush:5000/getting-started:1.1(3)查看自建注冊中心的鏡像列表。#curl:5000/v2/_catalog{"repositories":["getting-started","hello-world"]}任務1.2掌握Docker的基本操作方法任務1.1認識與安裝Docker任務1.3構建鏡像并將應用程序容器化任務1.4轉向Kubernetes任務1.4轉向Kubernetes任務說明01OPTION02OPTION03OPTION了解Kubernetes的概念了解從Docker轉向Kubernetes的緣由了解Kubernetes的特性和應用場景04OPTION了解Kubernetes與云原生的關系05OPTION調(diào)查Kubernetes在國內(nèi)的應用現(xiàn)狀任務1.4轉向Kubernetes相關知識1.4.1什么是KubernetesKubernetes——用于自動部署、擴縮和管理容器化應用程序的開源系統(tǒng)Kubernetes=K8Docker集裝箱貨輪Kubernetes船舵(船的方向盤)任務1.4轉向Kubernetes相關知識1.4.2為什么要使用KubernetesKubernetes是業(yè)界領先的容器編排解決方案Mesos——Apache的開源分布式資源管理框架由于大數(shù)據(jù)計算調(diào)度領域的局限性,Mesos只在特定的小范圍使用。DockerSwarm——Docker原生集群解決方案緊密集成到Docker的生態(tài)系統(tǒng)中,適合規(guī)模不大的應用程序環(huán)境。隨著Docker企業(yè)版被Mirantis公司收購,Mirantis更傾向于編排工具Kubernetes,DockerSwarm面臨被逐步淘汰的命運。Kubernetes——谷歌公司推出的開源容器集群管理系統(tǒng)具有超前的核心基礎特性,構建與眾不同的容器編排和管理的生態(tài)。Kubernetes內(nèi)部最底層最核心的Borg/Omega系統(tǒng)是使用golang語言重新設計開發(fā)的,并對外開源。發(fā)展成為容器編排和管理領域的事實標準。任務1.4轉向Kubernetes相關知識1.4.2為什么要使用Kubernetes使用Kubernetes具有極大的優(yōu)勢大大提升開發(fā)和運維復雜系統(tǒng)的人效。全面擁抱微服務架構,解決復雜業(yè)務系統(tǒng)的架構問題。隨時隨地將系統(tǒng)整體遷移到公有云上。利用Kubernetes服務彈性擴容機制輕松應對突發(fā)流量。系統(tǒng)架構具有橫向擴容能力,便于在線完成集群擴容,在多個云環(huán)境中進行彈性伸縮。任務1.4轉向Kubernetes相關知識1.4.3Kubernetes的主要特性自動化上線和回滾服務發(fā)現(xiàn)與負載均衡自我修復自動裝箱批量執(zhí)行存儲編排密鑰與配置管理IPv4/IPv6雙協(xié)議棧水平擴縮為擴展設計任務1.4轉向Kubernetes相關知識1.4.4Kubernetes與云原生什么是云原生4個要點微服務DevOps持續(xù)交付容器化云原生的代表技術容器服務網(wǎng)格微服務不可變基礎設施聲明式API任務1.4轉向Kubernetes相關知識1.4.4Kubernetes與云原生云原生應用程序的特點可預測不依賴操作系統(tǒng)按需分配資源便于實施DevOps持續(xù)交付微服務架構可擴展快速恢復任務1.4轉向Kubernetes相關知識1.4.4Kubernetes與云原生Kubernetes是云原生技術的基石Docker實現(xiàn)了容器的可移植、輕量化、虛擬化,為容器技術的普及作出了重要貢獻。Kubernetes解決容器編排的全壽命周期管理。CNCF致力于培育和維護開源生態(tài)系統(tǒng)來推廣云原生技術,Kubernetes成為CNCF托管的第一個開源項目。作為管理云容器平臺的工具,Kubernetes簡化容器化應用程序的部署,成功解決了應用上云的效率和可移植性等問題,從而被稱為云原生技術的基石。云原生的Kubernetes架構可以連續(xù)多次處理應用程序的部署。任務1.4轉向Kubernetes任務實現(xiàn)任務1.4.1了解Kubernetes的應用適合Kubernetes運行的應用程序應用程序作為小型的、簡潔的、獨立的可擴展服務運行的,也就是一組微服務。應用程序不依賴于特定的硬件配置,不需要訪問專用硬件設備。應用程序可以基于共享基礎設施共存。應用程序包括涉及內(nèi)外部訪問的多個服務,Kubernetes能夠以細粒度的方式定義面向內(nèi)外部訪問的服務。Kubernetes在容器級別而非硬件級別運行,有許多功能Kubernetes本身并不支持。任務1.4轉向Kubernetes任務實現(xiàn)任務1.4.2調(diào)查Kubernetes在國內(nèi)企業(yè)中的實際應用騰訊云容器服務擁有大規(guī)模的Kubernetes集群中國移動云(ECloud)進行云原生轉型中國聯(lián)通利用Kubernetes提高效率和降低IT成本京東運營著世界上最大的Kubernete集群華為將內(nèi)部IT部門的應用程序轉移到Kubernetes上運行螞蟻金服所有核心金融系統(tǒng)都已容器化,并逐步向Kubernete遷移網(wǎng)易嘗試利用Kubernetes支持全球互聯(lián)網(wǎng)業(yè)務THANKSKubernetes集群實戰(zhàn)(微課版)工業(yè)和信息化精品系列教材——云計算技術項目2
部署Kubernetes集群能力CAPACITY要求了解Kubernetes集群的組件。了解Kubernetes集群的部署方式和工具。學會使用部署工具創(chuàng)建Kubernetes集群。了解KubernetesDashboard。學會使用KubernetesDashboard部署容器化應用程序。任務2.2部署和使用KubernetesDashboard任務2.1創(chuàng)建Kubernetes集群任務2.1創(chuàng)建Kubernetes集群任務說明01OPTION02OPTION03OPTION了解Kubernetes集群的基本組成了解Kubernetes集群的主要組件了解Kubernetes集群的部署方式04OPTION了解Kubernetes集群的部署工具05OPTION學會Kubernetes集群的規(guī)劃和部署06OPTION熟悉使用kubeadm部署Kubernetes集群的全過程任務2.1創(chuàng)建Kubernetes集群相關知識2.1.1Kubernetes集群的組件任務2.1創(chuàng)建Kubernetes集群相關知識2.1.2控制平面組件kube-apiserver——API服務器(APIServer)負責公開KubernetesAPI,處理接受請求的工作。etcd——所有集群數(shù)據(jù)的后臺數(shù)據(jù)庫,持久化存儲集群中所有的資源對象以及配置數(shù)據(jù)。kube-scheduler——Kubernetes調(diào)度器(Scheduler)負責Pod在集群節(jié)點中的調(diào)度分配。kube-controller-manager——Kubernetes控制器管理器(ControllerManager)負責運行控制器進程。cloud-controller-manager——云控制器管理器(CloudControllerManager)利用云基礎設施技術,在公有云、私有云或者混合云環(huán)境中運行Kubernetes。任務2.1創(chuàng)建Kubernetes集群相關知識2.1.3工作節(jié)點組件kubelet——在集群中每個節(jié)點上運行,是負責啟動容器的重要的守護進程,用于保證容器在Pod中健康運行。kube-proxy——集群中每個節(jié)點上所運行的網(wǎng)絡代理,是實現(xiàn)Kubernetes服務(Service)的通信與負載均衡機制的重要組件。容器運行時(ContainerRuntime)——在Kubernetes集群的每個節(jié)點上運行,負責容器的整個生命周期。任務2.1創(chuàng)建Kubernetes集群相關知識2.1.4功能插件集群DNS——CoreDNS容器網(wǎng)絡接口(ContainerNetworkInterface,CNI)Web用戶界面Dashboard容器資源監(jiān)控集群級日志任務2.1創(chuàng)建Kubernetes集群相關知識2.1.1Kubernetes集群的組件借鑒集裝箱裝運貨物的思想,讓開發(fā)人員將應用程序及其依賴打包到一個輕量級、可移植的容器中,然后發(fā)布到任何運行Docker容器引擎的環(huán)境中,以容器形式來運行該應用程序。Docker是一個用于開發(fā)、發(fā)布和運行應用程序的開放平臺。Docker重新定義了應用程序在不同環(huán)境中的移植和運行方式。任務2.1創(chuàng)建Kubernetes集群相關知識2.1.5Kubernetes部署方式二進制方式部署工具minikube——搭建單節(jié)點的Kubernetes集群。kubeadm——快速部署一個Kubernetes集群,適用于生產(chǎn)環(huán)境快速部署。kOps——官方推出的Kubernetes運維工具,適用于生產(chǎn)環(huán)境Kubernetes的安裝、升級和管理。Kubespray——部署生產(chǎn)環(huán)境Kubernetes集群的工具。任務2.1創(chuàng)建Kubernetes集群相關知識2.1.6kubeadm工具命令功能kubeadminit初始化(創(chuàng)建)控制平面節(jié)點kubeadmjoin創(chuàng)建工作節(jié)點并將其加入到集群中kubeadmupgrade將Kubernetes集群升級到新版本kubeadmconfig查看和處理Kubernetes配置信息,例如kubeadmconfigprintinit-defaults命令顯示init命令配置,kubeadmconfigprintjoin-defaults顯示join命令配置,kubeadmconfigimagespull命令根據(jù)配置文件拉取鏡像,kubeadmconfigimageslist命令顯示需要拉取的鏡像kubeadmtoken管理kubeadmjoin命令所使用的令牌kubeadmreset還原通過kubeadminit或kubeadmjoin命令對節(jié)點進行的任何變更kubeadmcerts管理Kubernetes證書kubeadmkubeconfig管理kubeconfig文件kubeadmversion顯示kubeadm的版本信息任務2.1創(chuàng)建Kubernetes集群相關知識2.1.7高可用Kubernetes集群堆疊etcd拓撲任務2.1創(chuàng)建Kubernetes集群相關知識2.1.7高可用Kubernetes集群堆疊etcd拓撲任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.1規(guī)劃Kubernetes集群節(jié)點類型主機名IP地址硬件配置控制平面節(jié)點master010CPU:4核;內(nèi)存:8GB;硬盤:60GB工作節(jié)點node011CPU:2核;內(nèi)存:4GB;硬盤:60GB工作節(jié)點node022CPU:2核;內(nèi)存:4GB;硬盤:60GB任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.2準備Kubernetes集群安裝環(huán)境準備節(jié)點主機#hostnamectlset-hostnamemaster01#修改主機名#bash#重新執(zhí)行Shell使配置生效#nmcliconnectionshow#獲取當前的網(wǎng)絡連接信息NAMEUUIDTYPEDEVICEvirbr03d081de7-b0f1-4105-ae59-645bb6163a1cbridgevirbr0ens16083daa21e-03bb-4cea-b286-d6a0fb6df711ethernet--#需配置的網(wǎng)絡連接#nmcliconnectionmodifyens160ipv4.addr0/24ipv4.gatewayconnection.autoconnectyesipv4.dns"14"#修改網(wǎng)絡連接配置#nmcliconnectionupens160#激活網(wǎng)絡連接使配置生效連接已成功激活(D-Bus活動路徑:/org/freedesktop/NetworkManager/ActiveConnection/3任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.2準備Kubernetes集群安裝環(huán)境配置主機名解析(/etc/hosts)0master011node012node02禁用防火墻#systemctlstopfirewalld&&systemctldisablefirewalld禁用SELinux#setenforce0#臨時禁用SELinux#sed-i's/^SELINUX=enforcing$/SELINUX=disabled/'/etc/selinux/config任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.2準備Kubernetes集群安裝環(huán)境關閉交換分區(qū)#swapoff–a#臨時關閉#sed-ri‘s/.*swap.*/#&/’/etc/fstab#重啟后永久關閉設置系統(tǒng)時間同步修改/etc/chrony.conf配置文件serveriburstserveriburstserveriburstserveriburst重啟chrony#systemctlrestartchronyd.service任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.2準備Kubernetes集群安裝環(huán)境安裝IPVS相關工具安裝ipset和ipvsadm工具#yuminstall-yipsetipvsadm編寫/etc/sysconfig/modules/ipvs.modules腳本文件#!/bin/bashmodprobe--ip_vsmodprobe--ip_vs_rrmodprobe--ip_vs_wrrmodprobe--ip_vs_shmodprobe--nf_conntrack#如果內(nèi)核版本低于4.18,則改用nf_conntrack_ipv4模塊驗證加載IPVS所需的模塊#bash/etc/sysconfig/modules/ipvs.modules#lsmod|grep-e-ip_vs-enf_conntrack#查看相關的模塊任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.2準備Kubernetes集群安裝環(huán)境安裝containerd(1)調(diào)整內(nèi)核參數(shù)。#modprobeoverlay#modprobebr_netfilter編輯/etc/modules-load.d/containerd.conf文件net.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=1net.ipv4.ip_forward=1使以上內(nèi)核參數(shù)調(diào)整生效#sysctl-p/etc/sysctl.d/99-kubernetes-cri.conf任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.2準備Kubernetes集群安裝環(huán)境安裝containerd(2)下載containerd軟件包。#wget/containerd/containerd/releases/download/v1.6.8/cri-containerd-1.6.8-linux-amd64.tar.gz(3)將該軟件包解壓縮到系統(tǒng)根目錄中。#tar-zxvfcri-containerd-1.6.8-linux-amd64.tar.gz-C/(4)修改/etc/containerd/config.toml配置文件。SystemdCgroup=truesandbox_image="/google_containers/pause:3.8"
[plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint=["","","","http://h$[plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]endpoint=["/google_containers"]任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.2準備Kubernetes集群安裝環(huán)境安裝containerd(5)啟動containerd并設置為開機啟動。#systemctldaemon-reload&&systemctlenablecontainerd&&systemctlstartcontainerd(6)查看containerd的版本信息進行驗證。#crictlversionVersion:0.1.0RuntimeName:containerdRuntimeVersion:v1.6.8RuntimeApiVersion:v1任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.2準備Kubernetes集群安裝環(huán)境添加阿里云的Kubernetes軟件源創(chuàng)建/etc/yum.repos.d/kubernetes.repo文件[kubernetes]name=Kubernetesbaseurl=/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=1repo_gpgcheck=0gpgkey=/kubernetes/yum/doc/yum-key.gpg/kubernetes/yum/doc/rpm-package-key.gpg任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.3部署Kubernetes集群節(jié)點配置節(jié)點主機的SSH互信執(zhí)行ssh-keygen命令生成SSH公鑰認證所需的公鑰和私鑰文件。#ssh-keygen將所生成的公鑰發(fā)送到要免密登錄的主機中。ssh-copy-id-i~/.ssh/id_rsa.pubroot@master01測試其中一臺主機的免密SSH登錄。[root@master01~]#sshnode01Activatethewebconsolewith:systemctlenable--nowcockpit.socketLastlogin:MonNov2810:12:132022[root@node01~]#exit注銷Connectiontonode01closed.任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.3部署Kubernetes集群節(jié)點初始化控制平面節(jié)點[root@master01~]#kubeadminit--apiserver-advertise-address=0--image-repository/google_containers--kubernetes-versionv1.25.4--service-cidr=/12--pod-network-cidr=/16--ignore-preflight-errors=all[init]UsingKubernetesversion:v1.25.4Thenyoucanjoinanynumberofworkernodesbyrunningthefollowingoneachasroot:#提示加入工作節(jié)點的命令(包括令牌值)kubeadmjoin0:6443--token51siix.szxjd53d406j615y\ --discovery-token-ca-cert-hashsha256:fb304dbb2075a3ae22b6e9c0a4b7008c86607099e4b0a207e18c7e98f237bdd4任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.3部署Kubernetes集群節(jié)點為kubectl命令提供配置文件#mkdir-p$HOME/.kube#cp-i/etc/kubernetes/admin.conf$HOME/.kube/config#chown$(id-u):$(id-g)$HOME/.kube/config任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.3部署Kubernetes集群節(jié)點將工作節(jié)點加入集群[root@master01~]#sshnode01#免密登錄到node01主機Activatethewebconsolewith:systemctlenable--nowcockpit.socketLastlogin:MonNov2821:40:022022[root@node01~]#kubeadmjoin0:6443--token51siix.szxjd53d406j615y--discovery-token-ca-cert-hashsha256:fb304dbb2075a3ae22b6e9c0a4b7008c86607099e4b0a207e18c7e98f237bdd4[preflight]Runningpre-flightchecksThisnodehasjoinedthecluster:#提示此節(jié)點已成功加入到集群
[root@node01~]#exit#退出node01主機登錄任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.4安裝Pod網(wǎng)絡插件(1)從官網(wǎng)下載Calico插件安裝用的配置文件calico.yaml。(2)修改calico.yaml文件。
-name:CALICO_IPV4POOL_CIDRvalue:"/16"(3)應用calico.yaml配置文件,在集群中部署Calico插件(創(chuàng)建多種Kubernetes資源)。#kubectlapply-fcalico.yaml(4)查看名稱空間kube-system下的所有Pod對象。#kubectlgetpods-nkube-systemNAMEREADYSTATUSRESTARTSAGEcalico-kube-controllers-798cc86c47-jrlhm1/1Running011m任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.4安裝Pod網(wǎng)絡插件(5)進一步查看Calico插件在各節(jié)點上的部署情況。#kubectlgetpo-A-owide|grepcalicokube-systemcalico-kube-controllers-798cc86c47-jrlhm1/1Running011mnode02<none><none>kube-systemcalico-node-4bj7s1/1Running011m2node02<none><none>kube-systemcalico-node-bqnzx1/1Running011m0master01<none><none>kube-systemcalico-node-s7fsd1/1Running011m1node01<none><none>任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.5測試Kubernetes集群(1)創(chuàng)建一個簡單的Deployment資源以運行Nginx。#kubectlcreatedeploymentnginx--image=nginx:1.8.1deployment.apps/nginxcreated(2)將該Deployment資源發(fā)布為Service資源供外部訪問。#kubectlexposedeploymentnginx--port=80--type=NodePortservice/nginxexposed(3)查看所創(chuàng)建的Pod和Service資源是否正常運行。#kubectlgetpod,svcNAMEREADYSTATUSRESTARTSAGEpod/nginx-cf797f6c5-s5lkq1/1Running02m26sNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEservice/kubernetesClusterIP<none>443/TCP12hservice/nginxNodePort36<none>80:30820/TCP56s(4)根據(jù)所暴露的節(jié)點端口訪問所發(fā)布的Nginx服務器。[root@master01~]#curlhttp://node02:30820<p><em>Thankyouforusingnginx.</em></p>任務2.1創(chuàng)建Kubernetes集群任務實現(xiàn)任務2.1.6使用containerd命令行工具crictl查看節(jié)點上當前的鏡像列表。#crictlimagesIMAGETAGIMAGEIDSIZEdocker.io/calico/cniv3.24.5628dd7088041087.5MBdocker.io/calico/nodev3.24.554637cb36d4a181.6MB查看節(jié)點上當前的容器列表。#crictlpsCONTAINERIMAGECREATEDSTATENAMEATTEMPTPODIDPOD75e3ecda6ac1a54637cb36d4a126minutesagoRunningcalico-node0f6e1607c1c245calico-node-bqnzx任務2.2部署和使用KubernetesDashboard任務2.1創(chuàng)建Kubernetes集群任務2.2部署和使用KubernetesDashboard任務說明01OPTION02OPTION03OPTION了解Kubernetes集群資源管理方式了解KubernetesDashboard的功能掌握Kubernetes
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《電氣火災》課件
- 《研究生培養(yǎng)與管理》課件
- 《服務行業(yè)的戴爾》課件
- 廣東省梅州市五華縣華城鎮(zhèn)初級中學-主題班會-防性侵【課件】
- 單位管理制度集合大合集【人事管理篇】
- 單位管理制度集粹匯編【人力資源管理篇】十篇
- 單位管理制度匯編大合集【人力資源管理】
- 單位管理制度合并匯編人事管理十篇
- 單位管理制度分享匯編【職工管理篇】
- 高中語文常見的病句類型及其辨析
- 2025年1月八省聯(lián)考河南新高考物理試卷真題(含答案詳解)
- (完整版)混凝土公司組織機構框圖
- 煤氣化工藝路線的比較
- 寶石學 第11章 有機寶石.
- SAP-按銷售訂單采購生產(chǎn)系統(tǒng)實現(xiàn)之配置和操作
- 《安寧療護培訓》PPT課件
- 第5章煤炭氣化技術
- 全口義齒修復匯總
- 公墓施工組織設計
- 業(yè)余無線電臺設置(變更)申請表
- 擔保公司員工守則(共18頁)
評論
0/150
提交評論