jenkins连接k8s失败
·
你遇到的错误非常明确:
Error creating: pods "jenkins-6b8d7fb9f4-" is forbidden: error looking up service account jenkins/jenkins: serviceaccount "jenkins" not found
👉 这说明:Deployment 中指定了 serviceAccountName: jenkins,但 Kubernetes 在 jenkins 命名空间中找不到名为 jenkins 的 ServiceAccount。
✅ 解决方案:先创建 ServiceAccount,再部署 Jenkins
你的 jenkins-master.yaml 文件里 没有包含 ServiceAccount 定义,所以即使你在 Deployment 中写了 serviceAccountName: jenkins,Kubernetes 也会报错说找不到这个账号。
✅ 步骤 1:创建 ServiceAccount
运行以下命令创建 jenkins ServiceAccount(如果还没创建):
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
meta
name: jenkins
namespace: jenkins
EOF
⚠️ 确保命名空间是
jenkins,且名字也是jenkins。
验证是否创建成功:
kubectl get serviceaccount jenkins -n jenkins
✅ 输出应类似:
NAME SECRETS AGE
jenins 1 30s
✅ 步骤 2:更新你的 YAML 文件,添加 serviceAccountName
修改你的 jenkins-master.yaml,在 spec.template.spec 下添加这一行:
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins
namespace: jenkins
spec:
replicas: 1
selector:
matchLabels:
app: jenkins-master
template:
metadata:
labels:
app: jenkins-master
annotations:
pod.beta.kubernetes.io/hostname: jenkins-0
spec:
serviceAccountName: jenkins # ✅ 添加这一行(关键!)
hostname: jenkins-0
nodeSelector:
kubernetes.io/hostname: k8s-node1
tolerations:
- key: node-role.kubernetes.io/control-plane
operator: Exists
effect: NoSchedule
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
containers:
- name: jenkins
image: swr.cn-east-3.myhuaweicloud.com/bocheng-test/jenkins-master:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
name: http
volumeMounts:
- name: jenkins-home
mountPath: /var/jenkins_home
volumes:
- name: jenkins-home
persistentVolumeClaim:
claimName: jenkins-pvc
---
apiVersion: v1
kind: Service
metadata:
name: jenkins-master
namespace: jenkins
spec:
selector:
app: jenkins-master
ports:
- name: http
port: 8080
targetPort: 8080
✅ 步骤 3:应用配置
kubectl apply -f jenkins-master.yaml
✅ 步骤 4:绑定权限(让 Jenkins 能访问 Kubernetes API)
你现在有了 ServiceAccount,但还没有权限。我们使用 cluster-admin 快速授权(仅用于测试环境):
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
meta
name: jenkins-cluster-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: jenkins
namespace: jenkins
EOF
✅ 验证一切正常
查看 Pod 是否启动:
kubectl get pods -n jenkins
查看日志:
kubectl logs -f jenkins-xxxxx -n jenkins
进入 Jenkins 页面 → Manage Jenkins → Configure System → Kubernetes → Test Connection
👉 应该显示连接成功!
🛑 注意事项(重要)
| 项目 | 建议 |
|---|---|
| 🔐 生产环境 | 不要用 cluster-admin,应使用最小权限 RBAC |
| 💾 持久化 | 确保 jenkins-pvc 已存在并绑定 PV |
| 🔄 更新后 | 如果之前失败过,删除旧 ReplicaSet 可触发重建:kubectl delete replicaset -l app=jenkins-master -n jenkins |
✅ 总结
你之前的报错是因为:
❌ 指定了
serviceAccountName: jenkins,但没创建这个 SA
解决方法就是三步:
- ✅ 创建 ServiceAccount:
kubectl create sa jenkins -n jenkins - ✅ 在 Deployment 的
spec.template.spec中加上serviceAccountName: jenkins - ✅ 绑定权限:
ClusterRoleBinding到cluster-admin(临时用)
更多推荐


所有评论(0)