K8s - Kubernetes Django 部署笔记

K8s - Kubernetes Django 部署笔记

参考资料

说明

这篇笔记应该算是在参加 Kubernetes 集体培训教学活动时期,写的最完整的笔记了XD,特此撰写本篇文章作为纪录以方便後续复查,虽然後面没有机会再用到,但也算是个不错的经验。

Docker Toolbox 安装

首先要下载 Docker,因为我的作业系统是 window 10 家用版,不能直接用 Docker Desktop,所以要下载 Docker Toolbox ,可以参考这篇:Windows 7 安装Docker Toolbox - 菜鸟工程师肉猪

注意事项:要记得把 VirtualBox 重新安装过,Docker Toolbox内含的 VirtualBox 是旧版的,执行的时候会有问题。

安装完成应该就可以看到下面这个画面:

建立 Docker Image

详细内容可以参考这篇:

Django-Docker容器化部署:Django-Docker本地部署

Dockerfile

在建立好 Django 的专案之後,就可以开始写 Dockerfile ,在Django专案的根目录新增 Dockerfile 档案,并填入:

# 从仓库拉取 带有 python 3.7 的 Linux 环境
FROM python:3.7

# 设置 python 环境变量
ENV PYTHONUNBUFFERED 1

# 创建 code 文件夹并将其设置为工作目录
RUN mkdir /code
WORKDIR /code
# 更新 pip
RUN pip install pip -U
# 将 requirements.txt 复制到容器的 code 目录
ADD requirements.txt /code/
# 安装库
RUN pip install -r requirements.txt
# 将当前目录复制到容器的 code 目录
ADD . /code/

CMD [ "python3", "manage.py", "runserver", "0.0.0.0:8000" ]

然後目前专案用到的套件只有 Django,所以在专案根目录新增 requirements.txt 并写入Django的版本:

Django==3.1.1
  • 可以用指令:django-admin version 取得Django 版本

所以目前的文件结构如下:

django_app
  - Dockerfile
  - requirements.txt
  - manage.py
  - django_app
  - db.sqlite3

在专案根目录下指令:(可以参考这篇:Docker 基础教学与介绍 101)
docker build . -t docker-demo-app
去建立 Docker Image 并为这个 Image 加上 tag docker-demo-app。

然後我们可以再透过指令:docker images
列出我们全部的 Docker Image 如下:

REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
docker-demo-app                latest              1733ea45fffc        3 seconds ago       916MB

现在我们就打包好了我们的第一个 Docker Image 罗!

把 Docker Image Push 到 Docker Hub

详细内容可以参考这篇:Day6:把 Docker Image Push 到 Docker Hub

要把 Docker Image Push 到 Docker Hub 上,需要把 Docker Image 加上 tag,指令如下:
docker tag docker-demo-app eternalesser/docker-demo-app
使用的Docker tag格式如下:
docker tag ${Image Name} DockerHub帐号/Image Name
执行结果的画面如下:

输入 docker login 指令登入到 Docker Hub,画面如下:

使用 docker push 指令把 Docker Image Push 到 Docker Hub 里,指令如下

docker push eternalesser/docker-demo-app

成功之後的画面如下:

在 Docker Hub 网站里,登入帐号进去可以看到 Repositories 已经有 eternalesser/docker-demo-app 的 Docker Image 如下图:

kubernetes 安装

详细内容可以参考这篇:Day 11 Kubernetes 闪电战-kubernetes 安装与基础操作篇
指令照贴到如下位置就可以了:

设定 Pod

详细内容可以参考这篇:Kubernetes 基础教学(二)

kubernetes-demo.yaml

apiVersion: v1
kind: Pod
metadata:
  name: django-demo-pod
  labels:
    app: demoApp
spec:
  containers:
  - image: eternalesser/docker-demo-app
    name: django-container
    ports:
      - containerPort: 8000

透过 kubectl 建立 Pod,指令如下:

kubectl apply -f kubernetes-demo.yaml

查看运行中的 Pod ,指令如下:

kubectl get pod -o wide

画面如下:

设定 NodePort

详细内容可以参考这篇:Kubernetes 基础教学(二)

kubernetes-nodeport-demo.yaml

apiVersion: v1
kind: Service
metadata:
  name: django-demo-nodeport-service
spec:
  type: NodePort
  selector:
    app: demoApp
  ports:
  - name: http
    protocol: TCP
    port: 8000

透过 kubectl 建立 Service,指令如下:

kubectl apply -f kubernetes-nodeport-demo.yaml

查看运行中的 Service ,指令如下:

kubectl get service -o wide

画面如下:

测试运行中的 Service

用浏览器测试运行中的 Service,网址如下:

http://10.0.0.128:31715/

网址格式参考如下:

http://"机房主机的网址":"用指令查到的port号码"/

画面如下:

查看 Pod 内部的 Container 讯息

如果想查看 Pod 内部的 Container正在执行中的 Django Server 的状态,指令如下:

kubectl logs -f django-demo-pod

指令说明:
-f 参数是持续输出 logs

指令格式参考如下:

kubectl logs -f "Pod 名称"

画面如下:

Enter Pod:(进Pod里面)

指令如下:

kubectl exec --stdin --tty nginx-pod -- /bin/bash

<<:  电子书阅读器上的浏览器 [Day12] 桌面模式

>>:  Day 7:How do you turn this on? KMM是如何做到的?

day 9 - 小范围开发 & go test

专案的档案结构规划好之後, 就可以依照每支档案负责的工作填好对应的内容再组装起来。如果在组装之前能确...

[day20]Vue实作-登入功能实作串接後端API(下)

为了处理bootstrapVue的问题,也是花了一点时间处理,不过好在,慢慢地熟悉Vue和boots...

Day 10: 面试中成长

My TIP Re5ume 英文履历 1 通吃国内外市场 2 Content Education E...

Day 19 网页分析 - Web Application Analysis (Wapiti)

工具介绍 今天要介绍的工具叫做挖鼻涕Wapiti,是用来扫描网页的安全性,以黑盒的方式,也就是在不了...

Day 28 | 很像 Vue 的 AlpineJS(三): x-model

昨天还少讲了一个最最最常用到的 x-model。如同他的样子,跟 v-model、wire:mode...