基于 kubernets、jenkins、etcd 的高效构建工具(全文) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
EthanLiao
V2EX    Docker

基于 kubernets、jenkins、etcd 的高效构建工具(全文)

  •  
  •   EthanLiao 2017-04-24 09:05:47 +08:00 5002 次点击
    这是一个创建于 3092 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Kubernetes 是 Google 开源的容器集群管理系统,其提供应用部署、维护、 扩展机制等功能,利用 Kubernetes 能方便地管理跨机器运行容器化的应用。下面我将在 macos 上搭建 minikube 与 kubectl 的 k8s 环境。

    Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。

    Etcd 是一个高可用的键值存储系统,主要用于共享配置和服务发现。下面利用 etcd 作为旁路系统,主要用来实现状态变更的定制化操作与配置同步。

    环境搭建

    • mac os 10.12.3
    • docker <sup id="fnref:docker">1</sup>
    • jenkins <sup id="fnref:jenkins">2</sup>
    • registry <sup id="fnref:registry">3</sup>
    • minikube && kubectl <sup id="fnref:minikube">4</sup>
    • etcd <sup id="fnref:etcd">5</sup>

    在 k8s 中创建应用

    deploy app in k8s 此时应用所使用的镜像为app-k8stest:2

    稍等片刻直到应用启动完毕! app runing

    minikube service k8stest --url

    输入上述 host 可以打开应用。 k8s app runing

    新建并配置 jinkins 工作空间

    配置 jinkins 工作空间 构建的代码仓库为[email protected]:mythsumm/k8s-test.git/test 构建时需执行build.sh这个 shell 脚本,主要有三个步骤。

    1. 用新提交的代码构建新镜像。
    2. 将镜像打上标签并推到 registry 服务中。
    3. 将容器中的镜像动态更新为刚 build 好的 registry 服务中的镜像。
    #!/usr/bin/env sh JOB_NAME=${JOB_NAME:-"k8stest"} BUILD_NUMBER=${BUILD_NUMBER:-1} REGISTRY_URL=${REGISTRY_URL:-"127.0.0.1:5000/liaotao/"} #docker build echo execute : docker build -t app-${JOB_NAME}:${BUILD_NUMBER} . docker build -t app-${JOB_NAME}:${BUILD_NUMBER} . #docker tag echo execute : docker tag app-${JOB_NAME}:${BUILD_NUMBER} ${REGISTRY_URL}app-${JOB_NAME}:${BUILD_NUMBER} docker tag app-${JOB_NAME}:${BUILD_NUMBER} ${REGISTRY_URL}app-${JOB_NAME}:${BUILD_NUMBER} #docker push echo execute : docker push ${REGISTRY_URL}app-${JOB_NAME}:${BUILD_NUMBER} docker push ${REGISTRY_URL}app-${JOB_NAME}:${BUILD_NUMBER} #Update existing container image(s) of resources /usr/local/bin/kubectl set image deployment/k8stest k8stest=${REGISTRY_URL}app-${JOB_NAME}:${BUILD_NUMBER} --namespace=default --kubecOnfig=/Users/ethanliao/.kube/config 

    构建过程中生成的镜像 registry

    如若此时修改server.php中的代码提交且在 jenkins 中再构建完毕,应用将使用最近一次构建的镜像。

    -<?php -var_dump($_SERVER); +<?php +phpinfo(); 

    构建:

    jenkins

    k8s 中的镜像已经改变:

    images

    此时,应用也改变了。

    kubernetes app runing

    若应用使用的变量经常发生改变,如数据库地址等,则完全没有必要再重复一遍上面的流程。可以搭建一套变量配置系统,当相关应用所使用的变量发生改变时则改变其在 etcd 中的值,如若此时该应用一直侦听 etcd 中的值,就可以同步至最新的变量。

    1. 搭建 etcd 服务器
    2. 变量配置系统中用 etcd 设置值 composer update “ linkorb/etcd-php ”: “ 1.2.1 ” && $client->set(‘’, ‘’);
    3. 容器在启动后运行bypass.sh循环监听值的变化

    结束语

    如上所述,则可以搭建一套高效的构建工具。既可以使用 k8s 的灵活伸缩性,也能方便的配置变量等…。

    refs:

    原文地址: http://postdev.net/2017/04/23/%E5%9F%BA%E4%BA%8Ekubernets-jenkins-etcd%E7%9A%84%E9%AB%98%E6%95%88%E6%9E%84%E5%BB%BA%E5%B7%A5%E5%85%B7.html

    Suclogger
        1
    Suclogger  
       2017-04-24 09:31:33 +08:00
    全文转载
    @Livid
    EthanLiao
        2
    EthanLiao  
    OP
       2017-04-24 09:35:00 +08:00
    我的原创好嘛,大哥。昨晚发的也被你们删掉了。 @Suclogger @Livid
    fuxiaohei
        3
    fuxiaohei  
       2017-04-24 09:38:22 +08:00
    标题 Kubernetes 拼错啦
    EthanLiao
        4
    EthanLiao  
    OP
       2017-04-24 09:40:53 +08:00
    是哦,这下尴尬啦。哈哈哈
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2221 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 00:58 PVG 08:58 LAX 17:58 JFK 20:58
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86