英文:
Unable to deploy Jenkins to Kubernetes using official guide
问题
I'm here to provide the translated content:
我正在尝试使用官方指南在Kubernetes上安装Jenkins:Jenkins官方网站,使用Helm v3安装Jenkins。环境为Linux/Minikube。
- 我创建了Jenkins的命名空间。
- 使用提供的yaml文件创建了持久卷(PV)。
- 创建了服务账户。
- 使用以下命令进行安装:
helm install jenkins -n jenkins -f jenkins-values.yaml jenkinsci/jenkins
,其中的值也是官方提供的。
我仅根据指导中的建议提醒了Jenkins的值(在下面添加了值):
storageClass: jenkins-pv
...
serviceAccount:
create: false
问题: Jenkins的Pod从未启动。
它说:“0/1个节点可用:1个节点未找到可用的持久卷来绑定。 抢占:0/1个节点可用:抢占对调度没有帮助…”
PV已创建:
rage@ubuntu-virtual:~$ kubectl describe pv jenkins -n jenkins
名称:jenkins-pv
标签:无
注释:pv.kubernetes.io/bound-by-controller: yes
终结者:[kubernetes.io/pv-protection]
StorageClass:jenkins-pv
状态:Released
Claim:default/jenkins
回收策略:Retain
访问模式:RWO
VolumeMode:Filesystem
容量:5Gi
节点亲和性:无
消息:
来源:
类型:HostPath(裸主机目录卷)
路径:/data/jenkins-volume/
HostPathType:
事件:无
PVC显示:“等待Pod调度”:
$ kubectl describe pvc jenkins -n jenkins
名称:jenkins
命名空间:jenkins
StorageClass:jenkins-pv
状态:Pending
Volume:
标签:app.kubernetes.io/component=jenkins-controller
app.kubernetes.io/instance=jenkins
app.kubernetes.io/managed-by=Helm
app.kubernetes.io/name=jenkins
helm.sh/chart=jenkins-4.3.23
注释:meta.helm.sh/release-name: jenkins
meta.helm.sh/release-namespace: jenkins
终结者:[kubernetes.io/pvc-protection]
容量:
访问模式:
VolumeMode:Filesystem
Used By:jenkins-0
事件:
类型 原因 年龄 来自 消息
---- ------ ---- ---- -------
正常 WaitForPodScheduled 38分钟 (x481次在160分钟内) persistentvolume-controller 等待Pod jenkins-0被调度
正常 WaitForPodScheduled 28分钟 (x26次在34分钟内) persistentvolume-controller 等待Pod jenkins-0被调度
正常 WaitForPodScheduled 2分钟35秒 (x81次在22分钟内) persistentvolume-controller 等待Pod jenkins-0被调度
Pod的描述:
事件:
类型 原因 年龄 来自 消息
---- ------ ---- ---- -------
警告 FailedScheduling 37秒 default-scheduler 0/1个节点可用:1个节点未找到可用的持久卷来绑定。 抢占:0/1个节点可用:1抢占对调度没有帮助..
请协助调查此问题。我猜这与PVC有关,但无法确定问题的具体原因。
更新:
我还尝试将nodeAffinity添加到我的PersistentVolume,但没有成功。我在这里放置了minikube,因为我是在本地开发。
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- minikube
我还添加了claimRef,名称为Jenkins。Jenkins Helm安装会创建具有此名称的PVC。
claimRef:
name: jenkins
namespace: jenkins
英文:
I'm trying to install Jenkins on Kubernetes with its official guide: at Jenkins's site, Install Jenkins with Helm v3. The environment is Linux/Minikube.
- I created namespace Jenkins
- Created Persistent Volume with the yaml provided
- Created service account
- Installed with
helm install jenkins -n jenkins -f jenkins-values.yaml jenkinsci/jenkins
where values are official too
I only alerted Jenkins values as it was recommended in the instruction (added values below):
storageClass: jenkins-pv
...
serviceAccount:
create: false
The issue: Jenkins pod never starts.
It says: “0/1 nodes are available: 1 node(s) didn’t find available persistent volumes to bind. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling…”
PV is created:
rage@ubuntu-virtual:~$ kubectl describe pv jenkins -n jenkins
Name: jenkins-pv
Labels: <none>
Annotations: pv.kubernetes.io/bound-by-controller: yes
Finalizers: [kubernetes.io/pv-protection]
StorageClass: jenkins-pv
Status: Released
Claim: default/jenkins
Reclaim Policy: Retain
Access Modes: RWO
VolumeMode: Filesystem
Capacity: 5Gi
Node Affinity: <none>
Message:
Source:
Type: HostPath (bare host directory volume)
Path: /data/jenkins-volume/
HostPathType:
Events: <none>
PVC says: “WaitForPodScheduled”
$ kubectl describe pvc jenkins -n jenkins
Name: jenkins
Namespace: jenkins
StorageClass: jenkins-pv
Status: Pending
Volume:
Labels: app.kubernetes.io/component=jenkins-controller
app.kubernetes.io/instance=jenkins
app.kubernetes.io/managed-by=Helm
app.kubernetes.io/name=jenkins
helm.sh/chart=jenkins-4.3.23
Annotations: meta.helm.sh/release-name: jenkins
meta.helm.sh/release-namespace: jenkins
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode: Filesystem
Used By: jenkins-0
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal WaitForPodScheduled 38m (x481 over 160m) persistentvolume-controller waiting for pod jenkins-0 to be scheduled
Normal WaitForPodScheduled 28m (x26 over 34m) persistentvolume-controller waiting for pod jenkins-0 to be scheduled
Normal WaitForPodScheduled 2m35s (x81 over 22m) persistentvolume-controller waiting for pod jenkins-0 to be scheduled
Pod's describe:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 37s default-scheduler 0/1 nodes are available: 1 node(s) didn't find available persistent volumes to bind. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling..
Please, help investigate to this problem. I quess its PVC-related, but can't catch where exactly the problem is.
UPDATE
Also I tried to add nodeAffinity to my PersistentVolume, with no success. I put minikube here, because I'm developing locally
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- minikube
Also I added claimRef with name Jenkins. Jenkins Helm installation creates PVC with this name.
claimRef:
name: jenkins
namespace: jenkins
答案1
得分: 2
问题终于解决了。
获得了实际的 Jenkins 存储声明,它是使用 Helm 图表部署的:
> kubectl get pvc jenkins -n jenkins -o yaml
它声明:
```yaml
resources:
requests:
storage: 8Gi
而我的存储大小较小:5Gi。这就是为什么 PVC 请求未被满足的原因。
非常奇怪,当我对 PVC/pod 运行 'describe' 命令时,Kubernetes 没有给出任何特别的通知。
因此,我调整了与 Jenkins Helm 图表一起提供的 values.yaml,以获取较小的大小:
storageClass: jenkins-pv
annotations: {}
labels: {}
accessMode: "ReadWriteOnce"
size: "5Gi"
现在它按预期工作了。因此,在官方文档中与此情况相关的部分没有任何错误。
<details>
<summary>英文:</summary>
Finally resolved the issue.
Got actual Jenkins volume claim, which was deployed with Helm-chart:
> kubectl get pvc jenkins -n jenkins -o yaml
It stated:
resources:
requests:
storage: 8Gi
And my volume size was lesser: 5Gi. Thats why PVC request was not satisfied.
Very strange, that there wasn't any particular notice from Kubernetes about it when I did '**describe**' command for PVC/pod.
So I adjusted values.yaml, provided with Jenkins Helm chart to acquire lesser size:
storageClass: jenkins-pv
annotations: {}
labels: {}
accessMode: "ReadWriteOnce"
size: "5Gi"
Now it works as intended. So there is no glitches in the official documentation related to this case.
</details>
# 答案2
**得分**: 0
[Jenkins网站](https://www.jenkins.io/doc/book/installing/kubernetes/)上的PV的YAML文件具有以下的`nodeSelector`设置:
```yaml
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-node01
你已经将 worker-node01 替换为你的节点名称了吗?
英文:
The yaml of pv at jenkins's site has nodeSelector like below
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-node01
have you replaced worker-node01 to your nodeName?
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论