V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
EthanLiao
V2EX  ›  Docker

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

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

    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   ·   实用小工具   ·   5681 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:30 · PVG 11:30 · LAX 19:30 · JFK 22:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.