การ Deploy Flask API ด้วย Kubernetes


Deploying Flask API with Kubernetes

Kubernetes เป็นเครื่องมือสำหรับการจัดการแอปพลิเคชันที่ใช้ container อย่าง Docker ซึ่งช่วยให้เราสามารถ deploy และ scale แอปพลิเคชันได้ง่าย ในบทความนี้เราจะมา deploy Flask API ด้วย Kubernetes โดยจะแสดงขั้นตอนตั้งแต่การเตรียมแอปพลิเคชันไปจนถึงการ deploy ลงใน Kubernetes cluster

ขั้นตอนที่ 1 เตรียม Flask API

เริ่มต้นด้วยการสร้าง Flask API ง่าย ๆ สำหรับการทดสอบ

1. สร้างโฟลเดอร์ใหม่สำหรับโปรเจค Flask

สร้างโฟลเดอร์
mkdir flask-api
cd flask-api

2. สร้างไฟล์ app.py สำหรับ Flask API

app.py
from flask import Flask
 
app = Flask(__name__)
 
@app.route('/')
def hello_world():
    return 'Hello, Kubernetes!'
 
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

3. สร้างไฟล์ requirements.txt

requirements.txt
Flask==3.1.0

ขั้นตอนที่ 2 สร้าง Docker Image สำหรับ Flask API

1. สร้างไฟล์ Dockerfile ในโฟลเดอร์โปรเจค

Dockerfile
# ใช้ base image จาก Python
FROM python:3.9-slim
 
# กำหนด directory ภายใน container
WORKDIR /app
 
# คัดลอกไฟล์ requirements.txt และติดตั้ง dependencies
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
 
# คัดลอกโค้ดไปยัง /app/ ใน container
COPY . /app/
 
# เปิด port ที่จะใช้งาน
EXPOSE 5000
 
# รัน Flask API
CMD ["python", "app.py"]

2. สร้าง Docker image

สร้าง Docker image
docker build -t flask-api .

3. ทดสอบการทำงานของ Flask API ใน Docker

ทดสอบ Flask API ใน Docker
docker run -p 5000:5000 flask-api

เปิด browser และไปที่ http://localhost:5000 จะเห็นข้อความ “Hello, Kubernetes!”

ขั้นตอนที่ 3 เตรียม Kubernetes

สร้างไฟล์สำหรับการ deploy แอปพลิเคชันใน Kubernetes

1. สร้างไฟล์ flask-api-deployment.yaml สำหรับ Deployment และ Service

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: flask-api
spec:
  replicas: 3  # จำนวน replicas หรือ pod ที่ต้องการ
  selector:
    matchLabels:
      app: flask-api
  template:
    metadata:
      labels:
        app: flask-api
    spec:
      containers:
      - name: flask-api
        image: <username>/flask-api:latest  # Docker image ที่เราสร้างขึ้น
        ports:
        - containerPort: 5000
 
---
apiVersion: v1
kind: Service
metadata:
  name: flask-api-service
spec:
  selector:
    app: flask-api
  ports:
    - protocol: TCP
      port: 80
      targetPort: 5000 # Port ของ container
  type: LoadBalancer
  • Deployment กำหนดจำนวน replicas ของ pod (ที่นี่ตั้งไว้ 3 replicas) และ image ที่จะใช้ในการ deploy
  • Service กำหนด service ที่เชื่อมต่อกับ pod ซึ่งจะเปิด port 80 และเชื่อมต่อกับ port 5000 ของ container

ขั้นตอนที่ 4 Deploy Flask API ไปยัง Kubernetes

1. อัปโหลด Docker image ไปยัง Docker registry (เช่น Docker Hub หรือ GCR)

Note

GCR คือ Google Container Registry ที่ใช้เก็บ Docker image บน Google Cloud Platform แบบ Private Registry

อัปโหลด Docker image
docker tag flask-api:latest <username>/flask-api:latest
docker push <username>/flask-api:latest

2. ใช้ kubectl เพื่อ deploy แอปพลิเคชันไปยัง Kubernetes cluster

Deploy แอปพลิเคชัน
kubectl apply -f flask-api-deployment.yaml

3. ตรวจสอบการทำงานของ Deployment

ตรวจสอบ Deployment
kubectl get deployments

get-deployments

ถ้าคุณเห็น replicas ที่ต้องการและ replicas ที่กำลังทำงาน แสดงว่า Deployment ทำงานถูกต้อง (อย่างน้อยต้องมี Ready 1 จาก 3) แต่ควรมี Ready 3 จาก 3 ถ้าไม่มีปัญหาใด ๆ

4. ตรวจสอบ Pod

ตรวจสอบ Pod
kubectl get pods

get-pods

ถ้า Pod ทั้งหมดมีสถานะ Running แสดงว่า Pod ทำงานถูกต้อง

5. ตรวจสอบ Service

ตรวจสอบ Service
kubectl get services

get-services

ถ้าใช้ LoadBalancer service ต้องใช้ EXTERNAL-IP เพื่อเข้าถึง Flask API ในที่นี้คือ localhost

ขั้นตอนที่ 5 ทดสอบการทำงานของ Flask API บน Kubernetes

  • หากคุณใช้ LoadBalancer service เปิด browser และไปที่ IP ที่ได้จาก kubectl get services และ port 80
  • คุณควรเห็นข้อความ “Hello, Kubernetes!”

hello-kubernetes

ขั้นตอนที่ 6 การอัปเดต

1. หากต้องการอัปเดตแอปพลิเคชัน เพียงแค่สร้าง Docker image ใหม่และอัปโหลดไปยัง Docker registry

อัปโหลด Docker image
docker build -t flask-api:latest .
docker tag flask-api:latest <username>/flask-api:latest
docker push <username>/flask-api:latest

2. ทำการ update deployment บน Kubernetes

อัปเดต Deployment
kubectl set image deployment/flask-api flask-api=<username>/flask-api:latest

3. ตรวจสอบการอัปเดต

ตรวจสอบ Deployment
kubectl get pods

สรุป

การ deploy Flask API ด้วย Kubernetes เป็นวิธีที่ดีในการจัดการแอปพลิเคชันที่สามารถ scale ได้ ถ้าต้องการความสะดวกในการจัดการ Kubernetes cluster การใช้ Rancher จะทำให้คุณสามารถ deploy ได้เร็วขึ้นและง่ายมากขึ้น Rancher มี UI ที่ใช้งานง่ายและช่วยให้คุณสามารถจัดการ Kubernetes cluster ได้ง่ายขึ้น

ถ้ากำลังมองหาวิธีการ deploy Flask API ที่สะดวกและรวดเร็ว การใช้ Rancher ร่วมกับ Kubernetes น่าจะเป็นทางเลือกที่ดีครับผมมม ลองดูกันนะครับผมมม

Buy Me A Coffee