K8S集群中部署jenkins 原创 ylw6006 2018-08-14 15:10:14 博主文章分类:Kubernetes ©著作权 文章标签 jenkins k8s 文章分类 运维 ©著作权归作者所有:来自51CTO博客作者ylw6006的原创作品,请联系作者获取转载授权,否则将追究法律责任 本文介绍在k8s环境中进行jenkins server的部署和配置。Jenkins是一个开源的、功能强大的持续集成和持续构建工具,采用master和salve架构,我们通过将jenkins集成环境部署在k8s集群中,可以实现jenkins slave按需创建、动态的伸缩。同时也提供了在k8s环境中应用的持续部署解决方案。 一、准备docker镜像文件 1、编译jenkins server docker镜像,默认的jenkis镜像已包含jdk,版本为1.8.0_171 # cat dockerfile FROM jenkins MAINTAINER ylw@fjhb.cn ENV MAVEN_HOME /usr/local/maven ENV JAVA_HOME /usr/local/java ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH ${JAVA_HOME}/bin:${MAVEN_HOME}/bin:${PATH} COPY apache-maven-3.5.4 /usr/local/maven USER root RUN mkdir -p /usr/local/maven/repository && ln -s /usr/java/jdk1.8.0_171 /usr/local/java # docker build -t harbor.59iedu.com/fjhb/jenkins:2018-08-12-v1 . # docker push harbor.59iedu.com/fjhb/jenkins:2018-08-12-v1 2、编译jenkins slave镜像 可以根据实际情况配置maven内网私服nexus,私服可以避免编译过程中通过公网下载依赖的jar包,配置私服需要把对应的setting.xml文件打包到apache-maven-3.5.4/conf目录下; libltdl.so.7文件的获取路径为操作系统路径/usr/lib64/libltdl.so.7(实际上是个软链接,需要copy出来重命名) slave.jar文件的获取路径为http://jenkins-server/jnlpJars/slave.jar # cat Dockerfile FROM openshift/base-centos7 MAINTAINER ylw@fjhb.cn COPY apache-maven-3.5.4 /usr/local/maven COPY jdk1.8.0_171 /usr/local/java COPY kubectl /usr/local/bin/kubectl COPY libltdl.so.7 /usr/lib64/libltdl.so.7 COPY slave.jar /usr/share/jenkins/slave.jar COPY jenkins-slave /usr/local/bin/jenkins-slave ENV HOME /home/jenkins ENV AGENT_WORKDIR=/home/jenkins/agent ENV JAVA_HOME /usr/local/java ENV MAVEN_HOME /usr/local/maven/ ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH ${JAVA_HOME}/bin:${MAVEN_HOME}/bin:${PATH} ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2" RUN chmod 755 /usr/share/jenkins \ && chmod 644 /usr/share/jenkins/slave.jar RUN mkdir -p /home/jenkins/.jenkins \ && mkdir -p ${AGENT_WORKDIR} \ && yum -y install git subversion sshpass VOLUME /home/jenkins/.jenkins VOLUME ${AGENT_WORKDIR} WORKDIR /home/jenkins USER root ENTRYPOINT ["jenkins-slave"] # docker build -t harbor.59iedu.com/fjhb/jenkins-slave-toolkit:2018-08-10-v1 . # docker push harbor.59iedu.com/fjhb/jenkins-slave-toolkit:2018-08-10-v1 二、创建jenkins server 1、创建pv和pvc # cat pv.yaml --- apiVersion: v1 kind: PersistentVolume metadata: name: jenkins-master-vol spec: capacity: storage: 5Gi accessModes: - ReadWriteMany nfs: path: /home/jenkins server: 192.168.115.6 persistentVolumeReclaimPolicy: Recycle --- apiVersion: v1 kind: PersistentVolume metadata: name: maven-repository spec: capacity: storage: 5Gi accessModes: - ReadWriteMany nfs: path: /home/maven server: 192.168.115.6 persistentVolumeReclaimPolicy: Recycle --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: jenkins-master-claim spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: maven-repository-claim spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi 2、创建deployment和service # cat deploy.yaml --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: jenkins-master spec: template: metadata: labels: name: jenkins-master spec: securityContext: fsGroup: 1000 containers: - name: jenkins-master image: harbor.59iedu.com/fjhb/jenkins:2018-08-12-v1 imagePullPolicy: Always ports: - containerPort: 8080 name: http - containerPort: 50000 name: agent volumeMounts: - name: jenkins-master-vol mountPath: /var/jenkins_home - name: maven-repository mountPath: /opt/maven/repository - name: docker mountPath: /usr/bin/docker - name: docker-sock mountPath: /var/run/docker.sock volumes: - name: jenkins-master-vol persistentVolumeClaim: claimName: jenkins-master-claim - name: maven-repository persistentVolumeClaim: claimName: maven-repository-claim - name: docker hostPath: path: /usr/bin/docker - name: docker-sock hostPath: path: /var/run/docker.sock serviceAccount: "jenkins-master" imagePullSecrets: - name: harborsecret --- apiVersion: v1 kind: Service metadata: name: jenkins-master spec: type: NodePort ports: - port: 8080 name: http targetPort: 8080 nodePort: 8452 - port: 50000 name: agent nodePort: 50000 targetPort: 50000 selector: name: jenkins-master 3、rbac授权 # cat sa.yaml --- apiVersion: v1 kind: ServiceAccount metadata: name: jenkins-master namespace: default --- kind: Role apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: jenkins-master rules: - apiGroups: [""] resources: ["pods"] verbs: ["create","delete","get","list","patch","update","watch"] - apiGroups: [""] resources: ["pods/exec"] verbs: ["create","delete","get","list","patch","update","watch"] - apiGroups: [""] resources: ["pods/log"] verbs: ["get","list","watch"] - apiGroups: [""] resources: ["secrets"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: RoleBinding metadata: name: jenkins-master roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: jenkins-master subjects: - kind: ServiceAccount name: jenkins-master namespace: default 4、default sa的rbac授权 # cat default-sa.yaml --- kind: Role apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: default-role rules: - apiGroups: [""] resources: ["pods"] verbs: ["create","delete","get","list","patch","update","watch"] - apiGroups: [""] resources: ["pods/exec"] verbs: ["create","delete","get","list","patch","update","watch"] - apiGroups: [""] resources: ["pods/log"] verbs: ["get","list","watch"] - apiGroups: [""] resources: ["secrets"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: RoleBinding metadata: name: default-rolebinding roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: default-role subjects: - kind: ServiceAccount name: default namespace: default 三、初始化jenkins server 1、通过秘钥解锁jenkins(本文为了方便局域网其他主机访问,在vmware上配置了nat规则) 2、配置代理 3、安装插件 4、创建管理员账号 四、配置jenkins server 1、系统管理 —— 系统设置 —— 新增一个云”kubernetes” Kubernetes URL: 输入api-server的地址 Jenkins URL: 输入jenkins server的服务名,端口8080 Jenkins Tunnel: 指的是slave连接master的端口,默认是50000 上图pod的模板名称为jenkins-slave,Container的模板名称为jnlp。这里有非常重要的两点要注意: 当Container的模板名称为jnlp的时候,jenkins-slave才会使用下面配置的docker镜像来启动pod,如果不为jnlp,则会使用默认的镜像jenkins/jnlp-slave:alpine 当使用自定义的docker镜像来启动jenkins slave pod的时候,下面的command to run(默认值是 sh -c)和arguments to pass to the command(默认值是cat)两个值需要清空。否则会出现jenkins slave jnlp连接不上master的情况,尝试100次连接之后销毁pod,然后再创建一个pod继续尝试连接,无限循环。 2、系统管理 —— Configure Global Security 确认jnlp agent的端口默认为50000,如果有修改,要保障这里的配置及前面部署deployment、service的端口配置、前文的云环境Jenkins Tunnel设置保持一致 3、系统管理 —— Global Tool Configuration 在这里设置对应的工具及环境变量,为了避免不必要的问题,前面通过dockerfile把jenkins server 和jenkins slave的环境变量调整成一致, java目录通过软连接的方式实现。 4、系统管理 —— 管理插件 推荐安装的几个插件:maven、 gitlab 、subversion、pipeline、Kubernetes Continuous Deploy、Publish Over SSH 完成插件安装后需要对jenkins server进行重启操作,可以点击“系统管理 ”——“准备关机”来完成重启操作,至此我们就完成了jenkins server在k8s环境中的部署和配置工作,下文开始介绍使用jenkins完成项目构建和发布。 赞 收藏 评论 分享 举报 上一篇:Mysql Innodb Cluster测试 下一篇:Jenkis pipeline构建项目实践 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新 相关文章 【k8s】搭建Kubernetes(k8s)集群出现NotReady的处理 k8s安装,节点一直处于NotReady状态,下载CNI插件处理 服务器 k8s Kubernetes Sealos部署k8s实战 当部署Kubernetes时,选择合适的工具和操作系统至关重要。SealOS作为一个基于Kubernetes的开源操作系统,提供了便捷的部署和管理工具,使得Kubernetes集群的搭建变得简单而高效。下面是一个使用SealOS部署Kubernetes的实战指南。SealOS部署Kubernetes实战环境准备确保你有三台以上的服务器,可以是虚拟机或者裸机,并已经安装好了以下软件:Dockerku 云原生 k8s 容器 运维 部署 k8s部署NeuVector指南 开源云原生安全产品现状开源项目列表项目厂商链接Star类型开源时间clairQuayhttps://github.com/quay/clair8.4k镜像扫描2015-11-13trivyAquahttps://github.com/aquasecurity/trivy10.1k镜像扫描2019-04-11kube-hunterAquahttps://github.com/aquasecurity docker kubernetes NeuVector 云原生 jenkins k8s 一、 安装并配置Kubernetes集群本文中使用的kubernetes集群是1.8.0版本。具体 maven Jenkins docker k8s jenkins Kubernetes (K8s) 是一种用于自动化部署、扩展和管理容器化应用程序的开源系统,而 Jenkins 则是一个开源的持续集成和持续交付工具。结合使用 K8s 和 Jenkins 可以实现自动化部署、持续集成和持续交付,提高开发效率和部署质量。在这篇文章中,我将向你介绍如何在 K8s 上使用 Jenkins 进行持续集成和持续交付。整个过程可以分为以下步骤:| 步骤 | 操作 | Jenkins 持续交付 持续集成 Jenkins for k8s # 使用Jenkins for k8s实现持续集成(CI)和持续部署(CD)对于开发团队来说,自动化构建、测试和部署是提高效率和质量的重要手段。而使用Jenkins for k8s结合Kubernetes集群,可以更好地实现持续集成和持续部署的流程。在本文中,我将向你介绍如何使用Jenkins for k8s来搭建CI/CD流程。## 基本流程下面是使用Jenkins for k8s实 Jenkins 持续集成 应用程序 jenkins on k8s ## 实现 Jenkins on K8s### 1. 操作流程:| 步骤 | 操作 || --- | --- || 1 | 在 K8s 集群中创建一个 Namespace 来运行 Jenkins || 2 | 部署 Jenkins 到 K8s 集群 || 3 | 访问 Jenkins 控制台 || 4 | 配置 Jenkins 与 K8s 的集成 || 5 | 创建一个 Jen Jenkins bash 配置文件 k8s 重启jenkins k8s 重启容器 本文主要用来学习Pod,参考文章Overview,Static Pod.Pod为K8S中最小的执行单位以及部署单位,代表运行在cluster上的processes。Pod中封装了container,存储,网络IP以及container如何运行的资源和信息。Docker是Pod中最常用的container runtime,也支持其他container runtime.Pod中的containers共 k8s 重启jenkins k8s 重启pod Pod IP API jenkins k8s 证书 jenkins pipeline k8s 本篇目录链接背景需求:前置条件:step1:准备相关文件step2:编写jenkins的dockerfile文件step3:编写jenkins服务的rbac文件step4:编写jenkins的资源清单文件(deployment和service)step5:创建jenkins服务step6:验证1、新建项目--流水线2、创建并编写pipeline3、运行流水线step7:流水线代码step8:优化 jenkins k8s 证书 k8s jenkins docker maven k8s 重启docker k8s 重启statefulset 配置一个简单的StatefulSet RC、Deployment、DaemonSet都是面向无状态的服务,它们所管理的Pod的IP、名字,启停顺序等都是随机的,而StatefulSet是什么?顾名思义,有状态的集合,管理所有有状态的服务,比如MySQL、MongoDB集群等。 StatefulSet本质上是Deployment的一种变体,在v1.9版本中已成为GA版本,它为了解决有状态服务的 k8s 重启docker k8s Pod nginx 级联删除 jenkins添加k8s k8s jenkins git 目录 目录一、制作Jenkins-master镜像二、部署Jenkins-master三、制作Jenkins-slave镜像四、配置Jenkins与K8s协作五、配置Gitblit六、配置Jenkins-master的工程和代码参考资料 前提条件已安装K8s集群熟悉docker命令和构建docker镜像一、制作Jenkins-master镜像拉取base镜像docker pull jenkinsc jenkins添加k8s Jenkins Kubernetes docker ci k8s jenkins gitlab k8s jenkins gitlab harbor 一、概述maven项目部署流程图如下: 环境介绍操作系统ip角色版本ubuntu-16.04.4-server-amd64192.168.10.122Jenkins+harborJenkins 2.176.2,harbor 1.8.1ubuntu-16.04.4-server-amd64192.168.10.134gitlabgitlab-ce_12.1.4ubu k8s jenkins gitlab docker maven Jenkins jenkins部署k8s 应用 jenkins整合k8s K8S部署jenkins1、环境配置NFS服务器:1xx.xxx.xxx.229K8Smaster:1xx.xxx.xxx.221k8Snode1: 1xx.xxx.xxx.228 (宿主机)2、安装NFS需要将jenkins的配置目录挂载到NFS中,如果没安装可以参考之前的文档。3、编写jenkins yaml文件注意:jenkins2.372默认安装jdk11版本,没有mvn和jdk8,如果有 jenkins部署k8s 应用 jenkins kubernetes 运维 maven k8s和Jenkins k8s和jenkins集成 关于如何使用Jenkins+Gitlab实现可CI/CD,在此就不多做介绍了,本篇博文主要介绍Jenkins+Gitlab针对kubernetes集群实现CI/CD。由于Kubernetes近年来的火爆程度,掌握这项技能已经变得尤为重要!一、环境准备系统主机名IP地址所运行的服务Centos 7master192.168.1.1K8s集群的master节点Centos 7node01192.168 k8s和Jenkins docker nginx git jenkins和 k8s jenkins和k8s区别 Jenkins是什么Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins的6大特征:开源的ava语言开发持续集成工具,支持持续集成,持续部署易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。消息通知及测试报告:集成 jenkins和 k8s jenkins docker ci 持续集成 spark on k8s 重启策略 k8s重启service 一、前言在一主多从的k8s集群中, 当我们使用 Deployment 创建某个镜像的多副本时,每个副本都是均匀分配到个个Work 节点上,并且每个Pod 都有自己的内网Ip ,那么问题来了,我们应该用哪个Pod的IP 来访问Pod ? 如果使用某一个Pod的内网ip来访问,那这个Pod 宕机了, 那集群岂不是挂了?二、Service 的服务发现和负载均衡k8s 官方对Service 的定义是:将运 spark on k8s 重启策略 kubernetes 容器 service Pod jenkins整合k8s k8s+jenkins 目录一、简介二、Jenkins + K8s2.1 Jenkins配置k8s-master服务器信息2.2 配置镜像仓库信息2.3 编写k8s yaml文件2.4 将yaml文件推送到k8s2.5 配置免密钥登录2.6 k8s部署yaml资源文件2.7 重新部署yaml资源文件2.8 构建注意事项2.9 完整Jenkinsfile2.10 构建成功三、Webhook源码 一、简介上一节我们学习了J jenkins整合k8s kubernetes ci/cd jenkins Jenkins jenkins 设置多个k8s jenkins整合k8s k8s 部署jenkins 本篇主要讲解一下 jenkins 在 k8s 下面是如何部署的,主要对jenkins_home、maven 的一些挂载 和 docker 程序的挂载 ,使其让 pod中的 jenkins 支持 maven docker 等功能,并且当pod删除时不丢失 jenkins_home1.根据官网 安装 简易版Jenkins在Jenkins的官网的 安装教程部分其实就有 k8s jenkins 设置多个k8s java spring springboot maven k8s gitlab jenkins k8s gitlab jenkins harbor 安装k8s jenkins maven gitlab harbor 过程略过~记得在jenkins机器上yum个git就好,因为需要git去连我们的代码库, 做这套的时候踩过的坑,提醒大家只写配置jenkins和gitlab过程:1.登陆jenkins,点击系统管理,管理插件,安装 GitHub Branch Source Plugin,Gitlab A k8s gitlab jenkins k8s git 回滚 maven docker jenkins k8s docker jenkins k8s django 01 前 言持续集成对于微服务开发来说,已经是不可或缺了,能够极大的提升效率。准备:一个docker服务器,用于部署docker私库和jenkins服务一个k8s集群整体架构:todo流程控制️代码推送到git仓库️git上打tag,通过webhook触发构建️构建完成调用docker build镜像,然后推送到私有仓库(搭建docker registry私库)️通过ssh在k8s服务器上执行远 docker jenkins k8s jenkins docker ci 软件测试