我正在尝试使用jenkins-kubernetes插件设置Jenkins Dynamic slaves创建。
我的jenkins在K8s群集之外运行。
链接:https://github.com/jenkinsci/kubernetes-plugin
我的jenkins版本 2.60.2 ,Kubernetes插件版本 1.1.2
我按照自述文件中提到的步骤进行了操作,并成功设置了连接。
连接成功。
这里开始出现问题: 的 1。当我最初运行这个作业时,它运行并且我的pod中的jenkins slave容器无法连接并抛出:
我已经启用了JNLP端口(50000),不确定它是否是正确的端口,即使在Jenkins中使用随机选项进行测试也没有用。
2。现在我放弃了这个jenkins的工作并再次运行它说:
Started by user Vaibhav Jain
[Pipeline] podTemplate
[Pipeline] {
[Pipeline] node
Still waiting to schedule task
Jenkins doesn’t have label defaultlabel
并且kubernetes没有开始使用pod。 这很奇怪。
我不确定我做错了什么。 需要帮助!
答案 0 :(得分:9)
我建议你不要使用证书,而是通过创建serviceAccount来使用kubernetes中的凭据:
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: jenkins
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
resources: ["pods/log"]
verbs: ["get","list","watch"]
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
name: jenkins
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: jenkins
subjects:
- kind: ServiceAccount
name: jenkins
使用该serviceAccount部署jenkins:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: jenkins
name: jenkins
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
serviceAccountName: jenkins
....
我向您展示了Kubernetes插件的截图(注意JNLP端口的Jenkins隧道,'jenkins'是我的kubernetes服务的名称):
凭证:
然后填写文件(ID将自动生成,说明将显示在凭据列表框中),但请务必按照我之前的说法在kubernetes中创建serviceAccount:
我的指示是针对kubernetes内的Jenkins大师。如果你想在群集之外(但是奴隶在里面),我认为你必须使用简单的登录/密码凭证。
对于您上次发生错误的问题,似乎是主机解析错误:奴隶无法解析您的主机。
我希望它可以帮到你。
答案 1 :(得分:1)
确定!我发现问题,我给容器上限为10(默认名称空间),这对我的集群来说太低了。我有15个工作节点集群,当K8主控尝试启动一个pod时,它会立即启动多个pod(虽然在一个计划完成后终止休息),最终超过容器上限(10)。我将CAP改为100,现在事情按预期工作了。
我注意到K8s Jenkins插件有一件事,它不会清除错误容器本身,这增加了容器数量并导致了这个问题。