使用k8部署Django项目的方法步骤

  

接触了一下码头工人和美丽,感觉是非常不错的东西。能够方便的部署线上环境,而且还能够更好的利用机器的资源,感觉是以后的大趋势。最近刚好有一个基于django的项目,所以就把这个项目打包到码头工人里面,放到k8是里面运行,顺便学习下美丽和码头工人的使用。

  

<强>码头工人
  

  

<强>为什么使用码头工人?
  

  

我觉得码头工人最大的好处是部署的时候比较方便,一个预先打包好的码头工人镜像,可以在任何安装有码头工人的机器上面直接运行,不用再安装其他任何的依赖环境。不管是在开发,测试,还是发布阶段,都能节省很多安装依赖和配置文件的时间,真正做到构建了>   从centos: 7      ENV LC_ALL=en_US。utf - 8 LANG=en_US.utf-8   运行yum安装可能是https://centos7.iuscommunity.org/ius-release.rpm,,\   yum安装- y python36u python36u-libs python36u-devel python36u-pip mysql-devel gcc,,,\   pip3.6安装pipenv      复制Pipfile Pipfile。锁/my_app/WORKDIR/my_app   pipenv同步运行      复制my_app_site/my_app/my_app_site   gunicorn_config副本。py/my_app/gunicorn_config.py   复制资源/nginx。conf/my_app/资源/nginx.conf      mkdir/静态运行,,\   cd my_app_site,,\   pipenv python运行管理。py collectstatic,,\   cd my_app_site,,\   rm - f local_settings.py      WORKDIR/my_app      8000年公开   运行CMD pipenv gunicorn my_app_site。wsgi - c gunicorn_config。py——日志文件日志/gunicorn.log      

在dockerfile中,每个运行命令都会构建新的层,我这边之所以在dockerfile中使用三个运行命令,是为了能够尽量的减少重复的构建过程。每次在构建镜像的时候码头工人都会判断每层的内容是否有修改,如果没有修改的话,就不需要重复的构建。所以在应用开发的过程中,上面的dockerfile最多也就重新构建最后一层和倒数第二层(在项目有新包加入的时候才重新构建倒数第二层,不然正常情况下就只会重新构建最后一层)。

  

<强> k8
  

  

<强>为什么使用k8 ?
  

  

美丽的功能非常强大。不过简单的来说,美丽是用来管理容器的一个工具。有了k8以后我们就能让k8自动的去拉取码头工人镜像,并且根据需要来启动,关闭,调度码头工人容器,实现一些牛逼的自动化运维操作。

  

<强>美丽在我的项目中怎么使用?
  

  

我使用了yaml文件定义了一个k8部署、下面是具体的文件示例:

        # - - - - - - - - - - - - - - - - - - - MyApp部署- - - - - - - - - - - - - - - - - - - #      :部署/v1beta2 apiVersion:应用程序   元数据:   标签:   k8s-app: my_app   名称:my_app   规范:   副本:2   revisionHistoryLimit: 10   选择器:   matchLabels:   k8s-app: my_app   模板:   元数据:   标签:   k8s-app: my_app   规范:   卷:   ——名称:nginx-config   emptyDir: {}   ——名称:static-dir   emptyDir: {}   容器:   ——名称:my_app-web   图片:my_app:最新   港口:   - containerPort: 8000   TCP协议:   volumeMounts:   ——名称:nginx-config   mountPath:/etc/nginx/conf.d/?static-dir   mountPath:/usr/share/nginx/html/my_app/static   命令(“/bin/sh”):   参数:[“c”、“cp/nginx的资源。参看/etc/nginx/conf.d/,,\   cp/静态/*/usr/share/nginx/html/my_app/static射频,,\   pipenv运行gunicorn my_app。wsgi - c gunicorn_config.py”)   ——名称:my_app-nginx   图片:nginx: 1.15.8   港口:   - containerPort: 8899   TCP协议:   volumeMounts:   ——名称:nginx-config   mountPath:/etc/nginx/conf.d/?static-dir   mountPath:/usr/share/nginx/html/my_app/static   livenessProbe:   httpGet:   方案:HTTP   路径:/端口:8899   initialDelaySeconds: 30   timeoutSeconds: 30   ---      # - - - - - - - - - - - - - - - - - - - MyApp服务- - - - - - - - - - - - - - - - - - - #      类型:服务   apiVersion: v1   元数据:   标签:   k8s-app: my_app   名称:my_app   规范:   港口:   端口:8899   发送:8899   选择器:   k8s-app: my_app   类型:NodePort      

django项目在部署的时候需要用到nginx服务器,所以在部署的时候我在同一个豆荚里面也加入了一个nginx镜像,不过为了少打包一个新的nginx镜像(带有nginx配置文件和静态文件的nginx镜像),我在两个容器之间使用卷来共享django静态文件和nginx配置文件。

使用k8部署Django项目的方法步骤