K8S-jenkins
制作jenkins镜像
FROM jdk-base:v8.212 RUN mkdir /apps/jenkins/ -p ADD jenkins-2.222.1.war /apps/jenkins/ ADD run_jenkins.sh /usr/bin/ EXPOSE 8080 CMD ["/usr/bin/run_jenkins.sh"]
jenkins启动脚本
]# cat run_jenkins.sh #!/bin/bash cd /apps/jenkins && java -server -Xms1024m -Xmx1024m -Xss512k -jar jenkins-2.222.1.war --webroot=/apps/jenkins/jenkins-data --httpPort=8080
构建镜像
]# docker build -t jenkins:v2.222.1 .
jebkins数据持久化
/root/.jenkins
/apps/jenkins/jenkins-data
创建PV
jenkins-persistentvolume.yaml
--- apiVersion: v1 kind: PersistentVolume metadata: name: jenkins-datadir-pv namespace: magedu spec: capacity: storage: 120Gi accessModes: - ReadWriteOnce nfs: server: 172.31.7.204 path: /data/k8sdata/magedu/jenkins_data --- apiVersion: v1 kind: PersistentVolume metadata: name: jenkins-root-datadir-pv namespace: magedu spec: capacity: storage: 120Gi accessModes: - ReadWriteOnce nfs: server: 172.31.7.204 path: /data/k8sdata/magedu/jenkins_root_data
创建PVC
jenkins-persistentvolumeclaim.yaml
--- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: jenkins-datadir-pvc namespace: magedu spec: volumeName: jenkins-datadir-pv accessModes: - ReadWriteOnce resources: requests: storage: 100Gi --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: jenkins-root-data-pvc namespace: magedu spec: volumeName: jenkins-root-datadir-pv accessModes: - ReadWriteOnce resources: requests: storage: 100Gi
jenkins.yaml
kind: Deployment #apiVersion: extensions/v1beta1 apiVersion: apps/v1 metadata: labels: app: magedu-jenkins name: magedu-jenkins-deployment namespace: magedu spec: replicas: 1 selector: matchLabels: app: magedu-jenkins template: metadata: labels: app: magedu-jenkins spec: containers: - name: magedu-jenkins-container image: linux39-harbor.magedu.net/magedu/jenkins:v2.222.1 #imagePullPolicy: IfNotPresent imagePullPolicy: Always ports: - containerPort: 8080 protocol: TCP name: http volumeMounts: - mountPath: "/apps/jenkins/jenkins-data/" //对这两个目录做持久化 name: jenkins-datadir-magedu - mountPath: "/root/.jenkins" name: jenkins-root-datadir volumes: - name: jenkins-datadir-magedu persistentVolumeClaim: claimName: jenkins-datadir-pvc - name: jenkins-root-datadir persistentVolumeClaim: claimName: jenkins-root-data-pvc --- kind: Service apiVersion: v1 metadata: labels: app: magedu-jenkins name: magedu-jenkins-service namespace: magedu spec: type: NodePort ports: - name: http port: 80 protocol: TCP targetPort: 8080 //容器端口 nodePort: 32080 selector: app: magedu-jenkins
创建PV和PVC
]# kubectl apply -f jenkins-persistentvolume.yaml persistentvolume/jenkins-datadir-pv created persistentvolume/jenkins-root-datadir-pv created [root@master-1 pv]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE jenkins-datadir-pv 120Gi RWO Retain Available 10s jenkins-root-datadir-pv 120Gi RWO Retain Available 10s [root@master-1 pv]# kubectl apply -f jenkins-persistentvolumeclaim.yaml persistentvolumeclaim/jenkins-datadir-pvc created persistentvolumeclaim/jenkins-root-data-pvc created [root@master-1 pv]# kubectl get pvc -n magedu NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE jenkins-datadir-pvc Bound jenkins-datadir-pv 120Gi RWO 13s jenkins-root-data-pvc Bound jenkins-root-datadir-pv 120Gi RWO 13s
创建jenkins
]# kubectl apply -f jenkins.yaml deployment.apps/magedu-jenkins-deployment created service/magedu-jenkins-service created ]# kubectl get svc -A NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE magedu magedu-jenkins-service NodePort 10.110.21.128 <none> 80:32080/TCP 11s
访问
http://192.168.64.110:32080/login?from=%2F
查看密码
]# kubectl exec -it -n magedu magedu-jenkins-deployment-7d5bc67465-q92zr -- /bin/bash [root@magedu-jenkins-deployment-7d5bc67465-q92zr /]# cat /root/.jenkins/secrets/initialAdminPassword c1c61360d253491a861901d6bc01cd5a
注意:PV可以动态扩容,但是PVC不支持扩容,所以当生产环境PVC磁盘不足,需要手动创建一个PVC,拷贝原PVC数据到新盘,重新挂载。
越学越感到自己的无知