DEV Community

Cover image for การ Deploy Flask API ด้วย Kubernetes
Pargorn Ruasijan
Pargorn Ruasijan

Posted on • Originally published at pargorn.com

การ 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-api
Enter fullscreen mode Exit fullscreen mode

2. สร้างไฟล์ 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)
Enter fullscreen mode Exit fullscreen mode

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

Flask==3.1.0
Enter fullscreen mode Exit fullscreen mode

ขั้นตอนที่ 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"]
Enter fullscreen mode Exit fullscreen mode

2. สร้าง Docker image

docker build -t flask-api .
Enter fullscreen mode Exit fullscreen mode

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

docker run -p 5000:5000 flask-api
Enter fullscreen mode Exit fullscreen mode

เปิด 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
Enter fullscreen mode Exit fullscreen mode
  • 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:latest
Enter fullscreen mode Exit fullscreen mode

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

kubectl apply -f flask-api-deployment.yaml
Enter fullscreen mode Exit fullscreen mode

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

kubectl get deployments
Enter fullscreen mode Exit fullscreen mode

Image description

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

4. ตรวจสอบ Pod

kubectl get pods
Enter fullscreen mode Exit fullscreen mode

Image description

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

5. ตรวจสอบ Service

kubectl get services
Enter fullscreen mode Exit fullscreen mode

Image description

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

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

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

Image description

ขั้นตอนที่ 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:latest
Enter fullscreen mode Exit fullscreen mode

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

kubectl set image deployment/flask-api flask-api=<username>/flask-api:latest
Enter fullscreen mode Exit fullscreen mode

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

kubectl get pods
Enter fullscreen mode Exit fullscreen mode

สรุป

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

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

Top comments (0)