jenkins - 具有奇数资源编号的 Kubernetes Jenkins Slave

标签 jenkins kubernetes kubernetes-helm

我正在使用 Helm Chart 运行 Jenkins pod,并且在启动 jenkins 作业时有奇怪的日志。与我在值中设置的内容相比,请求的资源和限制似乎处于默认状态。

helm install stable/jenkins --name jenkins -f jenkins.yaml

从 UI 创建并运行随机作业后

Agent jenkins-agent-mql8q is provisioned from template Kubernetes Pod Template
---
apiVersion: "v1"
kind: "Pod"
metadata:
  annotations: {}
  labels:
    jenkins/jenkins-slave: "true"
    jenkins/label: "jenkins-jenkins-slavex"
  name: "jenkins-agent-mql8q"
spec:
  containers:
  - args:
    - "********"
    - "jenkins-agent-mql8q"
    env:
    - name: "JENKINS_SECRET"
      value: "********"
    - name: "JENKINS_TUNNEL"
      value: "jenkins-agent:50000"
    - name: "JENKINS_AGENT_NAME"
      value: "jenkins-agent-mql8q"
    - name: "JENKINS_NAME"
      value: "jenkins-agent-mql8q"
    - name: "JENKINS_AGENT_WORKDIR"
      value: "/home/jenkins/agent"
    - name: "JENKINS_URL"
      value: "http://jenkins:8080/"
    image: "jenkins/jnlp-slave:3.27.1"
    imagePullPolicy: "IfNotPresent"
    name: "jnlp"
    resources:
      limits:
        memory: "2Gi"
        cpu: "2"
      requests:
        memory: "1Gi"
        cpu: "1"

我的 Helm 值(value)观是

master:
(...)
  resources:
    requests:
      cpu: "1"
      memory: "1Gi"
    limits:
      cpu: "3"
      memory: "3Gi"
agent:
  resources:
    requests:
      cpu: "2"
      memory: "2Gi"
    limits:
      cpu: "4"
      memory: "3Gi"

知道为什么它会生成默认 1cpu/1Gi 到 2cpu/2Gi 的代理

最佳答案

我已经重现了您的场景,我将解释这对我来说是如何工作的。 我将 GKE 与 Kubernetes 1.15.3 和 HELM 2.16.1 结合使用。

我已将 Helm Chart 下载到本地计算机,并解压该文件以自定义 value.yaml:

$ helm fetch stable/jenkins
$ tar xzvf jenkins-1.9.16.tgz

在 jenkins 文件夹中,编辑 values.yaml 文件中的第 422-427 行。

agent:
...
    requests:
      cpu: "2"
      memory: "2Gi"
    limits:
      cpu: "4"
      memory: "3Gi"
...

这将配置代理容器以使用指定的资源生成。

如果需要,可以在文件中执行其他更改,在本例中我将使用默认值。

安装 Helm chart :

helm 安装 jenkins/-n jenkins

安装后,按照屏幕上的说明访问 jenkins 控制台。

要验证代理是否会使用配置的资源启动,让我们使用简单的 shell 命令创建一个新作业。

新项目 > 自由式项目

在作业配置中,选择下拉列表中“构建”部分上方的“执行 shell”。输入任何 linux 命令,例如 idlsuname -a 等...

保存并触发立即构建按钮。

在 kubernetes 中验证新容器,在本例中,新代理容器的名称为 default-6w3fq

查看 Pod 描述:

kubectl 描述 pod default-6w3fq

Name:         default-6w3fq
...
IP:           
Containers:
  jnlp:
    Image:      jenkins/jnlp-slave:3.27-1
...
    Limits:
      cpu:     4
      memory:  3Gi
    Requests:
      cpu:     2
      memory:  2Gi
...

您可以等待作业完成并查看作业日志,而不是使用 kubectl 命令。

我尝试使用默认值进行部署,并使用新值升级 helm 图表...没有任何反应。 当我使用 --force 标志运行升级时,这有效: helm 升级 jenkins jenkins/--force

--force - force resource updates through a replacement strategy

引用文献: https://helm.sh/docs/helm/helm_upgrade/ https://github.com/helm/charts/tree/master/stable/jenkins

关于jenkins - 具有奇数资源编号的 Kubernetes Jenkins Slave,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59999273/

相关文章:

amazon-web-services - Kubernetes Pod 因无效卷区域不匹配而失败

android - Xamarin.Android 安卓 :versionCode android:versionName - From Jenkins Build Server

batch-file - 使用批处理脚本启动 Jenkins 构建

git - 如何在 GitLab 中存储发布/二进制文件?

ssl - 如何将 SSL 证书分配给区域 ip,该区域 ip 是 kubernetes 服务的负载均衡器

kubernetes - kubernetes可以在一台主机上调度多个不相关的pod吗?

ruby-on-rails - 如何检查运行 sidekiq 的 docker 镜像的健康状况

android - Jenkins 和 Atlassian Bamboo 的集成

kubernetes - 在单个存储库中为不同的部署环境创建 Helm Charts 的最佳方法是什么?

docker - Kubernetes和Helm的配置管理