版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Kubernetes集群实战(微课版)工业和信息化精品系列教材——云计算技术项目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应用程序部署方式的演变任务1.1认识与安装Docker相关知识1.1.2什么是Docker借鉴集装箱装运货物的思想,让开发人员将应用程序及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何运行Docker容器引擎的环境中,以容器形式来运行该应用程序。Docker是一个用于开发、发布和运行应用程序的开放平台。Docker重新定义了应用程序在不同环境中的移植和运行方式。任务1.1认识与安装Docker相关知识1.1.2什么是DockerDocker优势应用程序快速、一致交付。响应式部署和伸缩应用程序。在同样的硬件上运行更多的工作负载。任务1.1认识与安装Docker相关知识1.1.3
Docker架构任务1.1认识与安装Docker相关知识1.1.4
Docker版本DockerDesktop适合开发人员和测试人员在macOS、Windows或Linux环境中使用。任务1.1认识与安装Docker相关知识1.1.4
Docker版本DockerEngine——原DockerCEDocker的核心组件,用于构建和容器化应用程序的开源容器化技术。Docker守护进程(dockerd)Docker客户端(docker)用于定义程序与Docker守护进程交互的接口RESTAPILinux操作系统,尤其是服务器版适合直接安装DockerEngine。任务1.1认识与安装Docker任务实现任务1.1.1安装DockerEngine安装方式大多数用户通过Docker的软件仓库进行安装,以便安装和升级。有些用户选择下载软件包手动安装,完全手动管理升级。在测试和开发环境中可选择使用自动化便捷脚本安装Docker。任务1.1认识与安装Docker任务实现任务1.1.1安装DockerEngine准备安装环境(1)
创建虚拟机。(2)安装CentOSStream8操作系统。(3)设置主机名。(4)修改网络连接设置。(5)禁用防火墙。(6)禁用SELinux。(7)更改时区设置。任务1.1认识与安装Docker任务实现任务1.1.1安装DockerEngine设置Docker仓库(1)安装所需的yum-utils包。(2)设置DockerEngine稳定版的仓库地址。安装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任务实现任务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任务实现任务1.1.2了解docker命令的基本用法docker命令的基本语法docker[选项]命令短格式的为一个连字符(-)加上单个字符,如-d。长格式为两个连字符加上字符串,如--daemon。多值选项(如-a=[])可以在单个命令行中多次定义:dockerrun-astdin-astdout-i-tubuntu/bin/bashdockerrun-astdin-astdout-astderrubuntu/bin/ls对于较长的单行命令通常使用续行符(\)进行换行: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任务实现任务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#查看容器中当前操作系统内核信息Linuxfb615540724e4.18.0-338.el8.x86_64#1SMPFriAug2717:32:14UTC2021x86_64x86_64x86_64GNU/Linuxroot@fb615540724e:/#cat/etc/issue#查看容器中当前操作系统发行版信息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镜像包括一个应用程序以及能够运行它的基本操作系统环境。Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了为运行准备的一些配置参数。任务1.2掌握Docker的基本操作方法相关知识1.2.1Docker镜像基础知识镜像的基本信息使用dockerimages命令列出本地主机上的镜像:[root@docker_dev~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEubuntulatesta8780b506fa44weeksago77.8MBhello-worldlatestfeb5d9fea6a514monthsago13.3kB镜像ID是镜像唯一标识,采用UUID形式表示,全长64个十六进制字符。标签用于标记同一仓库的不同镜像版本。镜像可以通过镜像ID、镜像名称(包括标签)或者镜像摘要值(内容寻址标识符)来标识或引用。任务1.2掌握Docker的基本操作方法相关知识1.2.1Docker镜像基础知识镜像描述文件DockerfileDockerfile文件用来描述镜像,定义如何构建Docker镜像。Dockerfile是一个文本文件,包含要构建镜像的所有指令。Docker通过读取Dockerfile中的指令自动构建镜像。hello-world镜像的Dockerfile内容FROMscratchCOPYhello/CMD["/hello"]任务1.2掌握Docker的基本操作方法相关知识1.2.1Docker镜像基础知识Docker镜像操作命令dockerimage子命令docker子命令功能dockerimagebuilddockerbuild从Dockerfile构建镜像dockerimagehistorydockerhistory显示镜像的历史记录dockerimageimportdockerimport从tarball文件导入内容以创建文件系统镜像dockerimageinspectdockerinspect显示一个或多个镜像的详细信息dockerimageloaddockerload从tar档案文件或标准输入(STDIN)装载镜像dockerimagelsdockerimages输出镜像列表dockerimageprune无删除未使用的镜像dockerimagepulldockerpull从注册服务器拉取镜像或镜像仓库dockerimagepushdockerpush将镜像或镜像仓库推送到注册服务器dockerimagermdockerrmi删除一个或多个镜像dockerimagesavedockersave将一个或多个镜像保存到tar存档(默认情况下流式传输到STDOUT)dockerimagetagdockertag为指向源镜像的目标镜像添加一个名称任务1.2掌握Docker的基本操作方法相关知识1.2.2Docker容器基础知识容器与容器ID在Docker中容器是指从镜像创建的应用程序运行实例。镜像是静态的定义,容器是镜像运行时的实体,基于同一镜像可以创建若干不同的容器。容器的实质是进程,容器进程在属于自己的独立的命名空间内运行。容器可以拥有自己的根文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID空间。容器的唯一标识容器ID与镜像ID一样采用UUID形式表示,是由64个十六进制字符组成的字符串。通过容器名称来代替容器ID引用容器。任务1.2掌握Docker的基本操作方法相关知识1.2.2Docker容器基础知识可写的容器层任务1.2掌握Docker的基本操作方法相关知识1.2.2Docker容器基础知识容器操作命令dockercontainer子命令docker子命令功能dockercontainerattachdockerattach将本地的标准输入、输出和错误流附加到正在运行的容器上,也就是连接到正在运行的容器上,其实就是进入容器dockercontainercommitdockercommit从当前容器创建新的镜像dockercontainercpdockercp在容器和本地文件系统之间复制文件和目录dockercontainercreatedockercreate创建新的容器dockercontainerdiffdockerdiff检查容器创建以来其文件系统上文件或目录的更改dockercontainerexecdockerexec从正在运行的容器中执行命令dockercontainerexportdockerexport将容器的文件系统导出为一个归档文件dockercontainerinspectdockerinspect显示一个或多个容器的详细信息dockercontainerkilldockerkill“杀死”一个正在运行的容器dockercontainerlogsdockerlogs获取容器的日志信息dockercontainerlsdockerps输出容器列表dockercontainerpausedockerpause暂停一个或多个容器内的所有进程任务1.2掌握Docker的基本操作方法相关知识1.2.2Docker容器基础知识容器操作命令dockercontainer子命令docker子命令功能dockercontainerportdockerport列出容器的端口映射或特定的映射dockercontainerprune无删除所有停止执行的镜像dockercontainerrenamedockerrename对容器重命名dockercontainerrestartdockerrestart重启一个或多个容器dockercontainerrmdockerrm删除一个或多个容器dockercontainerrundockerrun创建一个新的容器并执行命令dockercontainerstartdockerstart启动一个或多个已停止的容器dockercontainerstatsdockerstats显示容器资源使用统计信息的实时流dockercontainerstopdockerstop停止一个或多个正在运行的容器dockercontainertopdockertop显示容器的正在运行的进程dockercontainerunpausedockerunpause恢复一个或多个容器内的被暂停的所有进程dockercontainerupdatedockerupdate更新一个或多个容器的配置dockercontainerwaitdockerwait阻塞一个或多个容器的运行,直到容器停止运行,然后输出退出码任务1.2掌握Docker的基本操作方法相关知识1.2.3Docker注册中心与仓库区分注册中心与仓库的概念Registry——注册中心或注册服务器,存放仓库Repository——仓库,集中存放镜像文件一个注册中心往往有很多仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,不同的镜像通过不同的标签来区分。任务1.2掌握Docker的基本操作方法相关知识1.2.3Docker注册中心与仓库官方Docker注册中心DockerHub提供大规模的公开仓库,存放数量庞大的镜像供用户下载。使用国内镜像源来提高镜像的下载速度和稳定性。Docker官方镜像操作系统数据库中间件应用软件任务1.2掌握Docker的基本操作方法相关知识1.2.3Docker注册中心与仓库第三方Docker注册中心阿里云Registry提供Docker注册服务——容器镜像服务(ARC)。Ghost镜像→虚拟机镜像→Docker镜像Docker镜像是按照Docker要求定制的应用程序。一个Docker镜像包括一个应用程序以及能够运行它的基本操作系统环境。Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了为运行准备的一些配置参数。任务1.2掌握Docker的基本操作方法任务实现任务1.2.1掌握镜像和容器的基本操作(1)拉取镜像——使用dockerpull命令。(2)显示本地的镜像列表——使用dockerimages命令。(3)查看镜像的构建历史——使用dockerhistory命令。(4)启动容器并让其以守护进程的形式在后台运行——使用dockerrun–d命令。(5)显示容器列表——执行dockerps命令。(6)获取容器的日志信息——使用dockerlogs命令。(7)进入容器——使用dockerexec命令。(8)删除容器——使用dockerrm命令。任务1.2掌握Docker的基本操作方法任务实现任务1.2.2自建Docker注册中心基于容器安装运行Registry创建并启动一个运行DockerRegistry的容器。#dockerrun-d-p5000:5000--restart=always--namemyregistry-v/opt/data/registry:/var/lib/registryregistry从该注册中心获取所有的镜像仓库来测试DockerRegistry服务。#curl:5000/v2/_catalog{"repositories":[]}任务1.2掌握Docker的基本操作方法任务实现任务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的格式基本格式#注释指令参数指令不区分大小写,建议大写。指令可以有参数。Docker按顺序执行其中的指令。以“#”符号开头的行都将被视为注释,除非是解析器指令。解析器指令是可选的,它会影响处理Dockerfile中后续行的方式。所有解析器指令都必须位于Dockerfile的首部。任务1.3构建镜像并将应用程序容器化相关知识1.3.1镜像的构建Dockerfile常用指令指令功能基本语法FROM设置基础镜像FROM<镜像>[AS<名称>]FROM<镜像>[:<标签>][AS<名称>]FROM<镜像>[@<摘要值>][AS<名称>]RUN运行命令RUN<命令>RUN["可执行程序","参数1","参数2"]CMD指定容器启动时默认执行的命令CMD["可执行程序","参数1","参数2"]CMD["参数1","参数2"]CMD命令参数1参数2LABEL向镜像添加标记LABEL<键>=<值><键>=<值><键>=<值>…EXPOSE声明容器运行时侦听的网络端口EXPOSE<端口>[<端口>…]ENV指定环境变量ENV<键><值>ENV<键>=<值>…COPY将源文件复制到容器COPY[--chown=<用户>:<组>]<源>…<目的>COPY[--chown=<用户>:<组>]["<源>",…,"<目的>"]ADD将源文件复制到容器ADD[--chown=<用户>:<组>]<源>…<目的>ADD[--chown=<用户>:<组>]["<源>",…"<目的>"]ENTRYPOINT配置容器的默认入口点ENTRYPOINT["可执行文件","参数1","参数2"]ENTRYPOINT命令参数1参数2VOLUME创建挂载点VOLUME["挂载点路径"]WORKDIR配置工作目录WORKDIR工作目录路径任务1.3构建镜像并将应用程序容器化相关知识1.3.1镜像的构建Dockerfile构建的基本语法基本用法dockerbuild[选项]路径|URL|-通过Dockerfile和构建上下文(BuildContext)构建镜像。构建上下文以递归方式处理。镜像构建由Docker守护进程而不是命令行接口运行。使用-f选项指定Dockerfile文件的具体位置。使用-t选项指定镜像标签。Docker默认重用过程中的中间镜像(缓存),以加速构建过程。任务1.3构建镜像并将应用程序容器化相关知识1.3.2应用程序镜像的内容(1)选择基础镜像。(2)安装必要的软件包。(3)添加自定义文件。(4)定义容器运行时的用户权限,尽可能避免容器以root特权运行。(5)定义要对外暴露的端口。(6)定义应用程序的入口点(EntryPoint)。(7)定义配置方式。(8)持久化应用程序数据。任务1.3构建镜像并将应用程序容器化相关知识1.3.3应用程序容器化的基本步骤制定镜像构建方案准备应用程序代码创建Docker镜像,为应用程序的每个组件创建和测试单个容器将容器及其所需的支持基础设施组装成一个完整的应用程序测试、分发和部署完整的容器化应用程序任务1.3构建镜像并将应用程序容器化任务实现将应用程序进行容器化获取应用程序(1)安装Git工具。#yuminstall-ygit(2)创建项目目录。#mkdir-p/dev-app/01#cd/dev-app/01(3)将getting-started-app库克隆到本地。#gitclone//docker/getting-started-app.git(4)查看克隆库的内容。[root@docker_dev01]#lsgetting-started-apppackage.jsonspecsrcyarn.lock任务1.3构建镜像并将应用程序容器化任务实现将应用程序进行容器化构建应用程序的容器镜像(1)创建一个名为Dockerfile的文件。#cdgetting-started/app#touchDockerfile(2)编辑Dockerfile。FROMnode:18-alpineWORKDIR/appCOPY..RUNyarninstall--productionCMD["node","src/index.js"]EXPOSE3000任务1.3构建镜像并将应用程序容器化任务实现将应用程序进行容器化构建应用程序的容器镜像(3)生成容器镜像。#dockerbuild-tgetting-started.SendingbuildcontexttoDockerdaemon4.626MBStep1/6:FROMnode:18-alpine18-alpine:Pullingfromlibrary/node8921db27df28:Pullcomplete......Step6/6:EXPOSE3000--->Runninginbdc9a021da12Removingintermediatecontainerbdc9a021da12--->1cd88218f441......Successfullybuilt1cd88218f441Successfullytaggedgetting-started:latest任务1.3构建镜像并将应用程序容器化任务实现将应用程序进行容器化启动应用程序容器(1)使用dockerrun命令启动容器。#dockerrun-dp3000:3000getting-started(2)访问任务列表应用程序。任务1.3构建镜像并将应用程序容器化任务实现将应用程序进行容器化启动应用程序容器(3)在应用程序中进行任务管理操作。任务1.3构建镜像并将应用程序容器化任务实现将应用程序进行容器化更新应用程序(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构建镜像并将应用程序容器化任务实现将应用程序进行容器化更新应用程序(4)使用更新后的代码重新构建的镜像启动新的容器。#dockerrun-dp3000:3000getting-started(5)打开Web浏览器访问更新后的应用程序。任务1.3构建镜像并将应用程序容器化任务实现将应用程序进行容器化分享应用程序(1)针对自建的注册中心设置相应的标签。#dockertaggetting-started:5000/getting-started:1.1(2)执行镜像上传命令。#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调查Kubernetes在国内的应用现状任务1.4转向Kubernetes相关知识1.4.1什么是KubernetesKubernetes——用于自动部署、扩缩和管理容器化应用程序的开源系统Kubernetes=K8Docker集装箱货轮Kubernetes船舵(船的方向盘)任务1.4转向Kubernetes相关知识1.4.2为什么要使用KubernetesKubernetes是业界领先的容器编排解决方案Mesos——Apache的开源分布式资源管理框架由于大数据计算调度领域的局限性,Mesos只在特定的小范围使用。DockerSwarm——Docker原生集群解决方案紧密集成到Docker的生态系统中,适合规模不大的应用程序环境。随着Docker企业版被Mirantis公司收购,Mirantis更倾向于编排工具Kubernetes,DockerSwarm面临被逐步淘汰的命运。Kubernetes——谷歌公司推出的开源容器集群管理系统具有超前的核心基础特性,构建与众不同的容器编排和管理的生态。Kubernetes内部最底层最核心的Borg/Omega系统是使用golang语言重新设计开发的,并对外开源。发展成为容器编排和管理领域的事实标准。任务1.4转向Kubernetes相关知识1.4.2为什么要使用Kubernetes使用Kubernetes具有极大的优势大大提升开发和运维复杂系统的人效。全面拥抱微服务架构,解决复杂业务系统的架构问题。随时随地将系统整体迁移到公有云上。利用Kubernetes服务弹性扩容机制轻松应对突发流量。系统架构具有横向扩容能力,便于在线完成集群扩容,在多个云环境中进行弹性伸缩。任务1.4转向Kubernetes相关知识1.4.3Kubernetes的主要特性自动化上线和回滚服务发现与负载均衡自我修复自动装箱批量执行存储编排密钥与配置管理IPv4/IPv6双协议栈水平扩缩为扩展设计任务1.4转向Kubernetes相关知识1.4.4Kubernetes与云原生什么是云原生4个要点微服务DevOps持续交付容器化云原生的代表技术容器服务网格微服务不可变基础设施声明式API任务1.4转向Kubernetes相关知识1.4.4Kubernetes与云原生云原生应用程序的特点可预测不依赖操作系统按需分配资源便于实施DevOps持续交付微服务架构可扩展快速恢复任务1.4转向Kubernetes相关知识1.4.4Kubernetes与云原生Kubernetes是云原生技术的基石Docker实现了容器的可移植、轻量化、虚拟化,为容器技术的普及作出了重要贡献。Kubernetes解决容器编排的全寿命周期管理。CNCF致力于培育和维护开源生态系统来推广云原生技术,Kubernetes成为CNCF托管的第一个开源项目。作为管理云容器平台的工具,Kubernetes简化容器化应用程序的部署,成功解决了应用上云的效率和可移植性等问题,从而被称为云原生技术的基石。云原生的Kubernetes架构可以连续多次处理应用程序的部署。任务1.4转向Kubernetes任务实现任务1.4.1了解Kubernetes的应用适合Kubernetes运行的应用程序应用程序作为小型的、简洁的、独立的可扩展服务运行的,也就是一组微服务。应用程序不依赖于特定的硬件配置,不需要访问专用硬件设备。应用程序可以基于共享基础设施共存。应用程序包括涉及内外部访问的多个服务,Kubernetes能够以细粒度的方式定义面向内外部访问的服务。Kubernetes在容器级别而非硬件级别运行,有许多功能Kubernetes本身并不支持。任务1.4转向Kubernetes任务实现任务1.4.2调查Kubernetes在国内企业中的实际应用腾讯云容器服务拥有大规模的Kubernetes集群中国移动云(ECloud)进行云原生转型中国联通利用Kubernetes提高效率和降低IT成本京东运营着世界上最大的Kubernete集群华为将内部IT部门的应用程序转移到Kubernetes上运行蚂蚁金服所有核心金融系统都已容器化,并逐步向Kubernete迁移网易尝试利用Kubernetes支持全球互联网业务THANKSKubernetes集群实战(微课版)工业和信息化精品系列教材——云计算技术项目2
部署Kubernetes集群能力CAPACITY要求了解Kubernetes集群的组件。了解Kubernetes集群的部署方式和工具。学会使用部署工具创建Kubernetes集群。了解KubernetesDashboard。学会使用KubernetesDashboard部署容器化应用程序。任务2.2部署和使用KubernetesDashboard任务2.1创建Kubernetes集群任务2.1创建Kubernetes集群任务说明01OPTION02OPTION03OPTION了解Kubernetes集群的基本组成了解Kubernetes集群的主要组件了解Kubernetes集群的部署方式04OPTION了解Kubernetes集群的部署工具05OPTION学会Kubernetes集群的规划和部署06OPTION熟悉使用kubeadm部署Kubernetes集群的全过程任务2.1创建Kubernetes集群相关知识2.1.1Kubernetes集群的组件任务2.1创建Kubernetes集群相关知识2.1.2控制平面组件kube-apiserver——API服务器(APIServer)负责公开KubernetesAPI,处理接受请求的工作。etcd——所有集群数据的后台数据库,持久化存储集群中所有的资源对象以及配置数据。kube-scheduler——Kubernetes调度器(Scheduler)负责Pod在集群节点中的调度分配。kube-controller-manager——Kubernetes控制器管理器(ControllerManager)负责运行控制器进程。cloud-controller-manager——云控制器管理器(CloudControllerManager)利用云基础设施技术,在公有云、私有云或者混合云环境中运行Kubernetes。任务2.1创建Kubernetes集群相关知识2.1.3工作节点组件kubelet——在集群中每个节点上运行,是负责启动容器的重要的守护进程,用于保证容器在Pod中健康运行。kube-proxy——集群中每个节点上所运行的网络代理,是实现Kubernetes服务(Service)的通信与负载均衡机制的重要组件。容器运行时(ContainerRuntime)——在Kubernetes集群的每个节点上运行,负责容器的整个生命周期。任务2.1创建Kubernetes集群相关知识2.1.4功能插件集群DNS——CoreDNS容器网络接口(ContainerNetworkInterface,CNI)Web用户界面Dashboard容器资源监控集群级日志任务2.1创建Kubernetes集群相关知识2.1.1Kubernetes集群的组件借鉴集装箱装运货物的思想,让开发人员将应用程序及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何运行Docker容器引擎的环境中,以容器形式来运行该应用程序。Docker是一个用于开发、发布和运行应用程序的开放平台。Docker重新定义了应用程序在不同环境中的移植和运行方式。任务2.1创建Kubernetes集群相关知识2.1.5Kubernetes部署方式二进制方式部署工具minikube——搭建单节点的Kubernetes集群。kubeadm——快速部署一个Kubernetes集群,适用于生产环境快速部署。kOps——官方推出的Kubernetes运维工具,适用于生产环境Kubernetes的安装、升级和管理。Kubespray——部署生产环境Kubernetes集群的工具。任务2.1创建Kubernetes集群相关知识2.1.6kubeadm工具命令功能kubeadminit初始化(创建)控制平面节点kubeadmjoin创建工作节点并将其加入到集群中kubeadmupgrade将Kubernetes集群升级到新版本kubeadmconfig查看和处理Kubernetes配置信息,例如kubeadmconfigprintinit-defaults命令显示init命令配置,kubeadmconfigprintjoin-defaults显示join命令配置,kubeadmconfigimagespull命令根据配置文件拉取镜像,kubeadmconfigimageslist命令显示需要拉取的镜像kubeadmtoken管理kubeadmjoin命令所使用的令牌kubeadmreset还原通过kubeadminit或kubeadmjoin命令对节点进行的任何变更kubeadmcerts管理Kubernetes证书kubeadmkubeconfig管理kubeconfig文件kubeadmversion显示kubeadm的版本信息任务2.1创建Kubernetes集群相关知识2.1.7高可用Kubernetes集群堆叠etcd拓扑任务2.1创建Kubernetes集群相关知识2.1.7高可用Kubernetes集群堆叠etcd拓扑任务2.1创建Kubernetes集群任务实现任务2.1.1规划Kubernetes集群节点类型主机名IP地址硬件配置控制平面节点master010CPU:4核;内存:8GB;硬盘:60GB工作节点node011CPU:2核;内存:4GB;硬盘:60GB工作节点node022CPU:2核;内存:4GB;硬盘:60GB任务2.1创建Kubernetes集群任务实现任务2.1.2准备Kubernetes集群安装环境准备节点主机#hostnamectlset-hostnamemaster01#修改主机名#bash#重新执行Shell使配置生效#nmcliconnectionshow#获取当前的网络连接信息NAMEUUIDTYPEDEVICEvirbr03d081de7-b0f1-4105-ae59-645bb6163a1cbridgevirbr0ens16083daa21e-03bb-4cea-b286-d6a0fb6df711ethernet--#需配置的网络连接#nmcliconnectionmodifyens160ipv4.addr0/24ipv4.gatewayconnection.autoconnectyesipv4.dns"14"#修改网络连接配置#nmcliconnectionupens160#激活网络连接使配置生效连接已成功激活(D-Bus活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3任务2.1创建Kubernetes集群任务实现任务2.1.2准备Kubernetes集群安装环境配置主机名解析(/etc/hosts)0master011node012node02禁用防火墙#systemctlstopfirewalld&&systemctldisablefirewalld禁用SELinux#setenforce0#临时禁用SELinux#sed-i's/^SELINUX=enforcing$/SELINUX=disabled/'/etc/selinux/config任务2.1创建Kubernetes集群任务实现任务2.1.2准备Kubernetes集群安装环境关闭交换分区#swapoff–a#临时关闭#sed-ri‘s/.*swap.*/#&/’/etc/fstab#重启后永久关闭设置系统时间同步修改/etc/chrony.conf配置文件serveriburstserveriburstserveriburstserveriburst重启chrony#systemctlrestartchronyd.service任务2.1创建Kubernetes集群任务实现任务2.1.2准备Kubernetes集群安装环境安装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#如果内核版本低于4.18,则改用nf_conntrack_ipv4模块验证加载IPVS所需的模块#bash/etc/sysconfig/modules/ipvs.modules#lsmod|grep-e-ip_vs-enf_conntrack#查看相关的模块任务2.1创建Kubernetes集群任务实现任务2.1.2准备Kubernetes集群安装环境安装containerd(1)调整内核参数。#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使以上内核参数调整生效#sysctl-p/etc/sysctl.d/99-kubernetes-cri.conf任务2.1创建Kubernetes集群任务实现任务2.1.2准备Kubernetes集群安装环境安装containerd(2)下载containerd软件包。#wget/containerd/containerd/releases/download/v1.6.8/cri-containerd-1.6.8-linux-amd64.tar.gz(3)将该软件包解压缩到系统根目录中。#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创建Kubernetes集群任务实现任务2.1.2准备Kubernetes集群安装环境安装containerd(5)启动containerd并设置为开机启动。#systemctldaemon-reload&&systemctlenablecontainerd&&systemctlstartcontainerd(6)查看containerd的版本信息进行验证。#crictlversionVersion:0.1.0RuntimeName:containerdRuntimeVersion:v1.6.8RuntimeApiVersion:v1任务2.1创建Kubernetes集群任务实现任务2.1.2准备Kubernetes集群安装环境添加阿里云的Kubernetes软件源创建/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创建Kubernetes集群任务实现任务2.1.3部署Kubernetes集群节点配置节点主机的SSH互信执行ssh-keygen命令生成SSH公钥认证所需的公钥和私钥文件。#ssh-keygen将所生成的公钥发送到要免密登录的主机中。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创建Kubernetes集群任务实现任务2.1.3部署Kubernetes集群节点初始化控制平面节点[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.4......Thenyoucanjoinanynumberofworkernodesbyrunningthefollowingoneachasroot:#提示加入工作节点的命令(包括令牌值)kubeadmjoin0:6443--token51siix.szxjd53d406j615y\ --discovery-token-ca-cert-hashsha256:fb304dbb2075a3ae22b6e9c0a4b7008c86607099e4b0a207e18c7e98f237bdd4任务2.1创建Kubernetes集群任务实现任务2.1.3部署Kubernetes集群节点为kubectl命令提供配置文件#mkdir-p$HOME/.kube#cp-i/etc/kubernetes/admin.conf$HOME/.kube/config#chown$(id-u):$(id-g)$HOME/.kube/config任务2.1创建Kubernetes集群任务实现任务2.1.3部署Kubernetes集群节点将工作节点加入集群[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-flightchecks......Thisnodehasjoinedthecluster:#提示此节点已成功加入到集群......[root@node01~]#exit#退出node01主机登录任务2.1创建Kubernetes集群任务实现任务2.1.4安装Pod网络插件(1)从官网下载Calico插件安装用的配置文件calico.yaml。(2)修改calico.yaml文件。
-name:CALICO_IPV4POOL_CIDRvalue:"/16"(3)应用calico.yaml配置文件,在集群中部署Calico插件(创建多种Kubernetes资源)。#kubectlapply-fcalico.yaml(4)查看名称空间kube-system下的所有Pod对象。#kubectlgetpods-nkube-systemNAMEREADYSTATUSRESTARTSAGEcalico-kube-controllers-798cc86c47-jrlhm1/1Running011m......任务2.1创建Kubernetes集群任务实现任务2.1.4安装Pod网络插件(5)进一步查看Calico插件在各节点上的部署情况。#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创建Kubernetes集群任务实现任务2.1.5测试Kubernetes集群(1)创建一个简单的Deployment资源以运行Nginx。#kubectlcreatedeploymentnginx--image=nginx:1.8.1deployment.apps/nginxcreated(2)将该Deployment资源发布为Service资源供外部访问。#kubectlexposedeploymentnginx--port=80--type=NodePortservice/nginxexposed(3)查看所创建的Pod和Service资源是否正常运行。#kubectlgetpod,svcNAMEREADYSTATUSRESTARTSAGEpod/nginx-cf797f6c5-s5lkq1/1Running02m26sNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEservice/kubernetesClusterIP<none>443/TCP12hservice/nginxNodePort36<none>80:30820/TCP56s(4)根据所暴露的节点端口访问所发布的Nginx服务器。[root@master01~]#curlhttp://node02:30820......<p><em>Thankyouforusingnginx.</em></p>任务2.1创建Kubernetes集群任务实现任务2.1.6使用containerd命令行工具crictl查看节点上当前的镜像列表。#crictlimagesIMAGETAGIMAGEIDSIZEdocker.io/calico/cniv3.24.5628dd7088041087.5MBdocker.io/calico/nodev3.24.554637cb36d4a181.6MB......查看节点上当前的容器列表。#crictlpsCONTAINERIMAGECREATEDSTATENAMEATTEMPTPODIDPOD75e3ecda6ac1a54637cb36d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026文案编辑面试题目及答案
- 2026乡村大舞台面试题及答案
- (2026年)饼干销售合同范本
- 2025-2026学年河南省信阳市光山县数学四年级第二学期期中监测模拟试题含答案解析
- 2025-2026学年河北省沧州市献县四下数学期末预测试题(含答案)
- 2025-2026学年河北省保定市高碑店数学四年级第二学期期中预测试题含答案解析
- 西咸新区泾河第八学校招聘教师笔试真题2025
- 成都中医药大学第二附属医院招聘笔试真题2025
- 2025-2026学年江西省上饶市四年级数学第二学期期末监测模拟试题(含答案)
- 河南信阳市五校协作体2027届高三上学期学情综合检测生物学试卷(解析版)
- T-CWEC17-2020水利水电勘测设计单位安全生产标准化评审规程
- 工艺管道试压、吹扫方案
- 与孩子达成的手机使用协议君子协议
- JB T 5082.7-2011内燃机 气缸套第7部分:平台珩磨网纹技术规范及检测方法
- 中建钢结构工程质量通病防治图册2020版
- 锅炉设备进口合同中英文对照版
- 人体生理功能PPT(高职护理)完整全套教学课件
- 2023年网格员招聘考试复习题库(含答案)
- 绍兴市利和文具有限公司年产50吨文具橡皮生产线项目立项环境评估报告表
- 科技向上肌源美丽-2023巨量引擎科技护肤白皮书
- 星级酒店管理工程部管理培训资料
评论
0/150
提交评论