jenkins连接k8s

简介: jenkins连接k8s

目录

Jenkins连接k8s集群

  • 默认Jenkins是有2个执行器的,我们也可以通过增加节点的方式去让他拥有更多的执行器,连接固定节点的方法比较简单,按照他的步骤一步步来就好了,这里我们配置连接k8s集群
  • 在我们需要连接k8s集群之前,是需要安装kubernetes插件的,不然是没有那个按钮的

1. Kubernetes插件简介

Kubernetes 插件的目的是能够使用 Kubernetes 配合,实现动态配置 Jenkins 代理(使用 Kubernetes 调度机制来优化负载),在执行 Jenkins Job 构建时,Jenkins Master 会在 kubernetes 中创建一个 Slave Pod 代理来执行任务。

该 Slave Pod 中可以包含多种镜像,例如需要 Maven 编译可以使用 Maven 镜像执行任务。使用 NPM编译则可以使用 NPM镜像。操作 Kubernetes 可以使用 Kubectl 插件镜像。

所有 Job 中所需要的环境及其依赖都交由镜像提供,而不需要手动搭配这些环境。在 Slave Pod 执行完 Job 任务后,该Slave Pod将会自动删除。所以 Kubernetes Plugin 简单用法就是,在 Kubernetes 中启动 Jenkins Slave 代理,让代理执行 Jenkins Job,执行完后释放删除 Slave 释放资源。

2. Kubernetes插件使用

Kubernetes Plugin的配置主要有两部分组成:

  • kubernetes的连接参数:主要用于配置如果连接kubernetes
  • kubernetes的pod模板:调用kubernetes创建jenkins slave使用的pod模板

2.1 kubernetes的连接参数

进入 **系统管理->节点管理->Configure Clouds **中,点击 “Add a new cloud” 选项,选择kubernetes,即可进行kubernetes插件的配置。Kubernetes 插件的基本配置,可以配置 Jenkins 连接 Kubernetes API 地址、凭据、超时时间、容器数量限制等参数,详细配置项说明如下:

  • 名称: 用于该“云”配置的标识,可以配置多个“云”来对应多个 Kubernetes 环境,如:kubernetes
  • Kubernetes 地址: Kubernetes API 的地址,一般在 Kubernetes 集群内部 Kubernetes API 为 https://kubernetes.default.svc.cluster.local,集群外部 Kubernetes API 地址为 https://{K8S IP}:6443,Jenkins 如果也部署在 Kubernetes 集群中的话,可以使用内部地址,否则只能使用外部地址。
  • 禁用 HTTPS 证书检查: 设置连接 Kubernetes API 时不检查 Https 证书,一般默认不勾选即可。
  • Kubernetes 命名空间: 指定在哪个 Kubernetes 命名空间下执行任务,一般默认为空即可。
  • Jenkins 地址: 指定 Jenkins Master 的 URL 地址,用于 Slave 连接 Jenkins 用,如果 Jenkins 配置了前缀也要带上。如http://jenkins.example.com:8080,也可以使用kubernetes的内部地址 http://jenkins-svc.devops.svc.cluster.local:8080
  • Jenkins 通道: jenkins会提供一个独立的端口用于Jenkins slave的连接,该端口默认为50000;如: jenkins-svc.devops.svc.cluster.local:50000

这里的内部地址规则是svc名字.命名空间.svc.cluster.local,一定要注意不要写错了

  • Connection Timeout: 连接 Kubernetes API 超时时间,默认值即可。
  • Read Timeout: 连接 Kubernetes API 读取超时时间,默认值即可。
  • 容器数量: 运行 Slave Pod 的最大数量。为空则不限制,设置为 0 则一个都不能创建,默认是 10 个,一般推荐默认值。
  • Pod Labels: Slave Pod 的 Label 标签设置,默认标签即可。
  • Pod Retention: Pod 保留策略,在 Slave Pod 执行完任务后,是否删除或者保留策略,默认会删除,一般使用默认值即可。
  • 镜像: Pod 模板配置,可以配置 Slave Pod 中多个容器的参数值,非常灵活。

最终的配置图片就是这样的

3. 测试

我们新建一个流水线,然后让他执行一些任务,看他能不能正确启动并连接

将这一段流水线代码复制进去,这里的cloud指的是你刚刚添加的k8s节点的名称,然后保存,点击立即执行

pipeline {
    agent {
        kubernetes {
            cloud 'kubernetes'
            showRawYaml true
            yaml """
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: jenkins-agent
  name: jenkins-agent
spec:
  serviceAccountName: jenkins-admin
  containers:
  - name: jnlp
    image: jenkins/inbound-agent
    args: ['\$(JENKINS_SECRET)', '\$(JENKINS_NAME)']
  - name: busybox
    image: busybox
    command:
    - cat
    tty: true
    imagePullPolicy: IfNotPresent
  dnsPolicy: ClusterFirst
  restartPolicy: Never
"""
        }
    }
    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

如果不出问题的话就可以构建成功了

4. 错误原因

  • 当然,有极大可能会失败,因为目前国内的docker不能直接拉取镜像,所以你可以将镜像地址换一下
  • 如果不是因为镜像的原因,正常情况下20秒以内就会执行完,你的流水线一直卡在那个地方的话就可能是你的jenkins的地址写错了,检查一下jenkins的svc然后去修改一下

本文来自博客园,作者:FuShudi,转载请注明原文链接:https://www.cnblogs.com/fsdstudy/p/18263444

分类: Euler / HCIE / CICD

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Kubernetes jenkins 持续交付
jenkins学习笔记之二十一:k8s部署jenkins及动态slave
jenkins学习笔记之二十一:k8s部署jenkins及动态slave
1871 0
|
Kubernetes jenkins 持续交付
在K8S中,Jenkins如何集成K8S集群?
在K8S中,Jenkins如何集成K8S集群?
|
Kubernetes Shell 容器
在k8S中,当一个Pod有多个容器时,如何连接到指定容器?
在k8S中,当一个Pod有多个容器时,如何连接到指定容器?
|
Kubernetes 网络协议 物联网
桥接物联网和云:在 Kubernetes 中增强与 Kong 的 TCPIngress 的连接
桥接物联网和云:在 Kubernetes 中增强与 Kong 的 TCPIngress 的连接
224 0
|
Kubernetes jenkins 持续交付
Jenkins 与 Kubernetes 的集成:实现高效的资源管理和自动化部署
【8月更文第31天】随着微服务架构的普及,Kubernetes 已经成为了容器编排的事实标准。Kubernetes 提供了一种强大的方式来管理容器化的应用程序,而 Jenkins 则是持续集成与持续部署(CI/CD)领域的一个重要工具。将 Jenkins 与 Kubernetes 集成,不仅可以充分利用 Kubernetes 的资源管理能力,还能通过 Jenkins 实现自动化构建、测试和部署,从而提高开发效率和部署速度。本文将详细介绍如何将 Jenkins 集成到 Kubernetes 环境中,并提供具体的代码示例。
1611 0
|
Kubernetes 监控 Shell
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?
|
存储 Kubernetes jenkins
在k8S中,Jenkins发布详细流程是什么?
在k8S中,Jenkins发布详细流程是什么?
|
Kubernetes jenkins 网络安全
Jenkins Pipeline 流水线 - 使用代理节点,Remote SSH 对 K8S 进行升级
Jenkins Pipeline 流水线 - 使用代理节点,Remote SSH 对 K8S 进行升级
290 0
|
7月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
647 1
|
7月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
476 89

推荐镜像

更多