一、前置条件
1、在阿里云上拥有一个k8s环境
2、拥有一个经过备案的域名
3、域名对应的可信任证书(不建议是自签的,浏览器不信任),这里有一个申请三个月免费域名证书的方法
二、在K8S部署Jenkins
这里用到了GitHub里的这个项目
https://github.com/jenkinsci/kubernetes-plugin
项目提供了Jenkins在kubernetes中容器化的部署方式,以及yaml文件,现在直接 git clone 下来,做对应的修改。
git clone https://github.com/jenkinsci/kubernetes-plugin.git
cd kubernetes-plugin/src/main/kubernetes/
ls -l ## 正是下面两个文件是我们需要修改的
jenkins.yml
service-account.yml
1. 创建namespace
看到这里你们或者觉得奇怪,人家GitHub项目里就两个文件,你咋就这么多事情还要建namespace、pvc啥的。
这里解释一下,不同的业务用namespace隔离开来是一个比较好的习惯。然后就是GitHub项目没有对Jenkins Home数据做持久化存储,Pod被干掉了数据就没有了。把不同的K8S Resource放在不同的yml里更容易去理解些!
## 先创建namespace,把jenkins相关的resource放进来
kubectl create ns devops
2. 修改jenkins.yml
cat jenkins.yml
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: jenkins
namespace: devops
labels:
name: jenkins
spec:
selector:
matchLabels:
name: jenkins
serviceName: jenkins
replicas: 1
updateStrategy:
type: RollingUpdate
template:
metadata:
name: jenkins
labels:
name: jenkins
spec:
terminationGracePeriodSeconds: 10
serviceAccountName: jenkins
containers:
- name: jenkins
image: jenkins/jenkins:lts-alpine
imagePullPolicy: Always
ports:
- containerPort: 8080
- containerPort: 50000
resources:
limits:
cpu: 1 ## 内存和CPU根据实际需要来改
memory: 4Gi
requests:
cpu: 0.5
memory: 500Mi
env:
- name: LIMITS_MEMORY
valueFrom:
resourceFieldRef:
resource: limits.memory
divisor: 1Mi
- name: JAVA_OPTS
# value: -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1 -XshowSettings:vm -Dhudson.slaves.NodeP