Pipeline 部署K8S应用

2023-05-16

概述

提前在K8S集群中部署jenkins和gitlab应用,gitlab用于存放应K8S的资源清单Yaml文件,Jenkins用于拉取gitlab上的Yaml文件并将其部署到K8S集群中。将所有Yaml文件放在Gitlab中能够实现文件的统一管理和版本记录,能够方便查看管理员们的更新操作,配置动态的Jenkins Slave 来执行任务,完成任务即释放,也不会一直暂用资源。

Gitlab代码仓库

为了方便管理和记录,将部署应用的Yaml文件都存放在gitlab库中,在Gitlab中新建一个群组名为kubernetes,该群组下的项目以应用名称命名,每个项目下存放各个应用的部署文件

如下项目Prometheus中存放的就是部署Prometheus的所有Yaml

Jenkins 构建流水线

一、配置 Jenkins Slave

配置 Jenkins,让他能够动态的生成 Slave 的 Pod,
第 1 步. 安装Kubernetes插件, 点击 Manage Jenkins -> Manage Plugins -> Available -> Kubernetes 勾选安装即可

 第 2 步. 安装完毕后,点击Manage Jenkins -> Node Manage -> Configure Clouds 配置Kubernetes集群,首先配置连接 Kubernetes APIServer 的地址,由于我们的 Jenkins 运行在 Kubernetes 集群中,所以可以使用 Service 的 DNS 形式进行连接(https://kubernetes.default.svc.cluster.local),namespace填 kube-mon,然后点击 Test Connection,如果出现 Connected to Kubernetes... 的提示信息证明 Jenkins 已经可以和 Kubernetes 系统正常通信了:

填写Jenkins URL:http://jenkins.cicd.svc.cluster.local:8080,这里的格式为:服务名.namespace.svc.cluster.local:8080,根据上面创建的 jenkins 的服务名填写,包括下面的 Jenkins 通道,默认是 50000 端口(要注意是 TCP,所以不要填写 http):

 完成以上步骤保存退出

 第 3 步. 构建Slave镜像,拉取代码需要用到git,部署应用到K8S需要用到kubectl,另外这里的K8S集群是EKS托管集群,kubeconfig又aws命令生成的,所以也要安装awc命令行工具。

1)编写Dockerfile:

$ ls
aws.tar.gz  Dockerfile  kubectl
$ cat Dockerfle
FROM centos:7
USER root
ADD aws.tar.gz /usr/local/sbin/
COPY kubectl /usr/local/sbin
RUN chmod +x /usr/local/sbin/kubectl && \
    /usr/local/sbin/aws/install && \
    yum -y install git && \
    mkdir /root/.aws && \
    yum clean all

2)构建镜像并推送到本地仓库中:

$ docker build -t slave:v1 .
$ docker push slave:v1

3)编写定义资源清单:使用上面构建好的镜像来创建slave的pod,这里的内容需要写在Pipeline的agent阶段中!!!

apiVersion: v1
kind: Pod
spec:
  nodeSelector:
   kubernetes.io/hostname: ip-10-20-30-40.cn-north-1.compute.internal
  volumes:
  - name: kube
    hostPath:
     path: /root/.kube
  - name: aws
    hostPath:
     path: /root/.aws
  containers:
  - name: shell
    image: slave:v1
    volumeMounts:
    - name: kube
      mountPath: /root/.kube
    - name: aws
      mountPath: /root/.aws
    resources:
     limits: 
      memory: 200Mi
      cpu: 100m
     requests:
      memory: 100Mi
      cpu: 80m
    command:
    - sleep
    args:
    - infinity

 二、配置流水线任务

新建一个Pipeline 风格的任务,Jenkinsfile内容如下,以下Jenkinsfile的主要步骤是“下载代码”和“执行命令”:
​下载代码  通过Checkout模块去拉取gitlab上的代码,这里需要用到gitlab的账号和密码,所以要提前将gitlab账号密码存到jenkins凭证中,gitlab的 url: "http://10.20.30.100/kubernetes/${params.project}.git" 这里的项目名称用变量${params.project}表示,这样就可以通过传入不同的变量来拉取不同的项目
执行命令  执行命令也用变量表示,传入不同的变量就执行不同的命令(部署或删除命令)

@Library('k8slib') _ 
pipeline {
    agent {
        kubernetes {
            //定义Slave pod 的yaml 
            yaml '''
apiVersion: v1
kind: Pod
spec:
  nodeSelector:
   kubernetes.io/hostname: ip-10-20-30-40.cn-north-1.compute.internal
  volumes:
  - name: kube
    hostPath:
     path: /root/.kube
  containers:
  - name: shell
    image: slave:v1
    volumeMounts:
    - name: kube
      mountPath: /root/.kube
    resources:
     limits: 
      memory: 200Mi
      cpu: 100m
     requests:
      memory: 100Mi
      cpu: 80m
    command:
    - sleep
    args:
    - infinity
'''
            defaultContainer 'shell'
        }
    }
    stages {
        //打印Slave pod 的hostname
        stage('运行节点') {
            steps {               
                sh 'hostname'
            }
        }
        //下载gitlab中的yaml
        stage('下载代码'){
            steps{
                script{
                    //checkout模块下载gitlab的代码,需要提前把gitlab账号密码存放在凭证中,这里的url为gitlab的项目地址
                    checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: "291e7571-3343-4177-9ee4-9d03c24cda87", url: "http://10.20.30.100/kubernetes/${params.project}.git"]]])
                }
            }
        }
        //部署或删除应用
        stage('执行命令'){
            steps{
                script{
                    //env.WORKSPACE为Pipeline 内置变量,为workspace的绝对路径
                    sh "cd ${env.WORKSPACE} && ${params.kubectl}"
                }
            }
        }
    }
}

以上Jenkinsfile中引用变量 ${params.project}${params.kubectl},这两个变量通过参数化构建传入,配置Pipeline的参数:

参数化构建,可以选择不同的应用项目,进行不同的操作(部署或删除),如下选择创建Prometheus应用,点击开始构建

 创建成功!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pipeline 部署K8S应用 的相关文章

随机推荐

  • 用自己的单目&双目相机在ROS 下实现双目ORB_SLAM2

    用自己的双目相机在ROS 下实现双目 ORB SLAM2 参考博客 ROS下单目 SLAM https blog csdn net goding learning article details 52950993 配置ROS 下的 ORB
  • 【Linux】Ubuntu 18.04安装aptitude命令

    在ubuntu18 04 下通过如下命令进行aptitude命令的安装 xff0c span class token function sudo span span class token function apt get span spa
  • 卡尔曼滤波(Kalman Filter)原理理解和测试

    Kalman Filter学原理学习 1 Kalman Filter 历史 Kalman滤波器的历史 xff0c 最早要追溯到17世纪 xff0c Roger Cotes开始研究最小均方问题 但由于缺少实际案例的支撑 xff08 那个时候哪
  • ROS与开发板入门教程-树莓派3源码安装Turtlebot(ubuntu mate 16.04+kinetic+Turtlebot)

    ROS与开发板入门教程 树莓派3源码安装Turtlebot ubuntu mate 16 04 43 kinetic 43 Turtlebot ROS与开发板入门教程 树莓派3源码安装Turtlebot ubuntu mate16 04 4
  • Linux下Node.js和NPM安装和配置

    目录 前言 1 安装Nodejs和NPM 2 NPM的配置 3 nodejs的基本使用 3 1 搭建简易后端服务器 4 npm的基本使用 4 1 搭建vue 2 0开发环境 前言 Nodejs简介 Node js是一个基于Chrome V8
  • 年轻人,你为什么要来阿里搞技术?

    阿里妹导读 xff1a 刚刚毕业的年轻技术人 xff0c 为何会选择阿里巴巴 xff1f 也许 xff0c 因为这里是学术和实践充分融合的实验场 xff0c 也许是因为在这里理论的确可以改变生活 xff0c 也许只是为了感受在西湖畔写代码的
  • C语言字符数组与字符串的使用及加结束符‘\0‘的问题

    1 字符数组的定义与初始化 字符数组的初始化 xff0c 最容易理解的方式就是逐个字符赋给数组中各元素 char str 10 61 I a m h a p p y 即把10个字符分别赋给str 0 到str 9 10个元素 如果花括号中提
  • 追求技术之路 - 那些陪伴我的书籍

    如今已经在广州一家嵌入式公司实习 xff0c 分享大学里度过的一些书籍 xff0c 有些还没读完 xff0c 个人比较喜欢经典书籍 xff0c 研读起来就有种奇妙的感觉 xff0c 比起人与人之间的复杂的关系 xff0c 书籍带给我的感觉很
  • 中断,异常,系统调用,进程切换时的堆栈变化和寄存器保存

    1 中断 xff0c 异常 xff0c 系统调用相同 xff1a CPU自动压入 xff1a ss 运行级别提升时需切换堆栈 xff0c 因此多压入用户态的栈段ss xff0c esp 运行级别提升时需切换堆栈 xff0c 因此多压入用户态
  • Pipeline 核心语法

    常用开发工具 选择任意pipeline类型的作业 xff0c 点击 流水线语法 即可进入pipeline开发工具页面 1 片段生成器 流水线代码片段生成器 xff0c 非常好用 xff0c 在这里可以找到每个插件以及Jenkins内置的方法
  • Pipeline Groovy 语法

    Groovy是一种功能强大 xff0c 可选类型和动态 语言 xff0c 支持Java平台 旨在提高开发人员的生产力得益于简洁 xff0c 熟悉且简单易学的语法 可以与任何Java程序顺利集成 xff0c 并立即为您的应用程序提供强大的功能
  • Jenkins 共享库应用

    1 创建一个共享库 1 xff09 创建共享库 可以直接在github中创建一个公开类型的仓库 xff0c 也可以创建私有类型的gitlab仓库 xff0c 需要提前配置好仓库的认证凭据 xff0c 这里使用gitlab创建了一个名为jen
  • Generic WebHookTrigger 自动触发

    1 安装配置 Generic WebHookTrigger 目的 xff1a 为Jenkins作业添加触发器 xff0c 便于其他系统调用 安装配置Generic WebHook xff0c 插件名称 xff1a Generic Webho
  • Jenkins 权限管理与凭据

    权限管理 安装插件 Role Based Strategy 可以对Jenkins用户进行权限管理 xff0c 如果在Jenkins控制台安装插件失败 xff0c 可以去Jenkins官网下载插件然后再上传 Role based Author
  • 部署Maven环境

    JDK xff1a 在maven3 3 以上的版本需要JDK版本1 7 43 xff0c 内存 xff1a 没有最低限制 磁盘 xff1a 1G 43 可用磁盘空间 操作系统 xff1a 没有限制 下载地址 xff1a Maven Down
  • Maven 集成

    先在执行节点上安装Maven xff1a 部署Maven环境 lovely nn的博客 CSDN博客 JDK xff1a 在maven3 3 以上的版本需要JDK版本1 7 43 xff0c 内存 xff1a 没有最低限制 磁盘 xff1a
  • 哪些技术好书值得一读再读?阿里大牛列了一份经典书单

    喜爱读书 xff0c 就等于把生活中寂寞无聊的时光换成巨大享受的时刻 有了书 xff0c 各个领域的智慧 xff0c 几乎触手可及 我们能有幸站在前辈 巨人的肩膀上 xff0c 看更远的风景 4月23日世界读书日 xff0c 阿里九位技术大
  • JDK 环境部署

    环境Centos 7 6 卸载旧的 查看旧的java版本 java version 查看jdk信息 rpm qa grep i jdk 卸载jdk rpm e nodeps jdk信息 安装新的 rpm安装1jdk rpm ivh jdk
  • Docker部署Gitlab

    这里用docker部署gitlab ce 14 0 0 ce 0版本 xff1a docker pull gitlab gitlab ce 14 0 0 ce 0 mkdir p gitlab1 config data logs docke
  • Pipeline 部署K8S应用

    概述 提前在K8S集群中部署jenkins和gitlab应用 xff0c gitlab用于存放应K8S的资源清单Yaml文件 xff0c Jenkins用于拉取gitlab上的Yaml文件并将其部署到K8S集群中 将所有Yaml文件放在Gi