K8s Airflow HA 測試環境 - 主機清單
更新日期: 2026-01-30
📋 目錄
- 測試環境概覽
- 測試主機清單
- 服務與埠號
- 連線方式
- 常用命令
- 故障排查
📊 測試環境概覽
| 項目 |
詳情 |
| 部署位置 |
單一實體 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 個 Master + 1 個 Worker 驗證功能
- 逐步擴展: 驗證通過後再添加更多節點
- 資源監控: 持續監控 CPU、記憶體、磁碟使用
- 日誌收集: 定期檢查日誌,及時發現問題
常見坑點
- ❌ 忘記關閉 swap → K8s 無法啟動
- ❌ 主機名衝突 → 節點加入失敗
- ❌ 網路配置錯誤 → Pod 無法通訊
- ❌ 磁碟空間不足 → 容器無法啟動
- ❌ 記憶體不足 → Pod Eviction
後續優化
📚 相關文檔