如何在 Kubernetes 叢集上部署 Nginx?
概述
Nginx 是一款流行的開源 Web 伺服器,因其高效能、可擴充套件性和可靠性而被廣泛使用。它也常被用作負載均衡器和反向代理伺服器。另一方面,Kubernetes 是一個開源的容器編排平臺,可自動化容器化應用程式的部署、擴充套件和管理。
它提供了一個靈活的架構,可以在本地或雲端執行。對於許多需要大規模部署應用程式的組織來說,Nginx 已成為一個必不可少的元件。
先決條件
瞭解 Kubernetes 架構和概念
在 Kubernetes 叢集上部署 Nginx 之前,瞭解 Kubernetes 的整體架構和關鍵概念非常重要。Kubernetes 是一個開源的容器編排系統,可自動化容器化應用程式的部署、擴充套件和管理。
它透過抽象底層基礎設施並提供統一的 API 來管理跨多個主機的容器。一些需要理解的關鍵概念包括 Pod、服務、部署和節點。
Pod 是 Kubernetes 中最小的可部署單元,表示共享同一網路名稱空間的一個或多個容器。服務為訪問一組 Pod 提供外部 IP 地址,並可以在它們之間負載均衡流量。
熟悉 Nginx 配置檔案和命令
Nginx 是一款流行的開源 Web 伺服器,可以用作反向代理、負載均衡器或 HTTP 快取。可以透過位於 /etc/nginx/ 的配置檔案對其進行高度配置。
在 Kubernetes 叢集上部署 Nginx 之前,瞭解這些配置檔案以及啟動、停止、重新載入或除錯 Nginx 的常用命令非常重要。一些常見的配置選項包括伺服器塊(定義 Nginx 如何響應請求)、上游塊(定義後端伺服器)、日誌記錄選項(捕獲有關請求的相關資訊)、proxy_pass(將請求代理到後端伺服器)等。
常用命令包括 nginx -t 用於在使用 systemctl reload nginx 命令重新載入它們之前測試配置檔案中的語法錯誤,該命令允許您重新載入配置更改而不會中斷活動連線。
訪問 Kubernetes 叢集
在 Kubernetes 叢集上部署 Nginx 之前,您需要訪問一個叢集。您可以使用 minikube 或 microk8s 等工具建立本地開發叢集,也可以使用 Google Cloud Platform (GCP)、Amazon Web Services (AWS) 或 Microsoft Azure 等雲提供商。無論選擇哪種方式,您都需要擁有訪問和管理 Kubernetes 叢集的必要許可權和憑據。
設定環境
安裝 kubectl 並將其配置為連線到叢集
在 Kubernetes 叢集上部署 Nginx 之前,我們需要安裝 kubectl。kubectl 是一個用於管理 Kubernetes 叢集的命令列工具。
它允許您在 Kubernetes 叢集上部署、檢查和管理應用程式。要安裝 kubectl,您可以根據您的作業系統遵循 Kubernetes 官方文件中提供的說明。
安裝 kubectl 後,您需要將其配置為連線到您的 Kubernetes 叢集。這涉及提供主節點的 IP 地址或 DNS 名稱以及身份驗證憑據。
您可以使用 kubectl config 命令列工具進行配置。配置 kubectl 後,請確保它透過執行諸如 `kubectl get nodes` 之類的基本命令成功連線。
為 Nginx 部署建立名稱空間
名稱空間是物理 Kubernetes 叢集內的隔離虛擬叢集,它允許多個團隊或專案安全地共享資源,而不會相互干擾。透過為我們的 Nginx 部署建立單獨的名稱空間,我們可以保持事物的井然有序,並防止與在同一叢集中執行的其他部署發生任何衝突。
要為我們的 Nginx 部署建立新的名稱空間,請執行 `kubectl create namespace `,使用您所需的名稱空間名稱替換 ` `。建立此名稱空間後,除非另有說明,否則所有後續命令都將在此環境中執行。
為 Nginx 配置持久儲存
Nginx 需要持久儲存才能儲存配置檔案和日誌。通常,這涉及建立 PersistentVolumeClaim (PVC),它從叢集中可用的儲存類請求儲存。要建立 PVC,首先定義其 YAML 檔案,其中包含訪問模式(例如,ReadWriteOnce)、所需儲存的大小(例如,1Gi)以及要使用的儲存類等詳細資訊。
然後,使用 `kubectl apply -f ` 命令建立 PVC。PVC 將自動繫結到可用的 PersistentVolume (PV) 並將其掛載到 Nginx 部署中的所需位置。
設定環境包括安裝 kubectl、將其配置為連線到您的 Kubernetes 叢集、為您的 Nginx 部署建立名稱空間以及為 Nginx 配置持久儲存。這些步驟可以相對快速地完成,並將確保您在繼續在 Kubernetes 上部署 Nginx 之前擁有所需的一切。
在 Kubernetes 上部署 Nginx
建立部署
為了在 Kubernetes 叢集上部署 Nginx,您需要建立一個 Deployment 物件。Deployment 負責管理應用程式的狀態,確保建立和維護所需的副本數量。
要建立部署,您需要定義容器映象、埠、卷掛載等。首先,您需要建立一個描述部署物件的 YAML 配置檔案。
此 YAML 檔案應包含有關執行 Nginx 的容器映象的相關資訊,例如其名稱和版本號。此外,還可以在此檔案中指定用於透過 HTTP 或 HTTPS 訪問應用程式的埠號。
建立服務
在 Kubernetes 叢集上為 Nginx 建立 Deployment 物件後,是時候建立 Service 物件了。服務透過 IP 地址和埠號組合公開它們,從而為叢集中執行的一個或多個 Pod 提供網路訪問。在 Kubernetes 中建立服務時,我們提供與部署定義檔案中定義的標籤匹配的選擇器;從而將我們的服務與我們的部署關聯起來。
選擇器有助於確定哪些 Pod 應成為進出服務的流量的目標。公開的 IP 地址稱為 ClusterIP,它是一個僅可從叢集網路本身內部訪問的內部 IP 地址,除非透過稍後在 Ingress Controller 級別配置的節點埠或負載均衡器進行訪問。
配置 Ingress 控制器
Ingress 控制器是 Kubernetes 資源,它允許外部訪問叢集中的服務。它充當反向代理,根據 Ingress 資源物件中定義的規則將傳入流量路由到叢集中的相應服務。
提供程式或叢集。安裝完成後,您將定義一個 Ingress 資源物件,其中包含將外部流量路由到先前步驟中定義的服務的規則。
結論
乍一看,在 Kubernetes 叢集上部署 Nginx 似乎令人生畏,但遵循本指南應該讓即使是這些系統的新手也能對他們入門和瀏覽該過程的能力充滿信心。透過使用本文中概述的技術,您可以快速部署、監控和擴充套件 Kubernetes 上的 Nginx 部署,並且停機時間最少。
使用 Prometheus 監控還可以確保在任何問題變得嚴重之前識別並解決這些問題。有了這些技術,您可以自信地建立健壯且高度可擴充套件的基礎設施,以滿足您的組織或專案的需要。