在這篇文章中,我不會完整介紹 K8S 的所有功能,而是聚焦在它如何 接收請求、處理請求,以及 管理應用程式。
在 Kubernetes 中,請求會透過 Service 進入叢集,並由 DNS 系統轉換成對應的 IP 與 Port。
這樣的設計讓我們不用直接記 IP,而是可以用服務名稱(如 my-app-service)呼叫。
例如:
請求送到 http://my-app-service → 由 K8S 的 kube-dns/CoreDNS 轉換成 Pod 的 IP → 轉發給應用程式處理。
以 PHP 應用程式為例:請求會被導向到 php-fpm 容器中,最終由 PHP 程式處理。
K8S 採用 YAML 檔 來描述應用程式的狀態,例如要啟動多少 Pod、要用哪個容器 Image、如何對外開放服務等。
由於 YAML 是純文字檔,我們可以:
在公司自建的伺服器使用
也能直接在公有雲(如 GCP、AWS、Azure)上部署
這樣的描述方式讓 部署自動化、可移植性高,而且方便透過 Git 版本控制進行基礎設施即程式碼。
K8S 的 Service 內建 Load Balancing,能自動將流量分配到多個 Pod,達到負載平衡。
此外,K8S 也支援 自動水平擴展(Horizontal Pod Autoscaler, HPA):
當流量上升時,自動啟動更多 Pod 分攤請求
當流量下降時,自動縮減 Pod 數量,減少資源浪費
這讓系統能更有效率地運用資源,特別是當專案多、服務多時,能明顯降低資源消耗。
K8S 具備 自我修復機制(Self-healing)。
它會定期透過 探針(Probes:Liveness Probe、Readiness Probe) 檢查 Pod 是否存活:
如果 Pod 沒有回應,K8S 會自動刪除並重新建立新的 Pod
即使是人工刪除 Pod,K8S 也會依照 Deployment/ReplicaSet 的設定自動補足 Pod 數量
因此,應用程式能夠長時間維持在「期望狀態」。
K8S 就像是容器世界的 作業系統。
除了讓應用程式穩定運行之外,我們也可以用它來 排程工作。
例如:可以透過 CronJob 資源 定期執行 Laravel 的排程指令:
apiVersion: batch/v1
kind: CronJob
metadata:
name: laravel-scheduler
spec:
schedule: "*/5 * * * *" # 每 5 分鐘執行一次
jobTemplate:
spec:
template:
spec:
containers:
- name: artisan-schedule
image: my-laravel-app:latest
command: ["php", "artisan", "schedule:run"]
restartPolicy: OnFailure
這樣就能完全自動化地管理定期任務。
K8S 透過 Service、DNS、探針與自動化機制,實現了:
自動分配請求與流量
自動部署與跨平台管理
自我修復與資源最佳化
如果想更深入了解,建議參考 Kubernetes 官方文件,能學到更多細節。