iT邦幫忙

2021 iThome 鐵人賽

DAY 11
0
自我挑戰組

實驗室助理的技術文章自我整理系列 第 11

K8s - Kubernetes Django 部署筆記

  • 分享至 

  • xImage
  •  

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

上一篇
k8s - 洗掉 kubernetes 環境重新來過
下一篇
onnx - 用 netron 查看 onnx 模型版本參考筆記
系列文
實驗室助理的技術文章自我整理30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言