25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 

9.4 KiB

K8s Airflow HA 測試環境 - 主機清單

更新日期: 2026-01-30


📋 目錄

  1. 測試環境概覽
  2. 測試主機清單
  3. 服務與埠號
  4. 連線方式
  5. 常用命令
  6. 故障排查

📊 測試環境概覽

項目 詳情
部署位置 單一實體 Server
虛擬機數量 7 台 (3 Master + 4 Worker)
OS Ubuntu 24.04 LTS
Container Runtime containerd
K8s 版本 v1.30.14
Airflow 版本 3.0.2
部署方式 Helm + kubeadm
Executor CeleryExecutor

🖥️ 測試主機清單

虛擬 IP (VIP) - Keepalived

項目 詳情
VIP 地址 10.10.0.83
實現方式 Keepalived + HAProxy
狀態 已部署
優先級分配 f01(100) > f02(90) > f03(80)

VIP 服務轉發配置 (HAProxy):

服務 VIP 埠 後端目標 用途
Kubernetes API 6444 10.10.0.85/87/89:6443 K8s Control Plane 統一入口
PostgreSQL (主寫) 5000 10.10.0.85/87/89:5432 資料庫讀寫連線 (主節點優先)
PostgreSQL (備讀) 5001 10.10.0.85/87/89:5432 資料庫唯讀連線 (副本負載均衡)
Airflow WebUI 8080 10.10.0.85/87/89:30080 Airflow 網頁介面
RabbitMQ 管理 15672 10.10.0.85/87/89:31672 RabbitMQ 管理介面
Doris MySQL 9031 10.10.0.85/87/89:9030 Doris 前端節點存取
監控統計 8404 HAProxy HAProxy 統計頁面

Master 節點 (Control Plane)

Host IP 角色 CPU 記憶體 磁碟 Keepalived
doris-f01 10.10.0.85 Master #1 (初始) 8 核 15GB 118GB Master (100)
doris-f02 10.10.0.87 Master #2 (副本) 8 核 15GB 118GB Backup (90)
doris-f03 10.10.0.89 Master #3 (副本) 8 核 15GB 118GB Backup (80)

Worker 節點

Host IP 角色 CPU 記憶體 磁碟
doris-b01 10.10.0.93 Worker #1 4 核 15GB 118GB
doris-b02 10.10.0.94 Worker #2 4 核 15GB 118GB
doris-b03 10.10.0.95 Worker #3 4 核 15GB 118GB
doris-b04 10.10.0.96 Worker #4 4 核 15GB 118GB

🔌 服務與埠號

Kubernetes 服務埠

服務 節點 用途
API Server 6443 Master kubectl 連線、API 呼叫
Kubelet 10250 所有節點 Node 狀態、Pod 管理
Etcd 2379, 2380 Master K8s 內部狀態儲存
Scheduler 10259 Master Pod 排程(內部用)
Controller Manager 10257 Master 控制器(內部用)

Airflow 應用埠

服務 節點 用途
Webserver 30080 NodePort Airflow UI 存取
Flower (可選) 30555 NodePort Celery 監控 UI

PostgreSQL

服務 用途
PostgreSQL 5432 資料庫連線

RabbitMQ (若使用 CeleryExecutor)

服務 用途
AMQP 5672 訊息佇列
Management UI 15672 管理介面

🔐 連線方式

VIP 連線 (推薦)

# ========== Kubernetes API Server (埠 6444) ==========
# 使用 VIP 連線到 Kubernetes API Server
kubectl --server=https://10.10.0.83:6444 get nodes --insecure-skip-tls-verify

# 驗證 VIP 連通性
curl -k https://10.10.0.83:6444/version

# ========== PostgreSQL (主寫 - 埠 5000) ==========
# 連線到主資料庫進行讀寫
psql -h 10.10.0.83 -p 5000 -U postgres -d airflow_db

# ========== PostgreSQL (備讀 - 埠 5001) ==========
# 連線到副本資料庫進行唯讀查詢(負載均衡)
psql -h 10.10.0.83 -p 5001 -U postgres -d airflow_db

# ========== Airflow WebUI (埠 8080) ==========
# 在瀏覽器中訪問 Airflow
# http://10.10.0.83:8080

# ========== RabbitMQ 管理介面 (埠 15672) ==========
# 訪問 RabbitMQ 管理控制臺
# http://10.10.0.83:15672
# 帳號/密碼: airflow/airflow

# ========== Doris MySQL (埠 9031) ==========
# 連線到 Doris 前端節點
mysql -h 10.10.0.83 -P 9031 -u root -p

# ========== HAProxy 監控統計 (埠 8404) ==========
# 查看 HAProxy 統計頁面
 在瀏覽器中訪問: http://10.10.0.83:8404/stats

Airflow WebUI 存取

使用 VIP (推薦) - HAProxy 埠 8080

# 在瀏覽器中訪問 Airflow (透過 VIP)
http://10.10.0.83:8080

PostgreSQL 連線

# ========== 主寫資料庫 (埠 5000) ==========
# 連線到主資料庫進行讀寫
psql -h 10.10.0.83 -p 5000 -U postgres -d airflow_db

# ========== 備讀資料庫 (埠 5001) ==========
# 連線到副本資料庫進行唯讀查詢 (負載均衡)
psql -h 10.10.0.83 -p 5001 -U postgres -d airflow_db

🛠️ 常用命令

Kubernetes 基本命令

# 查看所有節點
kubectl get nodes -o wide

# 查看所有 Pod
kubectl get pods -A

# 查看 Airflow namespace 的 Pod
kubectl get pods -n airflow

# 查看 Pod 詳細資訊
kubectl describe pod <pod-name> -n airflow

# 查看 Pod 日誌
kubectl logs <pod-name> -n airflow

# 進入 Pod
kubectl exec -it <pod-name> -n airflow -- bash

# 查看所有 Service
kubectl get svc -A

# 查看節點資源使用
kubectl top nodes
kubectl top pods -n airflow

Airflow 特定命令

# 進入 Airflow scheduler
kubectl exec -it <scheduler-pod> -n airflow -- airflow scheduler list-dag

# 進入 Airflow webserver Pod
kubectl exec -it <webserver-pod> -n airflow -- bash

# 查看 Airflow 日誌
kubectl logs -f deployment/airflow-scheduler -n airflow
kubectl logs -f deployment/airflow-webserver -n airflow

# 查看 Airflow DAG
kubectl exec -it <scheduler-pod> -n airflow -- airflow dags list

診斷命令

# 查看 K8s 事件
kubectl get events -A

# 查看節點詳細狀態
kubectl describe nodes

# 檢查 DNS
kubectl run -it --rm debug --image=busybox:1.28 --restart=Never -- nslookup kubernetes.default

# 測試連通性
kubectl run -it --rm netshoot --image=nicolaka/netshoot --restart=Never -- bash

🔧 故障排查

節點無法加入集群

症狀: kubeadm join 執行失敗

# 檢查 kubelet 狀態
systemctl status kubelet
journalctl -xe -u kubelet

# 重置 kubeadm (若需要重新開始)
sudo kubeadm reset
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo ipvsadm --clear

Pod 無法啟動

# 查看 Pod 狀態
kubectl describe pod <pod-name> -n airflow

# 查看 Pod 日誌
kubectl logs <pod-name> -n airflow

# 常見原因:
# - 記憶體不足
# - 磁碟空間不足
# - 映像拉取失敗
# - 資源請求超過節點配置

網路連通性問題

# 測試 Pod 間連通性
kubectl run -it --rm debug --image=busybox:1.28 --restart=Never -- ping <pod-ip>

# 檢查 Service 連通性
kubectl run -it --rm debug --image=busybox:1.28 --restart=Never -- nc -zv airflow-webserver.airflow 8080

# 查看 CNI 外掛狀態
kubectl get pods -n calico-system

磁碟空間不足

# 檢查磁碟使用
df -h
du -sh /var/lib/docker/*
du -sh /var/lib/containerd/*

# 清理未使用的 Pod 和容器
kubectl delete pod --field-selector status.phase=Failed -A
kubectl delete pod --field-selector status.phase=Succeeded -A

# 清理本地容器日誌 (Host Machine)
sudo journalctl --vacuum=500M

# 清理舊的 containerd 數據
sudo ctr images prune

記憶體不足

# 檢查記憶體使用
free -h
kubectl top nodes
kubectl top pods -A --sort-by=memory

# 檢查 Pod 限制配置
kubectl get pod <pod-name> -o yaml | grep -A 5 resources

# 若 Master 記憶體不足,減少不必要的 Pod
# 關閉監控、Addon 等非必要服務

📝 建議與注意事項

初期部署建議

  1. 從最小配置開始: 先用 1 個 Master + 1 個 Worker 驗證功能
  2. 逐步擴展: 驗證通過後再添加更多節點
  3. 資源監控: 持續監控 CPU、記憶體、磁碟使用
  4. 日誌收集: 定期檢查日誌,及時發現問題

常見坑點

  • 忘記關閉 swap → K8s 無法啟動
  • 主機名衝突 → 節點加入失敗
  • 網路配置錯誤 → Pod 無法通訊
  • 磁碟空間不足 → 容器無法啟動
  • 記憶體不足 → Pod Eviction

後續優化


📚 相關文檔