การ Deploy Flask API ด้วย 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-api2. สร้างไฟล์ app.py สำหรับ Flask API
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
Flask==3.1.0ขั้นตอนที่ 2 สร้าง Docker Image สำหรับ Flask API
1. สร้างไฟล์ 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 build -t flask-api .3. ทดสอบการทำงานของ 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
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)
GCR คือ Google Container Registry ที่ใช้เก็บ Docker image บน Google Cloud Platform แบบ Private Registry
docker tag flask-api:latest <username>/flask-api:latest
docker push <username>/flask-api:latest2. ใช้ kubectl เพื่อ deploy แอปพลิเคชันไปยัง Kubernetes cluster
kubectl apply -f flask-api-deployment.yaml3. ตรวจสอบการทำงานของ Deployment
kubectl get deployments
ถ้าคุณเห็น replicas ที่ต้องการและ replicas ที่กำลังทำงาน แสดงว่า Deployment ทำงานถูกต้อง (อย่างน้อยต้องมี Ready 1 จาก 3) แต่ควรมี Ready 3 จาก 3 ถ้าไม่มีปัญหาใด ๆ
4. ตรวจสอบ Pod
kubectl get pods
ถ้า Pod ทั้งหมดมีสถานะ
Runningแสดงว่า Pod ทำงานถูกต้อง
5. ตรวจสอบ Service
kubectl get services
ถ้าใช้ LoadBalancer service ต้องใช้
EXTERNAL-IPเพื่อเข้าถึง Flask API ในที่นี้คือlocalhost
ขั้นตอนที่ 5 ทดสอบการทำงานของ Flask API บน Kubernetes
- หากคุณใช้ LoadBalancer service เปิด browser และไปที่ IP ที่ได้จาก kubectl get services และ port 80
- คุณควรเห็นข้อความ “Hello, Kubernetes!”

ขั้นตอนที่ 6 การอัปเดต
1. หากต้องการอัปเดตแอปพลิเคชัน เพียงแค่สร้าง Docker image ใหม่และอัปโหลดไปยัง Docker registry
docker build -t flask-api:latest .
docker tag flask-api:latest <username>/flask-api:latest
docker push <username>/flask-api:latest2. ทำการ update deployment บน Kubernetes
kubectl set image deployment/flask-api flask-api=<username>/flask-api:latest3. ตรวจสอบการอัปเดต
kubectl get podsสรุป
การ deploy Flask API ด้วย Kubernetes เป็นวิธีที่ดีในการจัดการแอปพลิเคชันที่สามารถ scale ได้ ถ้าต้องการความสะดวกในการจัดการ Kubernetes cluster การใช้ Rancher จะทำให้คุณสามารถ deploy ได้เร็วขึ้นและง่ายมากขึ้น Rancher มี UI ที่ใช้งานง่ายและช่วยให้คุณสามารถจัดการ Kubernetes cluster ได้ง่ายขึ้น
ถ้ากำลังมองหาวิธีการ deploy Flask API ที่สะดวกและรวดเร็ว การใช้ Rancher ร่วมกับ Kubernetes น่าจะเป็นทางเลือกที่ดีครับผมมม ลองดูกันนะครับผมมม
Related Posts
- ถ้าคุณอยากใช้ Python สร้างเว็บแอปพลิเคชันสักตัว แต่ยังไม่แน่ใจว่าจะเลือกใช้ Flask หรือ Django ดี ลองมาดูข้อแตกต่างระหว่างสองตัวนี้กันดีกว่า!- Published On
 
- วิธีทำ Auth API ด้วย Express JWT และ MySQL- Published On
 
- สร้าง Dashboard ด้วย Grafana และ InfluxDB ด้วย Docker- Published On
 
