Deploy Airflow บน Kubernetes ด้วย Helm

Helm เป็นเครื่องมือตัวหนึ่งที่ช่วยให้เราไม่ต้องมานั่งเขียนไฟล์ Kubernetes manifest เองหลายๆ รอบ ยิ่งถ้ามีหลายๆ service เราต้องมาเขียนไฟล์ซ้ำๆ กันหลายไฟล์ เวลาแก้ก็ต้องแก้หลายที่ ก็จะเหนื่อยๆ หน่อย

การที่เราจะ deploy ตัว Airflow บน Kubernetes ก็เช่นกัน เราต้องเขียนหลายไฟล์เลยทีเดียว เพราะมีหลาย service เช่น Webserver, Scheduler, Worker, ConfigMap, Secret และอื่นๆอีก ถ้าเราสามารถใช้ Helm ได้ ชีวิตจะสบายขึ้นเยอะ

Airflow เค้ามี Official Helm chart มาให้เราใช้ เราสามารถติดตั้งตาม document ด้านล่างนี้ได้เลย

https://airflow.apache.org/docs/helm-chart/stable/index.html

ถ้าอยากลองเล่นบนเครื่องตัวเองก็ลองทำตามนี้ขั้นตอนด้านล่างนี้ดูนะ

  1. ลง Docker Desktop ก่อน ตรงนี้ถ้าใครที่ใช้ Docker Desktop แล้วมี Kube context ที่ชี้ไปที่อื่นแล้วอยากสร้าง context เฉพาะ Airflow ขึ้นมา สามารถใช้คำสั่งด้านล่างนี้สร้าง context ใหม่ได้นะครับ

    kubectl config set-context airflow --namespace default --cluster docker-desktop --user=docker-desktop
    
  2. เสร็จแล้วให้สร้าง namespace แยกไว้สำหรับ Airflow เลย จะได้จัดการง่ายๆ ไม่ปนกับ service อื่นๆ

     kubectl create namespace airflow
    
  3. เพิ่ม Helm repo เข้าไป

    helm repo add apache-airflow https://airflow.apache.org
    
  4. ติดตั้ง Helm chart ของ Airflow ไว้ที่ namespace ที่ชื่อ airflow ที่เราสร้างไว้ก่อนหน้านี้

    helm install airflow apache-airflow/airflow -n airflow
    

    หรือถ้าอยากกำหนดเวอร์ชั่นของ Helm chart ก็ใช้คำสั่งตามนี้

    helm install my-airflow apache-airflow/airflow --version 1.3.0 -n airflow
    

เสร็จเรียบร้อย! :laughing: ใช้แค่ขั้นตอนไม่กี่ขั้น เราก็ได้ Airflow บน Kubernetes แล้วเรียบร้อย

ทีนี้ก็อาจจะมีคำถามว่า อ้าวแล้วเราจะ configure ค่าต่างๆ ได้อย่างไรบ้างล่ะ? ตรงนี้เราสามารถใช้คำสั่ง helm upgrade ได้ครับ ประมาณนี้เลย

helm upgrade --install airflow apache-airflow/airflow \
  --set config.webserver.expose_config=True \
  -n airflow

แต่จริงๆ ผมแนะนำว่าเราสร้างไฟล์ values.yaml แล้วเก็บพวก parameters ต่างๆ ไว้ในนั้นดีกว่า ซึ่งเราสามารถเอาเข้า Git หรือ version control system ตัวอื่นๆ ได้ด้วย

ที่ไฟล์ values.yaml เราอาจจะเขียนประมาณนี้

config:
  webserver:
    expose_config: 'True'

เวลาที่เราใช้ helm upgrade ก็สั่งแบบนี้ได้เลย

helm upgrade -f values.yaml airflow apache-airflow/airflow -n airflow

ถ้าเราอยากเพิ่มจำนวน worker เข้าไป ไฟล์ values.yaml ก็จะเป็นแบบนี้

config:
  webserver:
    expose_config: 'True'
workers:
  replicas: 3

แล้วถ้าเราอยากรู้ว่าเราสามารถใส่ parameters อะไรได้บ้าง ก็ไปดูที่ values.yaml ของ Helm Chart for Apache Airflow :wink:

อ่ะ ถ้าเราเล่นจนพอใจแล้วก็ลบทิ้งได้ โดยใช้คำสั่ง

helm delete airflow -n airflow

ใครมีโอกาสได้ใช้แล้วชีวิตสบายขึ้นอย่างไรกันบ้าง มาเม้าท์ให้อ่านกันด้วยนะ :sunglasses: