学习笔记七:基于Jenkins+k8s+Git+DockerHub等技术链构建企业级DevOps容器云平台

基于Jenkins+k8s+Git+DockerHub等技术链构建企业级DevOps容器云平台

K8s版本

python 复制代码
kubectl get nodes

jenkins版本:

最新版

安装Jenkins

安装nfs服务,可以选择自己的任意一台机器,我选择的是k8s的控制节点k8smaster1

如果已经安装过nfs,这个步骤可以忽略

python 复制代码
yum install nfs-utils -y
systemctl start nfs
systemctl enable nfs

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

python 复制代码
mkdir /data/v2  -p
vim /etc/exports
python 复制代码
/data/v1 *(rw,no_root_squash)
/data/v2 *(rw,no_root_squash)

使配置文件生效

python 复制代码
exportfs -arv

在kubernetes中部署jenkins

创建名称空间

python 复制代码
kubectl create namespace jenkins-k8s

创建pv,上传pv.yaml

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

创建pvc

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

创建一个sa账号

python 复制代码
kubectl create sa jenkins-k8s-sa -n jenkins-k8s

把上面的sa账号做rbac授权

python 复制代码
kubectl create clusterrolebinding jenkins-k8s-sa-cluster -n jenkins-k8s  --clusterrole=cluster-admin --serviceaccount=jenkins-k8s:jenkins-k8s-sa

通过deployment部署jenkins

在k8snode节点执行

python 复制代码
docker pull jenkins/jenkins:2.394
docker save -o jenkins2.394  jenkins/jenkins:2.394
ctr -n=k8s.io images import jenkins2.394
python 复制代码
docker load -i jenkins-slave-latest.tar.gz
ctr -n=k8s.io images import jenkins-slave-latest.tar.gz

备注:jenkins-slave-latest.tar.gz这个里面封装的镜像是jenkins-slave-latest:v1,这个jenkins-slave-latest:v1镜像制作方法如下:

python 复制代码
cd /root/slave
cat dockerfile
python 复制代码
FROM jenkins/jnlp-slave:4.13.3-1-jdk11
USER root
# 安装Docker
RUN apt-get update && apt-get install -y \
    docker.io
# 将当前用户加入docker用户组
RUN usermod -aG docker jenkins`在这里插入代码片`
RUN curl -LO https://dl.k8s.io/release/stable.txt
RUN curl -LO https://dl.k8s.io/release/$(cat stable.txt)/bin/linux/amd64/kubectl
RUN chmod +x kubectl
RUN mv kubectl /usr/local/bin/
ENV DOCKER_HOST unix:///var/run/docker.sock
python 复制代码
docker build -t=jenkins-slave-latest:v1 .
docker save -o jenkins-slave-latest.tar.gz  jenkins-slave-latest:v1

更新资源清单文件

python 复制代码
kubectl apply -f jenkins-deployment.yaml
kubectl get pods -n jenkins-k8s
python 复制代码
NAME                       READY   STATUS            RESTARTS   AGE
jenkins-74b4c59549-g5j9t   0/1     CrashLoopBackOff   3          67s

看到jenkins-74b4c59549-g5j9t是CrashLoopBackOff状态,查看日志:

python 复制代码
kubectl logs jenkins-74b4c59549-g5j9t  -n jenkins-k8s
python 复制代码
日志信息显示:
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?
#报错显示没有权限操作/var/jenkins_home/copy_reference_file.log文件,

解决办法如下:在k8smaster执行

python 复制代码
kubectl delete -f jenkins-deployment.yaml
chown -R 1000.1000 /data/v2
python 复制代码
cat jenkins-deployment.yaml
python 复制代码
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.394
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
          name: web
          protocol: TCP
        - containerPort: 50000
          name: agent
          protocol: TCP
        resources:
          limits:
            cpu: 1000m
            memory: 1Gi
          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
python 复制代码
kubectl apply -f jenkins-deployment.yaml

查看pod是否创建成功:

python 复制代码
kubectl get pods -n jenkins-k8s

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

python 复制代码
cat jenkins-service.yaml
python 复制代码
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
python 复制代码
kubectl apply -f jenkins-service.yaml
kubectl get svc -n jenkins-k8s

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

配置Jenkins

在浏览器访问jenkins的web界面:

获取管理员密码

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

python 复制代码
cat  /data/v2/jenkins-home/secrets/initialAdminPassword

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

点击继续,出现如下界面

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

插件安装好之后显示如下,创建第一个管理员用户

用户名和密码都设置成admin,线上环境需要设置成复杂的密码

修改好之后点击保存并完成,出现如下界面

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

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

测试jenkins的CI/CD

相关推荐
mit6.8243 分钟前
[Linux#49][UDP] 2w字详解 | socketaddr | 常用API | 实操:实现简易Udp传输
linux·网络·c++·笔记·后端
Lill_bin13 分钟前
ElasticSearch底层原理解析
大数据·分布式·elasticsearch·搜索引擎·zookeeper·云原生·jenkins
scdifsn24 分钟前
动手学深度学习8.5. 循环神经网络的从零开始实现-笔记&练习(PyTorch)
pytorch·笔记·rnn·深度学习·梯度剪裁
爱吃香蕉的阿豪1 小时前
828华为云征文|Flexus X实例Docker+Jenkins+gitee实现CI/CD自动化部署-解放你的双手~
ci/cd·docker·gitee·华为云·jenkins
星迹日1 小时前
C语言:结构体
c语言·开发语言·经验分享·笔记
DA树聚7 小时前
大语言模型之ICL(上下文学习) - In-Context Learning Creates Task Vectors
人工智能·学习·程序人生·ai·语言模型·自然语言处理·easyui
神一样的老师9 小时前
使用卷积神经网络进行人类活动识别的特征学习:惯性测量单元和音频数据的案例研究
学习·cnn·音视频
小蒜学长10 小时前
集团门户网站设计与实现
java·开发语言·数据库·学习·tomcat·maven
猫的饭桌11 小时前
布偶猫应该喂什么猫罐头:交响乐金罐、希喂、尾巴生活测评
经验分享·笔记·安全·生活