前提:通过storageclass+nfs动态创建pv

帮助:k8s集群中pod显示ImagePullBackOff

1、创建jenkins的rbac

$ sudo gedit jenkins-rbac.yaml
# 将下面的内容粘贴到文件中
$ kubectl apply -f jenkins-rbac.yaml

# 文件内容如下:
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins-admin       #ServiceAccount名
  namespace: jenkins        #指定namespace,一定要修改成你自己的namespace
  labels:
    name: jenkins
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: jenkins-admin
  labels:
    name: jenkins
subjects:
  - kind: ServiceAccount
    name: jenkins-admin
    namespace: jenkins
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

2、创建jenkins的pvc

$ sudo gedit jenkins-pvc.yaml
# 将下面的内容粘贴到文件中
$ kubectl apply -f jenkins-pvc.yaml

# 文件内容如下
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    volume.beta.kubernetes.io/storage-provisioner: master-nfs-storage  # 与storageClass中metadata.name保持一致
  finalizers:
    - kubernetes.io/pvc-protection
  name: jenkins
  namespace: jenkins
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi    #存储空间大小
  storageClassName: master-nfs-storage   # 与storageClass中的provisioner一致

3、创建jenkins的部署和服务

$ sudo gedit jenkins-deployment.yaml
# 将下面的内容粘贴到文件中
$ kubectl apply -f jenkins-deployment.yaml

#文件内容如下
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: jenkins
  name: jenkins
  namespace: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      serviceAccountName: jenkins-admin
      containers:
        - name: jenkins
          image: 'jenkins/jenkins:lts'
          securityContext:
            privileged: true  #拥有特权
            runAsUser: 0      #设置以ROOT用户运行容器
          ports:
            - containerPort: 8080
              name: http
              protocol: TCP
            - containerPort: 50000
              name: jnlp
              protocol: TCP
          resources:
            limits:
              cpu: '2'
              memory: 2Gi
            requests:
              cpu: '1'
              memory: 1Gi
          env:
            - name: LIMITS_MEMORY
              valueFrom:
                resourceFieldRef:
                  divisor: 1Mi
                  resource: limits.memory
            - name: JAVA_OPTS    #设置变量,指定时区和 jenkins slave 执行者设置
              value: >-
                -Xmx$(LIMITS_MEMORY)m -XshowSettings:vm
                -Dhudson.slaves.NodeProvisioner.initialDelay=0
                -Dhudson.slaves.NodeProvisioner.MARGIN=50
                -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
                -Duser.timezone=Asia/Shanghai
                -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai
            - name: JENKINS_OPTS    #设置路径前缀加上 Jenkins
              value: '--prefix=/jenkins'
            - name: JENKINS_JAVA_OPTIONS
              value: '-Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai'
            - name: JAVA_ARGS
              value: >-
                -Xmx$(LIMITS_MEMORY)m -XshowSettings:vm
                -Dhudson.slaves.NodeProvisioner.initialDelay=0
                -Dhudson.slaves.NodeProvisioner.MARGIN=50
                -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
                -Duser.timezone=Asia/Shanghai
                -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai
            - name: JENKINS_JAVA_OPTIONS
              value: >-
                -Xmx$(LIMITS_MEMORY)m -XshowSettings:vm
                -Dhudson.slaves.NodeProvisioner.initialDelay=0
                -Dhudson.slaves.NodeProvisioner.MARGIN=50
                -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
                -Duser.timezone=Asia/Shanghai
          volumeMounts:
            - mountPath: /var/jenkins_home    #设置要挂在的目录
              name: data
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: jenkins                #设置PVC

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: jenkins
  name: jenkins
  namespace: jenkins
spec:
  ports:
    - name: http
      nodePort: 32001      #NodePort方式暴露 Jenkins 端口
      port: 8080           #服务端口
      protocol: TCP
      targetPort: 8080
    - name: jnlp
      nodePort: 32002
      port: 50000         #代理端口
      protocol: TCP
      targetPort: 50000
  selector:
    app: jenkins
  type: NodePort

4、浏览器访问<集群ip>+32001/jenkins访问jenkins

5、jenkins的密码,直接使用命令”$ kubectl logs <jenkins 的pod名> -n jenkins“就有

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐