前言

本次记录物理机部署Jenkins,k8s弹性伸缩agent节点供部署项目。

安装 K8S 插件

登录 Jenkins,系统管理→ 插件管理 → 搜索 kubernetes,选择第二个 Kubernetes,点击 安装,安装完成后重启 Jenkins 。

申请 K8S 凭据

因为 Jenkins 服务器在 kubernetes 集群之外,所以我们准备以下文件才能从外面连接到 kubernetes 集群。

登录 Jenkins,系统管理→ 证书管理 → 全局凭据→添加凭据

配置云kubernetes连接K8S集群的验证文件

kubectl config view --raw -o json

把获取到的数据,分别生成ca.crt client.crt client.key

echo "LS0tLS1CRUdJTiBDRVJUSUZJVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1EZ3lNekEzTXpnd05WaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBS09JClJOMmpweXJLK2M1ZktoMVpWbE1KdVppUXEzMFNVRzU5dU51SEJxaUJKVnZzd0syWFhxNXZZOUc1KzEzUTJ2TisKYTIrTm4wcDlDT0xtSitJZVd1V3VMQXZUdUx4RlRPZEd0MUJsQ3FGSkR5RGd2S3hUaHUwVHVCdEp1eUpuNDVBRgpLSTk2UysrRjRpSWU2aW1VSzgydXM3WUdBNjVOSkJFUnlZN1hTQVMyTWlJbUJDSnFmYkVlbVFTRDJXcm1iYlhsCk1Cdmd6VUFGUUdvbUFOYTNmQklQM2QvWWxGZTZqNlJDTmhUSGhqak1BUGk3WUpwcEpzTjZCTDBWYVQ3MTVEYVoKTVI3blo2cVdmMk5RS3k2bGV3MjZxUERzaVFWaCtZS1NxVDdzaWVXSm11a0F3UEpoY2lJL2tGUmd0eXYxSGozWAp4WVNQU2RsOURoUXp0WGVFckljQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZDN2xFcldSQ3QxVUtqWFAxMENpN2pacVpOcEJNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBR3cwR01hcWY5MUlZYjJ4NDVqYgpueVZ6ZkZDSWZuTnA4R1JBbmFCUFpWVFM0ZGJnQ0dUTHZvN3pWUWtDendwMGJaeC9nT0t5ek5hakw0bU5MOEw2CjIxdnYxRzVzV29TTTFDbDh6clM1NVNKTjZwWnlnYUgzSkNFTlB3cDlIb0xEQjdka3gzS2dOZjJQWGJRM1ZRQjQKZ3dWTVFTbmhMRCtLV3hPV3phYjRDdnMra2tEVm81aEY5cVRuTitxY1hKM3A5UG1YaEkvQjVhd2UxME5PUTdDcwpyTzVUYzJKS1dhZUV2ZGx0MmZ6dEQ3Lyt5UlNLRWxML3AzczFtUVlCTkllMWh1anFnS3hVamFKZE40UmJwUk9wCk9pVmVGMmhmVVNycUNtQldhSjY5b2p0cEhUSUtY1MFAKUE5jPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" |base64 -d > ca.crt

echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTlaUmw0bytSZnZBMUNmWUwKbTU1R3hmMFpnYWoySnc4b1hsWUVVU2VJcC82VU14SS9XUXhNWTVxNFFXcUdXYVNDZXV3cHhqTFU2MXlkcmVOcApjeFM4TUpIQXJ6QXJ1cGhhb1FiZkdqdkNHRldHMEtPcUlNcGhMemtiTmRJSTNBOThjV1kwWTBRcnNQaEtHaFVQCmd3ejJYWFhQWFFLSVlLSWN1cGRnbWJKeUpPakpEU01ZQUJJQjZqU3VabkFQeTVaTzNJMTBwT0JNSXJKTVhCY3EKYk1LZDNKRkl5Tm5jNFdpckd2cks2Q2xWUXJYUzY5bDd0c2lVWDhvekZLdEd2ZVllSTA0SmpJWWdQOG5CdnJ2dApMSGpibksrM1pTNUVmV0pQQmtZc0VxK3RtODBtcDRkSzhpVkFZbUVEeVZnS2JoWVZYckpjemcyN3lnZEY1Y3dzCllzU1dUUUlEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JRdTVSSzFrUXJkVkNvMXo5ZEFvdTQyYW1UYQpRVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBSmNwRUlNc0FGT2tzOXdvVzliNmVSc2lyNkpKRFRKMGhTeFp6ClR0Q2RxdGRZT252ZG82RVRQVVlkMkQxU0dJbHcxQ3JLSHF1OEREb0F4K1RqRjhoYjlobkpNTzZsWUlsWFNtM3YKcDcrd0RSTncyZlRjS2pxWStHSWZxRE9WQUlqREFyaWJFVmprK2pkRW8vU3hBOWc4YjJySzRtZTV0Z1JrSFZuQwozNUZodG1JUkhlbnJNMEV5c3JibDFOdGdTdktQLzJ4a0EwaGp5ckNib1puWjhOVk1RTXk5ZURMRmhjMDNqb0tLCmNKSFdNVzdEZVpGVlBLZGdqYXVMUStObkQwUTVkOUdGK1p3cHNtMTVDd1RRZzVUQSt5cW9CNE0vbTJzelRuRXIKNjlNUG5WckxNdmJGVlNDQjJybTYmZiSHJhZWhKNkFMV3BPRDllNHZWN0E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" |base64 -d > client.crt

echo "LS0tLS1CRUdJTiBSU9RYmZHanZDR0ZXRzBLT3EKSU1waEx6a2JOZejRSSFpyMUEKS2NnSW95VWsvUEFnVm8xQVA1Rm1mcHl3SGNNT3JXYktRT25JbG5FbWFLRWZNSGo0eVRSOGlJdUpNcUV0a0NiYwpyclZyUVdVR2VIY1FaaERkdkE0cWtFNXJVNlo1aXBaYjBoaXUvTTBRUGlkR1VGbkVBTlZLdzgrbGJCYjV6a3BwCnpOQW1YYnAvc0Nha29VZ1kzWjB6cDNueEZ0eWpPbXFJdlZlaGlVRStvMlBxaytyVmFaN0g0THlKWlY1RUZoTWMKeEhKTFVGMENnWUVBK1pybWdaZEJib0twKzBlS0g4SFlyRmtKZmU5bS9heU9KUmh0TFR0NjJtaitlaTRTS09IMgp3ekdySmoreEtaeGkwNGs0eGZDNG81VEI2YUhvZDFNS0lRbWRabTgvWE1kOEUxNVUweE4rZkF0S0diL09rd1ExCmx2Z3RvWHpDTVpaTUkyeXUwTnc4OWhCOXR0STNjcDlOTU1yb1dNMTVqRFdoZ0s5enMwaE85bThDZ1lFQSs5OFkKajhjNHJrNjZnd0RjY3Q0dmZGaUU4VjdwdlF0MDJUd0xFZGw4YkM0OXRNY3pTYjAzR0xuL0UzanFlWkJJTlpOTQpacG1oVHhFNFMxejZwaC80VXp2VUVBMVRFdTcrS0xEelF3TlRTWXJmdkpYYXc5eXZOeVRNUGM4L3ZsVWZSV1BGCllKbW9WU0toN1UxYVNhY1BFQTB5TVVIS3pZcW93SFo0VTRwMC9RTUNnWUVBbWlwQVFMNUpYWlk2b3NiMjJ0S0IKbjBHSENVOTZUeWZxeTZLZ25CVm10Y3V2a1lzdkVDMHdtakx0UUx5S0VlZFRhdEFRVHNGMWFTT1IrVmxWR1k0aQpiWEZnMUVuVjJ0b2pHbHRqRE5PM2hhbjdaSmdCWVBCeW9RSThQTWV2c2F6ZzdlaE11UmV1VjFTc01PVDU5a1BLCkMxN256eUZwOTEyUW1NakZMM0J6eE9VQ2dZRUFuT3ZuQXBVTmRGUHFrZm4wWHNDYzl5eXpUeXBpRi96T1JSWEsKazhsYllvOEF0T095eVl0UWkyQStVbVJ3T1dLeUNtY0dINW94elBBZWtaMlJML1VWSk1idnhMVmpIWHF2VFJHblg2WnRBQ0FsRHptczVXYVpGblViVnNjdTRqSFVXYTRBMXZwWnZvPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=" |base64 -d > client.key

生成client P12认证文件cert.pfx,用于配置Jenkins连接k8s集群的认证凭据

生成Client P12认证文件cert.pfx,并下载至本地:

openssl pkcs12 -export -out ./cert.pfx -inkey ./client.key -in ./client.crt -certfile ./ca.crt
Enter Export Password:123456
Verifying - Enter Export Password:123456

上传cert.pfx到Jenkins页面,输入刚才设置的密码。

配置 K8S 集群的对接

登录 Jenkins,点击 系统管理 → 系统配置 → Manager Nodes and Clouds

填写以下内容

  • Kubernetes 地址:kubernetes服务地址,也就是 apiserver 的地址,一般是master 节点 NodeIP+6443 端口

  • Kubernetes 服务证书 key:刚才生成的ca.crt 文件的内容

  • 凭据:刚才创建的 certificate 凭据

  • Jenkins 地址:Agent 连接 Jenkins Master 的地址

启用50000代理端口

创建一个pipeline脚本构建项目

定义参数

def label = "jenkinsagent-${JOB_NAME}-${BUILD_NUMBER}"
def GIT_ADDR = "http://git地址/special_provider.git"

定义选项参数和动态选项参数

properties([
[$class: 'RebuildSettings', autoRebuild: false, rebuildDisabled: false],
buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '6')),
parameters([
choice(choices: ['uat','prod'], description: '选择命名空间', name: 'NAMESPACE'),
choice(choices: ['sp-oms-webapi','sp-provider','sp-webapi'], description: '选择发布项目', name: 'project'),
[
$class: 'CascadeChoiceParameter',
choiceType: 'PT_RADIO',
filterLength: 1,
filterable: false,
name: 'POMDIR',
description: '选择项目目录',
randomName: 'choice-parameter-9129716595374480',
referencedParameters: 'project',
script: [
$class: 'GroovyScript',
fallbackScript: [
classpath: [ ],
sandbox: false,
script: 'return["ERROR"]'
],
script: [
classpath: [ ],
sandbox: false,
script: '''\
if(project.equals("sp-oms-webapi")){
return ["sp-oms-webapi:selected"]
}else if(project.equals("sp-provider")){
return ["sp-rpc-provider:selected"]
}else if(project.equals("sp-webapi")){
return ["sp-webapi:selected"]
}
'''
]
]
]
])
])

配置Jenkins的pod模板

podTemplate(
label: label, cloud: 'kubernetes',
containers:[
containerTemplate(name: 'jnlp', image: 'hubar地址/jenkins-slave-maven:v1',ttyEnabled:true)
],
volumes:[
hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
hostPathVolume(mountPath: '/etc/localtime', hostPath: '/etc/localtime'),
hostPathVolume(mountPath: '/usr/bin/docker',hostPath: '/usr/bin/docker'),
hostPathVolume(mountPath: '/usr/bin/kubectl',hostPath: '/usr/bin/kubectl'),
nfsVolume(mountPath: '/maven/LocalStore',serverAddress: '10.0.2.85',serverPath: '/maven/LocalStore', readOnly: false),
]
)

执行拉代码、编译、部署

{
node(label) {
stage('checkout'){
checkout([$class: 'GitSCM',
branches: [[name: 'release']],
doGenerateSubmoduleConfigurations: false,
extensions: [],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'ee2e4a25-0f67-4b1a-99e6-98749064f85c', url: "${GIT_ADDR}"]]
])
} stage('complie'){
ansiColor('xterm') {
echo "\u001B[34m 执行mvn编译 \u001B[0m"
}
container('jnlp'){
def build_version = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
sh label: '', script: "mvn -q -B -f ${POMDIR}/pom.xml -DskipTests=true clean install -Daliyun=central -P$NAMESPACE docker:build -Dbuild_version=release-$build_version -Dbuild_tag=$BUILD_TAG"
}
} stage('deploy'){
container('jnlp'){
withKubeConfig(caCertificate: '', clusterName: '', contextName: '', credentialsId: 'db6edcf0-d9a4-4b9b-b92e-898e64665ed3', namespace: '$NAMESPACE', serverUrl: 'https://kubernetes.default.svc.cluster.local') {
sh label: '', script: "kubectl apply -f ${POMDIR}/target/docker/k8s/deployment.yml"
}
}
script{
buildName "#${BUILD_NUMBER}-${BUILD_USER}"
buildDescription "选择项目:${project} 环境:${NAMESPACE}"
}
}
}
}

物理机Jenkins接入K8s环境的更多相关文章

  1. 使用VMware Converter Standalone P2V(物理机转换虚拟机)

    使用VMware Converter Standalone P2V(物理机转换虚拟机) 环境说明: 1.P2V软件:VMware-converter-en-6.3.0-20575345  下载地址:v ...

  2. hadoop进阶----hadoop经验(一)-----生产环境hadoop部署在超大内存服务器的虚拟机集群上vs几个内存较小的物理机

    生产环境 hadoop部署在超大内存服务器的虚拟机集群上 好 还是  几个内存较小的物理机上好? 虚拟机集群优点 虚拟化会带来一些其他方面的功能. 资源隔离.有些集群是专用的,比如给你三台设备只跑一个 ...

  3. wecenter 问答社区 dockerfile,不用纠结于物理机的运行环境

    FROM webdevops/php-nginx:centos-7-php56 ADD . /app RUN ["chmod", "777", "/a ...

  4. Jenkins指定tag发布到k8s环境

    Jenkins指定tag发布到k8s环境 1.Jenkins配置一个Pipeline 工程 首先要安装插件:https://www.cnblogs.com/Dev0ps/p/9125232.html ...

  5. Docker & k8s 系列二:本机k8s环境搭建

    本篇将会讲解k8s是什么?本机k8s环境搭建,部署一个pod并演示几个kubectl命令,k8s dashboard安装. k8s是什么 k8s是kubernetes的简写,它是一个全新的基于容器技术 ...

  6. K8S环境的Jenkin性能问题处理

    环境信息 在K8S环境通过helm部署了Jenkins(namespace为helm-jenkins),用于日常Java项目构建: kubernetes:1.15 jenkins:2.190.2 he ...

  7. K8S环境的Jenkin性能问题处理续篇(任务Pod设置)

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos K8S环境的Jenkin性能问题处理 本文是<K ...

  8. K8S(08)交付实战-交付jenkins到k8s集群

    k8s交付实战-交付jenkins到k8s集群 目录 k8s交付实战-交付jenkins到k8s集群 1 准备jenkins镜像 1.1 下载官方镜像 1.2 修改官方镜像 1.2.1 创建目录 1. ...

  9. Jenkins 基础篇 - 环境准备

    前期准备 为了开发这套课程,我专门购买了一台二手戴尔服务器 Dell R720,同时把废弃多年的笔记本电脑也利用了起来.当然如果自己没有多余的电脑,也可以在自己电脑上安装 Vmware Worksta ...

  10. 物理机异常断电,linux虚拟机系统磁盘mount失败,导致无法启动; kubectl 连接失败

    虚拟机 CentOS 7 挂载文件系统失败 上周五下班前没有关闭虚拟机和物理机, 今天周一开了虚拟机之后,发现操作系统启动失败. 原因跟 这篇文章描述的一模一样. 解决操作系统的文件系统挂载的问题之后 ...

随机推荐

  1. 15个Linux Grep命令使用实例(实用、常用)

    Grep命令主要用于从文件中查找指定的字符串.首先建一个demo_file: 复制代码 代码如下: $ cat demo_fileTHIS LINE IS THE 1ST UPPER CASE LIN ...

  2. linux:用户管理

    用户账号添加.删除.修改以及用户密码的管理 用户组的管理 涉及三个文件: /etc/passwd    :存储用户的关键信息 /etc/group :存储用户组的关键信息 /etc/shadow :存 ...

  3. SDN网络技术在云计算中的应用

    本文分享自天翼云开发者社区<SDN网络技术在云计算中的应用>,作者:1****m SDN(软件定义网络)是一种新型的网络架构,其基本思想是将数据平面和控制平面分离,通过集中式的控制器来管理 ...

  4. SNMP简介

    复习几组概念带内管理和带外管理区别:传送的物理通道不同.1.带内管理是管理控制信息与数据信息使用统一物理通道进行传送.当网络出现故障中断时数据传输和管理都无法正常进行.2.带外管理在于通过不同的物理通 ...

  5. CTFHub-RCE漏洞wp

    引言 题目共有如下类型 什么是RCE漏洞 RCE漏洞,全称是Remote Code Execution漏洞,翻译成中文就是远程代码执行漏洞.顾名思义,这是一种安全漏洞,允许攻击者在受害者的系统上远程执 ...

  6. FreeSql学习笔记——0.FreeSql启动!

    FreeSql FreeSql是功能强大的 .NET ORM,支持 .NetFramework 4.0+..NetCore 2.1+.Xamarin等支持 NetStandard 所有运行平台.支持  ...

  7. 深度对比:PostgreSQL 和 SQL Server 在统计信息维护中的关键差异

    深度对比:PostgreSQL 和 SQL Server 在统计信息维护中的关键差异 数据库统计信息的作用 在数据库系统中,查询优化在决定应用程序性能方面起着至关重要的作用. 高效的查询依赖于最新的数 ...

  8. DeepSeek本地性能调优

    技术背景 大模型性能调优是一个很复杂的工程,涉及到很多细节,如果真要对模型动刀子,还需要对模型和数据集本身有非常好的理解.这里我们仅仅考虑模型加载过程中,可以优化的一些参数配置.关于DeepSeek在 ...

  9. PowerJob:一款强大且开源的分布式调度与计算框架

      项目名称:PowerJob 项目作者:假诗人 开源许可协议:Apache-2.0 项目地址:https://gitee.com/KFCFans/PowerJob 项目简介 PowerJob(原Oh ...

  10. Typecho 引入 DPlayer

    想在文章中插入视频,尝试 iframe 和 video 标签后发现 m3u8 流会触发下载无法播放,用 hls 该问题后,碰到了 403 forbbiden.联想到前些天新浪图床加 referrer ...