1. 01-namespace.yaml
    1. apiVersion: v1
    2. kind: Namespace
    3. metadata:
    4. name: jenkins
    1. 02-jenkins-rbac.yaml
    1. apiVersion: v1
    2. kind: ServiceAccount
    3. metadata:
    4. name: jenkins-admin
    5. namespace: jenkins
    6. ---
    7. apiVersion: rbac.authorization.k8s.io/v1
    8. kind: ClusterRole
    9. metadata:
    10. name: jenkins-admin
    11. rules:
    12. - apiGroups: ["extensions", "apps"]
    13. resources: ["deployments"]
    14. verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
    15. - apiGroups: [""]
    16. resources: ["services"]
    17. verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
    18. - apiGroups: [""]
    19. resources: ["pods"]
    20. verbs: ["create","delete","get","list","patch","update","watch"]
    21. - apiGroups: [""]
    22. resources: ["pods/exec"]
    23. verbs: ["create","delete","get","list","patch","update","watch"]
    24. - apiGroups: [""]
    25. resources: ["pods/log"]
    26. verbs: ["get","list","watch"]
    27. - apiGroups: [""]
    28. resources: ["secrets"]
    29. verbs: ["get"]
    30. ---
    31. apiVersion: rbac.authorization.k8s.io/v1
    32. kind: ClusterRoleBinding
    33. metadata:
    34. name: jenkins-admin
    35. roleRef:
    36. kind: ClusterRole
    37. name: jenkins-admin
    38. apiGroup: rbac.authorization.k8s.io
    39. subjects:
    40. - kind: ServiceAccount
    41. name: jenkins-admin
    42. namespace: jenkins
    1. 03-jenkins-service.yaml
    1. ---
    2. apiVersion: v1
    3. kind: Service
    4. metadata:
    5. name: jenkins
    6. namespace: jenkins
    7. labels:
    8. app: jenkins
    9. spec:
    10. selector:
    11. app: jenkins
    12. ports:
    13. - name: http
    14. port: 8080
    15. targetPort: 8080
    16. ---
    17. apiVersion: v1
    18. kind: Service
    19. metadata:
    20. name: jenkins-jnlp
    21. namespace: jenkins
    22. labels:
    23. app: jenkins
    24. spec:
    25. selector:
    26. app: jenkins
    27. ports:
    28. - name: agent
    29. port: 50000
    30. targetPort: 50000
    1. 04-pvc.yaml
    1. ---
    2. ## PVC
    3. apiVersion: v1
    4. kind: PersistentVolumeClaim
    5. metadata:
    6. name: jenkins
    7. namespace: jenkins
    8. annotations:
    9. volume.beta.kubernetes.io/storage-class: "gitops-data"
    10. spec:
    11. accessModes:
    12. - ReadWriteMany
    13. resources:
    14. requests:
    15. storage: 20Gi
    1. 05-jenkins.yaml
    1. ---
    2. apiVersion: apps/v1
    3. kind: Deployment
    4. metadata:
    5. name: jenkins
    6. namespace: jenkins
    7. spec:
    8. replicas: 1
    9. selector:
    10. matchLabels:
    11. app: jenkins
    12. template:
    13. metadata:
    14. labels:
    15. app: jenkins
    16. spec:
    17. terminationGracePeriodSeconds: 10
    18. serviceAccount: jenkins-admin
    19. containers:
    20. - name: jenkins
    21. #image: jenkins/jenkins:alpine
    22. image: jenkins/jenkins:2.287-jdk11
    23. imagePullPolicy: IfNotPresent
    24. env:
    25. - name: JAVA_OPTS
    26. value: -XshowSettings:vm -Dhudson.slaves.NodeProvisioner.initialDelay=0 -Dhudson.slaves.NodeProvisioner.MARGIN=50 -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85 -Duser.timezone=Asia/Shanghai
    27. ports:
    28. - containerPort: 8080
    29. name: web
    30. protocol: TCP
    31. - containerPort: 50000
    32. name: agent
    33. protocol: TCP
    34. resources:
    35. limits:
    36. cpu: 2
    37. memory: 4Gi
    38. requests:
    39. cpu: 500m
    40. memory: 512Mi
    41. livenessProbe:
    42. httpGet:
    43. path: /login
    44. port: 8080
    45. initialDelaySeconds: 60
    46. timeoutSeconds: 5
    47. failureThreshold: 12
    48. readinessProbe:
    49. httpGet:
    50. path: /login
    51. port: 8080
    52. initialDelaySeconds: 60
    53. timeoutSeconds: 5
    54. failureThreshold: 12
    55. volumeMounts:
    56. - name: jenkinshome
    57. mountPath: /var/jenkins_home
    58. securityContext:
    59. fsGroup: 1000
    60. volumes:
    61. - name: jenkinshome
    62. persistentVolumeClaim:
    63. claimName: jenkins
    1. 06-ingress.yaml
    1. apiVersion: extensions/v1beta1
    2. kind: Ingress
    3. metadata:
    4. name: jenkins
    5. namespace: jenkins
    6. annotations:
    7. kubernetes.io/ingress.class: "nginx"
    8. spec:
    9. rules:
    10. - host: jenkins-test.test.com
    11. http:
    12. paths:
    13. - backend:
    14. serviceName: jenkins
    15. servicePort: 8080