菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
2559
0

基于 kubernetes、jenkins、etcd 的高效构建工具

原创
05/13 14:22
阅读数 2327

原文地址:http://postdev.net/2017/04/23/%E5%9F%BA%E4...

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

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

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

环境搭建

  • mac os 10.12.3
  • docker 1
  • jenkins 2
  • registry 3
  • minikube && kubectl 4
  • etcd 5

在k8s中创建应用

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

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

minikube service k8stest --url

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

新建并配置jinkins工作空间

配置jinkins工作空间
构建的代码仓库为git@github.com: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:


  1. <p><a href="https://github.com/widuu/chinese_docker/blob/master/installation/mac.md">Mac OS 安装 Docker</a>&#160;<a href="#fnref1:docker" rev="footnote" class="footnote-backref">&#8617;</a></p>
  2. <p><a href="http://www.jianshu.com/p/ab3302cd68eb">Mac OS 安装 Jenkins</a>&#160;<a href="#fnref1:jenkins" rev="footnote" class="footnote-backref">&#8617;</a></p>
  3. <p><a href="https://hub.docker.com/_/registry/">run registry in docker</a>&#160;<a href="#fnref1:registry" rev="footnote" class="footnote-backref">&#8617;</a></p>
  4. <p><a href="http://www.jianshu.com/p/a42eeb66a19c">Mac OS 安装 kubernetes</a>&#160;<a href="#fnref1:minikube" rev="footnote" class="footnote-backref">&#8617;</a></p>
  5. <p><a href="https://hub.docker.com/r/microbox/etcd/">run etcd in docker</a>&#160;<a href="#fnref1:etcd" rev="footnote" class="footnote-backref">&#8617;</a></p>

发表评论

0/200
2559 点赞
0 评论
收藏
为你推荐 换一批