Jenkins Kubernetes 插件无法配置 jnlp-slave pod

2023-11-21

我在 Ubuntu 17.04 VM 上运行 Kubernetes 1.10.0、Docker 17.03.2-ce 和 Jenkins 2.107.1,并在 Jenkins 中安装了 Kubernetes Plugin 1.5。我有另外 4 个 Ubuntu 虚拟机成功设置为集群中的节点,包括未受污染的主虚拟机。我可以直接部署基于 nginx 的服务,并且可以不受限制地访问仪表板。所以,Kubernetes 本身看起来就足够幸福了。

在提到它之前,我要说的是,我们没有短期计划在 Kubernetes 本身内部运行 Jenkins master。所以,我更愿意让这个策略发挥作用。

Kubernetes 云的插件配置如下:

“名称”:kubernetes

“Kubernetes 网址”:https://172.20.43.30:6443

from

# kubectl describe pods/kube-apiserver-jenkins-kube-master --namespace=kube-system | grep Liveness
Liveness:     http-get https://172.20.43.30:6443/healthz delay=15s timeout=15s period=10s #success=1 #failure=8

接受不安全的证书后,浏览器https://172.20.43.30:6443/将会呈现

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "forbidden: User \"system:anonymous\" cannot get path \"/\"",
  "reason": "Forbidden",
  "details": {

  },
  "code": 403
}

“Kubernetes 服务器证书密钥”获取自

# kubectl get pods/kube-apiserver-jenkins-kube-master -o yaml --namespace=kube-system | grep tls
    - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
    - --tls-cert-file=/etc/kubernetes/pki/apiserver.crt

# cat /etc/kubernetes/pki/apiserver.crt
-----BEGIN CERTIFICATE-----
MIIDZ******
*******************
****PP5wigl
-----END CERTIFICATE-----

“Kubernetes 命名空间”:jenkins-slaves

jenkins-slaves 命名空间设置如下...

创建 jenkins-namespace.yaml 并添加以下内容:

apiVersion: v1
kind: Namespace
metadata:
  name: jenkins-slaves
  labels:
    name: jenkins-slaves
spec:
  finalizers:
  - kubernetes

then

# kubectl create -f jenkins-namespace.yaml
namespace "jenkins-slaves" created

# kubectl -n jenkins-slaves create sa jenkins
serviceaccount "jenkins" created

# kubectl create role jenkins --verb=get,list,watch,create,patch,delete --resource=pods
role.rbac.authorization.k8s.io "jenkins" created

# kubectl create rolebinding jenkins --role=jenkins --serviceaccount=jenkins-slaves:jenkins
rolebinding.rbac.authorization.k8s.io "jenkins" created

# kubectl create clusterrolebinding jenkins --clusterrole cluster-admin --serviceaccount=jenkins-slaves:jenkins
clusterrolebinding.rbac.authorization.k8s.io "jenkins" created

使用从中吐出的令牌添加了“秘密文本”的 Jenkins 凭证

# kubectl get -n jenkins-slaves sa/jenkins --template='{{range .secrets}}{{ .name }} {{end}}' | xargs -n 1 kubectl -n jenkins-slaves get secret --template='{{ if .data.token }}{{ .data.token }}{{end}}' | head -n 1 | base64 -d -

“测试连接”显示“连接测试成功”

应该注意的是,相同的令牌可用于登录具有完全访问权限的 Kubernetes 仪表板。

“詹金斯网址”:http://172.20.43.30:8080

“Kubernetes Pod 模板:名称”:jnlp 从属

“Kubernetes Pod 模板:命名空间”:jenkins-slaves

“Kubernetes Pod 模板:标签”:jenkins-slaves

“Kubernetes Pod Template:Usage”:仅构建标签表达式与该节点匹配的作业

“Kubernetes Pod 模板:容器模板:名称”:jnlp-slave

“Kubernetes Pod 模板:容器模板:Docker 镜像”:jenkins/jnlp-slave

“Kubernetes Pod 模板:容器模板:工作目录”:./.jenkins-agent

此时,如果我创建一个作业并将“限制此项目可以运行的位置”设置为“jenkins-slaves”的“标签表达式”,我会得到:

Label jenkins-slaves is serviced by no nodes and 1 cloud. Permissions or other restrictions provided by plugins may prevent this job from running on those nodes.

如果我尝试构建作业,它将位于构建队列中,并且“构建执行器状态”将定期显示“jnlp-slave-#####(离线)(挂起)”,然后几秒钟后消失。

系统日志说:

Apr 03, 2018 12:16:21 PM SEVERE org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher logLastLines
Error in provisioning; agent=KubernetesSlave name: jnlp-slave-t8004, template=PodTemplate{inheritFrom='', name='jnlp slave', namespace='jenkins-slaves', label='jenkins-slaves', nodeSelector='', nodeUsageMode=EXCLUSIVE, workspaceVolume=org.csanchez.jenkins.plugins.kubernetes.volumes.workspace.EmptyDirWorkspaceVolume@44dcba2d, containers=[ContainerTemplate{name='jnlp-slave', image='jenkins/jnlp-slave', workingDir='./.jenkins-agent', command='/bin/sh -c', args='cat', ttyEnabled=true, resourceRequestCpu='', resourceRequestMemory='', resourceLimitCpu='', resourceLimitMemory='', livenessProbe=org.csanchez.jenkins.plugins.kubernetes.ContainerLivenessProbe@58f0ceec}]}. Container jnlp exited with error 255. Logs: Warning: JnlpProtocol3 is disabled by default, use JNLP_PROTOCOL_OPTS to alter the behavior
Warning: SECRET is defined twice in command-line arguments and the environment variable
Warning: AGENT_NAME is defined twice in command-line arguments and the environment variable
Apr 03, 2018 4:16:16 PM hudson.remoting.jnlp.Main createEngine
INFO: Setting up agent: jnlp-slave-t8004
Apr 03, 2018 4:16:16 PM hudson.remoting.jnlp.Main$CuiListener <init>
INFO: Jenkins agent is running in headless mode.
Apr 03, 2018 4:16:16 PM hudson.remoting.Engine startEngine
INFO: Using Remoting version: 3.19
Apr 03, 2018 4:16:16 PM hudson.remoting.Engine startEngine
WARNING: No Working Directory. Using the legacy JAR Cache location: /home/jenkins/.jenkins/cache/jars
Apr 03, 2018 4:16:17 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Locating server among [http://172.20.43.30:8080/]
Apr 03, 2018 4:16:17 PM hudson.remoting.jnlp.Main$CuiListener error
SEVERE: http://172.20.43.30:8080/tcpSlaveAgentListener/ is invalid: 404 Not Found
java.io.IOException: http://172.20.43.30:8080/tcpSlaveAgentListener/ is invalid: 404 Not Found
    at org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver.resolve(JnlpAgentEndpointResolver.java:197)
    at hudson.remoting.Engine.innerRun(Engine.java:518)
    at hudson.remoting.Engine.run(Engine.java:469)
Apr 03, 2018 12:16:21 PM INFO org.csanchez.jenkins.plugins.kubernetes.KubernetesSlave _terminate
Terminating Kubernetes instance for agent jnlp-slave-t8004
Apr 03, 2018 12:16:21 PM WARNING io.fabric8.kubernetes.client.Config tryServiceAccount
Error reading service account token from: [/var/run/secrets/kubernetes.io/serviceaccount/token]. Ignoring.
Apr 03, 2018 12:16:21 PM INFO okhttp3.internal.platform.Platform log
ALPN callback dropped: HTTP/2 is disabled. Is alpn-boot on the boot class path?
Apr 03, 2018 12:16:21 PM INFO org.csanchez.jenkins.plugins.kubernetes.KubernetesSlave _terminate
Terminated Kubernetes instance for agent jenkins-slaves/jnlp-slave-t8004
Apr 03, 2018 12:16:21 PM INFO org.csanchez.jenkins.plugins.kubernetes.KubernetesSlave _terminate
Disconnected computer jnlp-slave-t8004
Apr 03, 2018 12:16:25 PM INFO org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud provision
Excess workload after pending Kubernetes agents: 1
Apr 03, 2018 12:16:25 PM INFO org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud provision
Template: Kubernetes Pod Template
Apr 03, 2018 12:16:25 PM WARNING io.fabric8.kubernetes.client.Config tryServiceAccount
Error reading service account token from: [/var/run/secrets/kubernetes.io/serviceaccount/token]. Ignoring.
Apr 03, 2018 12:16:25 PM INFO okhttp3.internal.platform.Platform log
ALPN callback dropped: HTTP/2 is disabled. Is alpn-boot on the boot class path?
Apr 03, 2018 12:16:25 PM INFO hudson.slaves.NodeProvisioner$StandardStrategyImpl apply
Started provisioning Kubernetes Pod Template from kubernetes with 1 executors. Remaining excess workload: 0
Apr 03, 2018 12:16:35 PM WARNING io.fabric8.kubernetes.client.Config tryServiceAccount
Error reading service account token from: [/var/run/secrets/kubernetes.io/serviceaccount/token]. Ignoring.
Apr 03, 2018 12:16:35 PM INFO hudson.slaves.NodeProvisioner$2 run
Kubernetes Pod Template provisioning successfully completed. We have now 2 computer(s)
Apr 03, 2018 12:16:35 PM INFO org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud provision
Excess workload after pending Kubernetes agents: 0
Apr 03, 2018 12:16:35 PM INFO org.csanchez.jenkins.plugins.kubernetes.KubernetesCloud provision
Template: Kubernetes Pod Template
Apr 03, 2018 12:16:35 PM INFO okhttp3.internal.platform.Platform log
ALPN callback dropped: HTTP/2 is disabled. Is alpn-boot on the boot class path?
Apr 03, 2018 12:16:35 PM INFO org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher launch
Created Pod: jnlp-slave-bnz94 in namespace jenkins-slaves
Apr 03, 2018 12:16:35 PM INFO org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher launch

-史蒂夫·马林

佛罗里达州奥兰多


我去了http://172.20.43.30:8080/configureSecurity/并将“代理:JNLP 代理的 TCP 端口”设置为“随机”

然后我得到了一个“jnlp-slave-ttm5v(暂停)”,它保留在“Build Executor Status”中

日志说:

Container is waiting jnlp-slave-ttm5v [jnlp-slave]: 
ContainerStateWaiting(message=Error response from daemon: the working directory './.jenkins-agent' is invalid, it needs to be an absolute path, reason=CreateContainerError, additionalProperties={})

将“工作目录”设置为“/home/jenkins”后,我看到实际上在 k8s 上创建了一个 pod:

# kubectl get pods --namespace=jenkins-slaves
NAME               READY     STATUS    RESTARTS   AGE
jnlp-slave-1ds27   2/2       Running   0          42s

我的工作成功运行了!

Started by user Buildguy
Agent jnlp-slave-1ds27 is provisioned from template Kubernetes Pod Template
Agent specification [Kubernetes Pod Template] (jenkins-slaves): 
* [jnlp-slave] jenkins/jnlp-slave(resourceRequestCpu: , resourceRequestMemory: , resourceLimitCpu: , resourceLimitMemory: )

Building remotely on jnlp-slave-1ds27 (jenkins-slaves) in workspace 
/home/jenkins/workspace/maven-parent-poms
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jenkins Kubernetes 插件无法配置 jnlp-slave pod 的相关文章

  • 如何将用户输入密码与凭据密码进行比较

    我有一个脚本化管道 它使用以下命令请求用户的密码input函数并将其与用户保存的凭据密码进行比较 如果用户输入的是一个类型string然后就可以了 但是 当我将输入类型更改为password 因此当用户键入它时 它在屏幕上不可见 它会失败并
  • Jenkins - 如何暂停排队作业的运行并让新构建优先

    詹金斯任何版本 我有两个版本 1 642 3 或 2 32 3 我有一份詹金斯工作jobA 我们假设此作业将工件部署到目标部署服务器 它需要 2 个参数 工件名称和目标部署服务器 执行并发构建当前已禁用 即未选中 假设我手动启动了此作业的多
  • Jenkins 管道作业无法在 UI 中完成

    目前的问题是詹金斯管道作业确实运行并正常完成 但在 UI 中 该工作会一直保留 直到我们通过 UI 中止他 这种情况并不常见 大概只占 5 的工作岗位 这可能是詹金斯错误 重新加载配置问题或只是节点上的流量太大 我真的不确定 由于所有 有问
  • Docker 容器是否有自己的 TCP/IP 堆栈?

    我试图了解来自连接到主机的线路并定向到 Docker 容器内的应用程序的网络数据包在幕后发生了什么 如果它是一个经典的 VM 我知道到达主机的数据包将由虚拟机管理程序 例如 VMware VBox 等 传输到 VM 的虚拟 NIC 并从那里
  • Docker 容器可以访问 DNS,但无法解析主机

    我在运行 docker 容器时遇到一个有趣的问题 突然间 我无法从容器内解析 DNS 这是一个概要 一切都没有解决 apt get pip 一次性 ping 容器等正在运行docker run it dns 8 8 8 8 ubuntu p
  • docker、nginx、django 以及如何提供静态文件

    目标 用于生产 django 网站部署的 docker 容器集 我在这个过程中遇到的问题是 通常 nginx 直接提供静态文件 根据我对使用 docker 的良好架构的理解 您将拥有一个用于 wsgi 服务器的容器 可能是gunicorn
  • Java 7 中新的 JNLP 缺少项目警告是怎么回事?

    从 Java 6 切换到 Java 7 后 我的 JNLP 仍然工作正常 但它现在抛出一系列如下错误 Missing Application Name manifest attribute for http blah com app jar
  • 如何从 docker 容器在主机上运行 shell 脚本?

    如何从docker容器控制主机 例如 如何执行复制到主机的bash脚本 这个答案只是一个Bradford Medeiros 解决方案的更详细版本 这对我来说也是最好的答案 所以功劳归于他 在他的回答中 他解释了该怎么做 命名管道 但不完全是
  • docker环境下日志不保存到文件

    在我的生产环境中production rb 我已配置我的日志将保存到文件中 config logger Logger new log production log 当我在本地运行时 使用命令行启动服务器rails s e productio
  • 在 Jenkins API 中,有没有办法找到上次构建的 git 提交?

    我想编写一个脚本来自动创建热修复的功能分支 为了做到这一点 我需要弄清楚如何查看当前构建中的最后一次提交 有没有办法从 Jenkins API 获取最后一次提交 git checkout b hotfix
  • 无法连接到存储库:执行 git 命令时出错:git ls-remote -h ***public github url *** HEAD

    I have installed jenkins on ec2 instance when i try to configure my public github repo with the ec2 instance then it thr
  • 仅运行相应源代码已更改的单元测试?

    我正在 Jenkins CI 服务器中运行单元测试和 Selenium 测试 众所周知 在大型项目中测试需要很长时间才能运行 Java 是否有一个工具 框架只能触发其源代码已更改的测试 这是因为并非每次对 SCM 的提交都会影响源代码的所有
  • 如何通过 Docker 使用 wkhtmltopdf

    当我在 Docker 容器中使用 wkhtmltopdf 版本 0 12 2 4 通过 apt get 安装 时 它失败并显示 QXcbConnection Could not connect to display 当我设置环境变量DISP
  • 在 pip 中为 Flask 应用程序构建 docker 映像失败

    from alpine latest RUN apk add no cache python3 dev pip3 install upgrade pip WORKDIR backend COPY backend RUN pip no cac
  • 如何在 Helm 图表中配置 docker 入口点

    我有以下内容docker compose文件 我不明白如何设置working dir and entrypoint在掌舵deployment yaml 有人有关于如何执行此操作的示例吗 docker compose version 3 5
  • AWS Lambda Sam找不到docker

    我正在尝试使用以下命令测试我的 hello world lambda 函数aws sam cli在我的项目根文件夹中使用以下命令 sam local start api debug 这在控制台中给出了以下输出 2018 07 11 16 1
  • 如何使用网络策略停止所有外部流量并仅允许命名空间内的 Pod 间网络调用?

    我正在 kubernetes 集群中设置一个命名空间 以拒绝任何传出网络调用 例如http company com http company com但允许在我的命名空间内进行 Pod 间通信 例如http my nginx http my
  • Docker:驱动器尚未共享

    当 docker化 时ASP NET Core 3 1 MVC应用程序我得到了以下结果 docker run dt v C Users admin vsdbg vs2017u5 remote debugger rw v D xxx yyy
  • 为什么我得到:没有有效的 JFX 运行时

    我有一个使用 java 1 6 编译并使用 jnlp webstart 运行的现有应用程序 如果我使用 JRE 1 6 从客户端运行此应用程序 一切都会很好 但是 当我使用 java JDK 7 编译代码并使用 JRE 1 7 67 运行客
  • 批准后使用 jenkinsfile 构建促销

    仅当更改管理使用 servicenow 更改票证或通过手动批准批准它时 我才需要使用 jenkins 文件将我的构建升级到生产 我想要类似的东西 产品构建只有在经理批准后才能手动触发 他 她应该收到带有批准 拒绝链接的批准邮件 或者 如果与

随机推荐

  • 在对话框中选择微调器时,Android espresso 中出现 RunTimeException

    我有一个活动 其中打开了一些对话框 该对话框上有一个微调器 我想在此微调器中选择一个特定值 但出现以下异常 java lang RuntimeException Waited for the root of the view hierarc
  • ajax调用JQUERY中的变量数据

    我试图在 jquery 的 AJAX 调用中使用变量 但它不起作用 move 变量包含不同的值 请检查以下代码 var move next ajax type POST url somephp php data move 1 建议在数据中使
  • Slack 一次将多条消息发布到一个频道

    我需要将多个机器人回复 动态确定的响应 发布到同一频道 最明显的方法似乎是使用此 API 方法连续为每条消息执行 HTTP POST https api slack com methods chat postMessage 有没有办法将消息
  • 在 gnuplot 中绘制具有多个记录的一维二进制数组 (uint8)

    我知道这个问题类似于Gnuplot 如何从二进制格式绘制多个时间序列 但是我已经设置了一个略有不同的示例 所以希望可以发布 自我回答如下 我正在生成这样的二进制数据 见下文genbindata plPerl 脚本 perl genbinda
  • 使用 XLSX 导出 html 表(表到工作表)时隐藏/删除列

    我希望能够以 Excel 文件格式导出我的 DOM 表格 我的函数 Typescript 3 5 Angular 8 ExportTOExcel const ws XLSX WorkSheet XLSX utils table to she
  • Bash - 正确清除最后的输出

    我正在尝试创建一个可更新的进度状态 为了做到这一点 我需要能够完全清除最后的输出 以便我可以更新它 回车可以工作 但是当输出长于终端宽度并回绕时 将无法清除最后一个输出 所以我使用 tput n 0 while n ne 100 do n
  • 在 MySQL 中存储 SHA1 哈希值

    当我想将 SHA1 哈希结果存储在 MySQL 数据库中时 我有一个简单的问题 应该多长时间VARCHAR我存储哈希结果的字段是什么 我会用VARCHAR适用于可变长度数据 但不适用于固定长度数据 因为 SHA 1 值是always160位
  • 如何延迟一个转换而不延迟另一个转换?

    我设置了两个转换 circle 我只希望不透明度有延迟 但我只能在两个过渡都进行的地方进行延迟 我的全部目标是在圆圈处于中间旋转时 即正好 90 度 改变不透明度 但我会自己计算时间 我只想知道如何仅延迟一次转换 circle backgr
  • 图像在模拟器中显示,但在 iPhone 设备上不显示

    因此 当我从设备运行应用程序时 图片就会显示出来 一切都运行良好 然而 当我转到该设备时 我运行的 38 张图片中大约有 10 张没有显示 我正在从 sqlite 数据库中提取图像的名称 并且我已经检查过 名称 大小写和所有内容都是正确的
  • 在 Django 中实现“开放时间”的任何现有解决方案

    我正在为一位希望能够更改营业时间的客户制作一个网站 对于他的每一个不同的商店 Django 是否有针对此类问题的现有解决方案 你是什 么意思 看起来很简单 根据您工作日的订单进行调整 如果您愿意 可以添加验证 但人们应该足够聪明 不需要对这
  • Django 创建自定义模型字段

    我正在尝试在 Django 中创建一个自定义字段 它将采用十进制货币值 例如 1 56 并将其作为整数 例如 156 保存在数据库中以存储货币值 这就是我到目前为止所拥有的 我已经设置了固定值来测试 class CurrencyField
  • 为什么考虑_all_requests_local 因 rspec 配置而失败

    rspec rails 2 7 0 导轨 3 0 10 邮政 Rails 3 1 错误捕获对我来说无关紧要 Code class ApplicationController lt ActionController Base unless R
  • Chrome 检查元素的奇怪问题

    When I load my page one of the images is higher than it is supposed to be When I right click Inspect element anywhere on
  • DatePicker 回发后消失

    我有一个与 jquery DatePicker 关联的 asp TextBox 此输入有一个更新文字控件的 onTextChangedEvent 所有这些代码都位于 UpdatePanel 内 因此文字控件会更改 但页面不会刷新 我面临的问
  • 最大样本

    如果我想对数字进行采样来创建向量 我会这样做 set seed 123 x lt sample 1 100 200 replace TRUE sum x 1 10228 如果我想采样 20 个总和为 100 的随机数 然后采样 30 个数字
  • Erlang 节点无法看到彼此

    我是 Erlang 新手 尝试在我的笔记本电脑上设置两个节点 在一个终端中我输入 eli elimayost erlang apps gt erl sname foo setcookie secret 在第二个终端中 eli elimayo
  • 由 gcc 检查的 printf() 包装参数

    当Cprintf 它的家族是由gcc and Wall在命令行上使用时 编译器会根据正在使用的格式字符串警告错误放置的参数 例如 下面的代码会收到一条错误消息 指出格式指定了 3 个参数 但实际上您只传递了两个 printf d d d 1
  • LLDB 在启动时似乎没有读取我的 .lldbinit 文件

    我有一个带有单个别名的文件 lldbinit command alias pi print int 但是当我从 Xcode 运行我的应用程序时 别名不起作用 但是 如果我手动输入别名 则别名确实有效 lldb pi 6 error pi i
  • 在嵌套字典 python 中搜索值

    搜索一个值并获取父字典名称 键 Dictionary dict1 part1 wbxml application vnd wap wbxml rl application resource lists xml part2 wsdl appl
  • Jenkins Kubernetes 插件无法配置 jnlp-slave pod

    我在 Ubuntu 17 04 VM 上运行 Kubernetes 1 10 0 Docker 17 03 2 ce 和 Jenkins 2 107 1 并在 Jenkins 中安装了 Kubernetes Plugin 1 5 我有另外