我是007 发表于 2018-1-5 22:58:26

第四十四章 微服务CICD(6)

https://images2015.cnblogs.com/blog/866881/201611/866881-20161115122750935-415574011.png
  总体流程:


[*]在开发机开发代码后提交到gitlab
[*]之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry
[*]之后将在k8s-master上执行rc、service的创建,进而创建Pod,从私服拉取镜像,根据该镜像启动容器
  在第四十三章 微服务CICD(5)- gitlab + jenkins + docker中,实现了前两步。本节实现第三步
  一、打通jenkins与k8s-master两台机器之间的ssh无密码访问
  参考:第四十二章 微服务CICD(4)- jenkins + gitlab + webhooks + publish-over-ssh(2)
  添加ssh server:
https://images2015.cnblogs.com/blog/866881/201611/866881-20161115123737451-1954003199.png
  说明:由于不需要拷贝jenkins机器上的文件到10.211.55.6,所以Remote Directory不填。
  二、jenkins服务配置
https://images2015.cnblogs.com/blog/866881/201611/866881-20161115124115888-977652099.png
  选择机器,执行命令。
  三、k8s-master(10.211.55.6)
  1、在/data/目录下创建rc和svc文件
  1.1、myservice1-docker-rc.yaml
  

apiVersion: v1  

kind: ReplicationController  

metadata:  

name: myservice1-docker  

spec:  

replicas: 2  

selector:  

app: myservice1-docker  

template:  

metadata:  

labels:  

app: myservice1-docker  

spec:  

containers:  

- name: myservice1-docker  

image: 10.211.55.4:5000/com.xxx/myservice1-docker:1.0-SNAPSHOT  

imagePullPolicy: Always  

ports:  

- containerPort: 8080  

  说明:imagePullPolicy:


[*]Always:总是拉取镜像,如果tag是lastest的话,该配置是默认值
[*]IfNotPresent:如果镜像不存在,则拉取镜像,如果tag不是lastest的话,该配置是默认值
[*]Never
  1.2、myservice1-docker-svc.yaml
  

apiVersion: v1  

kind: Service  

metadata:  

name: myservice1-docker  

spec:  

type: NodePort  

ports:  

- port: 8080  

nodePort: 30001  

selector:  

app: myservice1-docker  

  2、在/data/script/目录下创建service_start.sh脚本
  

#!/bin/bash  

export service_name=$1  

sleep_second=3  

  
echo 'kubectl delete rc ${service_name}'
  
kubectl delete rc ${service_name}
  

  
echo 'kubectl delete service ${service_name}'
  
kubectl delete service ${service_name}
  

  
echo 'kubectl delete pods -l app=${service_name}'
  
kubectl delete pods -l app=${service_name}
  

  
sleep ${sleep_second}
  

  
echo 'create rc'
  
kubectl create -f /data/${service_name}-rc.yaml
  

  
echo 'create service'
  
kubectl create -f /data/${service_name}-svc.yaml
  

  说明:


[*]首先删除相应service的rc,service,以及拥有app=${service_name}标签的所有pods

[*]第一次执行该脚本的时候,由于rc、service、pod不存在,删除的话,会打出error日志,无所谓(没任何影响)。

[*]之后,睡3s
[*]最后,创建rc(此时会创建pod,并从registry拉取镜像,最后根据该镜像启动容器),创建service(提供对外访问接口)
  三、测试
  1、本地:


[*]git add --all
[*]git commit -m"test k8s cicd"
[*]git push origin HEAD:dev
  2、查看jenkins的console
  3、浏览器访问http://10.211.55.8:30001/docker/hello
页: [1]
查看完整版本: 第四十四章 微服务CICD(6)