使用k8s部署Django项目的方法步骤
作者:Darcy''''s Blog 发布时间:2022-12-30 01:59:56
接触了一下docker和k8s,感觉是非常不错的东西。能够方便的部署线上环境,而且还能够更好的利用机器的资源,感觉是以后的大趋势。最近刚好有一个基于django的项目,所以就把这个项目打包到docker里面,放到k8是里面运行,顺便学习下k8s和docker的使用。
docker
为什么使用docker?
我觉得docker最大的好处是部署的时候比较方便,一个预先打包好的docker镜像,可以在任何安装有docker的机器上面直接运行,不用再安装其他任何的依赖环境。不管是在开发、测试、还是发布阶段,都能节省很多安装依赖和配置文件的时间,真正做到了Build once, Run anywhere。
docker在我的项目中怎么使用?
在我的项目中,我主要使用dockerfile来生成项目的镜像。我们都知道docker是按照层的思想来构建一个镜像的,我的镜像的最底层的操作系统使用的是centos7,再接着安装python相关的工具和库,然后安装项目所需求的库,最后再把项目拷到镜像中。
FROM centos:7
ENV LC_ALL=en_US.utf-8 LANG=en_US.utf-8
RUN yum install -y https://centos7.iuscommunity.org/ius-release.rpm && \
yum install -y python36u python36u-libs python36u-devel python36u-pip mysql-devel gcc which && \
pip3.6 install pipenv
COPY Pipfile Pipfile.lock /my_app/
WORKDIR /my_app
RUN pipenv sync
COPY my_app_site /my_app/my_app_site
COPY gunicorn_config.py /my_app/gunicorn_config.py
COPY resource/nginx.conf /my_app/resource/nginx.conf
RUN mkdir /static/ && \
cd my_app_site && \
pipenv run python manage.py collectstatic && \
cd my_app_site && \
rm -f local_settings.py
WORKDIR /my_app
EXPOSE 8000
CMD pipenv run gunicorn my_app_site.wsgi -c gunicorn_config.py --log-file logs/gunicorn.log
在dockerfile中,每个RUN命令都会构建新的层,我这边之所以在dockerfile中使用三个RUN命令,是为了能够尽量的减少重复的构建过程。每次在构建镜像的时候docker都会判断每层的内容是否有修改,如果没有修改的话,就不需要重复的构建。所以在应用开发的过程中,上面的dockerfile最多也就重新构建最后一层和倒数第二层(在项目有新包加入的时候才重新构建倒数第二层,不然正常情况下就只会重新构建最后一层)。
k8s
为什么使用k8s?
k8s的功能非常强大。不过简单的来说,k8s是用来管理容器的一个工具。有了k8s以后我们就能让k8s自动的去拉取docker镜像,并且根据需要来启动、关闭、调度docker容器,实现一些牛逼的自动化运维操作。
k8s在我的项目中怎么使用?
我使用了yaml文件定义了一个k8s部署,下面是具体的文件示例:
# ------------------- MyApp Deployment ------------------- #
kind: Deployment
apiVersion: apps/v1beta2
metadata:
labels:
k8s-app: my_app
name: my_app
spec:
replicas: 2
revisionHistoryLimit: 10
selector:
matchLabels:
k8s-app: my_app
template:
metadata:
labels:
k8s-app: my_app
spec:
volumes:
- name: nginx-config
emptyDir: {}
- name: static-dir
emptyDir: {}
containers:
- name: my_app-web
image: my_app:latest
ports:
- containerPort: 8000
protocol: TCP
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/conf.d/
- name: static-dir
mountPath: /usr/share/nginx/html/my_app/static
command: ["/bin/sh"]
args: ["-c", "cp resource/nginx.conf /etc/nginx/conf.d/ && \
cp /static/* /usr/share/nginx/html/my_app/static -rf && \
pipenv run gunicorn my_app.wsgi -c gunicorn_config.py"]
- name: my_app-nginx
image: nginx:1.15.8
ports:
- containerPort: 8899
protocol: TCP
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/conf.d/
- name: static-dir
mountPath: /usr/share/nginx/html/my_app/static
livenessProbe:
httpGet:
scheme: HTTP
path: /
port: 8899
initialDelaySeconds: 30
timeoutSeconds: 30
---
# ------------------- MyApp Service ------------------- #
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: my_app
name: my_app
spec:
ports:
- port: 8899
targetPort: 8899
selector:
k8s-app: my_app
type: NodePort
django项目在部署的时候需要用到nginx服务器,所以在部署的时候我在同一个pod里面也加入了一个nginx镜像,不过为了少打包一个新的nginx镜像(带有nginx配置文件和静态文件的nginx镜像),我在两个容器之间使用volumes来共享django静态文件和nginx配置文件。
总结
来源:https://lintingbin2009.github.io/2019/01/13/使用k8s部署Django项目/
猜你喜欢
- 我就废话不多说了,直接上代码吧!import Imagefrom datetime import datetimeimport osstr
- 本文实例讲述了Python结合ImageMagick实现多张图片合并为一个pdf文件的方法。分享给大家供大家参考,具体如下:前段时间买了不少
- 线性回归是一种常见的机器学习算法,也是人工智能中常用的算法。它是一种用于预测数值型输出变量与一个或多个自变量之间线性关系的方法。例如,你可以
- 这篇文章主要介绍了如何基于Python制作有道翻译小工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 在网上搜索的时候,经常看到两种打开方式: dispatch和EnsureDispatchimport win32com.client as
- 语法:replace(self, to_replace=None, value=None, inplace=False, limit=Non
- 可变长参数GO语言允许一个函数把任意数量的值作为参数,GO语言内置了**...操作符,在函数的最后一个形参才能使用...**操作符,使用它必
- 一个站点成功与否,不是在于所用的程序语言是PHP还是ASP,也不在于用BLOG建站或是CMS建站,内容和专业很重要。博客很好起步,CMS体系
- 本文实例讲述了python使用pymongo与MongoDB基本交互操作。分享给大家供大家参考,具体如下:本文内容:pymongo的使用:安
- 查了查《VBSCRIPT 速查手册》InstrRev的用法:InstrRev函数,功能:返回某字符串在另一个字符串中出现的从结尾计起的位置语
- 目录初始化程序创建Surface对象事件监听游戏循环Pygame 作为一个入门级的游戏开发库,其实并不难学,只要掌握 Python 编程的相
- python解决循环依赖1.概述在使用python开发过程中在引入其他模块时可能都经历过一个异常就是循环引用most likely due
- 1、远程登录到linux上,使用到的模块paramiko#远程登陆操作系统def ssh(sys_ip,username,password,
- SQL Server 2000中存在的许多的备份和恢复特性都同样保留在了SQL Server 2005中,但是有一些新的提高同样值得我们关注
- 让Python提速超过40倍的神器:Cython人工智能最火的语言,自然是被誉为迄今为止最容易使用的代码之一的Python。Python代码
- 前言密码是个很私密的东西它一直关联着一系列的机密事物,二战中密码起了很大的作用。在我们生活中尤其是现在我们手机上存在着许多的app是我们生活
- 前言本篇来学习下在allure中如何添加环境信息properties文件在allure的report根目录下添加一个 environment
- 在windows 2003下,在运行web应用程序的时候出现一下错误: 服务器无法处理请求,-->对路径“C:/temp/mytest.tx
- 我们知道,一般的关系数据库(如SQL Server、Oracle、Access等)中的查询操作是支持集合操作的,例如可以用“Update A
- python之循环遍历关于循环遍历大家都知道,不外乎for和while,今天我在这写点不一样的循环和遍历。在实践中有时会遇到删除列表中的元素