K8s版本

kubectl get nodes -owide

找到最后一列CONTAINER-RUNTIME
如果显示的是docker,就说明用docker做的容器运行时。
在这里插入图片描述

安装Jenkins

安装nfs服务,可以选择自己的任意一台机器,我选择的是k8s的控制节点k8smaster1
如果已经安装过nfs,这个步骤可以忽略

yum install nfs-utils -y
systemctl start nfs
systemctl enable nfs

在k8smaster1上创建一个nfs共享目录

mkdir /data/v2  -p
vim /etc/exports
/data/v1 *(rw,no_root_squash)
/data/v2 *(rw,no_root_squash)

使配置文件生效

exportfs -arv

在kubernetes中部署jenkins

创建名称空间

kubectl create namespace jenkins-k8s

创建pv,上传pv.yaml

cat pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-k8s-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
  - ReadWriteMany
  nfs:
    server: 192.168.40.120
    path: /data/v2
kubectl apply -f pv.yaml
kubectl get pv

创建pvc

cat pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: jenkins-k8s-pvc
  namespace: jenkins-k8s
spec:
  resources:
    requests:
      storage: 10Gi
  accessModes:
  - ReadWriteMany
kubectl apply -f pvc.yaml
kubectl get pvc -n jenkins-k8s

创建一个sa账号

kubectl create sa jenkins-k8s-sa -n jenkins-k8s

把上面的sa账号做rbac授权

kubectl create clusterrolebinding jenkins-k8s-sa-cluster -n jenkins-k8s  --clusterrole=cluster-admin --serviceaccount=jenkins-k8s:jenkins-k8s-sa

通过deployment部署jenkins

导入jenkins镜像

在k8snode节点执行
备注:image镜像
jenkins/jenkins:2.421,不能用再新的版本了,如果版本大于jenkins/jenkins:2.421,提供的pod template模板处用到的jenkins-slave-latest:v1镜像就会和主jenkins建立不了连接,就会报错。
通过网盘分享的文件:jenkins2.421.tar.gz
链接: https://pan.baidu.com/s/1LWVBOIkm7A6ar8-wpHIidA?pwd=eye2 提取码: eye2

#复制jenkins2.421.tar.gz 到k8snode1节点后执行
ctr -n=k8s.io images import jenkins2.421.tar.gz

上传jenkins-slave从节点jenkins-slave-latest:v1镜像

jenkins/jenkins:2.421是安装jenkins pod的
jenkins-slave 是从节点pod。在大型或复杂的 Jenkins 系统中,jenkins主服务器通常不执行构建工作,而是把构建任务分发给从服务器来执行。
备注:jenkins-slave-latest.tar.gz这个里面封装的镜像是jenkins-slave-latest:v1
复制jenkins-slave-latest.tar.gz至k8snode1
通过网盘分享的文件:jenkins-slave-latest.tar.gz
链接: https://pan.baidu.com/s/12pUHBbUXaUvaW1Qsk8LX_g?pwd=54yc 提取码: 54yc

ctr -n=k8s.io images import jenkins-slave-latest.tar.gz

更新资源清单文件

cat jenkins-deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
  name: jenkins
  namespace: jenkins-k8s
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      serviceAccount: jenkins-k8s-sa
      containers:
      - name: jenkins
        image:  jenkins/jenkins:2.421
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
          name: web
          protocol: TCP
        - containerPort: 50000
          name: agent
          protocol: TCP
        resources:
          limits:
            cpu: 2000m
            memory: 2Gi
          requests:
            cpu: 500m
            memory: 512Mi
        livenessProbe:
          httpGet:
            path: /login
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 5
          failureThreshold: 12
        readinessProbe:
          httpGet:
            path: /login
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 5
          failureThreshold: 12
        volumeMounts:
        - name: jenkins-volume
          subPath: jenkins-home
          mountPath: /var/jenkins_home
      volumes:
      - name: jenkins-volume
        persistentVolumeClaim:
          claimName: jenkins-k8s-pvc
kubectl apply -f jenkins-deployment.yaml
kubectl get pods -n jenkins-k8s
NAME                       READY   STATUS   RESTARTS     AGE
jenkins-75c478947f-2tx8h   0/1     Error    1 (3s ago)   4s

看到jenkins-75c478947f-2tx8h 是CrashLoopBackOff状态,查看日志:

kubectl logs jenkins-75c478947f-2tx8h -n jenkins-k8s

在这里插入图片描述

报错显示没有权限操作/var/jenkins_home/copy_reference_file.log文件

touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

解决办法如下:在k8smaster执行

kubectl delete -f jenkins-deployment.yaml
chown -R 1000.1000 /data/v2
kubectl apply -f jenkins-deployment.yaml

查看pod是否创建成功:

kubectl get pods -n jenkins-k8s

在这里插入图片描述

把jenkins前端加上service,提供外部网络访问

cat jenkins-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: jenkins-service
  namespace: jenkins-k8s
  labels:
    app: jenkins
spec:
  selector:
    app: jenkins
  type: NodePort
  ports:
  - name: web
    port: 8080
    targetPort: web
    nodePort: 30002
  - name: agent
    port: 50000
    targetPort: agent

kubectl apply -f jenkins-service.yaml
kubectl get svc -n jenkins-k8s

在这里插入图片描述

通过上面可以看到service的8080端口在物理机映射的端口是30002

配置Jenkins

在浏览器访问jenkins的web界面:
在这里插入图片描述

获取管理员密码

在nfs服务端,也就是我们的master1节点获取密码:

cat  /data/v2/jenkins-home/secrets/initialAdminPassword

在这里插入图片描述

把上面获取到的密码拷贝到上面管理员密码下的方框里

在这里插入图片描述

点击继续,出现如下界面

在这里插入图片描述

安装插件,安装推荐的插件

在这里插入图片描述

1)Jenkins离线插件下载地址:
http://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/

可以在Jenkins官网上搜索想要下载的插件,点击“Download”按钮下载.hpi文件。
2)Jenkins离线插件安装方法:
方法一:
1)在Jenkins管理页面点几“系统管理” -> “插件管理” -> “高级”。
2)选择“上传插件”,并选择下载的.hpi文件。
3)点击“上传”按钮,等待插件安装完成。

插件安装好之后显示如下,创建第一个管理员用户
在这里插入图片描述

在这里插入图片描述

用户名和密码都设置成admin,线上环境需要设置成复杂的密码
修改好之后点击保存并完成,出现如下界面
点击保存并完成,出现如下界面

在这里插入图片描述

点击保存并完成,出现如下界面

在这里插入图片描述

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐