学习笔记七:基于Jenkins+k8s+Git+DockerHub等技术链构建企业级DevOps容器云平台

news2024/12/27 18:38:09

基于Jenkins+k8s+Git+DockerHub等技术链构建企业级DevOps容器云平台

  • 安装Jenkins
  • 在kubernetes中部署jenkins
    • 创建名称空间
    • 创建pv,上传pv.yaml
    • 创建pvc
    • 创建一个sa账号
    • 通过deployment部署jenkins
    • 更新资源清单文件
    • 把jenkins前端加上service,提供外部网络访问
  • 配置Jenkins
    • 获取管理员密码
    • 安装插件,安装推荐的插件
  • 测试jenkins的CI/CD

K8s版本

kubectl get nodes

jenkins版本:
最新版

安装Jenkins

安装nfs服务,可以选择自己的任意一台机器,我选择的是k8s的控制节点k8smaster1
如果已经安装过nfs,这个步骤可以忽略

yum install nfs-utils -y
systemctl start nfs
systemctl enable nfs

在k8smaster1上创建一个nfs共享目录

mkdir /data/v2  -p
vim /etc/exports
/data/v1 *(rw,no_root_squash)
/data/v2 *(rw,no_root_squash)

使配置文件生效

exportfs -arv

在kubernetes中部署jenkins

创建名称空间

kubectl create namespace jenkins-k8s

创建pv,上传pv.yaml

cat kubectl get pv
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-k8s-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
  - ReadWriteMany
  nfs:
    server: 192.168.40.180
path: /data/v2
kubectl apply -f pv.yaml
kubectl get pv

创建pvc

cat pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: jenkins-k8s-pvc
  namespace: jenkins-k8s
spec:
  resources:
    requests:
      storage: 10Gi
  accessModes:
  - ReadWriteMany
kubectl apply -f pvc.yaml
kubectl get pvc -n jenkins-k8s

创建一个sa账号

kubectl create sa jenkins-k8s-sa -n jenkins-k8s

把上面的sa账号做rbac授权

kubectl create clusterrolebinding jenkins-k8s-sa-cluster -n jenkins-k8s  --clusterrole=cluster-admin --serviceaccount=jenkins-k8s:jenkins-k8s-sa

通过deployment部署jenkins

在k8snode节点执行

docker pull jenkins/jenkins:2.394
docker save -o jenkins2.394  jenkins/jenkins:2.394
ctr -n=k8s.io images import jenkins2.394
docker load -i jenkins-slave-latest.tar.gz
ctr -n=k8s.io images import jenkins-slave-latest.tar.gz

备注:jenkins-slave-latest.tar.gz这个里面封装的镜像是jenkins-slave-latest:v1,这个jenkins-slave-latest:v1镜像制作方法如下:

cd /root/slave
cat dockerfile
FROM jenkins/jnlp-slave:4.13.3-1-jdk11
USER root
# 安装Docker
RUN apt-get update && apt-get install -y \
    docker.io
# 将当前用户加入docker用户组
RUN usermod -aG docker jenkins`在这里插入代码片`
RUN curl -LO https://dl.k8s.io/release/stable.txt
RUN curl -LO https://dl.k8s.io/release/$(cat stable.txt)/bin/linux/amd64/kubectl
RUN chmod +x kubectl
RUN mv kubectl /usr/local/bin/
ENV DOCKER_HOST unix:///var/run/docker.sock
docker build -t=jenkins-slave-latest:v1 .
docker save -o jenkins-slave-latest.tar.gz  jenkins-slave-latest:v1

更新资源清单文件

kubectl apply -f jenkins-deployment.yaml
kubectl get pods -n jenkins-k8s
NAME                       READY   STATUS            RESTARTS   AGE
jenkins-74b4c59549-g5j9t   0/1     CrashLoopBackOff   3          67s

看到jenkins-74b4c59549-g5j9t是CrashLoopBackOff状态,查看日志:

kubectl logs jenkins-74b4c59549-g5j9t  -n jenkins-k8s
日志信息显示:
touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
#报错显示没有权限操作/var/jenkins_home/copy_reference_file.log文件,

解决办法如下:在k8smaster执行

kubectl delete -f jenkins-deployment.yaml
chown -R 1000.1000 /data/v2
cat jenkins-deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
  name: jenkins
  namespace: jenkins-k8s
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      serviceAccount: jenkins-k8s-sa
      containers:
      - name: jenkins
        image:  jenkins/jenkins:2.394
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
          name: web
          protocol: TCP
        - containerPort: 50000
          name: agent
          protocol: TCP
        resources:
          limits:
            cpu: 1000m
            memory: 1Gi
          requests:
            cpu: 500m
            memory: 512Mi
        livenessProbe:
          httpGet:
            path: /login
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 5
          failureThreshold: 12
        readinessProbe:
          httpGet:
            path: /login
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 5
          failureThreshold: 12
        volumeMounts:
        - name: jenkins-volume
          subPath: jenkins-home
          mountPath: /var/jenkins_home
      volumes:
      - name: jenkins-volume
        persistentVolumeClaim:
          claimName: jenkins-k8s-pvc
kubectl apply -f jenkins-deployment.yaml

查看pod是否创建成功:

kubectl get pods -n jenkins-k8s

把jenkins前端加上service,提供外部网络访问

cat jenkins-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: jenkins-service
  namespace: jenkins-k8s
  labels:
    app: jenkins
spec:
  selector:
    app: jenkins
  type: NodePort
  ports:
  - name: web
    port: 8080
    targetPort: web
    nodePort: 30002
  - name: agent
    port: 50000
    targetPort: agent

kubectl apply -f jenkins-service.yaml
kubectl get svc -n jenkins-k8s

在这里插入图片描述

通过上面可以看到service的8080端口在物理机映射的端口是30002

配置Jenkins

在浏览器访问jenkins的web界面:
在这里插入图片描述

获取管理员密码

在nfs服务端,也就是我们的master1节点获取密码:

cat  /data/v2/jenkins-home/secrets/initialAdminPassword

在这里插入图片描述

把上面获取到的密码拷贝到上面管理员密码下的方框里

在这里插入图片描述

点击继续,出现如下界面

在这里插入图片描述

安装插件,安装推荐的插件

在这里插入图片描述

插件安装好之后显示如下,创建第一个管理员用户
在这里插入图片描述

在这里插入图片描述

用户名和密码都设置成admin,线上环境需要设置成复杂的密码
修改好之后点击保存并完成,出现如下界面
点击保存并完成,出现如下界面

在这里插入图片描述

点击保存并完成,出现如下界面

在这里插入图片描述

测试jenkins的CI/CD

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2065650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MQ的优缺点及适用场景

MQ的优缺点及适用场景 1、MQ的优点2、MQ的缺点 💖The Begin💖点点关注,收藏不迷路💖 消息队列(MQ)在软件开发中扮演重要角色,带来解耦、异步、削峰等好处。然而,MQ的引入也伴随着一些…

【Hot100】LeetCode—101. 对称二叉树

目录 1- 思路借助队列 2- 实现⭐101. 对称二叉树——题解思路 3- ACM 实现 原题连接&#xff1a;101. 对称二叉树 1- 思路 借助队列 1- 创建队列&#xff1a;Queue<TreeNode> queue&#xff0c;初始化加入 root.left 和 root.right2- 判断逻辑&#xff1a;while(!queu…

为什么要进行微隔离

在当今数字化时代&#xff0c;随着云计算、大数据、物联网等技术的飞速发展&#xff0c;企业网络环境日益复杂&#xff0c;传统的网络边界防护策略面临着前所未有的挑战。传统的防火墙、入侵检测系统等安全设备虽然在一定程度上能够抵御外部威胁&#xff0c;但在内部网络的安全…

回归分析系列16— 多层次模型

119 多层次模型 19.1 简介 多层次模型&#xff08;也称为层次线性模型或混合效应模型&#xff09;在处理具有嵌套结构的数据时非常有用。例如&#xff0c;在教育数据中&#xff0c;学生嵌套在班级中&#xff0c;班级嵌套在学校中。多层次模型允许我们同时建模这些不同层次的影…

政安晨【零基础玩转各类开源AI项目】基于本地Linux Ubuntu系统部署及应用强大的开源AI音乐生成工具:AudioCraft

目录 简介 部署 下载项目 创建虚拟环境 激活虚拟环境 安装依赖 启动 成功 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 简介 A…

c++每日练习记录4-(递归思想)

题解1迭代&#xff1a; 利用利用两个新的指针&#xff0c;一个用于保存输出的初始节点&#xff0c;另外一个用于地址的迭代指向。 ListNode *mergeTwoLists(ListNode *list1, ListNode *list2){ListNode *list_node new ListNode(0);ListNode *list_node1 list_node;while (l…

看图学sql之sql 中的UNION 和union all

UNION 用于合并两个或者多个 SELECT 语句的结果集 语法&#xff1a; SELECT column1, column2 ... FROM table1, table2 [WHERE condition1]UNION / UNION ALLSELECT column1, column2 ... FROM table1, table2 [WHERE condition2] 数据分析社区直达 免费数据分析资料下载。…

C#使用 ModeBusTCP读取汇川Easy521PLC

Modbus TCP是一种基于以太网TCP/IP的Modbus协议变种&#xff0c;它允许Modbus协议在以太网网络上运行&#xff0c;使得设备之间可以通过IP网络交换数据。Modbus由MODICON公司于1979年开发&#xff0c;是一种工业现场总线协议标准&#xff0c;广泛应用于工业自动化领域。 #regio…

【嵌入式】总结指南——Linux下的裸机驱动开发

板型:正点原子 I.MX6UL MINI 屏幕&#xff1a;7寸 1024*600 立意&#xff1a;既是这一段学习的总结&#xff0c;也可作为入门指南的参考&#xff0c;不过并不能作为教程来看&#xff0c;实际学习还是要找相应的视频或文章教程。 一、历程 应该和使用这块板子的大部分人一样&a…

理解List AbstractList ArrayList

ArrayList 实现了 List 接口&#xff0c;继承了 AbstractList 抽象类。 Q: 为什么要ArrayList继承AbstractList&#xff0c;让AbstractList实现List&#xff1f;而不是让ArrayList直接实现List&#xff1f; A: 接口中全都是抽象的方法&#xff0c;而抽象类中可以有抽象方法&am…

【达梦数据库】shell脚本获取集群内确认监视器地址

目录 1、需求2、想法3、实现代码4、检验效果4.1、集群内任意节点使用非dmdba用户执行4.2、集群内任意节点使用dmdba用户执行4.2.1、数据库主备节点执行4.2.1、数据库确认监视器节点执行 4.3、非集群内节点执行 1、需求 有确认监视器的集群&#xff0c;在集群的任何一个集群上执…

Android13 app后台无法启动Abort background activity starts from

总纲 android13 rom 开发总纲说明 目录 1.前言 2.log分析 3.代码查找分析 4.修改方法 5.编译测试 6彩蛋 1.前言 Android13 用户app后台无法启动,提示Abort background activity starts from 10111 2.log分析 08-07 21:37:36.703: W/ActivityTaskManager(440): Back…

Llama3.1大模型

背景 Llama 3.1是一款由Meta&#xff08;前Facebook&#xff09;推出的先进大型语言模型。它在自然语言处理领域具有显著优势&#xff0c;为用户提供高质量的文本生成、理解和推理能力。 Transformer架构 Transformer是一种神经网络架构&#xff0c;可以处理文本、音频、视频和…

无线数传模块有啥特点?

一 、 模块特点  支持 RS485RTU 、RS232、UART 标准协议  AES加密  供电电压DC4.5V——5.5V  工作频段 410~525MHz, 免申请频段  标准配置提供多达 115信道 …

数据结构-递归算法-第四天

参考文献&#xff1a; 华为云 博客园 labuladong 的算法笔记 递归是一种编程技巧&#xff0c;一种解决问题的思维方式&#xff1b;分治算法和动态规划很大程度上是递归思想基础上的&#xff08;虽然动态规划的最终版本大都不是递归了&#xff0c;但解题思想还是离不开递归&…

数学建模之数据分析【七】:对Pandas DataFrame 进行切片

文章目录 一、切片简介二、创建Pandas数据框三、使用iloc进行切片3.1 对行进行切片3.2 对列进行切片3.3 Dataframe选中特定单元格 四、使用loc创建切片4.1 使用Python对Dataframe中的行进行切片4.2 指定单元格 五、在Python中使用布尔条件六、结论 对 Pandas DataFrames 进行切…

水战再起波澜,“怡宝”要下好怎样一盘棋?

不少投资者常把那些刚需性强、永远也不可能淘汰的产业称为“日不落产业”&#xff0c;从细分板块来看&#xff0c;水无疑具有一定代表性。农夫山泉掌门人钟晱晱曾直言&#xff1a;“我选择了一个日不落的产业&#xff0c;你永远要喝水&#xff0c;不可能不喝水。” 多年下来&a…

Python | Leetcode Python题解之第367题有效的完全平方数

题目&#xff1a; 题解&#xff1a; class Solution:def isPerfectSquare(self, num: int) -> bool:x0 numwhile True:x1 (x0 num / x0) / 2if x0 - x1 < 1e-6:breakx0 x1x0 int(x0)return x0 * x0 num

SpringBoot集成kafka-获取生产者发送的消息(阻塞式和非阻塞式获取)

说明 CompletableFuture对象需要的SpringBoot版本为3.X.X以上&#xff0c;需要的kafka依赖版本为3.X.X以上&#xff0c;需要的jdk版本17以上。 1、阻塞式&#xff08;等待式&#xff09;获取生产者发送的消息 生产者&#xff1a; package com.power.producer;import org.ap…

<数据集>车内视角行人识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;6470张 标注数量(xml文件个数)&#xff1a;6470 标注数量(txt文件个数)&#xff1a;6470 标注类别数&#xff1a;1 标注类别名称&#xff1a;[pedestrian] 序号类别名称图片数框数1pedestrian647029587 使用标注…