应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

GitlabJenkinsDockerHarborK8s集群

  写在前面聊聊CICD的环境搭建以及一个基于Hexo的博客系统在CICD流程中的配置Demo很早就想着写这样一篇博文,但是没有时间,之前写了一半,正好春节假期把剩下的一般写完。本文属于Devpos实战类文章,基本没有理论,所有,小伙伴需要对devops有些基本的了解,博文中讲的CICD属于Devops的一部分当然小伙伴们也可以找一些云服务商提供的商业的Depops平台去学习,一般有免费的体验,比如华为云的软开云平台。博文涉及内容:GitlabJenkinsDockerHarborK8S集群的CICD搭建教程在搭建好的CICD平台上持续集成部署hexo博客系统,Demo有些简陋,仅用于学习。其中GitlabJenkinsHarbor都是通过容器化部署篇幅有限,关于CD环境k8s集群这里用之前部署好的,并且已经做了kubeconfig证书,关于这方便感兴趣小伙伴可以看看我之前的文章下面为涉及到的机器:
  用到的机器
  ip
  域名
  客户机
  192。168。26。1
  本地物理机:
  GitlabJenkinsDocker
  192。168。26。55
  虚机:liruilongs。github。io
  docker镜像仓库:harbor
  192。168。26。56
  虚机:vms56。liruilongs。github。io
  k8s集群master节点
  192。168。26。81
  虚机:vms81。liruilongs。github。io
  k8s集群node节点
  192。168。26。82
  虚机:vms82。liruilongs。github。io
  k8s集群node节点
  192。168。26。83
  虚机:vms83。liruilongs。github。io
  拓扑图
  这里客户机用本地的IDE持续编码,然后push代码到gitlab,gitlab中的web钩子触发jenkins中配置好的构建触发器,通过shell命令拉取gitlab仓库中的代码,然后通过拉取的应用源码和Dockerfile文件来构建应用镜像,构建完成后将应用镜像push到harbor私有镜像仓库,然后通过shell命令的方式在jenkins中用kubelet客户端将镜像从私有仓库拉取到k8s集群并更新其deploy中的镜像,默认deploy更新副本的方式为滚动更新,整个流程中,只有客户机push代码是手手动的方式,其他全是自动
  上帝借由各种途径使人变得孤独,好让我们可以走向自己。赫尔曼黑塞《德米安》一、CICD服务器环境搭建
  CI即为持续集成(ContinueIntegration,简称CI),用通俗的话讲,就是持续的整合版本库代码编译后制作应用镜像。建立有效的持续集成环境可以减少开发过程中一些不必要的问题、提高代码质量、快速迭代等,
  常用的工具和平台有:
  Jenkins:基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
  Bamboo:是一个企业级商用软件,可以部署在大规模生产环境中。
  CD即持续交付ContinuousDelivery和持续部署ContinuousDeployment,用通俗的话说,即可以持续的部署到生产环境给客户使用,这里分为两个阶段,持续交付我理解为满足上线条件的过程,但是没有上线,持续部署,即为上线应用的过程
  关于CD环境,我们使用以前搭建好的K8s集群,K8s集群可以实现应用的健康检测,动态扩容,滚动更新等优点,关于K8s集群的搭建,小伙伴可以看看我的其他文章
  我们来搭建CI服务器:操作服务器:liruilongs。github。io:192。168。26。55docker环境安装
  拉取镜像,启动并设置开机自启〔rootliruilongs。github。io〕〔〕yumyinstalldockerce〔rootliruilongs。github。io〕〔〕systemctlenabledockernow
  配置docker加速器sudomkdirpetcdockersudoteeetcdockerdaemon。jsonEOF{registrymirrors:〔https:2tefyfv7。mirror。aliyuncs。com〕}EOFsudosystemctldaemonreloadsudosystemctlrestartdocker1。安装GitLab并配置
  GitLab不多介绍。一个基于Git的版本控制平台,,提供了Git仓库管理、代码审查、问题跟踪、活动反馈和wiki,当然同时也提供了〔rootliruilongs。github。io〕〔〕dockerpullbeginorgitlabce
  创建共享卷目录〔rootliruilongs。github。io〕〔〕mkdirpdatagitlabetcdatagitlablogdatagitlabdata〔rootliruilongs。github。io〕〔〕chmod777datagitlabetcdatagitlablogdatagitlabdata创建gitlab容器〔rootliruilongs。github。io〕〔〕dockerrunitdnamegitlabrestartalwaysprivilegedtruep8443:443p80:80p222:22vdatagitlabetc:etcgitlabvdatagitlablog:varloggitlabvdatagitlabdata:varoptgitlabbeginorgitlabceacc95b2896e8475915275d5eb77c7e63f63c31536432b68508f2f216d4fec634〔rootliruilongs。github。io〕〔〕dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESacc95b2896e8beginorgitlabceassetswrapper53secondsagoUp51seconds(health:starting)0。0。0。0:8080tcp,:::8080tcp,0。0。0。0:22222tcp,:::22222tcp,0。0。0。0:8443443tcp,:::8443443tcpgitlab〔rootliruilongs。github。io〕〔〕〔rootliruilongs。github。io〕〔〕
  切记:这里的端口要设置成80,要不push项目会提示没有报错,如果宿主机端口被占用,需要把这个端口腾出来关闭容器修改配置文件〔rootliruilongs。github。io〕〔〕dockerstopgitlabgitlab
  externalurlhttp:192。168。26。55’〔rootliruilongs。github。io〕〔〕catdatagitlabetcgitlab。rbgrepexternalurl!Formoredetailsonconfiguringexternalurlsee:externalurlGENERATEDEXTERNALURLregistryexternalurlhttps:registry。gitlab。example。compagesexternalurlhttp:pages。example。comgitlabpages〔artifactsserverurl〕nilDefaultstoexternalurlapiv4mattermostexternalurlhttp:mattermost。example。com〔rootliruilongs。github。io〕〔〕sediexternalurlGENERATEDEXTERNALURLaexternalurlhttp:192。168。26。55datagitlabetcgitlab。rb〔rootliruilongs。github。io〕〔〕catdatagitlabetcgitlab。rbgrepexternalurl!Formoredetailsonconfiguringexternalurlsee:externalurlGENERATEDEXTERNALURLexternalurlhttp:192。168。26。55registryexternalurlhttps:registry。gitlab。example。compagesexternalurlhttp:pages。example。comgitlabpages〔artifactsserverurl〕nilDefaultstoexternalurlapiv4mattermostexternalurlhttp:mattermost。example。com〔rootliruilongs。github。io〕〔〕
  gitlabrails〔‘gitlabsshhost’〕192。168。26。55’〔rootliruilongs。github。io〕〔〕catdatagitlabetcgitlab。rbgrepgitlabsshhostgitlabrails〔gitlabsshhost〕ssh。hostexample。com〔rootliruilongs。github。io〕〔〕sedigitlabsshhostagitlabrails〔gitlabsshhost〕192。168。26。55datagitlabetcgitlab。rb〔rootliruilongs。github。io〕〔〕catdatagitlabetcgitlab。rbgrepgitlabsshhostgitlabrails〔gitlabsshhost〕ssh。hostexample。comgitlabrails〔gitlabsshhost〕192。168。26。55〔rootliruilongs。github。io〕〔〕
  gitlabrails〔gitlabshellsshport〕222〔rootliruilongs。github。io〕〔〕catdatagitlabetcgitlab。rbgrepgitlabshellsshgitlabrails〔gitlabshellsshport〕22〔rootliruilongs。github。io〕〔〕sedigitlabshellsshportagitlabrails〔gitlabshellsshport〕222datagitlabetcgitlab。rb〔rootliruilongs。github。io〕〔〕catdatagitlabetcgitlab。rbgrepgitlabshellsshgitlabrails〔gitlabshellsshport〕22gitlabrails〔gitlabshellsshport〕222〔rootliruilongs。github。io〕〔〕〔rootliruilongs。github。io〕〔〕vimdatagitlabdatagitlabrailsetcgitlab。yml〔rootliruilongs。github。io〕〔〕gitlab:Webserversettings(note:hostistheFQDN,donotincludehttp:)host:192。168。26。55port:80https:false
  修改完配置文件之后。直接启动容器〔rootliruilongs。github。io〕〔〕dockerstartgitlab
  在宿主机所在的物理机访问,http:192。168。26。55,会自动跳转到修改密码(root用户),如果密码设置的没有满足一定的复杂性,则会报500,需要从新设置
  登录进入仪表盘
  然后我们简单测试一下,push一个项目上去,这里的项目是一个基于hexo的博客系统
  项目成功上传Gitlab
  相关的git命令PSF:bloggergitinitInitializedemptyGitrepositoryinF:blogger。gitPSF:bloggergitconfigglobaluser。nameAdministratorPSF:bloggergitconfigglobaluser。emailadminexample。comPSF:bloggergitremoteaddoriginhttp:192。168。26。55rootblog。gitPSF:bloggergitadd。PSF:bloggergitcommitmInitialcommitPSF:bloggergitpushuoriginmasterEnumeratingobjects:322,done。Countingobjects:100(322322),done。Deltacompressionusingupto8threadsCompressingobjects:100(302302),done。Writingobjects:100(322322),11。31MiB9。22MiBs,done。Total322(delta24),reused0(delta0)remote:Resolvingdeltas:100(2424),done。Tohttp:192。168。26。55rootblog。git〔newbranch〕mastermasterBranchmastersetuptotrackremotebranchmasterfromorigin。PSF:blogger2。安装配置远程镜像仓库harbor
  下面我们要配置私有的docker镜像仓库,用到的机器为:
  操作服务器:vms56。liruilongs。github。io:192。168。26。56
  这里仓库我们选择harbor,因为有web页面,当然也可以使用registryharbor的配置
  harbor的安装使用步骤
  安装并启动docker并安装dockercompose
  上传harbor的离线包
  导入harbor的镜像
  编辑harbor。yml
  修改hostname为自己的主机名,不用证书需要注释掉https
  harboradminpassword登录密码
  安装compose
  运行脚本。install。sh
  在浏览器里输入IP访问
  dockerloginIP家目录下会有一个。docker文件夹
  下面我们开始安装
  首先需要设置selinux、防火墙〔rootvms56。liruilongs。github。io〕〔〕getenforceDisabled〔rootvms56。liruilongs。github。io〕〔〕systemctldisablefirewalld。servicenowRemovedsymlinketcsystemdsystemmultiuser。target。wantsfirewalld。service。Removedsymlinketcsystemdsystemdbusorg。fedoraproject。FirewallD1。service。
  安装并启动docker并安装dockercompose,关于dockercompose,这里不用了解太多,一个轻量的docker编排工具〔rootvms56。liruilongs。github。io〕〔〕yuminstallydockerce〔rootvms56。liruilongs。github。io〕〔〕yuminstallydockercompose
  解压harbor安装包:harborofflineinstallerv2。0。6。tgz,导入相关镜像〔rootvms56。liruilongs。github。io〕〔〕lsbindevharborofflineinstallerv2。0。6。tgzlibmachineidmntprocrunsrvtmpvarbootetchomelib64mediaoptrootsbinsysusr〔rootvms56。liruilongs。github。io〕〔〕tarzxvfharborofflineinstallerv2。0。6。tgzharborharbor。v2。0。6。tar。gzharborprepareharborLICENSEharborinstall。shharborcommon。shharborharbor。yml。tmpl〔rootvms56。liruilongs。github。io〕〔〕dockerloadiharborharbor。v2。0。6。tar。gz
  修改配置文件〔rootvms56。liruilongs。github。io〕〔〕cdharbor〔rootvms56。liruilongs。github。io〕〔harbor〕lscommon。shharbor。v2。0。6。tar。gzharbor。yml。tmplinstall。shLICENSEprepare〔rootvms56。liruilongs。github。io〕〔harbor〕cpharbor。yml。tmplharbor。yml〔rootvms56。liruilongs。github。io〕〔harbor〕lscommon。shharbor。v2。0。6。tar。gzharbor。ymlharbor。yml。tmplinstall。shLICENSEprepare〔rootvms56。liruilongs。github。io〕〔harbor〕vimharbor。yml〔rootvms56。liruilongs。github。io〕〔harbor〕
  harbor。yml:设置IP和用户名密码4DONOTuselocalhostor127。0。0。1,becauseHarborneedstobeaccessedbyexternalclients。5hostname:192。168。26。5667httprelatedconfig。。。。。。。12httpsrelatedconfig13https:14httpsportforharbor,defaultis44315port:44316Thepathofcertandkeyfilesfornginx17certificate:yourcertificatepath18privatekey:yourprivatekeypath。。。。33RememberChangetheadminpasswordfromUIafterlaunchingHarbor。34harboradminpassword:Harbor123453536HarborDBconfiguration
  。prepare。install。sh〔rootvms56。liruilongs。github。io〕〔harbor〕。preparepreparebasedirissettoharborWARNING:root:WARNING:HTTPprotocolisinsecure。Harborwilldeprecatehttpprotocolinthefuture。PleasemakesuretoupgradetohttpsGeneratedconfigurationfile:configloglogrotate。confGeneratedconfigurationfile:configlogrsyslogdocker。confGeneratedconfigurationfile:confignginxnginx。confGeneratedconfigurationfile:configcoreenvGeneratedconfigurationfile:configcoreapp。confGeneratedconfigurationfile:configregistryconfig。ymlGeneratedconfigurationfile:configregistryctlenvGeneratedconfigurationfile:configregistryctlconfig。ymlGeneratedconfigurationfile:configdbenvGeneratedconfigurationfile:configjobserviceenvGeneratedconfigurationfile:configjobserviceconfig。ymlGeneratedandsavedsecrettofile:datasecretkeyssecretkeySuccessfullycalledfunc:createrootcertGeneratedconfigurationfile:composelocationdockercompose。ymlCleanuptheinputdir〔rootvms56。liruilongs。github。io〕〔harbor〕。install。sh〔Step0〕:checkingifdockerisinstalled。。。Note:dockerversion:20。10。9〔Step1〕:checkingdockercomposeisinstalled。。。Note:stoppingexistingHarborinstance。。。Removingharborjobservice。。。doneRemovingnginx。。。doneRemovingharborcore。。。doneRemovingregistry。。。doneCreatingharborlog。。。doneRemovingharborportal。。。doneRemovingredis。。。doneRemovingnetworkharborharborCreatingregistry。。。doneCreatingharborcore。。。doneCreatingnetworkharborharborwiththedefaultdriverCreatingnginx。。。doneCreatingredis。。。Creatingregistry。。。Creatingharborportal。。。Creatingregistryctl。。。Creatingharbordb。。。Creatingharborcore。。。Creatingharborjobservice。。。Creatingnginx。。。Harborhasbeeninstalledandstartedsuccessfully。〔rootvms56。liruilongs。github。io〕〔harbor〕
  查看相关的镜像〔rootvms56。liruilongs。github。io〕〔harbor〕dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES0efcf7b83dcfgoharbornginxphoton:v2。0。6nginxgdaemonof16minutesagoUp16minutes(healthy)0。0。0。0:808080tcp,:::808080tcpnginxee9d418c7ceegoharborharborjobservice:v2。0。6harborentrypoint。16minutesagoUp16minutes(healthy)harborjobservice6052c481dbd0goharborharborcore:v2。0。6harborentrypoint。16minutesagoUp16minutes(healthy)harborcore001ff83b037dgoharborharbordb:v2。0。6dockerentrypoint。17minutesagoUp16minutes(healthy)5432tcpharbordb2ebc81356ef1goharborharborregistryctl:v2。0。6homeharborstart。17minutesagoUp16minutes(healthy)registryctl6ca721c0fa75goharborharborportal:v2。0。6nginxgdaemonof17minutesagoUp16minutes(healthy)8080tcpharborportal2b06e2cf91abgoharborregistryphoton:v2。0。6homeharborentryp17minutesagoUp16minutes(healthy)5000tcpregistry2292a20780e2goharborredisphoton:v2。0。6redisserveretcr17minutesagoUp16minutes(healthy)6379tcpredisa0e3e49cf9dbgoharborharborlog:v2。0。6binshcusrloc17minutesagoUp17minutes(healthy)127。0。0。1:151410514tcpharborlog〔rootvms56。liruilongs。github。io〕〔harbor〕
  访问测试
  harbor
  CI服务器的docker配置
  这里因为我们要在192。168。26。55(CI服务器)上push镜像到192。168。26。56(私仓),所有需要修改CI服务器上的Docker配置。添加仓库地址
  操作服务器:liruilongs。github。io:192。168。26。55〔rootliruilongs。github。io〕〔〕catetcdockerdaemon。json{registrymirrors:〔https:2tefyfv7。mirror。aliyuncs。com〕}〔rootliruilongs。github。io〕〔〕vimetcdockerdaemon。json
  修改后的配置文件〔rootliruilongs。github。io〕〔〕catetcdockerdaemon。json{registrymirrors:〔https:2tefyfv7。mirror。aliyuncs。com〕,insecureregistries:〔192。168。26。56〕}
  加载使其生效〔rootliruilongs。github。io〕〔〕systemctldaemonreload〔rootliruilongs。github。io〕〔〕systemctlrestartdocker〔rootliruilongs。github。io〕〔〕
  CI机器简单测试一下〔rootliruilongs。github。io〕〔〕dockerlogin192。168。26。56Authenticatingwithexistingcredentials。。。WARNING!Yourpasswordwillbestoredunencryptedinroot。dockerconfig。json。Configureacredentialhelpertoremovethiswarning。Seehttps:docs。docker。comenginereferencecommandlinelogincredentialsstoreLoginSucceeded〔rootliruilongs。github。io〕〔〕dockertagbusybox192。168。26。56demobusybox〔rootliruilongs。github。io〕〔〕dockerpush192。168。26。56demobusyboxUsingdefaulttag:latestThepushreferstorepository〔192。168。26。56demobusybox〕cfd97936a580:Pushedlatest:digest:sha256:febcf61cd6e1ac9628f6ac14fa40836d16f3c6ddef3b303ff0321606e55ddd0bsize:527〔rootliruilongs。github。io〕〔〕
  push一个镜像,可以在私仓的web页面查看
  harbor
  到这里。我们配置了镜像仓库3。安装配置jenkins
  操作服务器:liruilongs。github。io:192。168。26。55
  镜像jenkins拉取〔rootliruilongs。github。io〕〔〕dockerpulljenkinsjenkins:centos7jdk8〔rootliruilongs。github。io〕〔〕dockerhistoryjenkinsjenkins:centos7jdk8IMAGECREATEDCREATEDBYSIZECOMMENTde64a05279ba5daysagoLABELorg。opencontainers。image。vendorJenkin0Bbuildkit。dockerfile。v0missing5daysagoCOPYinstallplugins。shusrlocalbininsta10。6kBbuildkit。dockerfile。v0missing5daysagoARGJENKINSHOMEvarjenkinshome0Bbuildkit。dockerfile。v0missing5daysagoARGagentport500000Bbuildkit。dockerfile。v0missing5daysagoARGhttpport80800Bbuildkit。dockerfile。v0missing5daysagoARGgid10000Bbuildkit。dockerfile。v0missing5daysagoARGuid10000Bbuildkit。dockerfile。v0missing5daysagoARGgroupjenkins0Bbuildkit。dockerfile。v0missing5daysagoARGuserjenkins0Bbuildkit。dockerfile。v0missing5daysagoRUN5TARGETARCHamd64COMMITSHA0b797f02410。4MBbuildkit。dockerfile。v0missing5daysagoCOPYgitlfspub。gpgtmpgitlfspub。gpg62。5kBbuildkit。dockerfile。v0missing5daysagoARGGITLFSVERSION3。0。10Bbuildkit。dockerfile。v0missing5daysagoARGCOMMITSHA0Bbuildkit。dockerfile。v0missing5daysagoARGTARGETARCH0Bbuildkit。dockerfile。v0missing5daysagoRUN2TARGETARCHamd64COMMITSHA0b797f024426MBbuildkit。dockerfile。v0missing5daysagoARGCOMMITSHA0Bbuildkit。dockerfile。v0missing5daysagoARGTARGETARCH0Bbuildkit。dockerfile。v0missing5daysagoENVLANGenUS。UTF8LANGUAGEenUS:enLCAL0Bbuildkit。dockerfile。v0missing7weeksagobinshc(nop)CMD〔binbash〕0Bmissing7weeksagobinshc(nop)LABELorg。labelschema。sc0Bmissing7weeksagobinshc(nop)ADDfile:b3ebbe8bd304723d4204MB〔rootliruilongs。github。io〕〔〕
  创建共享卷,修改所属组和用户,和容器里相同
  这里为什么要改成1000,是因为容器里是以jenkins用户的身份去读写数据,而在容器里jenkins的uid是1000,〔rootliruilongs。github。io〕〔〕mkdirjenkinschown1000:1000jenkins〔rootliruilongs。github。io〕〔〕这里为什么要改成1000,是因为容器里是以jenkins用户的身份去读写数据,而在容器里jenkins的uid是1000,创建创建jenkins容器〔rootliruilongs。github。io〕〔〕catjenkins。docker。shdockerrunditp8080:8080p50000:50000namejenkinsprivilegedtruerestartalwaysvjenkins:varjenkinshomejenkinsjenkins:centos7jdk8〔rootliruilongs。github。io〕〔〕dockerrunditp8080:8080p50000:50000namejenkinsprivilegedtruerestartalwaysvjenkins:varjenkinshomejenkinsjenkins:centos7jdk839afa098c8a56973ce1559d374b058b8e6091175b5b783d613a9f2e356827684〔rootliruilongs。github。io〕〔〕dockerpsgrepjenkins39afa098c8a5jenkinsjenkins:centos7jdk8sbintiniusr3minutesagoUp2minutes0。0。0。0:80808080tcp,:::80808080tcp,0。0。0。0:5000050000tcp,:::5000050000tcpjenkins
  访问jenkins
  先打开浏览器打开这个页面,让其初始化一下,直到看到界面
  因为要修改jenkins的配置,所以此时关闭jenkins容器〔rootliruilongs。github。io〕〔〕dockerstopjenkinsjenkins
  更换国内清华大学镜像,Jenkins下载插件特别慢,更换国内的清华源的镜像地址会快不少〔rootliruilongs。github。io〕〔〕catjenkinshudson。model。UpdateCenter。xmllt;?xmlversion1。1encodingUTF8?sitessiteiddefaultidurlhttps:updates。jenkins。ioupdatecenter。jsonurlsitesites〔rootliruilongs。github。io〕〔〕〔rootliruilongs。github。io〕〔〕sedisupdates。jenkins。ioupdatecenter。jsonmirrors。tuna。tsinghua。edu。cnjenkinsupdatesupdatecenter。jsongjenkinshudson。model。UpdateCenter。xml〔rootliruilongs。github。io〕〔〕catjenkinshudson。model。UpdateCenter。xmllt;?xmlversion1。1encodingUTF8?sitessiteiddefaultidurlhttps:mirrors。tuna。tsinghua。edu。cnjenkinsupdatesupdatecenter。jsonurlsitesites〔rootliruilongs。github。io〕〔〕
  http:www。google。com替换为http:www。baidu。comyumyinstalljq〔rootliruilongs。github。io〕〔〕catjenkinsupdatesdefault。jsonjq。connectionCheckUrlhttp:www。google。com〔rootliruilongs。github。io〕〔〕catjenkinsupdatesdefault。jsonjqkeys〔connectionCheckUrl,core,deprecations,generationTimestamp,id,plugins,signature,updateCenterVersion,warnings〕〔rootliruilongs。github。io〕〔〕sedishttp:www。google。comhttp:www。baidu。comgjenkinsupdatesdefault。json
  替换后查看〔rootliruilongs。github。io〕〔〕catjenkinsupdatesdefault。jsonjq。connectionCheckUrlhttp:www。baidu。com〔rootliruilongs。github。io〕〔〕catjenkinsupdatesdefault。jsonjqkeys〔connectionCheckUrl,core,deprecations,generationTimestamp,id,plugins,signature,updateCenterVersion,warnings〕〔rootliruilongs。github。io〕〔〕
  重启docker,获取登录密匙〔rootliruilongs。github。io〕〔〕dockerstartjenkinsjenkins〔rootliruilongs。github。io〕〔〕〔rootliruilongs。github。io〕〔〕catjenkinssecretsinitialAdminPasswordbe15eaabc4c946de913dd5af8636cae9
  需要修改jenkins绑定的docker的启动参数,ExecStartusrbindockerdHtcp:0。0。0。0:2376Hfd:containerdruncontainerdcontainerd。sock
  修改镜像库启动参数后需要重启docker〔rootvms56。liruilongs。github。io〕〔〕systemctldaemonreload〔rootvms56。liruilongs。github。io〕〔〕systemctlrestartdocker安装docker插件
  jenkins相关配置,这里的配置照着图片就好,需要配置一个docker集群供jenkins来根据Dockerfile构建镜像并push到私仓,这里docker集群即为CI服务器的docker
  修改镜像库启动参数,ExecStartusrbindockerdHtcp:0。0。0。0:2376Hfd:containerdruncontainerdcontainerd。sock
  关联docker和jenkins
  jenkins安全设置
  后面gitlab要和jenkins进行联动,所以必须要需要对jenkins的安全做一些设置,依次点击系统管理全局安全配置授权策略,勾选匿名用户具有可读权限
  添加JVM运行参数Dhudson。security。csrf。GlobalCrumbIssuerConfiguration。DISABLECSRFPROTECTIONtrue运行跨站请求访问〔rootliruilongs。github。io〕〔〕dockerexecurootitjenkinsbash〔root39afa098c8a5〕lsanacondapost。logbindevetchomeliblib64mediamntoptprocrootrunsbinsrvsystmpusrvar〔root39afa098c8a5〕viusrlocalbinjenkins。sh〔root39afa098c8a5〕exitexit〔rootliruilongs。github。io〕〔〕下载kubectl客户端工具
  这里的话我们要通过jenkins上的kubectl客户端连接k8s,所以我们需要安装一个k8s的客户端kubectl,下载k8s客户端wgethttps:storage。googleapis。comkubernetesreleasereleasev1。22。2binlinuxamd64kubectl〔rootliruilongs。github。io〕〔〕yuminstallykubectl1。22。20disableexcludeskubernetes拷贝kubeconfig文件
  然后拷贝kubeconfig证书,k8s集群中查看证书位置,这里的证书是之前创建好的,小伙伴可以看看我之前的文章〔rootliruilongs。github。io〕〔〕scproot192。168。26。81:rootansiblek8srbaccreatekc1。Warning:Permanentlyadded192。168。26。81(ECDSA)tothelistofknownhosts。root192。168。26。81spassword:kc11005566108。7KBs00:00拷贝证书和k8s集群客户端工具到jenkins容器内〔rootliruilongs。github。io〕〔〕dockercpkc1jenkins:〔rootliruilongs。github。io〕〔〕dockercpkubectljenkins:〔rootliruilongs。github。io〕〔〕kubectl命令测试〔rootliruilongs。github。io〕〔〕dockerexecurootitjenkinsbash〔root39afa098c8a5〕lsanacondapost。logbindevetchomekc1kubectlliblib64mediamntoptprocrootrunsbinsrvsystmpusrvar〔root39afa098c8a5〕。kubectlkubeconfikc1getpodsAError:unknownflag:kubeconfiSeekubectlgethelpforusage。〔root39afa098c8a5〕。kubectlkubeconfigkc1getpodsAErrorfromserver(Forbidden):podsisforbidden:UserliruilongcannotlistresourcepodsinAPIgroupattheclusterscope
  发现没有权限,这里我们为了方便,直接赋予集群中的clusteradmin角色〔rootvms81。liruilongs。github。io〕〔ansiblek8srbaccreate〕kubectlcreateclusterrolebindingtestclusterroleclusteradminuserliruilongclusterrolebinding。rbac。authorization。k8s。iotestcreated〔rootvms81。liruilongs。github。io〕〔ansiblek8srbaccreate〕
  命令测试没有问题〔root39afa098c8a5〕。kubectlkubeconfigkc1getnodesNAMESTATUSROLESAGEVERSIONvms81。liruilongs。github。ioReadycontrolplane,master51dv1。22。2vms82。liruilongs。github。ioNotReadynone51dv1。22。2vms83。liruilongs。github。ioNotReadynone51dv1。22。2〔root39afa098c8a5〕二、hexo博客系统CICD实战4。k8s集群中配置hexo生产环境高可用
  我们要部署Nginx来运行hexo博客系统,hexo编译完后为一堆静态文件,所以我们需要创建一个svc和一个deploy,使用SVC提供服务,使用deploy提供服务能力,使用Nginxhexo的静态文件构成的镜像apiVersion:appsv1kind:Deploymentmetadata:creationTimestamp:nulllabels:app:nginxname:nginxdepspec:replicas:2selector:matchLabels:app:nginxstrategy:{}template:metadata:creationTimestamp:nulllabels:app:nginxspec:containers:image:blogname:webresources:requests:cpu:100mrestartPolicy:Alwaysdeployments创建
  这里我们先用一个Nginx镜像来代替hexo博客的镜像〔rootvms81。liruilongs。github。io〕〔ansiblek8sdeploycreate〕kubectlapplyfnginx。yamldeployment。appsnginxdepcreated
  查看deployments和pod〔rootvms81。liruilongs。github。io〕〔ansiblek8sdeploycreate〕kubectlgetdeployments。appsgrepnginxdepnginxdep2222109s〔rootvms81。liruilongs。github。io〕〔ansiblek8sdeploycreate〕kubectlgetpodsowidegrepweb〔rootvms81。liruilongs。github。io〕〔ansiblek8sdeploycreate〕kubectlgetpodsowidegrepnginxdepnginxdep645bf755b92w8jv11Running02m22s10。244。171。164vms82。liruilongs。github。iononenonenginxdep645bf755b9jfqxj11Running02m22s10。244。171。157vms82。liruilongs。github。iononenone〔rootvms81。liruilongs。github。io〕〔ansiblek8sdeploycreate〕service创建〔rootvms81。liruilongs。github。io〕〔ansiblek8sdeploycreate〕kubectlexposedeploynginxdepport8888targetport80typeNodePortservicenginxdepexposed〔rootvms81。liruilongs。github。io〕〔ansiblek8sdeploycreate〕kubectlgetsvcowidegrepnginxdepnginxdepNodePort10。106。217。50none8888:31964TCP16sappnginx
  访问测试没有问题,之后我们配置好jenkins上的触发器,直接替换就OK〔rootvms81。liruilongs。github。io〕〔ansiblek8sdeploycreate〕curl127。0。0。1:31964!DOCTYPEhtmlhtmlheadtitleWelcometonginx!titlestylehtml{colorscheme:lightdark;}body{width:35em;margin:0auto;fontfamily:Tahoma,Verdana,Arial,sansserif;}styleheadbodyh1Welcometonginx!h1pIfyouseethispage,thenginxwebserverissuccessfullyinstalledandworking。Furtherconfigurationisrequired。pForonlinedocumentationandsupportpleaserefertonginx。org。
  Commercialsupportisavailableatnginx。com。pemThankyouforusingnginx。embodyhtml〔rootvms81。liruilongs。github。io〕〔ansiblek8sdeploycreate〕5。k8s集群配置私仓地址
  我们通过kubectlset命令更新deploy的镜像时,获取的镜像是通过私仓获取的,所以需要在启动参数添加私仓地址
  ExecStartusrbindockerdinsecureregistry192。168。26。56Hfd:containerdruncontainerdcontainerd。sock
  这里所有的节点都需要设置后重启docker〔rootvms81。liruilongs。github。io〕〔ansiblek8sdeploycreate〕vimusrlibsystemdsystemdocker。service〔rootvms81。liruilongs。github。io〕〔ansiblek8sdeploycreate〕systemctldaemonreload;systemctlrestartdocker〔1〕23273〔rootvms81。liruilongs。github。io〕〔ansiblek8sdeploycreate〕sshroot192。168。26。82Lastlogin:SunJan1606:09:072022from192。168。26。1〔rootvms82。liruilongs。github。io〕〔〕vimusrlibsystemdsystemdocker。service〔rootvms82。liruilongs。github。io〕〔〕systemctldaemonreload;systemctlrestartdocker〔1〕26843〔rootvms82。liruilongs。github。io〕〔〕exit登出Connectionto192。168。26。82closed。6。jenkins配置CICD流程
  访问jenkins,接下来才是重点,我们要的jenkins上配置整个CICD流程,从而实现自动化
  访问jenkins,接下来才是重点,我们要的jenkins上配置整个CICD流程,从而实现自动化
  这里的Token我们设置为:4bf636c8214b7ff0a0fb,同时需要记住访问方式:JENKINSURLjobliruilongcicdbuild?tokenTOKENNAME
  构建触发器选择shell构建:克隆代码
  选择镜像构建
  构建镜像并push私仓
  这里切记需要添加私仓的认证信息,即上面设置的用户名和密码
  选择shell构建,更新镜像
  相关的文本信息cdrmrfbloggitclonehttp:192。168。26。55rootblog。gitvarjenkinshomeblog192。168。26。56libraryblog:{BUILDNUMBER}exportKUBECONFIGkc1;kubectlsetimagedeploymentnginxdep192。168。26。56libraryblog:{BUILDNUMBER}nkubesystem7。配置gitlab和jenkins的联动
  访问gitlab配置联动
  点击增加web钩子
  viewalljobliruilongcicdbuild?token
  到这里,联动已经配置完成8。编写Dockerfile文件,更新代码测试
  下面我们编译一下hexo,生成public的一个文件夹,然后上传gitlabPSF:bloggerhexog。。。。。PSF:bloggergitadd。publicPSF:bloggergitcommitm编译代码PSF:bloggergitpush
  同时需要编写Dockerfile文件来创建镜像FROMdocker。iolibrarynginx:latestMAINTAINERliruilongADD。publicusrsharenginxhtmlEXPOSE80CMD〔nginx,g,daemonoff;〕PSF:bloggergitadd。PSF:bloggergitcommitmDockcerfile文件编写〔master217e0ed〕Dockcerfile文件编写1filechanged,1deletion()PSF:bloggergitpushEnumeratingobjects:5,done。Countingobjects:100(55),done。Deltacompressionusingupto8threadsCompressingobjects:100(33),done。Writingobjects:100(33),307bytes307。00KiBs,done。Total3(delta2),reused0(delta0)Tohttp:192。168。26。55rootblog。git6690612。。217e0edmastermasterPSF:blogger
  jenkins输出
  Startedbyremotehost192。168。26。1RunningasSYSTEMBuildinginworkspacevarjenkinshomeworkspaceliruilongcicd〔liruilongcicd〕binshxetmpjenkins6108687102523328796。shcdvarjenkinshomermrfbloggitclonehttp:192。168。26。55rootblog。gitCloningintoblog。。。DockerBuildDockerBuild:buildingimageatpathvarjenkinshomeblogStep15:FROMdocker。iolibrarynginx:latestf8f4ffc8092cStep25:MAINTAINERliruilongRunningine341b5562b64Removingintermediatecontainere341b5562b644e9f5aa47ab5Step35:ADD。publicusrsharenginxhtml3956cff32507Step45:EXPOSE80Runninginb4c27124989dRemovingintermediatecontainerb4c27124989dba9d1764d764Step55:CMD〔nginx,g,daemonoff;〕Runningin61dca01a4883Removingintermediatecontainer61dca01a48832aadc5732a60Successfullybuilt2aadc5732a60Taggingbuiltimagewith192。168。26。56libraryblog:41DockerBuildResponse:2aadc5732a60Pushing〔192。168。26。56libraryblog:41〕Thepushreferstorepository〔192。168。26。56libraryblog〕89570901cdea:Preparing65e1ea1dc98c:Preparing88891187bdd7:Preparing6e109f6c2f99:Preparing0772cb25d5ca:Preparing525950111558:Preparing476baebdfbf7:Preparing525950111558:Waiting476baebdfbf7:Waiting88891187bdd7:Layeralreadyexists6e109f6c2f99:Layeralreadyexists65e1ea1dc98c:Layeralreadyexists0772cb25d5ca:Layeralreadyexists89570901cdea:Pushing〔〕301。6kB28。75MB89570901cdea:Pushing〔〕1。193MB28。75MB476baebdfbf7:Layeralreadyexists525950111558:Layeralreadyexists89570901cdea:Pushing〔〕3。917MB28。75MB89570901cdea:Pushing〔〕5。996MB28。75MB89570901cdea:Pushing〔〕8。097MB28。75MB89570901cdea:Pushing〔〕10。76MB28。75MB89570901cdea:Pushing〔〕12。57MB28。75MB89570901cdea:Pushing〔〕13。8MB28。75MB89570901cdea:Pushing〔〕14。71MB28。75MB89570901cdea:Pushing〔〕15。59MB28。75MB89570901cdea:Pushing〔〕16。79MB28。75MB89570901cdea:Pushing〔〕18。27MB28。75MB89570901cdea:Pushing〔〕19。45MB28。75MB89570901cdea:Pushing〔〕20。34MB28。75MB89570901cdea:Pushing〔〕21。55MB28。75MB89570901cdea:Pushing〔〕22。44MB28。75MB89570901cdea:Pushing〔〕23。64MB28。75MB89570901cdea:Pushing〔〕24。52MB28。75MB89570901cdea:Pushing〔〕25。42MB28。75MB89570901cdea:Pushing〔〕26。61MB28。75MB89570901cdea:Pushing〔〕27。19MB28。75MB89570901cdea:Pushing〔〕28。69MB28。75MB89570901cdea:Pushing〔〕29。32MB89570901cdea:Pushed41:digest:sha256:c90b64945a8d063f7bcdcc39f00f91b6d83acafcd6b2ec6aba5b070474bafc37size:1782Cleaninglocalimages〔2aadc5732a60〕DockerBuildDone〔liruilongcicd〕binshxetmpjenkins246013519648603221。shexportKUBECONFIGkc1KUBECONFIGkc1kubectlsetimagedeploymentnginxdep192。168。26。56libraryblog:41nkubesystemdeployment。appsnginxdepimageupdatedFinished:SUCCESS9。访问hexo博客系统〔rootvms81。liruilongs。github。io〕〔ansiblek8sdeploycreate〕kubectlgetdeployments。appsgrepnginxdepnginxdep222230h〔rootvms81。liruilongs。github。io〕〔ansiblek8sdeploycreate〕kubectlgetpodsowidegrepnginxdepnginxdepbddfd9b5f94d8811Running0110s10。244。171。142vms82。liruilongs。github。iononenonenginxdepbddfd9b5fz57qc11Running035m10。244。171。177vms82。liruilongs。github。iononenone〔rootvms81。liruilongs。github。io〕〔ansiblek8sdeploycreate〕kubectlgetsvcowidegrepnginxdepnginxdepNodePort10。106。217。50none8888:31964TCP30happnginx〔rootvms81。liruilongs。github。io〕〔ansiblek8sdeploycreate〕kubectldescribepodsnginxdepbddfd9b5f94d88Name:nginxdepbddfd9b5f94d88Namespace:kubesystemPriority:0Node:vms82。liruilongs。github。io192。168。26。82StartTime:Fri,04Feb202203:11:140800Labels:appnginxpodtemplatehashbddfd9b5fAnnotations:cni。projectcalico。orgpodIP:10。244。171。14232cni。projectcalico。orgpodIPs:10。244。171。14232Status:RunningIP:10。244。171。142IPs:IP:10。244。171。142ControlledBy:ReplicaSetnginxdepbddfd9b5fContainers:web:ContainerID:docker:669f48cb626d5067f40bb1aaa378268a7ee9879488b0b298a86271957c162316Image:192。168。26。56libraryblog:41ImageID:dockerpullable:192。168。26。56libraryblogsha256:c90b64945a8d063f7bcdcc39f00f91b6d83acafcd6b2ec6aba5b070474bafc37Port:noneHostPort:noneState:RunningStarted:Fri,04Feb202203:11:150800Ready:TrueRestartCount:0Requests:cpu:100mEnvironment:noneMounts:varrunsecretskubernetes。ioserviceaccountfromkubeapiaccesstrn5n(ro)Conditions:TypeStatusInitializedTrueReadyTrueContainersReadyTruePodScheduledTrueVolumes:kubeapiaccesstrn5n:Type:Projected(avolumethatcontainsinjecteddatafrommultiplesources)TokenExpirationSeconds:3607ConfigMapName:kuberootca。crtConfigMapOptional:nilDownwardAPI:trueQoSClass:BurstableNodeSelectors:noneTolerations:node。kubernetes。ionotready:NoExecuteopExistsfor300snode。kubernetes。iounreachable:NoExecuteopExistsfor300sEvents:TypeReasonAgeFromMessageNormalScheduled4m10sdefaultschedulerSuccessfullyassignedkubesystemnginxdepbddfd9b5f94d88tovms82。liruilongs。github。ioNormalPulling4m9skubeletPullingimage192。168。26。56libraryblog:41NormalPulled4m9skubeletSuccessfullypulledimage192。168。26。56libraryblog:41in67。814838msNormalCreated4m9skubeletCreatedcontainerwebNormalStarted4m9skubeletStartedcontainerweb
  访问hexo博客系统

HTC在CES推出新版VR头盔设置更容易,佩戴更舒适【PConline资讯】据美国媒体报道,周一HTC在消费电子展(CES)上推出了ViveCosmos,希望让每个人更容易进入虚拟现实世界。ViveCosmos是一款更容易设置,……1952年,38军兵败白马山,6700多志愿军因一人牺牲,此在中国人民解放军的序列中,有一支部队被称为万岁军,它就是陆军第38军。第38军及其前身东北野战军第一纵队在国内战争中可谓战绩赫赫,但获得万岁军的美誉、成为公认的全军王牌主……HomeKit门铃未死新型号将于2019年上半年发售2018年初,苹果智能家居网页下架了包括August和Ring在内的所有产品,在苹果HomeKit兼容列表中再也找不到智能门铃这个产品分类。迈入2019年,兼容HomeKit的……用了二十几台厨师机,总结了这篇你会收藏的厨师机选购攻略(下)大家好呀,离我上次的厨师机选购攻略已经过去2年啦,没看过的可以戳这里用过了十几台厨师机,我总结了这篇你会收藏的厨师机选购攻略近两年来厨师机领域各个厨电品牌是卷得厉害,不管……华为发布服务器处理器鲲鹏9207nm工艺号称性能最高1月7日消息,华为今天在深圳推出ARMbased处理器鲲鹏920(Kunpeng920),以及基于鲲鹏920的TaiShan服务器、华为云服务。华为称鲲鹏920为目前业界最高性……苹果三星携手电视合作内置iTunes电影苹果跟三星的关系虽然一度很紧张,但是双方谁也离不开谁,比如三星曾为苹果独家制造了iPhoneX屏幕,而现在两者继续在融合,只不过这次是电视领域。现在,苹果和三星宣布了一项……地道河东味6条运城精品线路!春节小长假安排起来吧!2023hr万事如意新春大吉虎走留福兔来送春喜迎兔年新春佳节之际运城市文旅局精心打造地道河东味民俗活动12大系列180余项具体活动并推……穿越古今的新春音乐会带你解锁大美龙华如果有一扇门可以穿越时空,你是想回到过去还是去往未来?是梦回千年前的客家墟市,感受熙熙攘攘的人间烟火;还是循着青春的足迹,重温指引百年征程的红色誓言?是用心耕耘当下,感受这座城……亚马逊罕见披露预装Alexa设备销量已售出1亿多部1月5日消息,据TechCrunch报道,亚马逊设备部门高级副总裁戴夫middot;利普(DaveLimp)日前接受采访时透露,迄今已经售出1亿多部预装其智能助手Alexa的设……京张高铁首次应用,自动驾驶高铁到底有何价值?1月2日,中国铁路总公司总经理陆东福在中国铁路总公司工作会议上透露,目前时速300公里mdash;350公里高铁的自动驾驶技术在世界上尚属空白,这套高铁自动驾驶系统已经通过中国……工作生活两不误!三星推多角度显示器SpaceMonitor距离1月8号召开的CES2019还有不到四天,三星就抢先宣布了三款显示器新品:秉承极简主义的多角度可调节显示器SpaceMonitor;32:9屏幕比例、双2K分辨率的怪兽级游……不婚主义的小姨火了!给晚辈发红包,手中数着钞票发给小孩最近,不婚主义的小姨给晚辈发红包的视频火了。镜头中的小姨妆容精致又不妖艳,黑色干练的短发搭配鲜艳的红色大衣,手中数着钞票发给小孩子们,让网友直呼羡慕!cc雨涵……
提醒中老年人生活中的8件小事,也能影响心脏健康,请尽量避免到了中老年阶段,心血管健康方面的风险预防就显得尤为重要,很多朋友都知道,不健康的饮食,吸烟,长期大量饮酒等都是影响心脏健康的重要方面,但除了上述方面之外,在生活中一些看似与心血……年过45岁会直线式衰老?注意4种食物可多吃,越老越要补充衰老作为人体必不可免的生理性循环,4555岁这一中年阶段最为明显,皮肤表层抗氧化能力逐渐下降,真皮层缺乏胶原蛋白活性,导致大量色斑、皱纹滋生。年过45岁,女性体内雌性激素……华晨宇被传新恋情曝光,张碧晨头顶青青草原最近娱乐圈就有一段恋情疑似曝光。3月2日,有媒体拍到华晨宇与一位神秘女生一同开车回家,举止亲密。照片中看到,华晨宇开着豪车带着一位神秘女子从外面回来,华晨宇坐在驾驶……都叫匡威为什么偏把日本匡威单拿出来?CONVERSEJAPA提到匡威,这也是个百年品牌。经典的黑白帆布鞋,那真是太经典了。CONVERSE,创办人摩尔匡威根据自己的姓氏匡威来命名。青春时尚,活力朝气,方便使用,造型百搭。无论是简单的单一……打破记录哈勃太空望远镜发现有史以来最远的恒星国际快递清关代拍海外古董艺术品名画名表【FuninUSA。net综合报道】美国宇航局的哈勃太空望远镜(Hubble)建立了一个非凡的新标杆:探测宇宙诞生后第一个十亿……萨林杰2111全队四人得分上双深圳大胜宁波22分斩获3连胜北京时间3月4日,202122赛季CBA常规赛第30轮,深圳队对阵宁波队。历经一番角逐,深圳队10381力克宁波队夺取3连胜。数据统计深圳队:萨林杰21分11篮板3……草帽姐收留老公前女友!让其住自家仓库,情绪低落多次哽咽显无奈饿了吗?戳右边关注我们,每天给您送上最新出炉的娱乐硬核大餐!3月15日深夜,草帽姐在社交平台上更新一则视频,称自己收留了老公的前女友,此事立即引发争议。草帽姐录制视……小米12sultra这款手机的配置怎么样,是否值得购买?小米12sultra这款手机可以说是小米旗下最好的一款机型了。那么问题来了,小米12sultra这款手机的配置怎么样呢?有哪些亮点和不足呢?是否值得购买呢?关于这些问题,接下来……露营帐篷搭到车顶上体验不一样的露营随着天气变暖,很多人会选择出门搭帐篷露营,享受户外烧烤,烤肉串、烤海鲜的田园式的户外生活。通常来说,帐篷一般是搭在地上,比如最近火爆朋友圈的金字塔帐篷。但如果你在地上塔过一次帐……从米家APP崩了,聊聊智能家居的本地控制为啥这么难?作者:Levin导读相信很多人的家中都至少拥有一款智能家居设备,可以通过相应的手机App来远程操控,方便了用户的生活,可一旦网络出现故障,这些智能家居设备大多会退化……科技感拉满!慧示碰碰投P9引起行业巨震随着科技、经济的迅速发展,越来越多的家用智能投影仪从大众视野走入了广大朋友的家中,市场上智能投影仪种类层出不穷,近日,国内知名投影品牌慧示投影仪推出了一款1080P超短焦智能投……勇士输球惹罚球争议!单节14罚这是季后赛?蒙克待遇库里从未有北京时间4月16日,时隔16年350天之后,国王在季后赛第1场险胜金州勇士队,他们也成功守卫住了自己的主场。但是本场比赛也是再次出现了重大争议,那就是最后一节,主场作战的……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网