K8S部署
本文采用kubeadm方式部署Kubernetes1。24。6,后期也将发布二进制方式部署。一、Kubernetes1。24版本发布及改动1。1Kubernetes1。24发布
k8s1。24于2022年5月3日正式发布,新版本中优化了12项功能并更新到了稳定版本,StatefulSets支持批量滚动,NetworkPolicy新增NetworkPolicyStatus字段方便进行故障排查等。1。2Kubernetes1。24改动
Kubernetesv1。24移除了对dockershim的支持,需要安装cridockerd,用于为DockerEngine提供一个能够支持到CRI规范的垫片,从而能够让Kubernetes基于CRI控制Docker。二、Kubernetes1。24。6集群部署2。1Kubernetes1。24。6集群部署环境准备2。1。1主机操作系统说明
本文档选用ubuntu18。04。1,建议升级内核5。4以上rootk8smaster01:unameaLinuxk8smaster015。4。0112generic12618。04。1UbuntuSMPWedMay1115:57:56UTC2022x8664x8664x8664GNULinux
2。1。2主机硬件配置说明
角色
IP
主机名
CPU
内存
硬盘
master
11。0。1。21
k8smaster01
2C
4G
50GB
worker
11。0。1。31
k8snode01
2C
4G
50GB
worker
11。0。1。32
k8snode02
2C
4G
50GB2。1。3主机配置2。1。3。1主机名配置
由于本次使用3台主机完成kubernetes集群部署,其中1台为master节点,名称为k8smaster01;其中2台为worker节点,名称分别为:k8snode01及k8snode02master节点hostnamectlsethostnamek8smaster01worker01节点hostnamectlsethostnamek8snode01worker02节点hostnamectlsethostnamek8snode022。1。3。2主机IP地址配置k8smaster01节点IP地址为:11。0。1。2124rootmaster01:optvimetcnetplan00installerconfig。yamlThisisthenetworkconfigwrittenbysubiquitynetwork:ethernets:ens33:addresses:11。0。1。2124gateway4:11。0。1。2nameservers:addresses:223。5。5。5search:〔〕version:2node01节点IP地址为:11。0。1。3124vimetcnetplan00installerconfig。yamlThisisthenetworkconfigwrittenbysubiquitynetwork:ethernets:ens33:addresses:11。0。1。3124gateway4:11。0。1。2nameservers:addresses:223。5。5。5search:〔〕version:2node02节点IP地址为:11。0。1。3224vimetcnetplan00installerconfig。yamlThisisthenetworkconfigwrittenbysubiquitynetwork:ethernets:ens33:addresses:11。0。1。3224gateway4:11。0。1。2nameservers:addresses:223。5。5。5search:〔〕version:22。1。3。3主机名与IP地址解析
所有集群主机均需要进行配置。catetchosts127。0。0。1localhostThefollowinglinesaredesirableforIPv6capablehosts11。0。1。21k8smaster0111。0。1。31k8snode0111。0。1。32k8snode022。1。3。4时间同步配置
所有主机均需要操作。最小化安装系统需要安装ntpdate软件。rootk8smaster01:crontabl01usrsbinntpdatetime1。aliyun。com2。1。3。5内核调整
所有主机均需要操作。添加网桥过滤及内核转发配置文件catetcsysctl。dk8s。confEOFnet。bridge。bridgenfcallip6tables1net。bridge。bridgenfcalliptables1net。ipv4。ipforward1vm。swappiness0EOF临时加载brnetfilter模块modprobeoverlaymodprobebrnetfilter永久性加载模块rootk8smaster01:catetcmodulesload。dcontainerd。confEOFoverlaybrnetfilterEOF查看是否加载rootk8smaster01:lsmodgrepbrnetfilterbrnetfilter222560bridge1513361brnetfilter2。1。3。6安装ipset及ipvsadm
所有主机均需要操作。安装ipset及ipvsadmrootk8smaster01:aptyinstallipsetipvsadm配置ipvsadm模块加载方式添加需要加载的模块rootk8smaster01:mkdirpetcsysconfigmodulesrootk8smaster01:catetcsysconfigmodulesipvs。modulesEOF!binbashmodprobeipvsmodprobeipvsrrmodprobeipvswrrmodprobeipvsshmodprobenfconntrackEOF授权、运行、检查是否加载rootk8smaster01:chmod755etcsysconfigmodulesipvs。modulesbashetcsysconfigmodulesipvs。moduleslsmodgrepeipvsenfconntrack2。1。3。7关闭SWAP分区
修改完成后需要重启操作系统,如不重启,可临时关闭,命令为swapoffarootk8smaster01:swapoffa、、临时关闭rootk8smaster01:sediswapsetcfstab、、永远关闭swap分区,需要重启操作系统rootk8smaster01:catetcfstab。。。。。。devmappercentosswapswapswapdefaults00在上一行中行首添加2。1。4配置docker和kubernetes源
配置docker和kubernetes源修改为aliyun源k8s源:rootk8smaster01:aptgetupdateaptgetinstallyapttransporthttpsrootk8smaster01:curlhttps:mirrors。aliyun。comkubernetesaptdocaptkey。gpgaptkeyaddrootk8smaster01:catEOFetcaptsources。list。dkubernetes。listdebhttps:mirrors。aliyun。comkubernetesaptkubernetesxenialmainEOFrootk8smaster01:aptgetupdateydocker源:rootk8smaster01:aptgetyinstallapttransporthttpscacertificatescurlsoftwarepropertiescommonrootk8smaster01:curlfsSLhttps:mirrors。aliyun。comdockercelinuxubuntugpgsudoaptkeyaddrootk8smaster01:addaptrepositorydeb〔archamd64〕https:mirrors。aliyun。comdockercelinuxubuntu(lsbreleasecs)stablerootk8smaster01:aptgetyupdate2。1。5安装dockerrootk8smaster01:atpinstallydockerce5:20。10。1830ubuntubionicrootk8smaster01:systemctlenablenowdocker在etcdockerdaemon。json添加如下内容rootk8smaster01:catetcdockerdaemon。json{execopts:〔native。cgroupdriversystemd〕}rootk8smaster01:systemctldaemonreloadrootk8smaster01:systemctlrestartdocker2。1。5。1安装cridockerd安装下载cridockeredrootk8smaster01:curlLOhttps:github。comMirantiscridockerdreleasesdownloadv0。2。5cridockerd0。2。5。30。ubuntufocalamd64。deb安装rootk8smaster01:dpkgicridockerd0。2。5。30。ubuntufocalamd64。deb修改启动文件rootk8smaster01:vimlibsystemdsystemcridocker。service修改ExecStart行如下添加podinfracontainerimageregistry。aliyuncs。comgooglecontainerspause:3。7ExecStartusrbincridockerdcontainerruntimeendpointfd:podinfracontainerimageregistry。aliyuncs。comgooglecontainerspause:3。7systemctldaemonreloadsystemctlrestartcridocker。service2。1。6kubeadm、kubelet和kubectlrootk8smaster01:aptinstallykubeadm1。24。600kubelet1。24。600kubectl1。24。6002。1。6。1准备Kubernetes初始化所需镜像(修改国内镜像,科学上网跳过)查看镜像:rootk8smaster01:kubeadmconfigimageslistimagerepositoryregistry。aliyuncs。comgooglecontainersregistry。aliyuncs。comgooglecontainerskubeapiserver:v1。24。6registry。aliyuncs。comgooglecontainerskubecontrollermanager:v1。24。6registry。aliyuncs。comgooglecontainerskubescheduler:v1。24。6registry。aliyuncs。comgooglecontainerskubeproxy:v1。24。6registry。aliyuncs。comgooglecontainerspause:3。7registry。aliyuncs。comgooglecontainersetcd:3。5。30registry。aliyuncs。comgooglecontainerscoredns:v1。8。6拉取镜像:rootk8smaster01:kubeadmconfigimagespullkubernetesversionv1。24。6nodenamek8smaster01imagerepositoryregistry。aliyuncs。comgooglecontainerscrisocketunix:runcridockerd。sockArootk8smaster01:dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEregistry。aliyuncs。comgooglecontainerskubeapiserverv1。24。6860f263331c92monthsago130MBregistry。aliyuncs。comgooglecontainerskubeproxyv1。24。60bb39497ab332monthsago110MBregistry。aliyuncs。comgooglecontainerskubecontrollermanagerv1。24。6c6c20157a4232monthsago119MBregistry。aliyuncs。comgooglecontainerskubeschedulerv1。24。6c786c777a4e12monthsago51MBregistry。aliyuncs。comgooglecontainersetcd3。5。30aebe758cef4c7monthsago299MBregistry。aliyuncs。comgooglecontainerspause3。7221177c6082a8monthsago711kBregistry。aliyuncs。comgooglecontainerscorednsv1。8。6a4ca41631cc713monthsago46。8MB
注:以上操作master节点和worker节点都需要配置。2。2集群初始化rootk8smaster01:kubeadminitkubernetesversionv1。24。6nodenamek8smaster01podnetworkcidr10。244。0。016servicecidr10。96。0。012crisocketunix:runcridockerd。sockimagerepositoryregistry。aliyuncs。comgooglecontainersuploadcerts出现以下表示成功。。。。。。。。。。。。。YourKubernetescontrolplanehasinitializedsuccessfully!Tostartusingyourcluster,youneedtorunthefollowingasaregularuser:mkdirpHOME。kubesudocpietckubernetesadmin。confHOME。kubeconfigsudochown(idu):(idg)HOME。kubeconfigAlternatively,ifyouaretherootuser,youcanrun:exportKUBECONFIGetckubernetesadmin。conf。。。。。。。。。。。。。。。。。。。如果有工作节点,先在工作节点执行,再在control节点执行下面操作kubeadmresetfcrisocketunix:runcridockerd。sockrmrfetccninet。dHOME。kubeconfig2。3在k8smaster01节点生成kubectl命令的授权文件rootk8smaster01:mkdirpHOME。kuberootk8smaster01:cpietckubernetesadmin。confHOME。kubeconfigrootk8smaster01:chown(idu):(idg)HOME。kubeconfigrootk8smaster01:exportKUBECONFIGetckubernetesadmin。conf2。4实现kubectl命令补全kubectl命令功能丰富,默认不支持命令补会,可以用下面方式实现rootk8smaster01:kubectlcompletionbashetcprofile。dkubectlcompletion。sh。etcprofile。dkubectlcompletion。shexitrootk8smaster01:kubectlgetnodesNAMESTATUSROLESAGEVERSIONk8smaster01NotReadycontrolplane17mv1。24。62。5安装网络插件
本次使用calico部署集群网络2。5。1calico安装
Calico有两种安装方式:使用calico。yaml清单文件安装(本次采用)使用TigeraCalicoOperator安装Calico(官方最新指导)2。5。1。1使用calico。yaml清单文件安装
rootk8smaster01:wgethttps:raw。githubusercontent。comprojectcalicocalicov3。24。1manifestscalico。yaml修改镜像的地址rootk8smaster01:sedisdocker。iogcalico。yamlrootk8smaster01:kubectlapplyfcalico。yaml注意污点:若calicokubecontrollers节点一直挂起可以删除该节点后自动创建新节点
验证成功rootk8smaster01:kubectlgetpodnkubesystemNAMEREADYSTATUSRESTARTSAGEcalicokubecontrollers6799f5f4b4nrc7p11Running13(19hago)56dcaliconode5xllg11Running9(19hago)56dcaliconodekjrhc11Running8(19hago)56dcaliconodelrnd811Running1(19hago)20hcoredns74586cf9b6dl8bz11Running9(19hago)56dcoredns74586cf9b6rvzlq11Running9(19hago)56detcdk8smaster0111Running9(19hago)56dkubeapiserverk8smaster0111Running4(19hago)56dkubecontrollermanagerk8smaster0111Running15(19hago)56dkubeproxydl7pc11Running1(19hago)20hkubeproxynhlxp11Running8(19hago)56dkubeproxys7jv711Running9(19hago)56dkubeschedulerk8smaster0111Running16(19hago)56d
查看集群状态:rootk8smaster01:kubectlgetnodesNAMESTATUSROLESAGEVERSIONk8smaster01Readycontrolplane56dv1。24。62。6集群添worker工作节点rootk8snode01:kubeadmjoin11。0。1。21:6443tokentb80qx。ce0k28l6bhsxcdtldiscoverytokencacerthashsha256:6ffda531131e163655b68f4b1a09a5d37bc490400fa9cc0f740265283edddeb3crisocketunix:runcridockerd。sockrootk8snode02:kubeadmjoin11。0。1。21:6443tokentb80qx。ce0k28l6bhsxcdtldiscoverytokencacerthashsha256:6ffda531131e163655b68f4b1a09a5d37bc490400fa9cc0f740265283edddeb3crisocketunix:runcridockerd。sock2。7验证集群可用性rootk8smaster01:kubectlgetnodesNAMESTATUSROLESAGEVERSIONk8smaster01Readycontrolplane56dv1。24。6k8snode01Readynone56dv1。24。6k8snode02Readynone20hv1。24。6rootk8smaster01:kubectlgetcsWarning:v1ComponentStatusisdeprecatedinv1。19NAMESTATUSMESSAGEERRORcontrollermanagerHealthyokschedulerHealthyoketcd0Healthy{health:true,reason:}