专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

SpringCloud微服务实战教你如何搭建企业级开发框架

  一、集群环境规划配置
  生产环境不要使用一主多从,要使用多主多从。这里使用三台主机进行测试一台Master(172。16。20。111),两台Node(172。16。20。112和172。16。20。113)1、设置主机名
  CentOS7安装完成之后,设置固定ip,三台主机做相同设置vietcsysconfignetworkscriptsifcfgens33在最下面ONBOOT改为yes,新增固定地址IPADDR,172。16。20。111,172。16。20。112,172。16。20。113ONBOOTyesIPADDR172。16。20。111
  三台主机ip分别设置好之后,修改hosts文件,设置主机名master机器上执行hostnamectlsethostnamemasternode1机器上执行hostnamectlsethostnamenode1node2机器上执行hostnamectlsethostnamenode2vietchosts172。16。20。111master172。16。20。112node1172。16。20。113node22、时间同步
  开启chronyd服务systemctlstartchronyd
  设置开机启动systemctlenablechronyd
  测试date3、禁用firewalld和iptables(测试环境)systemctlstopfirewalldsystemctldisablefirewalldsystemctlstopiptablessystemctldisableiptables4、禁用selinuxvietcselinuxconfigSELINUXdisabled5、禁用swap分区
  注释掉devmappercentosswapswapvietcfstab注释掉devmappercentosswapswap6、修改linux的内核参数vietcsysctl。dkubernetes。confnet。bridge。bridgenfcallip6tables1net。bridge。bridgenfcalliptables1net。ipv4。ipforward1重新加载配置sysctlp加载网桥过滤模块modprobebrnetfilter查看网桥过滤模块lsmodgrepbrnetfilter7、配置ipvs
  安装ipset和ipvsadmyuminstallipsetipvsadmy
  添加需要加载的模块(整个执行)catEOFetcsysconfigmodulesipvs。modules!binbashmodprobeipvsmodprobeipvsrrmodprobeipvswrrmodprobeipvsshmodprobenfconntrackipv4EOF
  添加执行权限chmodxetcsysconfigmodulesipvs。modules
  执行脚本binbashetcsysconfigmodulesipvs。modules
  查看是否加载成功lsmodgrepeipvsenfconntrackipv4
  以上完成设置之后,一定要执行重启使配置生效reboot二、Docker环境安装配置1、安装依赖
  docker依赖于系统的一些必要的工具:yuminstallyyumutilsdevicemapperpersistentdatalvm22、添加软件源yumconfigmanageraddrepohttp:mirrors。aliyun。comdockercelinuxcentosdockerce。repoyumcleanallyummakecachefast3、安装dockerce查看可以安装的docker版本yumlistdockerceshowduplicates选择安装需要的版本,直接安装最新版,可以执行yumyinstalldockerceyuminstallsetoptobsoletes0dockerce19。03。133。el7y4、启动服务通过systemctl启动服务systemctlstartdocker通过systemctl设置开机启动systemctlenabledocker5、查看安装版本
  启动服务使用dockerversion查看一下当前的版本:dockerversion6、配置镜像加速
  通过修改daemon配置文件etcdockerdaemon。json加速,如果使用k8s,这里一定要设置execopts:〔native。cgroupdriversystemd〕。insecureregistries:〔172。16。20。175〕配置是可以通过http从我们的harbor上拉取数据。vietcdockerdaemon。json{execopts:〔native。cgroupdriversystemd〕,logdriver:jsonfile,logopts:{maxsize:100m},registrymirrors:〔https:eiov0s1n。mirror。aliyuncs。com〕,insecureregistries:〔172。16。20。175〕}sudosystemctldaemonreloadsudosystemctlrestartdocker7、安装dockercompose
  如果网速太慢,可以直接到https:github。comdockercomposereleases选择对应的版本进行下载,然后上传到服务器usrlocalbin目录。sudocurlLhttps:github。comdockercomposereleasesdownloadv2。0。1dockercompose(unames)(unamem)ousrlocalbindockercomposesudochmodxusrlocalbindockercompose注意:(非必须设置)开启Docker远程访问(这里不是必须开启的,生产环境不要开启,开启之后,可以在开发环境直连docker)vilibsystemdsystemdocker。service
  修改ExecStart,添加Htcp:0。0。0。0:2375
  ExecStartusrbindockerdHfd:Htcp:0。0。0。0:2375containerdruncontainerdcontainerd。sock
  修改后执行以下命令:systemctldaemonreloadservicedockerrestart
  测试是否能够连得上:curlhttp:localhost:2375version
  三、Harbor私有镜像仓库安装配置(重新设置一台服务器172。16。20。175,不要放在K8S的主从服务器上)
  首先需要按照前面的步骤,在环境上安装Docker,才能安装Harbor。1、选择合适的版本进行下载,下载地址:
  https:github。comgoharborharborreleases2、解压tarzxfharborofflineinstallerv2。2。4。tgz3、配置cdharbormvharbor。yml。tmplharbor。ymlviharbor。yml4、将hostname改为当前服务器地址,注释掉https配置。。。。。。。TheIPaddressorhostnametoaccessadminUIandregistryservice。DONOTuselocalhostor127。0。0。1,becauseHarborneedstobeaccessedbyexternalclients。hostname:172。16。20。175httprelatedconfighttp:portforhttp,defaultis80。Ifhttpsenabled,thisportwillredirecttohttpsportport:80httpsrelatedconfighttps:httpsportforharbor,defaultis443port:443Thepathofcertandkeyfilesfornginxcertificate:yourcertificatepathprivatekey:yourprivatekeypath。。。。。。5、执行安装命令mkdirvarlogharbor。install。sh6、查看安装是否成功〔rootlocalhostharbor〕dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESde1b702759e7goharborharborjobservice:v2。2。4harborentrypoint。13secondsagoUp9seconds(health:starting)harborjobservice55b465d07157goharbornginxphoton:v2。2。4nginxgdaemonof13secondsagoUp9seconds(health:starting)0。0。0。0:808080tcp,:::808080tcpnginxd52f5557fa73goharborharborcore:v2。2。4harborentrypoint。13secondsagoUp10seconds(health:starting)harborcore4ba09aded494goharborharbordb:v2。2。4dockerentrypoint。13secondsagoUp11seconds(health:starting)harbordb647f6f46e029goharborharborportal:v2。2。4nginxgdaemonof13secondsagoUp11seconds(health:starting)harborportal70251c4e234fgoharborredisphoton:v2。2。4redisserveretcr13secondsagoUp11seconds(health:starting)redis21a5c408afffgoharborharborregistryctl:v2。2。4homeharborstart。13secondsagoUp11seconds(health:starting)registryctlb0937800f88bgoharborregistryphoton:v2。2。4homeharborentryp13secondsagoUp11seconds(health:starting)registryd899e377e02bgoharborharborlog:v2。2。4binshcusrloc13secondsagoUp12seconds(health:starting)127。0。0。1:151410514tcpharborlog7、harbor的启动停止命令dockercomposedown停止dockercomposeupd启动8、访问harbor管理台地址,上面配置的hostname,http:172。16。20。175(默认用户名密码:adminHarbor12345):四、Kubernetes安装配置1、切换镜像源catEOFetcyum。repos。dkubernetes。repo〔kubernetes〕nameKubernetesbaseurlhttps:mirrors。aliyun。comkubernetesyumreposkubernetesel7x8664enabled1gpgcheck1repogpgcheck1gpgkeyhttps:mirrors。aliyun。comkubernetesyumdocyumkey。gpghttps:mirrors。aliyun。comkubernetesyumdocrpmpackagekey。gpgEOF2、安装kubeadm、kubelet和kubectlyuminstallykubeletkubeadmkubectl3、配置kubelet的cgroupvietcsysconfigkubeletKUBELETCGROUPARGScgroupdriversystemdKUBEPROXYMODEipvs4、启动kubelet并设置开机启动systemctlstartkubeletsystemctlenablekubelet5、初始化k8s集群(只在Master执行)
  初始化kubeadminitkubernetesversionv1。22。3apiserveradvertiseaddress172。16。20。111imagerepositoryregistry。aliyuncs。comgooglecontainersservicecidr10。20。0。016podnetworkcidr10。222。0。016
  创建必要文件mkdirpHOME。kubesudocpietckubernetesadmin。confHOME。kubeconfigsudochown(idu):(idg)HOME。kubeconfig6、加入集群(只在Node节点执行)
  在Node节点(172。16。20。112和172。16。20。113)运行上一步初始化成功后显示的加入集群命令kubeadmjoin172。16。20。111:6443tokenfgf380。einr7if1eb838mpediscoverytokencacerthashsha256:fa5a6a2ff8996b09effbf599aac70505b49f35c5bca610d6b5511886383878f7
  在Master查看集群状态〔rootmaster〕kubectlgetnodesNAMESTATUSROLESAGEVERSIONmasterNotReadycontrolplane,master2m54sv1。22。3node1NotReadynone68sv1。22。3node2NotReadynone30sv1。22。37、安装网络插件(只在Master执行)wgethttps:raw。githubusercontent。comcoreosflannelmasterDocumentationkubeflannel。yml
  镜像加速:修改kubeflannel。yml文件,将quay。iocoreosflannel:v0。15。0改为quay。mirrors。ustc。edu。cncoreosflannel:v0。15。0
  执行安装kubectlapplyfkubeflannel。yml
  再次查看集群状态,(需要等待一段时间大概12分钟)发现STATUS都是Ready。〔rootmaster〕kubectlgetnodesNAMESTATUSROLESAGEVERSIONmasterReadycontrolplane,master42mv1。22。3node1Readynone40mv1。22。3node2Readynone39mv1。22。38、集群测试
  使用kubectl安装部署nginx服务kubectlcreatedeploymentnginximagenginxreplicas1kubectlexposedeploynginxport80targetport80typeNodePort
  查看服务〔rootmaster〕kubectlgetpod,svcNAMEREADYSTATUSRESTARTSAGEpodnginx6799fc88d8z5tm811Running026sNAMETYPECLUSTERIPEXTERNALIPPORT(S)AGEservicekubernetesClusterIP10。20。0。1none443TCP68mservicenginxNodePort10。20。17。199none80:32605TCP9s
  服务显示servicenginx的PORT(S)为80:32605TCP,我们在浏览器中访问主从地址的32605端口,查看nginx是否运行
  http:172。16。20。111:32605
  http:172。16。20。112:32605
  http:172。16。20。113:32605
  成功后显示如下界面:
  9、安装Kubernetes管理界面Dashboard
  Kubernetes可以通过命令行工具kubectl完成所需要的操作,同时也提供了方便操作的管理控制界面,用户可以用KubernetesDashboard部署容器化的应用、监控应用的状态、执行故障排查任务以及管理Kubernetes各种资源。1、下载安装配置文件recommended。yaml,注意在https:github。comkubernetesdashboardreleases查看Kubernetes和KubernetesDashboard的版本对应关系。
  执行下载wgethttps:raw。githubusercontent。comkubernetesdashboardv2。4。0aiodeployrecommended。yaml2、修改配置信息,在service下添加type:NodePort和nodePort:30010virecommended。yaml。。。。。。kind:ServiceapiVersion:v1metadata:labels:k8sapp:kubernetesdashboardname:kubernetesdashboardnamespace:kubernetesdashboardspec:新增nodeName:Master新增type:NodePortports:port:443targetPort:8443新增nodePort:30010。。。。。。
  注释掉以下信息,否则不能安装到master服务器CommentthefollowingtolerationsifDashboardmustnotbedeployedonmastertolerations:key:noderole。kubernetes。iomastereffect:NoSchedule
  新增nodeName:master,安装到master服务器。。。。。。kind:DeploymentapiVersion:appsv1metadata:labels:k8sapp:kubernetesdashboardname:kubernetesdashboardnamespace:kubernetesdashboardspec:replicas:1revisionHistoryLimit:10selector:matchLabels:k8sapp:kubernetesdashboardtemplate:metadata:labels:k8sapp:kubernetesdashboardspec:nodeName:mastercontainers:name:kubernetesdashboardimage:kubernetesuidashboard:v2。4。0imagePullPolicy:Always。。。。。。3、执行安装部署命令kubectlapplyfrecommended。yaml4、查看运行状态命令,可以看到servicekubernetesdashboard已运行,访问端口为30010〔rootmaster〕kubectlgetpod,svcnkubernetesdashboardNAMEREADYSTATUSRESTARTSAGEpoddashboardmetricsscraperc45b7869d6k87n01ContainerCreating010spodkubernetesdashboard576cb95f94zfvc901ContainerCreating010sNAMETYPECLUSTERIPEXTERNALIPPORT(S)AGEservicedashboardmetricsscraperClusterIP10。20。222。83none8000TCP10sservicekubernetesdashboardNodePort10。20。201。182none443:30010TCP10s5、创建访问KubernetesDashboard的账号kubectlcreateserviceaccountdashboardadminnkubernetesdashboardkubectlcreateclusterrolebindingdashboardadminrbclusterroleclusteradminserviceaccountkubernetesdashboard:dashboardadmin6、查询访问KubernetesDashboard的token〔rootmaster〕kubectlgetsecretsnkubernetesdashboardgrepdashboardadmindashboardadmintoken84gg6kubernetes。ioserviceaccounttoken364s〔rootmaster〕kubectldescribesecretsdashboardadmintoken84gg6nkubernetesdashboardName:dashboardadmintoken84gg6Namespace:kubernetesdashboardLabels:noneAnnotations:kubernetes。ioserviceaccount。name:dashboardadminkubernetes。ioserviceaccount。uid:2d93a5896b0b4ed6adc39a2eeb5d1311Type:kubernetes。ioserviceaccounttokenDataca。crt:1099bytesnamespace:20bytestoken:eyJhbGciOiJSUzI1NiIsImtpZCI6ImRmbVVfRy15QzdfUUF4ZmFuREZMc3dvd0IxQ3ItZm5SdHVZRVhXV3JpZGcifQ。eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tODRnZzYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMmQ5M2E1ODktNmIwYi00ZWQ2LWFkYzMtOWEyZWViNWQxMzExIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmVybmV0ZXMtZGFzaGJvYXJkOmRhc2hib2FyZC1hZG1pbiJ9。xsDBLeZdn7IO0Btpb4LlCD1RQ2VYsXXPabir91VXIqRrL1BewYAyFfZtxU8peU8KebaJiRIaUeF813x6WbGG9QKynL1fTARN5XoHarkBTVlcjHQ5GBziLDEKU255veVqORF7J5XtB38Ke2n2pi8tnnUUSbIJpMTF1shV0aLlqUzt3PauPmDshtoerz4iafWK0u9oWBASQDPPoE8IWYU1KmSkUNtoGzf0c9vpdlUw4j0UZE4zSoMFXkrfQDLD32LrG56Wgpr6E8SeipKRfgXvx7ExD54b8Lq9DyAltrnQVvRicIEiQGdbeCu9dwzGyhgcDucULTx7TUgA7、在页面访问KubernetesDashboard,注意一定要使用https,https:172。16。20。111:30010,输入token登录成功后就进入了后台管理界面,原先命令行的操作就可以在管理界面进操作了
  五、GitLab安装配置
  GitLab是可以部署在本地环境的Git项目仓库,这里介绍如何安装使用,在开发过程中我们将代码上传到本地仓库,然后Jenkins从仓库中拉取代码打包部署。
  1、下载需要的安装包,下载地址https:packages。gitlab。comgitlabgitlabce,我们这里下载最新版gitlabce14。4。1ce。0。el7。x8664。rpm,当然在项目开发中需要根据自己的需求选择稳定版本
  2、点击需要安装的版本,会提示安装命令,按照上面提示的命令进行安装即可curlshttps:packages。gitlab。cominstallrepositoriesgitlabgitlabcescript。rpm。shsudobashsudoyuminstallgitlabce14。4。1ce。0。el7。x8664
  3、配置并启动Gitlabgitlabctlreconfigure
  4、查看Gitlab状态gitlabctlstatus
  5、设置初始登录密码cdoptgitlabbinsudo。gitlabrailsconsole进入控制台之后执行uUser。where(id:1)。firstu。passwordroot1234u。passwordconfirmationroot1234u。save!quit
  5、浏览器访问服务器地址,默认是80端口,所以直接访问即可,在登录界面输入我们上面设置的密码rootroot1234。
  6、设置界面为中文
  UserSettingsPreferencesLanguage简体中文刷新界面
  7、Gitlab常用命令gitlabctlstopgitlabctlstartgitlabctlrestart
  六、使用Docker安装配置JenkinsSonar(代码质量检查)
  实际项目应用开发过程中,单独为SpringCloud工程部署一台运维服务器,不要安装在Kubernetes服务器上,同样按照上面的步骤安装docker和dockercompose,然后使用dockercompose构建Jenkins和Sonar。
  1、创建宿主机挂载目录并赋权mkdirpdatadockercinexusdatadockercijenkinslibdatadockercijenkinshomedatadockercisonarqubedatadockercipostgresqlchmodR777datadockercinexusdatadockercijenkinslibdatadockercijenkinshomedatadockercisonarqubedatadockercipostgresql
  2、新建JenkinsSonar安装脚本jenkinscompose。yml脚本,这里的Jenkins使用的是Docker官方推荐的镜像jenkinsciblueocean,在实际使用中发现,即使不修改插件下载地址,也可以下载插件,所以比较推荐这个镜像。version:3networks:prodnetwork:driver:bridgeservices:sonardb:image:postgres:12。2restart:alwaysports:5433:5432networks:prodnetworkvolumes:datadockercipostgresql:varlibpostgresqlenvironment:POSTGRESUSERsonarPOSTGRESPASSWORDsonarsonar:image:sonarqube:8。2communityrestart:alwaysports:19000:900019092:9092networks:prodnetworkdependson:sonardbvolumes:datadockercisonarqubeconf:optsonarqubeconfdatadockercisonarqubedata:optsonarqubedatadatadockercisonarqubelogs:optsonarqubelogsdatadockercisonarqubeextension:optsonarqubeextensionsdatadockercisonarqubebundledplugins:optsonarqubelibbundledpluginsenvironment:TZAsiaShanghaiSONARQUBEJDBCURLjdbc:postgresql:sonardb:5432sonarSONARQUBEJDBCUSERNAMEsonarSONARQUBEJDBCPASSWORDsonarnexus:image:sonatypenexus3restart:alwaysports:18081:8081networks:prodnetworkvolumes:datadockercinexus:nexusdatajenkins:image:jenkinsciblueoceanuser:rootrestart:alwaysports:18080:8080networks:prodnetworkvolumes:varrundocker。sock:varrundocker。socketclocaltime:etclocaltime:roHOME。ssh:root。sshdatadockercijenkinslib:varlibjenkinsusrbindocker:usrbindockerdatadockercijenkinshome:varjenkinshomedependson:nexussonarenvironment:NEXUSPORT8081SONARPORT9000SONARDBPORT5432capadd:ALL
  3、在jenkinscompose。yml文件所在目录下执行安装启动命令dockercomposefjenkinscompose。ymlupd
  安装成功后,展示以下信息〔〕Running55NetworkrootprodnetworkCreated0。0sContainerrootsonardb1Started1。0sContainerrootnexus1Started1。0sContainerrootsonar1Started2。1sContainerrootjenkins1Started4。2s
  4、查看服务的启动情况〔rootlocalhost〕dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES52779025a83ejenkinsjenkins:ltssbintiniusr4minutesagoUp3minutes50000tcp,0。0。0。0:180808080tcp,:::180808080tcprootjenkins12f5fbc25de58sonarqube:8。2community。binrun。sh4minutesagoRestarting(0)21secondsagorootsonar14248a8ba71d8sonatypenexus3shc{SONATYPEDI4minutesagoUp4minutes0。0。0。0:180818081tcp,:::180818081tcprootnexus1719623c4206bpostgres:12。2dockerentrypoint。s4minutesagoUp4minutes0。0。0。0:54335432tcp,:::54335432tcprootsonardb12b6852a57cc2goharborharborjobservice:v2。2。4harborentrypoint。5daysagoUp29seconds(health:starting)harborjobserviceebf2dea994fbgoharbornginxphoton:v2。2。4nginxgdaemonof5daysagoRestarting(1)46secondsagonginxadfaa287f23bgoharborharborregistryctl:v2。2。4homeharborstart。5daysagoUp7minutes(healthy)registryctl8e5bcca3aaa1goharborharbordb:v2。2。4dockerentrypoint。5daysagoUp7minutes(healthy)harbordbebe845e020dcgoharborharborportal:v2。2。4nginxgdaemonof5daysagoUp7minutes(healthy)harborportal68263dea2cfcgoharborharborlog:v2。2。4binshcusrloc5daysagoUp7minutes(healthy)127。0。0。1:151410514tcpharborlog
  我们发现jenkins端口映射到了18081,但是sonarqube没有启动,查看日志发现sonarqube文件夹没有权限访问,日志上显示容器目录的权限不够,但实际是宿主机的权限不够,这里需要给宿主机赋予权限chmod777datadockercisonarqubelogschmod777datadockercisonarqubebundledpluginschmod777datadockercisonarqubeconfchmod777datadockercisonarqubedatachmod777datadockercisonarqubeextension
  执行重启命令dockercomposefjenkinscompose。ymlrestart
  再次使用命令查看服务启动情况,就可以看到jenkins映射到18081,sonarqube映射到19000端口,我们在浏览器就可以访问jenkins和sonarqube的后台界面了
  5、Jenkins登录初始化
  从Jenkins的登录界面提示可以知道,默认密码路径为varjenkinshomesecretsinitialAdminPassword,这里显示的事Docker容器内部的路径,实际对应我们上面服务器设置的路径为datadockercijenkinshomesecretsinitialAdminPassword,我们打开这个文件并输入密码就可以进入Jenkins管理界面
  6、选择安装推荐插件,安装完成之后,根据提示进行下一步操作,直到进入管理后台界面
  备注:sonarqube默认用户名密码:adminadmin卸载命令:dockercomposefjenkinscompose。ymldownv
  七、Jenkins自动打包部署配置
  项目部署有多种方式,从最原始的可运行jar包直接部署到JDK环境下运行,到将可运行的jar包放到docker容器中运行,再到现在比较流行的把可运行的jar包和docker放到k8s的pod环境中运行。每一种新的部署方式都是对原有部署方式的改进和优化,这里不着重介绍每种方式的优缺点,只简单说明一下使用Kubernetes的原因:Kubernetes主要提供弹性伸缩、服务发现、自我修复,版本回退、负载均衡、存储编排等功能。
  日常开发部署过程中的基本步骤如下:提交代码到gitlab代码仓库gitlab通过webhook触发Jenkins构建代码质量检查Jenkins需通过手动触发,来拉取代码、编译、打包、构建Docker镜像、发布到私有镜像仓库Harbor、执行kubectl命令从Harbor拉取Docker镜像部署至k8s
  1、安装Kubernetesplugin插件、GitParameter插件(用于流水线参数化构建)、
  ExtendedChoiceParameter
  插件(用于多个微服务时,选择需要构建的微服务)、PipelineUtilitySteps插件(用于读取maven工程的。yaml、pom。xml等)和KubernetesContinuousDeploy(一定要使用1。0版本,从官网下载然后上传),Jenkins系统管理插件管理可选插件KubernetespluginGitParameterExtendedChoiceParameter,选中后点击Installwithoutrestart按钮进行安装
  Blueocean目前还不支持GitParameter插件和ExtendedChoiceParameter插件,GitParameter是通过GitPlugin读取分支信息,我们这里使用Pipelinescript而不是使用PipelinescriptfromSCM,是因为我们不希望把构建信息放到代码里,这样做可以开发和部署分离。
  2、配置Kubernetesplugin插件,Jenkins系统管理节点管理ConfigureCloudsAddanewcloudKubernetes
  3、增加kubernetes证书cat。kubeconfig以下步骤暂不使用,将certificateauthoritydata、clientcertificatedata、clientkeydata替换为。kubeconfig里面具体的值echocertificateauthoritydatabase64dca。crtechoclientcertificatedatabase64dclient。crtechoclientkeydatabase64dclient。key执行以下命令,自己设置密码opensslpkcs12exportoutcert。pfxinkeyclient。keyinclient。crtcertfileca。crt
  系统管理凭据系统全局凭据
  4、添加访问Kubernetes的凭据信息,这里填入上面登录KubernetesDashboard所创建的token即可,添加完成之后选择刚刚添加的凭据,然后点击连接测试,如果提示连接成功,那么说明我们的Jenkins可以连接Kubernetes了
  5、jenkins全局配置jdk、git和maven
  jenkinsciblueocean镜像默认安装了jdk和git,这里需要登录容器找到路径,然后配置进去。
  通过命令进入jenkins容器,并查看JAVAHOEM和git路径〔rootlocalhost〕dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES0520ebb9cc5djenkinsciblueoceansbintiniusr2daysagoUp30hours50000tcp,0。0。0。0:180808080tcp,:::180808080tcprootjenkins1〔rootlocalhost〕dockerexecit0520ebb9cc5dbinbashbash5。1echoJAVAHOMEoptjavaopenjdkbash5。1whichgitusrbingit
  通过命令查询可知,JAVAHOMEoptjavaopenjdkGITusrbingit,在Jenkins全局工具配置中配置
  Maven可以在宿主机映射的datadockercijenkinshome中安装,然后配置时,配置容器路径为varjenkinshome下的Maven安装路径
  在系统配置中设置MAVENHOME供Pipelinescript调用,如果执行脚本时提示没有权限,那么在宿主Maven目录的bin目录下执行chmod777
  6、为k8s新建harborkey,用于k8s拉取私服镜像,配置在代码的k8sdeployment。yml中使用。kubectlcreatesecretdockerregistryharborkeydockerserver172。16。20。175dockerusernamerobotgiteggdockerpasswordJqazyv7vvZiL6TXuNcv7TrZeRdL8U9n3
  7、新建pipeline流水线任务
  8、配置流水线任务参数
  9、配置pipeline发布脚本
  在流水线下面选择Pipelinescript
  pipeline{agentanyparameters{gitParameterbranchFilter:origin(。),defaultValue:master,name:Branch,type:PTBRANCH,description:请选择需要构建的代码分支choice(name:BaseImage,choices:〔openjdk:8jdkalpine〕,description:请选择基础运行环境)choice(name:Environment,choices:〔dev,test,prod〕,description:请选择要发布的环境:dev开发环境、test测试环境、prod生产环境)extendedChoice(defaultValue:gitegggateway,giteggoauth,giteggplugingiteggcodegenerator,giteggservicegiteggservicebase,giteggservicegiteggserviceextension,giteggservicegiteggservicesystem,description:请选择需要构建的微服务,multiSelectDelimiter:,,name:ServicesBuild,quoteValue:false,saveJSONParameterToFile:false,type:PTCHECKBOX,value:gitegggateway,giteggoauth,giteggplugingiteggcodegenerator,giteggservicegiteggservicebase,giteggservicegiteggserviceextension,giteggservicegiteggservicesystem,visibleItemCount:6)string(name:BuildParameter,defaultValue:none,description:请输入构建参数)}environment{PRONAMEgiteggBuildParameter{params。BuildParameter}ENV{params。Environment}BRANCH{params。Branch}ServicesBuild{params。ServicesBuild}BaseImage{params。BaseImage}k8stoken7696144b3b774588beb0db4d585f5c04}stages{stage(Cleanworkspace){steps{deleteDir()}}stage(Processparameters){steps{script{if({params。ServicesBuild}。trim()!){defServicesBuildString{params。ServicesBuild}ServicesBuildServicesBuildString。split(,)for(serviceinServicesBuild){printlnnowgot{service}}}if({params。BuildParameter}。trim()!{params。BuildParameter}。trim()!none){BuildParameter{params。BuildParameter}}else{BuildParameter}}}}stage(PullSourceCodePlatform){steps{echo{BRANCH}gitbranch:{Branch},credentialsId:gitlabTest,url:http:172。16。20。188:2080rootgiteggplatform。git}}stage(InstallPlatform){steps{echoStartPlatformBuildsh{MAVENHOME}binmvnDskipTeststruecleaninstall{BuildParameter}echoEndPlatformBuild}}stage(PullSourceCode){steps{echo{BRANCH}gitbranch:{Branch},credentialsId:gitlabTest,url:http:172。16。20。188:2080rootgiteggcloud。git}}stage(Build){steps{script{echoStartCloudParentInstallsh{MAVENHOME}binmvnDskipTeststruecleaninstallP{params。Environment}{BuildParameter}echoEndCloudParentInstalldefworkspacepwd()for(serviceinServicesBuild){stage(buildCloud{service}){echoStartCloudBuild{service}shcd{workspace}{service}{MAVENHOME}binmvnDskipTeststruecleanpackageP{params。Environment}{BuildParameter}jib:buildDjib。httpTimeout200000DsendCredentialsOverHttptruefpom。xmlechoEndCloudBuild{service}}}}}}stage(Synctok8s){steps{script{echoStartSynctok8sdefworkspacepwd()mainpomreadMavenPomfile:pom。xmlprofilesmainpom。getProfiles()defversionmainpom。getVersion()defnacosAddrdefnacosConfigPrefixdefnacosConfigGroupdefdockerHarborAddrdefdockerHarborProjectdefdockerHarborUsernamedefdockerHarborPassworddefserverPortdefcommonDeployment{workspace}k8sdeployment。yamlfor(profileinprofiles){获取对应配置if(profile。getId(){params。Environment}){nacosAddrprofile。getProperties()。getProperty(nacos。addr)nacosConfigPrefixprofile。getProperties()。getProperty(nacos。config。prefix)nacosConfigGroupprofile。getProperties()。getProperty(nacos。config。group)dockerHarborAddrprofile。getProperties()。getProperty(docker。harbor。addr)dockerHarborProjectprofile。getProperties()。getProperty(docker。harbor。project)dockerHarborUsernameprofile。getProperties()。getProperty(docker。harbor。username)dockerHarborPasswordprofile。getProperties()。getProperty(docker。harbor。password)}}for(serviceinServicesBuild){stage(Sync{service}ToK8s){echoStartSync{service}tok8sdir({workspace}{service}){pomreadMavenPomfile:pom。xmlechogroup:artifactId:{pom。artifactId}defdeployYamlk8sdeployment{pom。artifactId}。yamlyamlreadYamlfile:。srcmainresourcesbootstrap。ymlserverPort{yaml。server。port}if(fileExists({workspace}{service}k8sdeployment。yaml)){commonDeployment{workspace}{service}k8sdeployment。yaml}else{commonDeployment{workspace}k8sdeployment。yaml}script{shseds{APPNAME}{pom。artifactId}g;s{IMAGEURL}{dockerHarborAddr}g;s{IMAGEPROGECT}{PRONAME}g;s{IMAGETAG}{version}g;s{APPPORT}{serverPort}g;s{SPRINGPROFILE}{params。Environment}g{commonDeployment}{deployYaml}kubernetesDeployconfigs:{deployYaml},kubeconfigId:{k8stoken}}}echoEndSync{service}tok8s}}echoEndSynctok8s}}}}}常见问题:
  1、PipelineUtilitySteps第一次执行会报错Scriptsnotpermittedtousemethod或者ScriptsnotpermittedtousestaticMethodorg。codehaus。groovy。runtime。DefaultGroovyMethodsgetPropertiesjava。lang。Object
  解决:系统管理InprocessScriptApproval点击Approval
  2、通过NFS服务将所有容器的日志统一存放在NFS的服务端
  3、KubernetesContinuousDeploy,使用1。0。0版本,否则报错,不兼容
  4、解决docker注册到内网问题spring:cloud:inetutils:ignoredinterfaces:docker0
  5、配置ipvs模式,kubeproxy监控Pod的变化并创建相应的ipvs规则。ipvs相对iptables转发效率更高。除此以外,ipvs支持更多的LB算法。kubectleditcmkubeproxynkubesystem
  修改mode:ipvs
  重新加载kubeproxy配置文件kubectldeletepodlk8sappkubeproxynkubesystem
  查看ipvs规则ipvsadmLn
  6、k8s集群内部访问外部服务,nacos,redis等a、内外互通模式,在部署的服务设置hostNetwork:truespec:hostNetwork:trueb、Endpoints模式kind:EndpointsapiVersion:v1metadata:name:nacosnamespace:defaultsubsets:addresses:ip:172。16。20。188ports:port:8848apiVersion:v1kind:Servicemetadata:name:nacosnamespace:defaultspec:type:ClusterIPports:port:8848targetPort:8848protocol:TCPc、service的type:ExternalName模式,ExternalName使用CNAME重定向,因此无法执行端口重映射,域名使用EndPoints和type:ExternalName
  以上外部新建yaml,不要用内部的,这些需要在环境设置时配置好。
  7、k8s常用命令:
  查看pod:kubectlgetpods
  查看service:kubectlgetsvc
  查看endpoints:kubectlgetendpoints
  安装:kubectlapplyfXXX。yaml
  删除:kubectldeletefxxx。yaml
  删除pod:kubectldeletepodpodName
  删除service:kubectldeleteserviceserviceName
  进入容器:kubectlexecitpodsNamexxxxxxndefaultbinsh

仲景千古治腰方,阳气入腰,百病全消,脾肾腰膝全暖了如果你经常性出现腰疼屁股疼腿疼,骨关节疼等症状,而且这些症状在天气转冷或者风雨天气会加重加重后还会出现屁股凉,腿凉关节冷痛的情况,那你就要注意了,今天送您一个医圣仲景方,补阳祛湿寒痛风关节痛,浮肿身困,汗出怕风,经方防己黄芪汤,益气健脾利水从痛风的病因病机,以方证合一角度,解读防己黄芪汤为何治痛风中医对痛风的病因病机说法很多,发展到今天,我认为以下的观点,应该是主流1。脾胃亏虚,正气虚弱,邪方可干所致。脾胃亏虚,有先天冷,早餐给孩子做碗鲜虾面,味道鲜美,营养全面,一天元气满满本期导读天冷了,早餐给孩子做碗鲜虾面,味道鲜美,营养全,一天元气满满天冷了,很多人都为孩子吃什么早餐犯愁,吃面条是不错的选择,简单省事,今天分享一道早餐面条的做法,早餐给孩子这做碗那个曾经挑战詹姆斯的小孩,昨天在对篮网的比赛里射下了32分很多人都说詹姆斯很棒。我想看看他有多厉害。我认为没有人比我更好,他必须向我展示他比我更好。这是今年6月25日,步行者六号秀马瑟林被选中后对记者说过的话。当时的他被视为不知天高地厚只曾经最好的中杯三星手机三星S10,可惜性能沦为千元机水平三星S10这个10是指盖乐世S系列已经出到第十代的意思,三星粉丝更愿意称作它为十代,先于时代。也可以理解为10力雄厚。当年这台手机卖的贼贵,仅仅是中杯S108128G预约价为630茂名2家企业上榜2022广东企业500强日前,广东省企业联合会广东省企业家协会发布2022广东企业500强榜单,该榜单以企业营业收入作为排序依据。其中,茂名有2家企业上榜,分别是广东新华粤石化集团股份公司和茂名石化实华股奇瑞突然变成黑马?销量暴增的背后有什么深层原因?要说今年车市的黑马,相信大家都会说是比亚迪。其实除了比亚迪之外,奇瑞的表现也非常不错,9月销量高达13。8万辆,仅次于比亚迪和一汽大众,一到九月的总销量也有83。2万辆,位居第七,(体育)乒乓球WTT世界杯决赛王楚钦男单夺冠(2)当日,在河南新乡举行的WTT世界杯决赛男子单打决赛中,中国选手王楚钦以4比2战胜日本选手张本智和,夺得冠军。10月30日,王楚钦在比赛中回球。新华社发(高志勇摄)10月30日,张本元宇宙已经热了一年,明年会有什么发展趋势?编者按2021年10月28日,脸书CEO马克扎克伯格宣布公司改名为Meta,将把发展重点聚焦在元宇宙领域。尽管名词元宇宙最早在1992年出版的科幻小说雪崩中被使用,但扎克伯格的这一四川自贡女首富王春香发家史北大学霸回国创业,四姐妹身价23亿时代日新月异,随着社会的进步和发展,越来越多的女性群体开始在商业领域崭露头角,近些年来,更是涌现出了一大批耳熟能详的女性企业家,她们凭借自己的智慧和汗水,以巾帼不让须眉的姿态,创造欧文禁赛事件始末篮网管理层处理得很及时!欧文态度摆得很正近日,篮网球星欧文更新社媒支持了一部与反犹太相关的电影。在网络上引起了很多有心人的关注并进行了持续关注!今日,篮网老板蔡崇信更新推特写道我对凯里似乎支持了一部基于一本充满反犹太主义
至言明语揭示人生千古未解之谜道尽人生百年伟大美好意义至言明语揭示人生千古未解之谜道尽人生百年伟大美好意义人生有什么伟大美好意义?这是人生的千古未解之谜!这个重大问题对每个人都有极其重要的价值意义!只有明白人生的伟大美好意义!人生才能快乐神回复请给18岁的我一个人生忠告1。请给18岁的我一个人生忠告。2。有没有适合性格阳刚的男人使用的表情包?3。期待神评!!!4。我发现手好看的男生一般长得不差。5。求解一公里不是两千米吗?6。我的鱼塘炸了7。久病把握人生主旋律,让舞步动起来有的人回忆起往事来,感叹,曾经的自己是多么的辉煌,是多么的骄傲。恍惚惜日的光环还在回荡在上空,潮起潮落,久久不能平静。身边的人听了他讲的故事,敬佩又赞叹,为什么有好的开局,却没有好独家腾讯音乐叫停TME数字藏品业务,原团队成员已内部活水记者司林威崔鹏11月16日,界面新闻独家获悉,腾讯音乐已经叫停TME数字藏品业务,原团队部分成员已内部活水。TME数字藏品业务于2021年8月初在QQ音乐应用中预热,是国内首个将N2023四大卫视跨年演唱会拟邀名单江苏阵容最豪华,湖南最懂观众2022年仅剩下一个半月了,每年临近年末的时候,各大卫视都有一个非常重要的工作,那就是筹备跨年演唱会。每年的跨年演唱会可以说是各大卫视的一次年终汇报总结,也是展现实力的重要平台,各李少莉已经正式回单位上班了,你们应该向她道歉虽然已经十几天了还没公布调查结果,不过李少莉已经回去上班了,看来李少莉是没有任何问题的,她经受住了调查。李少莉低调露面做核酸,不再打扮精致,就是穿了普通一件羽绒服,没有穿皮草大衣那长得歪瓜裂枣,整得美若天仙,这6位女星都靠脸逆天改命在这个看脸的社会,长得好看就是比别人命好。娱乐圈更是如此。没有最美只有更美,为了艳压群芳,女明星甘愿忍受千刀万剐之苦。可惜一不留神,娱乐圈的归宿就成了蔡明老师。比方说,在下图蔡明老如果台湾永远不跟我们谈判怎么办?邓公早已给出答案1977年,美国国务卿万斯访问中国,用中美恢复建交就台湾问题,向邓小平提出无理要求一中方需要承诺,坚决不通过武力解决台湾问题。二中美联络处升级为大使馆,允许美国建立台湾联络处。三中内娱女星的畸形审美,让蔡明化成常态,个个整的一言难尽文2号探秘人编辑2号探秘人为了能赚钱,食品界掀起了科技与狠活。同理,为了能变美,娱乐圈的女明星们也不甘示弱,靠着各种科技与狠活,将自己全副武装。可是人造美人的副作用,竟然产生了一个台湾走向世界的真正通关密码是什么?中美洲国家萨尔瓦多日前废除所谓萨台自贸协议,并且和中方共同宣布,愿尽早启动并完成两国自贸协议谈判。外交部高度赞赏萨方站在历史正确一边,认为这再次彰显坚持一个中国原则是国际大义大势所中美会晤刚结束,就传出美台签署协议的消息,大陆或将实施反制当地时间11月14日下午,中美高层在巴厘岛举行了面对面会晤,历时3小时12分,举世瞩目。不少舆论注意到,本次会晤地点选在巴厘岛中方代表团驻地,而且会晤也是由美方主动邀请的,这表明中
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网