> 欢迎关注个人博客:http://www.mydlq.clubnode
系统环境:json
在 Kubenetes 环境下所起的应用都是一个个 Docker 镜像,为了保证应用重启的状况下数据安全,因此须要将 Jenkins 持久化到存储中。这里用的是 NFS 网路存储,方便在 Kubernetes 环境下应用启动节点转义数据一致。固然也能够选择存储到本地,可是为了保证应用数据一致,须要设置 Jenkins 固定到某一 Kubernetes 节点。api
详情请看 CentOS7 搭建 nfs 服务器 ,这里不过多叙述。安全
若是不能直接操做 NFS 服务端建立文件夹,须要知道 NFS 服务器地址,而后将其挂在到本地目录,进入其中建立 Jenkins 目录空间。bash
(1)、挂载 NFS服务器
mount -o vers=4.1 192.168.2.11:/nfs/ /nfs
(2)、建立 Jenkins 存储文件夹网络
mkdir -p /nfs/data/jenkins
建立 PV 绑定 NFS 建立的 Jenkins 目录,而后建立 PVC 绑定这个 PV,将此 PVC 用于后面建立 Jenkins 服务时挂载的存储。app
(1)、jenkins-pv.yamlui
apiVersion: v1 kind: PersistentVolume metadata: name: jenkins spec: capacity: storage: 2Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain mountOptions: #NFS挂在选项 - hard - nfsvers=4.1 nfs: #NFS设置 path: /nfs/data/jenkins server: 192.168.2.11
(2)、建立 PV 命令spa
$ kubectl create -f jenkins-pv.yaml
(1)、jenkins-pvc.yaml
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: jenkins namespace: mydlqcloud #PV是全局的,而PVC是跟namespace绑定的,因此须要指定namespace spec: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi selector: name: jenkins
(2)、建立 PVC 命令
$ kubectl create -f jenkins-pvc.yaml
此 kubernetes 集群用的是 RBAC 安全插件,必须建立权限给一个 ServiceAccount,而后将此 ServiceAccount 绑定到 Jenkins 服务,这样赋予 Jenkins 服务必定权限执行一些操做。
(1)、jenkins-rbac.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: jenkins-admin #ServiceAccount名 namespace: mydlqcloud #指定namespace labels: name: jenkins --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: jenkins-admin labels: name: jenkins subjects: - kind: ServiceAccount name: jenkins-admin namespace: mydlqcloud roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io
> 这里将 cluster-admin 绑定到 ServiceAccount 以保证 Jenkins 能拥有必定的权限。
(2)、建立 RBAC 命令
$ kubectl create -f jenkins-rbac.yaml
这里开始部署 Jenkins 服务,建立 Service 与 Deployment,其中 Service 暴露两个接口 80880 与 50000。而 Deployment 里面要注意的是要设置上面建立的 ServiceAccount ,而且设置容器安全策略为“runAsUser: 0”以 Root 权限运行容器,并且暴露8080、50000两个端口。
(1)、jenkins-service.yaml
apiVersion: v1 kind: Service metadata: name: jenkins namespace: mydlqcloud #指定namespace labels: name: jenkins spec: type: NodePort ports: - name: http port: 8080 #服务端口 targetPort: 8080 nodePort: 32001 - name: jnlp port: 50000 #代理端口 targetPort: 50000 nodePort: 32002 selector: name: jenkins
(2)、建立 RBAC 命令
$ kubectl create -f jenkins-service.yaml
(1)、jenkins-deployment.yaml
apiVersion: apps/v1beta1 kind: Deployment metadata: name: jenkins namespace: mydlqcloud #指定namespace spec: replicas: 1 template: metadata: labels: name: jenkins spec: serviceAccountName: jenkins-admin containers: - name: jenkins image: registry.cn-shanghai.aliyuncs.com/mydlq/jenkins:2.172 securityContext: runAsUser: 0 #设置以ROOT用户运行容器 privileged: true #拥有特权 ports: - name: http containerPort: 8080 - name: jnlp containerPort: 50000 resources: limits: memory: 2Gi cpu: "1200m" requests: memory: 1Gi cpu: "1000m" env: - name: "JAVA_OPTS" #设置变量,指定时区和 jenkins slave 执行者设置 value: " -Duser.timezone=Asia/Shanghai -Dhudson.slaves.NodeProvisioner.initialDelay=0 -Dhudson.slaves.NodeProvisioner.MARGIN=50 -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85 " - name: "JENKINS_OPTS" value: "--prefix=/jenkins" #设置路径前缀加上 Jenkins volumeMounts: #设置要挂在的目录 - name: data mountPath: /var/jenkins_home volumes: - name: data persistentVolumeClaim: claimName: jenkins #设置PVC
参数说明:
默认状况下,Jenkins生成代理是保守的。例如,若是队列中有两个构建,它不会当即生成两个执行器。它将生成一个执行器,并等待某个时间释放第一个执行器,而后再决定生成第二个执行器。Jenkins确保它生成的每一个执行器都获得了最大限度的利用。若是你想覆盖这个行为,并生成一个执行器为每一个构建队列当即不等待,因此使用这些标志在Jenkins启动:
(2)、建立 RBAC 命令
$ kubectl create -f jenkins-deployment.yaml
在安装 Jenkins 时候,它默认生成一段随机字符串,用于安装验证。这里访问它的安装日志,获取它生成的 Token 字符串。
(1)、查看 Jenkins Pod 启动日志
kubectl log $(kubectl get pods -n mydlqcloud | awk '{print $1}' | grep jenkins) -n mydlqcloud
> 这里“-n”指的是要 namespace,后面跟的 namespace 请替换成你jenkins 启动的 namespace
(2)、查看日志中生成的 Token 字符串
查看日志,默认给的token为:
************************************************************* ************************************************************* ************************************************************* Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: 3b3e0dda9d6746358ade987775f924ef This may also be found at: /var/jenkins_home/secrets/initialAdminPassword ************************************************************* ************************************************************* *************************************************************
输入集群地址和 Jenkins Service 提供的 NodePort 端口,访问 Jenkins 进行安装步骤,能够按下一步步执行:
输入集群地址和上面设置的Nodeport方式的端口 32001,而后输入上面获取的 Token 字符串。例如,本人的集群IP为 192.168.2.11 ,因此就能够访问 http://192.168.2.11:32001/jenkins ,进入后能够看到下面的界面。
选择自定义插件来进行安装
安装一些经常使用的插件,这里能够选择一下,推荐安装下面插件。
肯定后能够看到正在安装插件界面
而后进入 Jenkins 界面
若是 Jenkins 安装插件失败,则能够按一下设置
> PS:上面地址替换成大家的集群地址及端口。
> 欢迎关注个人博客:http://www.mydlq.club