K8S实战-构建Django项目-06-持续构建

今天是K8S实战-构建Django项目,最后一讲。前面5将我们一步步通过k8s构建了一个django项目,通过考虑实际生产环境,我们添加了初始化功能,自动化构建功能,共享存储,数据加密,监控方案,日志方案。从无到有,我们一同走了一遍。最后一讲,我将带着大家利用现有的资源实现最简单的持续构建。

持续构建

设计

gitlab+jenkins+node+dockerfile+k8s

gitlab作为仓库,jenkins设置触发器,node作为执行节点,dockerfile生产镜像,k8s构建资源。

实现自动化构建环境

你需要参照我之前的教程搭建gitlab+jenkins创建一个自动化构建环境。请一定要确保你的自动化构建环境是正常的!

创建gitlab工程项目

创建一个工程,这里的工程名是接下来jenkins的任务名,通过设定好的gitlab地址,可以获取到gitlab上代码的变更,从而触发jenkins任务。

编写Jenkins触发任务

新建一个job,然后选择一个可以进行构建的节点。

我之前已经构建好了相关镜像,这次就不用重新构建镜像。

验证node节点

这里只需要确保node节点有java环境,docker环境,k8s环境。

验证持续集成

通过更新gitlab相关工程代码,jenkins检测到gitlab代码变更,开始执行shell 任务,在选定的执行机上,执行了django项目的构建。

从控制台输出中可以看出资源已经创建,然后再去访问项目地址,发现项目可以正常访问。

如果你要重现这些,我建议你必须阅读之前的《》《》《》《》。还有我上传到gitlab上的代码是3.0版本的django项目的django_deploy.yaml和django_nfs.yaml。如果你需要测试4.0版本django项目,你还需自行上传相关资源。最后附上目录gitlab上django_polls的工程结构和相关代码。

django_deploy.yaml

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
apiVersion: extensions/v1beta1kind: Deploymentmetadata:  labels:    app: mysql  name: mysqlspec:  replicas: 1  selector:    matchLabels:      app: mysql  template:    metadata:      labels:        app: mysql    spec:      initContainers:      - name: mysql-init        image: busybox        imagePullPolicy: IfNotPresent        command:          - sh          - "-c"          - |            set -ex            cat > /start_script/mysql_init.sh <<EOF            #!/bin/bash            sed -i "/log-error/iskip-grant-tables" /etc/my.cnf            systemctl restart mysqld            sleep 50            mysql -uroot -p123qwe -e "CREATE DATABASE polls DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"            mysql -uroot -p123qwe -e "use mysql;"            mysql -uroot -p123qwe -e "grant all privileges  on *.* to [email protected]'%' identified by "123qwe";"            mysql -uroot -p123qwe -e "flush privileges;"            systemctl restart mysqld            EOF            chmod +x /start_script/mysql_init.sh        volumeMounts:        - name: mysql-initdb          mountPath: /start_script      volumes:      - name: mysql-initdb        persistentVolumeClaim:          claimName: mypvc1      - name: mysql-data        persistentVolumeClaim:          claimName: mysqlpvc      containers:      - image: centos7:mysql3        name: mysql        imagePullPolicy: IfNotPresent        env:        - name: MYSQL_ROOT_PASSWORD          value: 123qwe        readinessProbe:          exec:            command:            - /bin/sh            - "-c"            - MYSQL_PWD="${MYSQL_ROOT_PASSWORD}"            - mysql -h 127.0.0.1 -u root -p $MYSQL_PWD -e "SELECT 1"          initialDelaySeconds: 10          timeoutSeconds: 1          successThreshold: 1          failureThreshold: 3          periodSeconds: 5        volumeMounts:        - name: mysql-initdb          mountPath: /start_script        - name: mysql-data          mountPath: /raiddisk        

apiVersion: v1kind: Servicemetadata:  name: mysql-svcspec:  selector:    app: mysql  clusterIP: 10.101.1.1  ports:  - protocol: TCP    port: 3306    targetPort: 3306

apiVersion: extensions/v1beta1kind: Deploymentmetadata:  labels:    app: django  name: djangospec:  replicas: 1  selector:    matchLabels:      app: django  template:    metadata:      labels:        app: django    spec:      initContainers:      - name: django-init        image: busybox        imagePullPolicy: IfNotPresent        command:          - sh          - "-c"          - |            set -ex            cat > /start_script/django_init.sh <<EOF            #!/bin/bash            mkdir /root/django            cd /root/django            git clone https://github.com/cuigelasi/learn_django.git            cd /root/django/learn_django            git checkout -t origin/polls            sed -i "s/172.10.1.2/10.101.1.1/" learn_django/settings.py            sleep 60            python manage.py makemigrations            python manage.py migrate            echo "from django.contrib.auth.models import User; User.objects.create_superuser('admin', '[email protected]', '123qwe')" | python manage.py shell            python manage.py runserver 0.0.0.0:8000            EOF            chmod +x /start_script/django_init.sh        volumeMounts:        - name: django-initdb          mountPath: /start_script      containers:      - image: centos7:django3        name: django        volumeMounts:        - name: django-initdb          mountPath: /start_script        readinessProbe:          exec:            command:            - cat            - /root/django/learn_django/learn_django/settings.py          initialDelaySeconds: 10          periodSeconds: 5      volumes:      - name: django-initdb        persistentVolumeClaim:          claimName: mypvc1      - name: django-data        persistentVolumeClaim:          claimName: djangopvc

apiVersion: v1kind: Servicemetadata:  name: django-svcspec:  type: NodePort  selector:    app: django  clusterIP: 10.101.1.2  ports:  - protocol: TCP    nodePort: 30008    port: 8000    targetPort: 8000

django_nfs.yaml

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
apiVersion: v1kind: PersistentVolumemetadata:  name: mypv1spec:  capacity:    storage: 1Gi  accessModes:    - ReadWriteOnce  persistentVolumeReclaimPolicy: Recycle  storageClassName: mynfs  nfs:    path: /nfs-share    server: 172.16.2.237

apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: mypvc1spec:  accessModes:    - ReadWriteOnce  resources:    requests:      storage: 1Gi  storageClassName: mynfs

apiVersion: v1kind: PersistentVolumemetadata:  name: mysqlpvspec:  capacity:    storage: 1Gi  accessModes:    - ReadWriteOnce  persistentVolumeReclaimPolicy: Recycle  storageClassName: mysqlnfs  nfs:    path: /mysql-share    server: 172.16.2.237

---

apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: mysqlpvcspec:  accessModes:    - ReadWriteOnce  resources:    requests:      storage: 1Gi  storageClassName: mysqlnfs

---

apiVersion: v1kind: PersistentVolumemetadata:  name: djangopvspec:  capacity:    storage: 1Gi  accessModes:    - ReadWriteOnce  persistentVolumeReclaimPolicy: Recycle  storageClassName: djangonfs  nfs:    path: /django-share    server: 172.16.2.237

---

apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: djangopvcspec:  accessModes:    - ReadWriteOnce  resources:    requests:      storage: 1Gi  storageClassName: djangonfs

结束语

K8S实战-构建Django项目,已经圆满结束。感谢大家的一路支持,作为一个IT人,每天都有无尽的知识等待学习,我相信天道酬勤,努力学习总有展示才华的机会。

原文:大专栏  K8S实战-构建Django项目-06-持续构建

原文地址:https://www.cnblogs.com/chinatrump/p/11606890.html

时间: 2024-11-02 03:03:34

K8S实战-构建Django项目-06-持续构建的相关文章

K8S实战-构建Django项目-03-使用共享存储

上篇博文,发布之后,正好跟着双十一,不知道大家剁手了没~~.好啦,言归正传先声明一下,每周1,3,5更新教程,大家如果想要了解更多的教程可以重温一下之前的教程或者,关注崔格拉斯 公众号,大家想要源码的可以私信我~ 每日解析(11.9 每日一题解析) 昨天的教程中留下了一个问题:如何实现数据持久化,确保django project和数据库文件不随pod的销毁而销毁. 解析: 在上一篇教程中,我们已经使用了emptyDir 数据卷.这种数据卷对于当个容器来说是持久的,但是对于Pod来说并不是持久的.

谈谈对Jenkins持续构建的认识

通过多次搭建Jenkins持续构建环境,终于对Jenkins有了进一步认识,在此把所学所得和大家分享一下,希望可以帮助大家快速掌握Jenkins的核心思想. 在安装完Jenkins的setup.exe程序后,在浏览器会自动打开Jenkins的主页,通过Jenkins主页配置各种参数.  过程一:安装Jenkins的MsBuild Plugin插件,此插件用于支持MSBuild.exe的构建工作: 过程二:配置插件,告诉MsBuild Plugin插件用哪个版本的MSBuild.exe来构建,比如

Maven 学习(二)使用eclipse构建Maven项目及发布一个Maven项目

开发环境: Eclipse Jee Mars(截止2015年12月1日目前的最新版eclipse4.5),下载地址:http://www.eclipse.org/downloads/ 因为此版本已经集成了M2E的插件,再者Mars版本的eclipse也比较稳定,可以省一些不必要的麻烦. 一.构建Maven项目 用eclipse构建maven项目之前我们需要为eclipse做一些必要的配置 一些必要的配置 1.点击eclipse菜单栏的Window下的preferences,选择Maven菜单 2

Ant构建Java项目

Ant构建Java项目 我们创建HelloWorld项目,将源文件.java发到src中,编译后字节码.class放到bin中,对应的jar包放到exe目录中. 首先使用命令行来构建项目: 1.创建src目录 md src 2.在src目录中存放源文件HelloWorld.java,类HelloWorld的包名为com.tghz.test 那么创建包名路径,cd src,md com,cd com,md tghz,cd tghz,md test,然后存放HelloWorld.java到当前目录中

利用Travis CI 让你的github项目持续构建

Travis CI 是目前新兴的开源持续集成构建项目,它与jenkins,GO的很明显的特别在于采用yaml格式,简洁清新独树一帜.目前大多数的github项目都已经移入到Travis CI的构建队列中,据说Travis CI每天运行超过4000次完整构建.对于做开源项目或者github的使用者,如果你的项目还没有加入Travis CI构建队列,那么我真的想对你说out了. 下面是本人的构建历史: 搭建Travis CI build,需要你有个github账号和github项目: 1:用gith

浅谈运维规模化可持续构建实战

如今的互联网时代,运维早已不再是被动的那一方.过去的运维,由于种种限制,工作繁重.复杂,效率低下,很难适应目前互联网产品快速的迭代节奏.而如今,随着虚拟化.容器技术以及持续构建技术的成熟,运维工作的模式有了很大的变化,通过自动化技术的应用使得更少的人为参与,有更高的效率.为了确保项目高质量的快速迭代,必须构建一套高效的可持续构建的运维管理体系. 互联网项目最大的特点是版本迭代节奏快(同一个系统一天上线数次都有可能),需求变化频繁,且每天可能都有项目新增.服务维护.运维架构调整等需求.而常见的运维

Maven实战(三)Eclipse构建Maven项目(转)

转帖:http://www.iteye.com/topic/1123225 ? 1. 安装m2eclipse插件??? 要用Eclipse构建Maven项目,我们需要先安装meeclipse插件??? 点击eclipse菜单栏Help->Eclipse Marketplace搜索到插件Maven Integration for Eclipse 并点击安装即可,如下图: ?? 安装成成之后我们在Eclipse菜单栏中点击File->New->Other,在弹出的对话框中会看到如下图所示:

Jenkins构建Android项目持续集成之findbugs的使用

题外话 这篇本来和之前的系列要一起出的,但是因为中间公司要发布一个版本,给耽搁了,今天工作做完了,又闲了下来.所以就又来继续jenkins构建Android项目持续集成系列的findbugs篇. Findbugs简介 关于findbugs的介绍,可以自行百度下,这里贴下百度百科的介绍.findbugs是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.这组缺陷模式是可配置的,通过配置,可以过滤掉一些我们不想或不需要检测的问题. findbugs在gra

linux服务器中Jenkins集成git、Gradle持续构建Springboot项目

Jenkins是用java编写的开源持续集成工具,目前被国内外各公司广泛使用.本章教大家如何在linux服务器中使用Jenkins自动发布一个可作为linux服务发布的Springboot项目. 自动构建需要经过如下步骤:从git仓库下载代码.使用Gradle进行构建.使用SSH推送到另一台linux服务器.项目作为linux服务启动.本章将逐条仔细讲解. 一.获得一台linux服务器 要在linux下搞持续构建,首先你得先有一台linux服务器,作为小白,手头的机器肯定都是windows的,搞