前提条件:

K8S 已部署好,traefik也部署完成

K8S 集群上都挂载NFS盘,防止jenkins挂掉后配置消失

基础镜像使用 lnp,PHP 5.6.31  nginx/1.8.1 

基础镜像下载地址:docker pull liuyusheng/alpine-lnp:v1

docker私有仓库

[root@master jenkis]# cat jenkins-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jenkins
spec:
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 2
maxUnavailable: 0
template:
metadata:
labels:
app: jenkins-last
spec:
nodeSelector:
jenkins: jenkins
containers:
- name: jenkins
image: jenkins:alpine
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
name: web
protocol: TCP
volumeMounts:
- name: jenkinshome
mountPath: /var/jenkins_home
volumes:
- name: jenkinshome
nfs:
server: 192.168.0.161
path: /data/jenkins ---
kind: Service
apiVersion: v1
metadata:
name: jenkins
spec:
ports:
- port: 8080
targetPort: 8080
name: web
- port: 50000
targetPort: 50000
name: agent
selector:
app: jenkins-last
jenkins-ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-ingress
namespace: default
spec:
rules:
- host: my.jenkins.com
http:
paths:
- path: /
backend:
serviceName: jenkins
servicePort: 8080

启动安装jenkins

kubectl create -f .

traefik 上可以查看

配置好SSH KEY  连接,这里不做配置SSH-KEY 操作

jenkins

SERVER="192.168.0.153"
USER="root"
PORT="22"
GROUP_NAME="lin_lang"
JOB_NAME="fabaoguo"
DST_PATH="/data/tmp/"
HOME_DIR="/var/jenkins_home"
FILE_NAME=${JOB_NAME}.tar.gz DOCKER_REG="192.168.0.153:5000"
NGINX_CONF="www.${JOB_NAME}.com.conf"
BASE_IMG="alpine:v5"
#BUILD_NUM="v1" WWW_NAME="www.fabaoguo.com" BUILD_NUM=`date +%F-%H-%M-%S` #init
/usr/bin/test -d ${HOME_DIR}/releaseDir || /bin/mkdir -p ${HOME_DIR}/releaseDir /bin/tar -zcf ${HOME_DIR}/releaseDir/${FILE_NAME} --exclude=.svn --exclude releaseDir * \cp ${HOME_DIR}/scripts/www.example.com.conf ${HOME_DIR}/scripts/${NGINX_CONF}
sh ${HOME_DIR}/scripts/replace.sh ${HOME_DIR}/scripts/${NGINX_CONF} ${JOB_NAME} #deploy
/usr/bin/scp ${HOME_DIR}/releaseDir/${FILE_NAME} ${USER}@${SERVER}:${DST_PATH};
/usr/bin/scp ${HOME_DIR}/scripts/www.${JOB_NAME}.com.conf ${USER}@${SERVER}:${DST_PATH} /usr/bin/ssh -p ${PORT} ${USER}@${SERVER} "sh /data/scripts/build_lnp.sh ${FILE_NAME} ${NGINX_CONF} ${BASE_IMG} ${DOCKER_REG}/${JOB_NAME} ${BUILD_NUM}"; /usr/bin/ssh -p ${PORT} ${USER}@${SERVER} "sh /data/scripts/start_app.sh ${WWW_NAME} ${JOB_NAME} ${JOB_NAME} ${BUILD_NUM} ${JOB_NAME}.yaml" rm -f ${HOME_DIR}/releaseDir/${FILE_NAME}
rm -f ${HOME_DIR}/scripts/www.${JOB_NAME}.com.conf
192.168.0.153服务器上
[root@master scripts]# cat build_lnp.sh
#!/bin/bash
APP_NAME=$1
NGINX_CONF=$2
BASE_IMG=$3
FINISH_IMG=$4
BUILD_NUM=$5 test -d /data/tmp || mkdir /data/tmp -p if [ ! -n "$1" ] || [ ! -n "$2" ] || [ ! -n "$3" ] || [ ! -n "$4" ] || [ ! -n "$5" ] ;then
echo "build error,please input vars"
exit 1
else
ADD_FILE="ADD ${APP_NAME} /opt/www/"
ADD_TWO="ADD ${NGINX_CONF} /etc/nginx/conf.d/"
cp /data/build/Dockerfile_template /data/tmp/Dockerfile
sed -i "s#BASE_IMG#$BASE_IMG#" /data/tmp/Dockerfile
sed -i "s#ADD_FILE#$ADD_FILE#" /data/tmp/Dockerfile
sed -i "s#ADD_TWO#$ADD_TWO#" /data/tmp/Dockerfile
docker build --no-cache=true -t ${FINISH_IMG}:${BUILD_NUM} /data/tmp/
docker push ${FINISH_IMG}:${BUILD_NUM}
echo "build img is ${FINISH_IMG}:${BUILD_NUM}" fi
rm -rf /data/tmp/*

DOCKERFILE 模板

[root@master build]# cat Dockerfile_template
FROM BASE_IMG
MAINTAINER netop
ENV REFRESHED_AT 2017-11-09
ADD_FILE
ADD_TWO

创建K8S pod

[root@master scripts]# cat start_app.sh
#!/bin/sh WWW_NAME=$1
APP_NAME=$2
FINISH_IMG=$3
BUILD_NUM=$4 APP_DIR="/data/scripts"
APP_YAML="$5" if [ ! -n "$1" ] || [ ! -n "$2" ] || [ ! -n "$3" ] || [ ! -n "$4" ] || [ ! -n "$5" ];then
echo "build error,please input vars"
else
\cp $APP_DIR/deploy/example-app.yaml $APP_DIR/app/$APP_YAML
sed -i s"/example/${APP_NAME}/g" ${APP_DIR}/app/${APP_YAML}
sed -i s"/myimages/"${FINISH_IMG}"/g" ${APP_DIR}/app/${APP_YAML}
sed -i s"/build_num/${BUILD_NUM}/g" ${APP_DIR}/app/${APP_YAML}
sed -i s"/www.host.com/${WWW_NAME}/g" ${APP_DIR}/app/${APP_YAML} fi kubectl apply -f $APP_DIR/app/$APP_YAML --record

k8s APP yaml模板

[root@master scripts]# cat deploy/example-app.yaml
apiVersion: v1
kind: Service
metadata:
name: alpine-example
spec:
ports:
- port: 80
targetPort: 80
selector:
app: alpine-example
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: alpine-example
spec:
replicas: 1
minReadySeconds: 60
strategy:
rollingUpdate:
maxSurge: 50%
template:
metadata:
labels:
app: alpine-example
spec:
containers:
- name: alpine-example
image: 192.168.0.153:5000/myimages:build_num
#imagePullPolicy: IfNotPresent
imagePullPolicy: Always
ports:
- containerPort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: alpine-example
spec:
rules:
- host: www.host.com
http:
paths:
- path: /
backend:
serviceName: alpine-example
servicePort: 80
[root@master two]# kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE
alpine-fabaoguo-3144943877-l9l8j 1/1 Running 0 22m 10.254.97.131 master

Traefik 上查看

jenkins + k8s + lnp的更多相关文章

  1. jenkins+k8s部署

    1. jenkins配置部署,从git或者svn等拉取代码,编制打包,在博客的jenkins那块有具体的讲解 2. 将打好的包war/java包拷贝到k8s-Master,或者在jenkins上也行, ...

  2. Jenkins Kubernetes Slave 调度效率优化小记

    Jenkins K8S Slave 调度效率优化 by yue994488@126.com 使用kubernetes为测试工具Gatling进行大规模压测,压测期间发现Jenkins调度压测实例较慢, ...

  3. .Net Core2.1 秒杀项目一步步实现CI/CD(Centos7.2)系列一:k8s高可用集群搭建总结以及部署API到k8s

    前言:本系列博客又更新了,是博主研究很长时间,亲自动手实践过后的心得,k8s集群是购买了5台阿里云服务器部署的,这个集群差不多搞了一周时间,关于k8s的知识点,我也是刚入门,这方面的知识建议参考博客园 ...

  4. 实现CI/CDk8s高可用集群搭建总结以及部署API到k8s

    实现CI/CD(Centos7.2)系列二:k8s高可用集群搭建总结以及部署API到k8s 前言:本系列博客又更新了,是博主研究很长时间,亲自动手实践过后的心得,k8s集群是购买了5台阿里云服务器部署 ...

  5. k8s~helm镜像版本永远不要用latest

    对于容器编排工具k8s来说,你可以使用它规定的yaml格式的脚本,使用客户端kubectl来与k8s进行通讯,将你定义好的yaml部署脚本应用到k8s集群上,而这对yaml脚本一般来说都是很像的,就是 ...

  6. Kubernetes笔记(二):了解k8s的基本组件与概念

    前文 Kubernetes笔记(一):十分钟部署一套K8s环境 介绍了如何快速搭建一个k8s系统.为了继续使用k8s来部署我们的应用,需要先对k8s中的一些基本组件与概念有个了解. Kubernete ...

  7. k8s实验操作记录文档

    k8s实验操作记录文档,仅供学习参考! 文档以实验操作的过程及内容为主进行记录,涉及少量的介绍性文字(来自网络开源). 仅汇总主题所有链接,详细内容查看需要切换到相关链接.https://github ...

  8. 自己编写k8s

    ## 基于Docker和Kubernetes的企业级DevOps实践训练营 ### 课程准备 1. 离线镜像包 百度:https://pan.baidu.com/s/1N1AYGCYftYGn6L0Q ...

  9. docker | jenkins 实现自动化部署项目,后端躺着把运维的钱挣了!(上)

    前言 背景 最近在帮学校导师写项目,团队有4个人,项目前后端分离.如果是选择瀑布式开发:(在约定好接口的情况下)A.B同学写前端,C.D同学写后端,然后约定一个时间统一联调,最后将项目交付安装到客户机 ...

随机推荐

  1. vue基于d2-admin的RBAC权限管理解决方案

    前两篇关于vue权限路由文章的填坑,说了一堆理论,是时候操作一波了. vue权限路由实现方式总结 vue权限路由实现方式总结二 选择d2-admin是因为element-ui的相关开源项目里,d2-a ...

  2. c#基础学习(0708)之静态类

    再静态类中,所包含的所有成员都是“静态成员” 不是所有的静态成员都必须卸载静态类中 静态成员时属于“类”的,不是属于具体“对象”的,所以访问静态成员的时候不能通过对象来访问(对象.属性名),只能通过“ ...

  3. vs2013中,自定义mvc 添加视图脚手架

    参考文章: http://weblogs.asp.net/imranbaloch/archive/2013/09/15/customizing-the-asp-net-mvc-5-web-api-2- ...

  4. Error: EACCES: permission denied, access '/usr/local/lib/node_modules'

    sudo chown -R username /usr/local/lib/node_modules 注:username要具有/usr/local/lib/node_modules的读写权限

  5. VFL使用

      关于界面布局约束的方法有很多,纯代码布局,可以使用官方原生布局(很繁琐).VFL.Masonary第三方等,在xib或者storyboard中也可以使用Autolayout的界面约束进行布局约束. ...

  6. K8S基础概念

    一.核心概念 1.Node Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod.Node上运行着Kubernetes的Kubelet.kube ...

  7. POJ3278(KB1-C 简单搜索)

    Catch That Cow Description Farmer John has been informed of the location of a fugitive cow and wants ...

  8. Python 2 和 Python 3 有哪些主要区别

    概述# 原稿地址:使用 2to3 将代码移植到 Python 3 几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下.为了简化这个转换过程,Python 3自带了一个 ...

  9. gulp实用配置(1)——demo

    在React和Vue推进下,现在很多人都在使用webpack作为自动化构建工具,但其实在很多时候我们并不是一定需要用到它,gulp这样的轻量级构建工具就足够了. 最近一段时间不是太忙,所以就写了三份配 ...

  10. EventBus 3.0源码解析

    现在网上讲解EventBus的文章大多数都是针对2.x版本的,比较老旧,本篇文章希望可以给大家在新版本上面带来帮助. EventBus 是专门为Android设计的用于订阅,发布总线的库,用到这个库的 ...