" name="sm-site-verification"/>
侧边栏壁纸
博主头像
PySuper博主等级

千里之行,始于足下

  • 累计撰写 203 篇文章
  • 累计创建 14 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Kubernetes 部署Django Web

PySuper
2020-06-27 / 0 评论 / 0 点赞 / 18 阅读 / 7817 字
温馨提示:
所有牛逼的人都有一段苦逼的岁月。 但是你只要像SB一样去坚持,终将牛逼!!! ✊✊✊

建议

  • 在本地测试项目代码
  • 获取每个基础镜像后,自己先制作一个个性初始化的镜像,保存好
  • 建一个文件夹,存放不同阶段不同镜像的Dockerfile和当前需要的文件
  • 一定要明白每个端口是做什么的
  • 在本地使用测试镜像

初始化基础镜像

1. 获取基础镜像

docker pull python:3.6
docker pull nginx

2. 个性初始化

Django Docker
FROM python:3.6
MAINTAINER zhengxingtao
WORKDIR /root
RUN apt-get update && apt-get install -y vim && pip3 install django==1.11 && pip3 install uwsgi && pip3 install pymysql
  • 制作镜像
    • docker tag old_name:old_tag new_name:new_tag:需要的时候 ,可以修改镜像名称和标签信息
    • .:表示当前路径,注意Dockerfile中配置的文件路径
  • 保存镜像
    • smallspider:这是和Docker Hub上的用户名一致的
    • smallspider/django:后面不能再出现同样名称的了(下次试试不同的标签行不行)
-- 通过Dockerfile创建django镜像
docker build -f Dockerfile -t smallspider/django:latest .

-- 提交镜像到DockerHub
docker push smallspider/django:latest
Nginx Docker
FROM nginx:latest
MAINTAINER zhengxingtao
RUN apt-get update && apt-get install -y vim
WORKDIR /etc/nginx
RUN ["/bin/bash", "-c", "/usr/sbin/./nginx"]
-- 通过Dockerfile创建Nginx镜像
docker build -f Dockerfile -t smallspider/nginx:latest

-- 提交镜像到DockerHub
docker push smallspider/nginx:latest

测试镜像

-- 创建并运行django和nginx的镜像文件
docker run -dit --django nginx -p 8000:8000 smallspider/django:latest
docker run -dit --name nginx -p 8090:80 smallspider/nginx:latest

制作项目镜像

Django

这里我们要注意,不同的项目,uwsgi.ini是不一样的,需要看清楚写

uwsgi.ini

[uwsgi]

chdir = /home/zheng/djangotest
module = djangotest.wsgi:application
wsgi-file = djangotest.uwsgi.ini
pyenv = /usr/bin/python
vacuum = true
master=true
processes = 8
thread = 8
max-requests = 5000
uid = nginx
gid = nginx
http = 0.0.0.0:8000

Dockerfile

FROM smallspider/django:v1
MAINTAINER zhengxingtao
RUN groupadd -r nginx && useradd -r -g nginx nginx
RUN mkdir -p /home/zheng/djangotest
COPY ./djangotest /home/zheng/djangotest
WORKDIR /home/zheng/djangotest/
CMD ["/bin/bash","-c","uwsgi --ini uwsgi.ini"]
-- 通过Dockerfile创建DjangoWeb的镜像
docker build -f Dockerfile -t smallspider/django:latest .

-- 把镜像文件发送到DockerHub
docker push smallspider/django:latest

Nginx

目录结构

-- 这里是Nginx中需要的文件
zheng@master:~/Documents/DockerFile/nginx_v2$ ls
djangoweb.conf  Dockerfile  nginx.conf  static

djangoweb.conf

upstream mynginx {
    server 172.16.23.61:32000;
    server 172.16.23.62:32000;
}

server {
    listen 80;
    charset utf-8;
    client_max_body_size 75M;

    location /static {
        alias /home/zheng/djangotest/static;
    }

    location / {
        proxy_pass http://mynginx;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Nginx-Proxy true;
   }
}

nginx.conf:复制nginx.conf,修改include /etc/nginx/conf.d/djangoweb.conf;

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;

    include /etc/nginx/conf.d/djangoweb.conf;    # 修改这里
}

static/:项目的静态文件目录(注意Nginx和djangoweb-settings.py中的配置)

Dockerfile

FROM smallspider/nginx:latest
ADD ./djangoweb.conf /etc/nginx/conf.d/
ADD ./nginx.conf /etc/nginx/
RUN mkdir -p /home/zheng/djangotest/static/
COPY ./static/ /home/zheng/djangotest/static
WORKDIR /etc/nginx
RUN ["/bin/bash", "-c", "/usr/sbin/./nginx"]
-- 通过Dockerfile创建镜像
docker build -f Dockerfile -t smallspider/django-nginx:latest

-- 将创建好的镜像文件发送到DockerHub
docker push smallspider/django-nginx:latest

本地测试

-- 创建web的容器
docker run -dit --name web -p 8000:8000 smallspider/django-web:latest

-- 创建nginx的容器
docker run -dit --name nginx -p 8090:80 smallspider/django-nginx:latest

发布Kubenetes

  • 创建方案:
    • 通过kubectl直接创建
    • 使用yaml文件创建
    • 使用Kuboard创建

1. 获取镜像

Docker Hub

docker pull smallspider/django-web:latest
docker pull smallspider/django-nginx:latest

save & load

-- 再制作镜像的节点上,将镜像保存为tar包
docker save smallspider/django-web:latest > django-web.tar.gz

-- 将镜像文件发送到每个worker节点
scp django-web.tar.gz zheng@172.16.23.61:/homg/zheng/dockerfiles

-- 在Kubernetes的worker节点上加载保存好的镜像文件
docker load -i django-web.tar.gz

2. 创建deployment

-- django
kubectl create deployment django-web --image=smallspider/django-web:zheng

-- nginx
kubectl create deployment django-nginx --image=smallspider/django-nginx:zheng

3. 指定端口号

-- django
kubectl expose deployment django-web --port=8000 --type=NodePort

-- nginx
kubectl expose deployment django-nginx --port=80 --type=NodePort

校验

-- 查看控制器
kubectl get deployment
-- 删除控制器
kubectl delete deployment dep_name

-- 查看容器组
kubectl get pods

-- 查看端口映射
kubectl get service
kubectl get svc
-- 删除指定的端口映射
kubectl delete service svc_name

访问任意节点上的指定端口:172.16.23.62:32001


  • 附加:
    • 还要添加SQL的支持
    • Nginx做反向代理之后,静态文件的访问问题
    • 使用yaml文件创建deployment和service
0

评论区