前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用 Docker 部署 Jenkins 代理(主从)控制服务器

使用 Docker 部署 Jenkins 代理(主从)控制服务器

作者头像
用户4235284
发布于 2023-10-14 08:13:04
发布于 2023-10-14 08:13:04
67100
代码可运行
举报
文章被收录于专栏:后端学习之道后端学习之道
运行总次数:0
代码可运行

自动化是 DevOps 的核心。各种自动化工具和技术真正实现了持续集成和持续交付的概念。这些工具多年来发展迅速,但似乎永远存在的一个名字是Jenkins

我们不会在这篇文章中讨论 CI-CD 的介绍性概念,也不会浪费时间展示 Jenkins 安装步骤。如果您是 Jenkins 的新手,可以查看官方安装文档以开始使用 Jenkins。因此,这篇文章的目的是讨论如何设置 Jenkins 控制器-代理架构(也称为主从架构)并解决执行过程中出现的一些问题。这是因为,这个过程可能很乏味,如果您有一段时间没有这样做,您可能会浪费几个小时。

[为什么选择 Jenkins 控制器-代理架构?

控制器(主)节点是 Jenkin 的大脑,它是 Jenkins 应用程序运行的地方。如果我们在控制器节点上做太多工作(或它崩溃),整个应用程序可能变得不可用。因此,我们希望 master 尽可能可用。这可以通过将工作委托给代理节点(从节点)来完成。因此,在 Jenkins Controller-Agent 架构中,作业由控制器调度并分配给代理。控制器还跟踪从服务器是否在线,检索它们对构建结果的响应,并将构建结果输出到控制台。因此,主节点更可用,因此我们的 Jenkins 服务器的整体性能使用这种设计得到了提高。

这种架构的另一个优点是我们只能在控制器节点上安装最少的工具集,而我们可以在代理节点上安装较重的工具(作业需要)。这使控制器保持轻量级,还允许我们根据应执行它们的代理来组织我们的作业。在上面的示例中,我们有一个 Jenkins 控制器和 4 个代理。每个代理都可以用于特定目的。

  • 例如,如果我们需要运行测试并构建基于 javascript 的应用程序的作业,我们可以限制这些作业在最左侧的代理上执行。
  • 同样,如果我们需要构建一些 .NET 应用程序,我们可以使用 Windows 主机设置 Jenkins 代理,并将这些作业限制在最右侧执行。
  • 此外,我们可以根据系统要求平衡负载来提高性能。比方说,我们正在为一个拥有数百个微服务的系统设置 CI-CD,其中使用基于 python 的堆栈编写的服务数量是任何其他堆栈的两倍。在这种情况下,我们可以安装两个基于 python 的工具的 Jenkins 代理,Jenkins 控制器可以平衡这两个代理之间的负载。

设置

第 1 步:启动 Jenkins 控制器(主)容器

我们可以使用官方的 jenkins docker 容器。这是您可以使用的示例 docker-compose 文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: '3.8'

services:
  jenkins_controller:
    image: jenkins/jenkins:lts-jdk11
    privileged: true
    user: root
    container_name: $CONTAINER_NAME
    ports:
      - 50001:8080
      - 50002:50000
    volumes:
      - $JENKINS_HOME:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock

现在,我们需要启动容器,并且需要为 Jenkins 控制器节点安装所需的工具。我们可以编写一个简单的 bash 脚本来实现这一点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
set -o nounset

JENKINS_CONTAINER_NAME=$1
JENKINS_HOME=`pwd`/jenkins/jenkins_home 
echo "JENKINS HOME: $JENKINS_HOME"

CONTAINER_NAME=$JENKINS_CONTAINER_NAME JENKINS_HOME=$JENKINS_HOME docker-compose -f docker-compose-controller.yaml up --build -d

sleep 10

# Here we have just installed git for our controller node, install as many tools as you require
docker exec $JENKINS_CONTAINER_NAME bash -c "apt-get update -y -q && apt-get upgrade -y -q && apt-get install -y -q git"
  • Jenkins 使用默认使用端口 8080 的 apache jetty,我们将主机的端口 50001 映射到容器的 8080。因此,输入http://host:50001应该会带您到 Jenkins web 仪表板。
  • 第一次检查容器日志管理员密码并创建一个新的管理员用户。
第 2 步:设置 Jenkins 代理(从属)

我们现在可以设置我们的代理。由于我们的 Jenkins 控制器将使用 SSH 与代理通信,因此我们需要生成 SSH 密钥。在这种情况下,Jenkins 主节点将充当 SSH 客户端,代理将充当 SSH 服务器。所以,我们需要相应地设置它。

  1. 生成密钥
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssh-keygen -t rsa -f jenkins_agent_1
  1. Goto Jenkins Dashboard > Manage Jenkins > Manage Credentials > 添加“系统”范围的凭据以启用 SSH 到 Jenkins Agent

系统凭证与全局凭证 系统:仅在 Jenkins 服务器上可用(jenkins 作业不可见) 全局:可在任何地方访问,包括 jenkins 作业

使用适当的值填写表格。这是一个示例, 用户名:jenkins # 我们希望以“jenkins”用户身份通过​​ ssh 进入代理,默认情况下该用户已存在于我们将使用的 jenkins-agent 容器中

ID:凭证的唯一ID,可用于引用凭证

私钥:SSH私钥文件内容(例如:jenkins_agent_1)

第 3 步:启动 Jenkins 代理(从属)容器

我们可以使用官方的 jenkins-ssh-agent docker 容器。这是您可以使用的示例 docker-compose 文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: '3.8'

services:
  jenkins_agent:
    image: jenkins/ssh-agent:jdk11
    privileged: true
    user: root
    container_name: $CONTAINER_NAME
    expose:
      - 22
    environment:
      - JENKINS_AGENT_SSH_PUBKEY=$JENKINS_AGENT_SSH_PUBKEY

请注意,我们必须设置环境变量JENKINS_AGENT_SSH_PUBKEY,在本例中我们从 bash 变量中进行设置。我们还需要在 Jenkins 代理中安装所需的工具。我们可以使用如下所示的简单 bash 脚本来实现所有这些,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
set -o nounset

JENKINS_CONTAINER_NAME=$1
JENKINS_AGENT_SSH_PUBKEY=$2

CONTAINER_NAME=$JENKINS_CONTAINER_NAME JENKINS_AGENT_SSH_PUBKEY=$JENKINS_AGENT_SSH_PUBKEY docker-compose -f docker-compose-agent.yaml up --build -d

sleep 10

# Here we have just installed tools that help us create a python virtual environment for our agent node, install as many tools as you require
docker exec $JENKINS_CONTAINER_NAME bash -c "apt-get update -y -q && apt-get upgrade -y -q && apt-get install -y -q git python3 python3-venv"
第 4 步:从 Jenkins 控制器配置代理

转到Jenkins 仪表板>管理 Jenkins >管理节点和云>新节点

使用适当的值填写表格。例如:,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*Name*: JenkinsAgent1

*NumberOfExecutors*: 1-2

*RemoteRootDirectory*: /home/jenkins/agent

*Labels*: linux, python # Space separated values, Can be useful to restrict jobs to run on a particular agent

*Usage*: Use this node as much as possible

*Launch Method*: Launch agents via SSH

*Host*: jenkins_agent # Agent's Hostname or IP to connect. (docker-compose service name if controller and agent is on the same machine)

*Credentials*: Select the Credential created in Step 2

*HostKeyVerificationStrategy*: Non verifying Verification Strategy

Launch Method > Advanced

*ConnectionTimeoutInSeconds*: 60  
*MaximumNumberOfRetries*: 10  
*SecondsToWaitBetweenRetries*: 15
第 5 步:创建作业并运行

现在,我们的代理应该被控制器发现,我们可以开始将我们的工作委托给代理。我们可以通过使用我们在创建代理时分配的标签来限制作业在特定代理上运行。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
让远程成为本地,微服务后端开发的福音
如果我们想与其他微服务进行联动调试,则需要在本地环境中启动对应的微服务模块,这可能需要大量的配置和构建时间,同时也会占用我们本地很多资源,可能还会出现”带不动“的情况。
每周聚焦
2023/03/28
3750
让远程成为本地,微服务后端开发的福音
如果我们想与其他微服务进行联动调试,则需要在本地环境中启动对应的微服务模块,这可能需要大量的配置和构建时间,同时也会占用我们本地很多资源,可能还会出现”带不动“的情况。
Rainbond开源
2023/02/07
5320
让远程成为本地,微服务后端开发的福音
三种不同场景下的 Kubernetes 服务调试方法
在开发、调试为生产环境下 K8s service 中的应用程序时,常常需要一些工具或者命令。本文介绍了三种不同场景下对应的解决方案以及工具。
iMike
2021/04/30
1.4K0
【K8S】一种基于Istio+Okteto下的快乐开发模式
自从服务上云引入K8S后,我们开发模式也发生了改变。我们最能想到的一种开发流程就是:
于顾而言SASE
2024/03/20
2070
【K8S】一种基于Istio+Okteto下的快乐开发模式
Docker集群编排工具之Kubernetes(K8s)介绍、安装及使用
K8s基础原理 k8s中文社区:https://www.kubernetes.org.cn/ 简介 Kubernetes与较早的集群管理系统Mesos和YARN相比,对容器尤其是 Docker的支持更加原生,同时提供了更强大的机制实现资源调度,自动 管理容器生命周期,负载均衡,高可用等底层功能,使开发者可以专注于开发应用。 Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用
863987322
2018/03/29
5K0
Docker集群编排工具之Kubernetes(K8s)介绍、安装及使用
简化Kubernetes开发:你的工具指南
随着 Kubernetes 在应用开发中的日益普及,高效的本地开发工具需求变得至关重要。在过去几年中,用于开发人员与 Kubernetes 协作的工具得到了改进。这些工具帮助开发人员简化工作流程,加速迭代周期,并创建真实的开发环境。本文将全面分析和比较六种流行的现代 Kubernetes 本地开发工具。通过阅读本文,您将获得足够的信息,从而做出明智的选择,并提升 Kubernetes 开发体验。
云云众生s
2024/03/28
2020
17-Kubernetes进阶学习之集群升级迁移和维护实践
描述:Kubernetes 使用 Etcd 数据库实时存储集群中的数据,可以说 Etcd 是 Kubernetes 的核心组件,犹如人类的大脑。如果 Etcd 数据损坏将导致 Kubernetes 不可用,在生产环境中 Etcd 数据是一定要做好高可用与数据备份,这里介绍下如何备份与恢复 Etcd 数据。
全栈工程师修炼指南
2022/09/29
1K0
17-Kubernetes进阶学习之集群升级迁移和维护实践
Kubernetes 二进制部署(一)单节点部署(Master 与 Node 同一机器)
0. 前言 最近受“新冠肺炎”疫情影响,在家等着,入职暂时延后,在家里办公和学习 尝试通过源码编译二进制的方式在单一节点(Master 与 Node 部署在同一个机器上)上部署一个 k8s 环境,整理相关步骤和脚本如下 参考原文:Kubernetes二进制部署(一)单节点部署 1. 相关概念 1.1 基本架构 1.2 核心组件  1.2.1 Master 1.2.1.1 kube-apiserver 集群的统一入口,各组件协调者 以RESTful API提供接口服务 所有对象资源的增删改查和监听操作都
西凉风雷
2022/11/23
1.4K0
Kubernetes 二进制部署(一)单节点部署(Master 与 Node 同一机器)
kubernetes监控-prometheus(十六)
通过各种exporter采集不同维度的监控指标,并通过Prometheus支持的数据格式暴露出来,Prometheus定期pull数据并用Grafana展示,异常情况使用AlertManager告警。
yuezhimi
2020/09/30
7940
kubernetes监控-prometheus(十六)
Kubernetes 入门教程
一 k8s架构 我们看下 k8s 集群的架构,从左到右,分为两部分,第一部分是 Master 节点(也就是图中的 Control Plane),第二部分是 Node 节点。 Master 节点一般包括四个组件,apiserver、scheduler、controller-manager、etcd,他们分别的作用是什么:
张哥编程
2024/12/13
960
Kubernetes V1.15 二进制部署集群
以下操作均在/data/ssl_config/etcd/目录中 etcd证书ca配置
惨绿少年
2019/09/24
2K2
Kubernetes V1.15 二进制部署集群
Kubernetes+Prometheus+Grafana部署笔记
Kubernetes(通常写成“k8s”)Kubernetes是Google开源的容器集群管理系统。其设计目标是在主机集群之间提供一个能够自动化部署、可拓展、应用容器可运营的平台。Kubernetes通常结合docker容器工具工作,并且整合多个运行着docker容器的主机集群,Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。
KaliArch
2018/08/16
1.9K0
Kubernetes+Prometheus+Grafana部署笔记
自从用上 Telepresence 后,本地调试 Kubernetes 中的微服务不再是梦!
微服务作为一种全新的软件架构现在正变得越来越火。基本原因我觉得有两点:一方面软件系统越做越复杂,通过拆分将一个大系统解耦成一个个独立的子系统,我们就降低了整个系统的复杂性。另一方面,Kubernetes 的出现使得编排这么多子系统变得简单,可以说 Kubernetes 是目前为止微服务最好的载体。
iMike
2019/11/12
5.9K0
自从用上 Telepresence 后,本地调试 Kubernetes 中的微服务不再是梦!
TKE操作指南 - TKE K8S问题排查(十八)
问题描述:查看pod日志报错,Normal Killing 39s (x735 over 15h) kubelet, 10.179.80.31 Killing container with id docker://apigateway:Need to kill Pod,可能是磁盘满了,无法创建和删除 pod
亮哥说TKE
2019/08/14
5.9K0
部署 Prometheus Operator 监控 Kubernetes 集群
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aixiaoyang168/article/details/81661459
哎_小羊
2019/05/25
1.6K0
k8s集群上ingress实战
使用ingress之前要先在k8s集群部署ingress controller,ingress controller本身需要LoadBalancer支持,一个基本的访问流如下:
王录华
2019/09/25
2.6K0
k8s集群上ingress实战
Kubernetes 之APIServer组件简介
k8s API Server提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。
菲宇
2019/06/12
3.8K0
Kubernetes 之APIServer组件简介
Kubernetes容器集群管理环境 - Prometheus监控篇
一、Prometheus介绍 之前已经详细介绍了Kubernetes集群部署篇,今天这里重点说下Kubernetes监控方案-Prometheus+Grafana。Prometheus(普罗米修斯)是一个开源系统监控和警报工具,最初是在SoundCloud建立的。自2012年成立以来,许多公司和组织都采用了普罗米修斯,该项目拥有一个非常活跃的开发者和用户社区。它现在是一个独立的开放源码项目,并且独立于任何公司,为了强调该点并澄清项目的治理结构,Prometheus在2016年加入了云计算基金会,成为继Kubernetes之后的第二个托管项目。 Prometheus是用来收集数据的,同时本身也提供强大的查询能力,结合Grafana即可以监控并展示出想要的数据。
洗尽了浮华
2019/07/10
2.1K0
Kubernetes容器集群管理环境 - Prometheus监控篇
Docker 与 Kubernetes在前端开发的应用
Docker是开发人员和系统管理员使用容器开发、部署和运行应用程序的平台,使用Linux容器来部署应用程序称为集装箱化,使用Docker可以轻松部署应用程序。Docker 和传统部署方式最大的不同在于,它将不会限制我们使用任何工具,任何语言,任何版本的 runtime,Docker 将我们的应用看成一个只提供网络服务的盒子(也即容器),Kubernetes 则是对这些盒子进行更多自动化的操作,自动创建,自动重启,自动扩容,自动调度,这个过程称之为容器编排。
xiangzhihong
2022/11/30
8020
利用GPU服务器实现边云协同推理
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
鳄鱼儿
2024/05/22
2720
利用GPU服务器实现边云协同推理
推荐阅读
相关推荐
让远程成为本地,微服务后端开发的福音
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档