Docker 在Kubernetes集群中部署Jenkins

Docker 在Kubernetes集群中部署Jenkins,docker,jenkins,kubernetes,continuous-integration,continuous-deployment,Docker,Jenkins,Kubernetes,Continuous Integration,Continuous Deployment,我在Kubernetes的begginer尝试在集群中部署Jenkins,但pod正在等待 我需要jenkins访问kubernetes,包括访问docker和kubectl命令,以便与我的微服务进行持续集成 通过这个yaml文件示例,我可以通过Minikube在本地机器(我的笔记本)上启动jenkins实例 但现在我正尝试使用云集群作为我研究领域的一部分 我接受改进建议 正如我所说的:我只想上传一个jenkins的实例,通过它我可以不断地集成我的微服务 这些是我的配置和日志 我犯了什么错 ap

我在Kubernetes的begginer尝试在集群中部署Jenkins,但pod正在等待

我需要jenkins访问kubernetes,包括访问docker和kubectl命令,以便与我的微服务进行持续集成

通过这个yaml文件示例,我可以通过Minikube在本地机器(我的笔记本)上启动jenkins实例

但现在我正尝试使用云集群作为我研究领域的一部分

我接受改进建议

正如我所说的:我只想上传一个jenkins的实例,通过它我可以不断地集成我的微服务

这些是我的配置和日志

我犯了什么错

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: jenkins-rbac
subjects:
  - kind: ServiceAccount
    name: default
    namespace: default
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
---
kind: PersistentVolume
apiVersion: v1
metadata:
  name: jenkins
  labels:
    type: local
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/jenkins/"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: jenkins-claim
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
---
apiVersion: v1
kind: Service
metadata:
  name: jenkins
  labels:
    app: jenkins
spec:
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 32256
  selector:
    app: jenkins
    tier: jenkins
  type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jenkins
  labels:
    app: jenkins
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: jenkins
        tier: jenkins
    spec:
      containers:
      - image: sammubr/jenkins
        name: jenkins
        securityContext:
          privileged: true
        ports:
        - containerPort: 8080
          name: jenkins
        volumeMounts:
        - name: jenkins-persistent-storage
          mountPath: /var/jenkins_home
        - name: docker
          mountPath: /var/run/docker.sock
      volumes:
      - name: docker
        hostPath:
          path: /var/run/docker.sock
      - name: jenkins-persistent-storage
        persistentVolumeClaim:
          claimName: jenkins-claim
然后
kubectl--context do-sfo2-teste-cluster apply-f jenkins.yaml

但这一切都是悬而未决的:

samuel@samuel-Inspiron-5548:~/Documentos/teste/jenkins$ kubectl get all
NAME                           READY   STATUS    RESTARTS   AGE
pod/jenkins-5dc7fbd78d-9wxfl   0/1     Pending   0          8m34s

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/jenkins      NodePort    10.245.30.47   <none>        80:32256/TCP   8m34s
service/kubernetes   ClusterIP   10.245.0.1     <none>        443/TCP        79m

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/jenkins   0/1     1            0           8m35s

NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/jenkins-5dc7fbd78d   1         1         0       8m35s
samuel@samuel-Inspiron-5548:~/Documentos/teste/jenkins$kubectl获取全部
名称就绪状态重新启动
吊舱/jenkins-5dc7fbd78d-9wxfl 0/1挂起0 8m34s
名称类型CLUSTER-IP外部IP端口年龄
service/jenkins节点端口10.245.30.47 80:32256/TCP 8m34s
service/kubernetes ClusterIP 10.245.0.1 443/TCP 79m
姓名就绪最新可用年龄
deployment.apps/jenkins 0/1 10 8m35s
名称所需的当前就绪年龄
replicaset.apps/jenkins-5dc7fbd78d 1 1 0 8m35s
samuel@samuel-Inspiron-5548:~/Documentos/teste/jenkins$kubectl描述pod/jenkins-5dc7fbd78d-9wxfl
名称:jenkins-5dc7fbd78d-9wxfl
名称空间:默认值
优先级:0
PriorityClassName:
节点:
标签:app=jenkins
pod模板散列=5dc7fbd78d
蒂尔=詹金斯
注释:
状态:待定
知识产权:
控制人:ReplicaSet/jenkins-5dc7fbd78d
容器:
詹金斯:
图片:sammubr/jenkins
端口:8080/TCP
主机端口:0/TCP
环境:
挂载:
/来自jenkins持久存储(rw)的var/jenkins_主页
/来自docker(rw)的var/run/docker.sock
/来自default-token-5wdgs(ro)的var/run/secrets/kubernetes.io/serviceCount
条件:
类型状态
播客计划错误
卷数:
码头工人:
类型:主机路径(裸主机目录卷)
路径:/var/run/docker.sock
主机路径类型:
jenkins持久存储:
类型:PersistentVolumeClaim(对同一命名空间中PersistentVolumeClaim的引用)
索赔名称:詹金斯索赔
只读:false
default-token-5wdgs:
类型:Secret(由Secret填充的卷)
SecretName:default-token-5wdgs
可选:false
QoS等级:最佳努力
节点选择器:
容差:node.kubernetes.io/未就绪:不执行300秒
node.kubernetes.io/不可访问:不执行300秒
活动:
从消息中键入原因年龄
----     ------            ----              ----               -------
警告失败调度7s(x8超过10m)默认调度程序pod已解除立即PersistentVolumeClaims的绑定(重复2次)

删除PersistentVolume定义文件中的引号 一致:

正确的文件应如下所示:

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: jenkins-rbac
subjects:
  - kind: ServiceAccount
    name: default
    namespace: default
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
---
kind: PersistentVolume
apiVersion: v1
metadata:
  name: jenkins
  labels:
    type: local
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/jenkins/
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: jenkins-claim
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
---
apiVersion: v1
kind: Service
metadata:
  name: jenkins
  labels:
    app: jenkins
spec:
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 32256
  selector:
    app: jenkins
    tier: jenkins
  type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jenkins
  labels:
    app: jenkins
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: jenkins
        tier: jenkins
    spec:
      containers:
      - image: sammubr/jenkins
        name: jenkins
        securityContext:
          privileged: true
        ports:
        - containerPort: 8080
          name: jenkins
        volumeMounts:
        - name: jenkins-persistent-storage
          mountPath: /var/jenkins_home
        - name: docker
          mountPath: /var/run/docker.sock
      volumes:
      - name: docker
        hostPath:
          path: /var/run/docker.sock
      - name: jenkins-persistent-storage
        persistentVolumeClaim:
          claimName: jenkins-claim
应用更改

 $ kubectl apply -f your-config-file.yaml

有关PersistentVolumesPersistentVolumeClaims的更多信息,您可以在此处找到:。

正如@ortomala lokni前面提到的,您在将未绑定的PersistentVolumeClaims绑定到已声明的PeristanceVolume时遇到问题,最终导致Jenkins Pod无法启动

在@ortomala lokni分享的关于SO的类似问题中,您可以了解此错误的各种原因,以及如何修复它们

在您的特定情况下,PVC的需求与集群上实际配置的PV之间的不匹配是在accessModes(ReadWriteOnce与ReadWriteMany)中

要解决您的问题,请相应地更新“PersistentVolumeClaim”定义,如下所示:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: jenkins-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
注意:
对于Jenkins Pod的单个副本,您不需要“”访问模式。这是因为根据“jenkins”部署的当前定义,部署控制器在引擎盖下创建了一个ReplicaSet对象,默认情况下,该对象确保只有一个jenkins Pod实例正在运行(=简化jenkins server的一个实例,一次只将写入此卷)


请找到另一个关于使用helm(推荐方式)从头开始在Kubernetes上设置Jenkins的教程。

您会看到这样一条消息:
pod已解除即时PersistentVolumeClaims的绑定。
。可能是重复了您部署在哪个云上的问题?@VishalBiyani DigitalOcean-这有帮助吗?
 $ kubectl apply -f your-config-file.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: jenkins-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi