一、Ubunt环境1。测试环境机器规划 角色 主机名 IP地址 master testbk8smaster 192。168。11。13 node testbk8snode01 192。168。11。14 node testbk8snode02 192。168。11。152。软件环境版本 软件 版本 OS Ubuntu20。04。5focal Docker Dockerversion20。10。21 Kubernetes v1。25。43。初始化配置(所有节点) 修改阿里apt源sudovietcaptsources。listdebhttps:mirrors。aliyun。comubuntufocalmainrestricteduniversemultiversedebsrchttps:mirrors。aliyun。comubuntufocalmainrestricteduniversemultiversedebhttps:mirrors。aliyun。comubuntufocalsecuritymainrestricteduniversemultiversedebsrchttps:mirrors。aliyun。comubuntufocalsecuritymainrestricteduniversemultiversedebhttps:mirrors。aliyun。comubuntufocalupdatesmainrestricteduniversemultiversedebsrchttps:mirrors。aliyun。comubuntufocalupdatesmainrestricteduniversemultiversedebhttps:mirrors。aliyun。comubuntufocalproposedmainrestricteduniversemultiversedebsrchttps:mirrors。aliyun。comubuntufocalproposedmainrestricteduniversemultiversedebhttps:mirrors。aliyun。comubuntufocalbackportsmainrestricteduniversemultiversedebsrchttps:mirrors。aliyun。comubuntufocalbackportsmainrestricteduniversemultiversesudoaptgetupdatey 关闭防火墙sudoufwdisable 关闭selinux略。。。 我安装的ubuntu20默认没有selinux这东西,因此不涉及关闭 关闭swapsudoswapoffa临时sudosedris。swap。etcfstab永久 添加hostssudovietchosts192。168。11。13testbk8smaster192。168。11。14testbk8snode01192。168。11。15testbk8snode02 将桥接的IPv4流量传递到iptables的链sudovietcsysctl。dk8s。confnet。bridge。bridgenfcallip6tables1net。bridge。bridgenfcalliptables1sudosysctlsystem 时间同步sudoaptinstallntpdatesudontpdatetime。windows。com4。安装Dockercridockerdkubeadmkubeletkubectl(所有节点) 安装DockercesudoaptgetyinstallapttransporthttpscacertificatessoftwarepropertiescommonsudocurlfsSLhttps:mirrors。aliyun。comdockercelinuxubuntugpgsudoaptkeyaddsudoaddaptrepositorydeb〔archamd64〕https:mirrors。aliyun。comdockercelinuxubuntu(lsbreleasecs)stablesudoaptgetyupdatesudoaptgetyinstalldockerce配置镜像下载加速器sudovietcdockerdaemon。json{registrymirrors:〔https:b9pmyelo。mirror。aliyuncs。com〕,execopts:〔native。cgroupdriversystemd〕}sudosystemctldaemonreloadsudosystemctlrestartdockersudodockerinfo 安装cridockerdwgethttps:github。comMirantiscridockerdreleasesdownloadv0。2。6cridockerd0。2。6。30。ubuntufocalamd64。debsudodpkgicridockerd0。2。6。30。ubuntufocalamd64。deb指定依赖镜像地址sudoviusrlibsystemdsystemcridocker。serviceExecStartusrbincridockerdcontainerruntimeendpointfd:podinfracontainerimageregistry。aliyuncs。comgooglecontainerspause:latestsudosystemctldaemonreloadsudosystemctlenablecridockersudosystemctlrestartcridocker 安装kubeadm,kubelet和kubectl添加k8s的阿里云apt源sudoaptgetinstallyapttransporthttpscacertificatessudovietcaptsources。list。dkubernetes。listdebhttps:mirrors。aliyun。comkubernetesaptkubernetesxenialmainsudocurlhttps:mirrors。aliyun。comkubernetesaptdocaptkey。gpgsudoaptkeyadd开始安装sudoaptgetupdateysudoaptgetinstallykubeletkubeadmkubectlsudosystemctlenablekubelet。service5。部署KubernetesMaster 在192。168。11。13(Master)执行sudokubeadminitapiserveradvertiseaddress192。168。11。13imagerepositoryregistry。aliyuncs。comgooglecontainerskubernetesversionv1。25。4servicecidr10。96。0。012podnetworkcidr10。244。0。016crisocketunix:varruncridockerd。sockignorepreflighterrorsall 配置kubectl使用的连接k8s认证文件普通用户mkdirpHOME。kubesudocpietckubernetesadmin。confHOME。kubeconfigsudochown(idu):(idg)HOME。kubeconfig管理员(可加到环境变量)exportKUBECONFIGetckubernetesadmin。conf6。加入节点 在2台node节点上执行sudokubeadmjoin192。168。11。13:6443tokeno37091。z858bts6jmth9irzdiscoverytokencacerthashsha256:628a5b50227c93e465adc1ca380cf335e8f639c15c8a92892f9d22b71ac6c2accrisocketunix:varruncridockerd。sock 上面用到的token,默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,可以直接使用命令快捷生成:sudokubeadmtokencreateprintjoincommand 加入后在master查看工作节点tantianrantestbk8smaster:kubectlgetnodesNAMESTATUSROLESAGEVERSIONtestbk8smasterNotReadycontrolplane7m57sv1。25。4testbk8snode01NotReadynone14sv1。25。4testbk8snode02NotReadynone8sv1。25。4tantianrantestbk8smaster: 目前工作节点的状态为NotReady,是因为还没有部署网络插件,等部署完就会处于Ready。7。部署容器网络接口(CNI)Calico Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。下面开始部署Calico,在master上进行部署操作。 下载calico的YAML:wgethttps:docs。projectcalico。orgmanifestscalico。yaml 下载完后还需要修改里面定义Pod网络(CALICOIPV4POOLCIDR),与前面kubeadminit的podnetworkcidr指定的一样。 calico。yaml中CALICOIPV4POOLCIDR默认的配置如下:name:CALICOIPV4POOLCIDRvalue:192。168。0。016 取消注释,并修改成与前面kubeadminit的podnetworkcidr(10。244。0。016)指定的一样。name:CALICOIPV4POOLCIDRvalue:10。244。0。016 修改完后文件后,开始部署:部署calicokubectlapplyfcalico。yaml 接下来就是比较漫长的等待,等待多久取决于你的网速,如果网络的好的话,就会更快一点,因为它还要拉镜像,而且是3台节点都要拉取相关镜像,下面可以在master上查看位于kubesystem命名空间下的podtantianrantestbk8smaster:kubectlgetpodsnkubesystemNAMEREADYSTATUSRESTARTSAGEcalicokubecontrollers798cc86c47sg65n01Pending0111scaliconode9d2gz01Init:030111scaliconodecsnwt01Init:030111scaliconodeg7rk201Init:030111scorednsc676cc86fp2sgs01Pending019mcorednsc676cc86fpn5zk01Pending019metcdtestbk8smaster11Running019mkubeapiservertestbk8smaster11Running019mkubecontrollermanagertestbk8smaster11Running019mkubeproxy6bdwl11Running012mkubeproxyd8xgk11Running019mkubeproxylcw2n11Running011mkubeschedulertestbk8smaster11Running019mtantianrantestbk8smaster: 等calico的全部pod状态都为Running的时候,就成功了。到时候你再去查看node的状态,应该也会为Ready了。 刚才提到,在部署calico的过程中3台节点都需要拉取相关镜像,可以到其中1台Node上查看有没有镜像了:tantianrantestbk8snode02:sudodockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEregistry。aliyuncs。comgooglecontainerskubeproxyv1。25。42c2bc18642792weeksago61。7MBcalicocniv3。24。5628dd70880412weeksago198MBcaliconodev3。24。554637cb36d4a2weeksago226MBregistry。aliyuncs。comgooglecontainerspauselatest350b164e7ae18yearsago240kBtantianrantestbk8snode02: 经过一小段时间等待后,calico相关的pod已经都为Running了tantianrantestbk8smaster:kubectlgetpodsnkubesystemNAMEREADYSTATUSRESTARTSAGEcalicokubecontrollers798cc86c47sg65n11Running07m45scaliconode9d2gz11Running07m45scaliconodecsnwt11Running07m45scaliconodeg7rk211Running07m45scorednsc676cc86fp2sgs11Running025mcorednsc676cc86fpn5zk11Running025metcdtestbk8smaster11Running025mkubeapiservertestbk8smaster11Running025mkubecontrollermanagertestbk8smaster11Running025mkubeproxy6bdwl11Running017mkubeproxyd8xgk11Running025mkubeproxylcw2n11Running017mkubeschedulertestbk8smaster11Running025mtantianrantestbk8smaster: 继续查看工作节点的状态,也是Ready状态了tantianrantestbk8smaster:kubectlgetnodesNAMESTATUSROLESAGEVERSIONtestbk8smasterReadycontrolplane26mv1。25。4testbk8snode01Readynone19mv1。25。4testbk8snode02Readynone19mv1。25。4tantianrantestbk8smaster: 到此为止!CNI网络插件calico就已经完成部署啦!8。部署Dashboard Dashboard是官方提供的一个UI,可用于基本管理K8s资源,也是在master上进行部署操作。github项目地址:https:github。comkubernetesdashboard YAML下载地址:wgethttps:raw。githubusercontent。comkubernetesdashboardv2。7。0aiodeployrecommended。yaml 默认Dashboard只能集群内部访问,下载yaml文件后,修改Service为NodePort类型,暴露到外部:kind:ServiceapiVersion:v1metadata:labels:k8sapp:kubernetesdashboardname:kubernetesdashboardnamespace:kubernetesdashboardspec:ports:port:443targetPort:8443nodePort:30001增加这个(等会我们访问UI的端口)selector:k8sapp:kubernetesdashboardtype:NodePort增加这个(让每个节点都可访问) 开始部署kubectlapplyfrecommended。yaml 这时候,也是需要等待到dashboard相关的pod为Running的状态,它也是要拉镜像,可查看命名空间kubernetesdashboard下的pod:tantianrantestbk8smaster:kubectlgetpodsnkubernetesdashboardNAMEREADYSTATUSRESTARTSAGEdashboardmetricsscraper64bcc67c9cnnzqv01ContainerCreating017skubernetesdashboard5c8bd6b59blpgm01ContainerCreating017stantianrantestbk8smaster: 等待后,再次查看,dashboard相关的pod已经为Running的状态,说明已经部署好tantianrantestbk8smaster:kubectlgetpodsnkubernetesdashboardNAMEREADYSTATUSRESTARTSAGEdashboardmetricsscraper64bcc67c9cnnzqv11Running02mkubernetesdashboard5c8bd6b59blpgm11Running02m 接下来就可以访问任意节点的30001端口访问UI,记得是用https哦https:192。168。11。13:30001loginhttps:192。168。11。14:30001loginhttps:192。168。11。15:30001login 创建登录UI的tokenkubectlcreateserviceaccountdashboardadminnkubernetesdashboardkubectlcreateclusterrolebindingdashboardadminclusterroleclusteradminserviceaccountkubernetesdashboard:dashboardadminkubectlcreatetokendashboardadminnkubernetesdashboard 将创建好的token复制进去即可完成登录 最后说明一下,以后所有yaml文件都只在Master节点执行(部署操作),切记! 二、CentOS7环境1。测试环境机器规划 角色 主机名 IP地址 master testak8smaster 192。168。11。10 node testak8snode01 192。168。11。11 node testak8snode02 192。168。11。122。软件环境版本 软件 版本 OS CentOSLinuxrelease7。9。2009 Docker Dockerversion20。10。21 Kubernetes v1。25。43。操作系统初始化配置(所有节点) 3。1关闭防火墙systemctlstopfirewalldsystemctldisablefirewalld 3。2关闭selinuxsedisenforcingdisabledetcselinuxconfig永久setenforce0临时 3。3关闭swapswapoffa临时sedris。swap。etcfstab永久 3。4根据规划设置主机名hostnamectlsethostnamehostname 3。5在master添加hostscatetchostsEOF192。168。11。10testak8smaster192。168。11。11testak8snode01192。168。11。12testak8snode02EOF 3。6将桥接的IPv4流量传递到iptables的链catetcsysctl。dk8s。confEOFnet。bridge。bridgenfcallip6tables1net。bridge。bridgenfcalliptables1EOFsysctlsystem生效 3。7时间同步yuminstallntpdateyntpdatetime。windows。comntpdatentp1。aliyun。com阿里云时钟服务4。安装Dockerkubeadmkubeletcridockerd(所有节点) 4。1安装Dockercewgethttps:mirrors。aliyun。comdockercelinuxcentosdockerce。repoOetcyum。repos。ddockerce。repoyumyinstalldockercesystemctlenabledockersystemctlstartdocker 4。2配置镜像下载加速器catetcdockerdaemon。jsonEOF{registrymirrors:〔https:b9pmyelo。mirror。aliyuncs。com〕,execopts:〔native。cgroupdriversystemd〕}EOFsystemctlrestartdockerdockerinfo 4。3安装cridockerdwgethttps:github。comMirantiscridockerdreleasesdownloadv0。2。6cridockerd0。2。63。el7。x8664。rpmrpmivhcridockerd0。2。63。el7。x8664。rpm 4。4指定依赖镜像地址 在cridocker。service配置中的fd:后面增加podinfracontainerimageregistry。aliyuncs。comgooglecontainerspause:3。7说明:pause:3。7也可以指向最新的版本pause:latestviusrlibsystemdsystemcridocker。service内容:ExecStartusrbincridockerdcontainerruntimeendpointfd:podinfracontainerimageregistry。aliyuncs。comgooglecontainerspause:3。7systemctldaemonreloadsystemctlenablecridockersystemctlstartcridocker 4。5添加阿里云YUM软件源catetcyum。repos。dkubernetes。repoEOF〔kubernetes〕nameKubernetesbaseurlhttps:mirrors。aliyun。comkubernetesyumreposkubernetesel7x8664enabled1gpgcheck0repogpgcheck0gpgkeyhttps:mirrors。aliyun。comkubernetesyumdocyumkey。gpghttps:mirrors。aliyun。comkubernetesyumdocrpmpackagekey。gpgEOF 4。6安装kubeadm,kubelet和kubectlyuminstallykubelet1。25。4kubeadm1。25。4kubectl1。25。4systemctlenablekubelet。service这里仅设置enable,后续部署的时候会自动交由kubeadm拉起5。部署KubernetesMaster 在192。168。11。10(Master)执行kubeadminitapiserveradvertiseaddress192。168。11。10imagerepositoryregistry。aliyuncs。comgooglecontainerskubernetesversionv1。25。4servicecidr10。96。0。012podnetworkcidr10。244。0。016crisocketunix:varruncridockerd。sockignorepreflighterrorsall 在进行更改之前,运行一些列检查,验证系统状态,有些检查只会触发警告,有些检查会被视为错误并退出kubeadm,因此使用ignorepreflighterrorsall忽略检查中的错误。 初始化完成之后,最后会出现下面这样的提示:YourKubernetescontrolplanehasinitializedsuccessfully!Tostartusingyourcluster,youneedtorunthefollowingasaregularuser:要开始使用集群,您需要以普通用户身份运行以下命令:mkdirpHOME。kubesudocpietckubernetesadmin。confHOME。kubeconfigsudochown(idu):(idg)HOME。kubeconfigAlternatively,ifyouaretherootuser,youcanrun:或者,如果您是root用户,则可以运行:exportKUBECONFIGetckubernetesadmin。confYoushouldnowdeployapodnetworktothecluster。Runkubectlapplyf〔podnetwork〕。yamlwithoneoftheoptionslistedat:https:kubernetes。iodocsconceptsclusteradministrationaddonsThenyoucanjoinanynumberofworkernodesbyrunningthefollowingoneachasroot:记住这个join命令,后面用,作用是在node节点运行这条命令,加入集群kubeadmjoin192。168。11。10:6443tokenpk474p。uvc65opv1zs625lqdiscoverytokencacerthashsha256:c14439c309345c6a02340bb7df74108c4cde6e0f8393f45a123f347f11b98b576。配置kubectl使用的连接k8s认证文件普通用户要开始使用集群,您需要以普通用户身份运行以下命令:mkdirpHOME。kubesudocpietckubernetesadmin。confHOME。kubeconfigsudochown(idu):(idg)HOME。kubeconfig或者,如果您是root用户,则可以运行(可以加入到环境变量):exportKUBECONFIGetckubernetesadmin。conf 查看工作节点〔roottestak8smaster〕kubectlgetnodesNAMESTATUSROLESAGEVERSIONtestak8smasterNotReadycontrolplane12mv1。25。4〔roottestak8smaster〕 由于网络插件还没有部署,还没有准备就绪NotReady,先继续7。加入KubernetesNode 向集群添加新节点,执行在kubeadminit输出的kubeadmjoin命令并手动加上crisocketunix:varruncridockerd。sock在2台node上运行(192。168。11。11、192。168。11。12)kubeadmjoin192。168。11。10:6443tokenpk474p。uvc65opv1zs625lqdiscoverytokencacerthashsha256:c14439c309345c6a02340bb7df74108c4cde6e0f8393f45a123f347f11b98b57crisocketunix:varruncridockerd。sock 上面用到的token,默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,可以直接使用命令快捷生成:kubeadmtokencreateprintjoincommand8。部署容器网络接口(CNI)Calico Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。下面开始部署Calico,在master上进行部署操作。 下载calico的YAML:wgethttps:docs。projectcalico。orgmanifestscalico。yaml 下载完后还需要修改里面定义Pod网络(CALICOIPV4POOLCIDR),与前面kubeadminit的podnetworkcidr指定的一样。 calico。yaml中CALICOIPV4POOLCIDR默认的配置如下:name:CALICOIPV4POOLCIDRvalue:192。168。0。016 取消注释,并修改成与前面kubeadminit的podnetworkcidr指定的一样。name:CALICOIPV4POOLCIDRvalue:10。244。0。016 修改完后文件后,开始部署:部署calicokubectlapplyfcalico。yaml查看kubesystem命名空间下的pod〔roottestak8smaster〕kubectlgetpodsnkubesystemNAMEREADYSTATUSRESTARTSAGEcalicokubecontrollers798cc86c47pd8zc01ContainerCreating082scaliconoded54c901Init:03082scaliconodeprpdl01Init:03082scaliconoderkwzv11Running082scorednsc676cc86fkw9v811Running026mcorednsc676cc86fvfwz711Running026metcdtestak8smaster11Running026mkubeapiservertestak8smaster11Running026mkubecontrollermanagertestak8smaster11Running026mkubeproxykv9rx11Running026mkubeproxyqphqt01ContainerCreating011mkubeproxyz5fjm01ContainerCreating011mkubeschedulertestak8smaster11Running026m〔roottestak8smaster〕 说明:以后所有yaml文件都只在Master节点执行。 等CalicoPod都Running,节点也会准备就绪。 再次查看工作节点,已经为Ready状态〔roottestak8smaster〕kubectlgetnodesNAMESTATUSROLESAGEVERSIONtestak8smasterReadycontrolplane13mv1。25。4testak8snode01Readynone8m43sv1。25。4testak8snode02Readynone7m57sv1。25。4〔roottestak8smaster〕9。部署Dashboard Dashboard是官方提供的一个UI,可用于基本管理K8s资源,github项目地址:https:github。comkubernetesdashboard YAML下载地址:wgethttps:raw。githubusercontent。comkubernetesdashboardv2。7。0aiodeployrecommended。yaml 默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:kind:ServiceapiVersion:v1metadata:labels:k8sapp:kubernetesdashboardname:kubernetesdashboardnamespace:kubernetesdashboardspec:ports:port:443targetPort:8443nodePort:30001增加这个(等会我们访问UI的端口)selector:k8sapp:kubernetesdashboardtype:NodePort增加这个(让每个节点都可访问) 开始部署kubectlapplyfrecommended。yaml 查看命名空间kubernetesdashboard下的pod〔roottestak8smaster〕kubectlgetpodsnkubernetesdashboardNAMEREADYSTATUSRESTARTSAGEdashboardmetricsscraper64bcc67c9c4jvvw01ContainerCreating040skubernetesdashboard5c8bd6b59v7nvm11Running040s〔roottestak8smaster〕 等dashboard的pod状态都为running时,就完成了 创建登录UI的tokenkubectlcreateserviceaccountdashboardadminnkubernetesdashboardkubectlcreateclusterrolebindingdashboardadminclusterroleclusteradminserviceaccountkubernetesdashboard:dashboardadminkubectlcreatetokendashboardadminnkubernetesdashboard 访问任意节点的30001的端口都可以登录UI:https:192。168。11。10:30001loginhttps:192。168。11。11:30001loginhttps:192。168。11。12:30001login 将创建好的token复制进去即可完成登录。 本文转载于(喜欢的盆友关注我们哦):https:mp。weixin。qq。comsF504vm7xbom4rY7lgdhKw