首先下载jenkins镜像并上传到我们自己的私有仓库:7-200

# docker pull jenkins/jenkins:2.190.3
# docker tag 22b8b9a84dbe harbor.od.com/public/jenkins:v2.190.3
# docker push harbor.od.com/public/jenkins:v2.190.3

为了适应我们的环境,我们的jenkins不能直接使用,需要进行配置:

# mkdir -p /data/dockerfile/jenkins/
# cd /data/dockerfile/jenkins
# vi Dockerfile
FROM harbor.od.com/public/jenkins:v2.190.3
USER root #定义启动jenkins的用户
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\
echo 'Asia/Shanghai' >/etc/timezone #修改时区 改成东八区
ADD id_rsa /root/.ssh/id_rsa #加载用户密钥,dubbo服务拉取代码使用的ssh
ADD config.json /root/.docker/config.json #加载宿主机的docker配置文件,登录远程仓库的认证信息加载到容器里面。
ADD get-docker.sh /get-docker.sh # 在jenkins容器内安装docker 客户端,jenkins要执行docker build,docker引擎用的是宿主机的docker引擎
RUN echo " StrictHostKeyChecking no" >> /etc/ssh/ssh_config &&\
/get-docker.sh # 跳过 ssh时候输入 yes 步骤,并执行安装docker

首先创建密钥:邮箱请根据自己的邮箱自行修改

 # ssh-keygen -t rsa -b 2048 -C "xxx@xx.xxx" -N "" -f /root/.ssh/id_rsa

将私钥加载到jenkins,将公钥配置到git仓库中,否则不能拉取代码:

接下来创建Dockerfile中需要的文件:

# curl -fsSL get.docker.com -o get-docker.sh

添加执行权限:

# chmod u+x get-docker.sh
# cp /root/.ssh/id_rsa ./
# cp /root/.docker/config.json ./

创建运维私有仓库,打开我们的harbor.od.com创建一个infra的私有仓库:

然后build镜像:过程漫长,可以抽根烟,喝杯茶了

# docker build . -t harbor.od.com/infra/jenkins:v2.190.3

build完以后将镜像上传到我们的私有仓库:

# docker push harbor.od.com/infra/jenkins:v2.190.3

为jenkins创建名称空间:

# kubectl create ns infra

创建一条secret,用于访问我们的私有仓库infra:

# kubectl create secret docker-registry harbor --docker-server=harbor.od.com --docker-username=admin --docker-password=Harbor12345 -n infra

解释一下上面的命令:创建一条secret,资源类型是docker-registry,名字是 harbor,docker-server=harbor.od.com ,docker-username=admin ,docker-password=Harbor12345 -n 指定私有仓库名称infra

为了让jenkins中一些需要持久化的数据,能够存储,我们需要使用共享存储,然后进行挂载:这里使用最简单的NFS共享存储,因为k8s默认支持nfs模块

在运维主机和所有的node节点安装:

# yum install nfs-utils -y

使用7-200作为服务端:

# vi /etc/exports
/data/nfs-volume 10.4.7.0/24(rw,no_root_squash)
# mkdir -p mkdir /data/nfs-volume/jenkins_home
# systemctl start nfs
# systemctl enable nfs

准备jenkins资源配置清单:

# cd /data/k8s-yaml/
# mkdir jenkins
# cd jenkins

1、dp.yaml

这里挂载了宿主机的docker.sock,使容器内的docker客户端可以直接与宿主机的docker引擎进行通信

在使用私有仓库的时候,资源清单中,一定要声明:

 imagePullSecrets:
- name: harbor
# vi dp.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: jenkins
namespace: infra
labels:
name: jenkins
spec:
replicas: 1
selector:
matchLabels:
name: jenkins
template:
metadata:
labels:
app: jenkins
name: jenkins
spec:
volumes:
- name: data
nfs:
server: hdss7-200
path: /data/nfs-volume/jenkins_home
- name: docker
hostPath:
path: /run/docker.sock
type: ''
containers:
- name: jenkins
image: harbor.od.com/infra/jenkins:v2.190.3
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
protocol: TCP
env:
- name: JAVA_OPTS
value: -Xmx512m -Xms512m
volumeMounts:
- name: data
mountPath: /var/jenkins_home
- name: docker
mountPath: /run/docker.sock
imagePullSecrets:
- name: harbor
securityContext:
runAsUser: 0
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
revisionHistoryLimit: 7
progressDeadlineSeconds: 600

2、svc.yaml

kind: Service
apiVersion: v1
metadata:
name: jenkins
namespace: infra
spec:
ports:
- protocol: TCP
port: 80
targetPort: 8080
selector:
app: jenkins

3、ingress.yaml

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: jenkins
namespace: infra
spec:
rules:
- host: jenkins.od.com
http:
paths:
- path: /
backend:
serviceName: jenkins
servicePort: 80

应用资源配置清单:node节点

# kubectl create -f http://k8s-yaml.od.com/jenkins/dp.yaml
# kubectl create -f http://k8s-yaml.od.com/jenkins/svc.yaml
# kubectl create -f http://k8s-yaml.od.com/jenkins/ingress.yaml

查看我们创建的pod:这个启动时间还是挺长的,大概要几分钟时间

# kubectl get pod -n infra

检查jenkins需要持久化的数据是否保存下来了:7-200

已经起来了:

添加解析:7-11

# vi /var/named/od.com.zone
# systemctl restart named

浏览器访问:

http://jenkins.od.com

经过配置我们已经部署好了jenkins:

安全配置:

允许跨域:

安装插件:

替换jenkins更新源

###hdss7-200
# cd /data/nfs-volume/jenkins_home/updates
# sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

搜索蓝海插件并安装:blue ocean

验证jenkins容器状态:

1、是否是root用户

# docker ps -a | grep jenkins
# docker exec -it 8ff92f08e3aa /bin/bash
# whoami

2、时区是否是东八区

# date

3、是否使用宿主机docker引擎,在容器内查看宿主机上的docker资源情况

# docker ps 

4、是否能免密访问gitee

# ssh -i /root/.ssh/id_rsa -T git@gitee.com

5、是否能访问harbor私有仓库 :原因是我们挂载了宿主机的docker config.json

完成验证以上内容后,证明我们基于本次实验环境的jenkins容器已经安装配置完成了。

kubernetes实战-交付dubbo服务到k8s集群(二)交付jenkins到k8s集群的更多相关文章

  1. kubernetes实战-交付dubbo服务到k8s集群(六)使用blue ocean流水线构建dubbo-consumer服务

    我们这里的dubbo-consumer是dubbo-demo-service的消费者: 我们之前已经在jenkins配置好了流水线,只需要填写参数就行了. 由于dubbo-consumer用的gite ...

  2. kubernetes实战-交付dubbo服务到k8s集群(四)使用blue ocean流水线构建dubbo-demo-service

    使用jenkins创建一个新的项目:dubbo-demo,选择流水线构建 勾选保存构建历史和指定项目为参数化构建项目: 添加构建参数:以下配置项,是王导根据多年生产经验总结出来的甩锅大法: 除了bas ...

  3. kubernetes实战-交付dubbo服务到k8s集群(一)准备工作

    本次交付的服务架构图:因为zookeeper属于有状态服务,不建议将有状态服务,交付到k8s,如mysql,zk等. 首先部署zk集群:zk是java服务,需要依赖jdk,jdk请自行下载: 集群分布 ...

  4. kubernetes实战-交付dubbo服务到k8s集群(五)交付dubbo-monitor监控服务到k8s

    首先下载 dubbo-monitor源码包7-200 dubbo-monitor是监控zookeeper状态的一个服务,另外还有dubbo-admin,效果一样,感兴趣的可以自己研究一下. # cd ...

  5. kubernetes实战-交付dubbo服务到k8s集群(三)安装配置maven和java运行时环境的底包镜像

    maven 官方地址: 官方地址 下载maven,shdd7-200 # cd /opt/src # wget https://archive.apache.org/dist/maven/maven- ...

  6. 实战交付一套dubbo微服务到k8s集群(7)之交付dubbo服务的消费者集群到K8S

    构建dubbo-demo-consumer,可以使用和dubbo-demo-service的流水线来构建 1.登录jenkins构建dubbo-demo-consumer 2.填写构建dubbo-de ...

  7. 13.实战交付一套dubbo微服务到k8s集群(6)之交付dubbo服务的消费者集群到K8S

    构建dubbo-demo-consumer,可以使用和dubbo-demo-service的流水线来构建 1.登录jenkins构建dubbo-demo-consumer  2.填写构建dubbo-d ...

  8. .Net Core 商城微服务项目系列(十二):使用k8s部署商城服务

    一.简介 本篇我们将会把商城的服务部署到k8s中,同时变化的还有以下两个地方: 1.不再使用Consul做服务的注册和发现,转而使用k8s-dns来实现. 2.不再使用Ocelot作为业务网关,使用T ...

  9. FP-growth算法发现频繁项集(二)——发现频繁项集

    上篇介绍了如何构建FP树,FP树的每条路径都满足最小支持度,我们需要做的是在一条路径上寻找到更多的关联关系. 抽取条件模式基 首先从FP树头指针表中的单个频繁元素项开始.对于每一个元素项,获得其对应的 ...

随机推荐

  1. JavaScript中的事件委托机制跟深浅拷贝

    今天聊下JavaScript中的事件委托跟深浅拷贝 事件委托 首先呢,介绍一下事件绑定 //方法一:通过onclick <button onclick="clickEvent()&qu ...

  2. .NET 云原生架构师训练营(模块二 基础巩固 Scrum 团队)--学习笔记

    2.7.3 Scrum 团队 理想的环境 团队章程 如何组建 Scrum 团队 产品待办事项列表 用户故事 敏捷开发流程 理想的环境 5-9人 100% 跨职能 在一起 自组织 自组织 目标 授权 沟 ...

  3. ctfhub技能树—信息泄露—git泄露—Stash

    打开靶机环境 查看页面内容 使用dirsearch进行扫描 使用Githack工具处理git泄露情况 进入.git/refs目录 发现stash文件,使用notepad++打开文件 使用git dif ...

  4. php压缩文件夹并下载到本地

    /** * @param $path 要压缩的文件夹路径 * @param $filename 要生成的压缩包名称 */ public function create_zip($path,$filen ...

  5. Python干货:了解元组与列表的使用和区别

    元组是 Python 对象的集合,跟列表十分相似.下面进行简单的对比. 列表与元组 1.python中的列表list是变量,而元组tuple是常量. 列表:是使用方括号[],元组:则是使用圆括号() ...

  6. 基于Python的接口自动化-unittest测试框架和ddt数据驱动

    引言 在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用 ...

  7. Spring听课笔记(tg)2

    配置Bean -- 配置形式:基于XML 文件的方式, 基于注解的方式 -- Bean的配置方式:通过全类名(反射).通过工厂方法(静态工厂方法&实例工厂方法).FactoryBean -- ...

  8. 十:SpringBoot-配置AOP切面编程,解决日志记录业务

    SpringBoot-配置AOP切面编程,解决日志记录业务 1.AOP切面编程 1.1 AOP编程特点 1.2 AOP中术语和图解 2.SpringBoot整合AOP 2.1 核心依赖 2.2 编写日 ...

  9. Spring Boot中的静态资源文件

    Spring Boot中的静态资源文件 1.SSM中的配置 2.Spring Boot 中的配置 2.1 整体规划 2.2 源码解读 2.3 自定义配置 2.3.1 application.prope ...

  10. 使用 Shiro,从架构谈起,到框架集成!

    使用 Shiro,从架构谈起,到框架集成! 一.架构 1.使用用户的登录信息创建令牌 2.执行登陆动作 3.判断用户 4.两条重要的英文 二.实现Realm 1.缓存机制 2.散列算法与加密算法 3. ...