# Kubernetes Helm 基礎 ## Helm 是什麼? Helm 是 Kubernetes 的包管理工具,能夠幫助我們輕鬆部署和管理複雜的應用。 --- ## 使用 Helm 部署範例 安裝 Nginx: ```bash helm repo add bitnami https://charts.bitnami.com/bitnami helm install my-nginx bitnami/nginx ``` --- ## 查看 Helm 部署 查看已安裝的 Helm 釋放: ```bash helm list ``` --- ## 卸載 Helm 部署 刪除安裝的 Helm 釋放: ```bash helm uninstall my-nginx ``` --- # Kubernetes Ingress 基礎 ## Ingress 的作用 Ingress 是 Kubernetes 中的一種資源對象,用於管理集群內部服務的 HTTP 和 HTTPS 路由,提供了以下功能: 1. URL 路徑路由。 2. 域名支持。 3. SSL/TLS 終止。 --- ## 創建 Ingress 的基本配置 以下是一個簡單的 Ingress 配置範例: ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress spec: rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: example-service port: number: 80 ``` --- ## 查看 Ingress 狀態 使用以下指令查看已創建的 Ingress: ```bash kubectl get ingress ``` --- ## 配合 Ingress Controller 為了使 Ingress 生效,需要安裝相應的 Ingress Controller,例如 NGINX 或 Traefik。 --- # Kubernetes StatefulSet 基礎 ## StatefulSet 的作用 StatefulSet 是 Kubernetes 中的一種控制器,用於管理有狀態的應用程序,主要特性包括: 1. 穩定的網絡標識(穩定的 Pod 名稱)。 2. 穩定的存儲(每個 Pod 都有自己的 Persistent Volume)。 3. 有序部署與刪除。 --- ## 使用範例 以下是一個簡單的 StatefulSet 配置範例: ```yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: serviceName: "nginx" replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 volumeClaimTemplates: - metadata: name: www spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 1Gi ``` --- ## 查看 StatefulSet 狀態 ```bash kubectl get statefulset ``` # Stateful vs Stateless 比較表 | 特性 | Stateful | Stateless | |-------------------------|-------------------------------------|------------------------------------| | **狀態管理** | 保存應用的狀態,跨請求或會話保持。 | 不保存狀態,每次請求都是獨立的。 | | **應用場景** | 資料庫、分布式緩存等需要持久化的應用。 | REST API、無狀態 Web 服務等應用。 | | **可靠性** | 需要依賴外部存儲來保障可靠性。 | 不依賴存儲,應用重啟後可正常運行。 | | **部署難度** | 更高,需要處理持久化存儲和數據一致性。 | 較低,無需額外配置存儲。 | | **Pod 分配** | 使用 StatefulSet,Pod 有固定名稱和存儲。 | 使用 Deployment,Pod 名稱不固定。 | | **水平擴展** | 較困難,因為需要考慮狀態同步問題。 | 容易,因為每個實例無需狀態同步。 | | **數據一致性** | 必須確保數據一致性(如分布式鎖)。 | 不需要,因為應用無狀態。 | | **啟動順序要求** | 通常需要按順序啟動(例如 0 -> 1 -> 2)。| 無需順序,可隨時啟動。 | | **應用依賴** | 依賴特定的存儲後端(如 PersistentVolume)。| 不依賴存儲後端。 | | **適用於 Kubernetes** | StatefulSet 控制器。 | Deployment 控制器。 | | **典型例子** | MySQL、Cassandra、ZooKeeper。 | NGINX、HTTP Server、微服務應用。 | **總結** - **Stateful** 適用於需要持久化存儲和狀態跟蹤的應用。 - **Stateless** 適用於無狀態、易於擴展的應用。