返回文章列表

Kubernetes叢集佈署

本提供多種 Kubernetes 叢集佈署方法,涵蓋 kubectl、k3s、KinD 和 kOps 等工具,從入門到進階,滿足不同環境和技術需求。文章包含詳細步驟、程式碼範例、圖表說明和相關資源,適合開發者、DevOps 工程師和技術經理參考。

容器技術 雲原生

Kubernetes 叢集佈署是現代化應用程式管理的根本。本文探討多種佈署方式,從使用 kubectl 工具的基礎安裝,到利用 k3s、KinD 和 kOps 等工具構建輕量級或生產級叢集,涵蓋不同應用場景和技術層級。透過逐步說明、程式碼範例和圖表解析,讀者可以快速掌握 Kubernetes 叢集的建立、組態和管理,並根據自身需求選擇最合適的佈署策略。無論是資源有限的開發環境,還是需要高度可擴充套件性和自動化的生產環境,本文都提供了實用的解決方案和最佳實務參考。

Kubernetes 技術:從入門到實戰

Kubernetes 是一個開放原始碼的容器協調平台,能夠自動化佈署、擴充套件和管理容器化應用程式。它為跨主機叢集的應用程式容器佈署、擴充套件和維運提供了平台支援。藉助 Kubernetes,您可以輕鬆佈署、擴充套件和管理容器化應用程式,確保它們高效、可靠地執行。

本文結構與目標讀者

本文以「配方」形式組織,讀者可以快速找到特定問題的解決方案。從基礎知識開始,逐步探討 Kubernetes 的進階主題,使其成為在職故障排除和結構化學習的絕佳參考資料。

本文適合以下讀者:

  • 需要有效管理容器化應用的開發人員和 DevOps 工程師
  • 監督 Kubernetes 實施的技術經理
  • 探索雲原生技術的學生和研究人員
  • 渴望獲得 Kubernetes 實務經驗的技術愛好者

章節總覽

  1. 入門:Kubernetes 簡介、安裝方法和核心概念
  2. 組態無狀態應用程式:佈署輕量級應用程式和高效管理資源
  3. 組態有狀態應用程式:在 Kubernetes 中管理資料函式庫和永續性工作負載
  4. 雲端供應商上的 Kubernetes:在 Amazon Web Services、Azure、Google Cloud 等平台上執行 Kubernetes 叢集
  5. Kubernetes 中的開發者體驗:使用 Kubernetes 的開發工具和最佳實踐
  6. 擴充套件性和彈性:自動擴充套件、負載平衡和高用性(HA)策略
  7. Kubernetes 中的儲存:管理儲存選項、持久性儲存區(PV)和動態組態
  8. Kubernetes 中的網路:負載平衡、服務發現、網路策略和進階網路概念
  9. Kubernetes 中的效能可觀測性:有效監控、記錄和跟蹤應用程式
  10. 控制平面管理和套件管理:管理 Kubernetes 基礎設施和使用 Helm
  11. Kubernetes 中的安全性:保護工作負載、根據角色的存取控制(RBAC)、網路策略和最佳實踐
  12. 新興和進階 Kubernetes 概念:探索服務網格、AI/ML 工作負載和 Kubernetes 擴充套件
  13. Kubernetes 最佳實踐:佈署、擴充套件和安全性的行業最佳實踐
  14. 其他 Kubernetes 資源:社群參與、CNCF 生態系統和其他學習資源

為何選擇本文?

與理論性不同,本文根據經驗豐富的 Kubernetes 專業人士的實際知識,提供快速參考和常見挑戰的逐步解決方案。每個配方都包含清晰的說明、範例命令、YAML 組態和故障排除提示,幫助讀者立即在 Kubernetes 環境中應用解決方案。

第一章:入門

1.1 安裝 kubectl 工具

問題

我們準備進入 Kubernetes 的世界,有效管理容器化應用程式,但首先需要安裝 kubectl 工具。

解決方案
  1. 檢查是否已安裝 kubectl

    kubectl version --client
    

    如果已安裝,將顯示版本資訊。

  2. 選擇安裝方法

    • MacOS(使用 Homebrew)
      brew install kubectl
      
    • Windows(使用 Chocolatey)
      choco install kubernetes-cli
      
    • Linux(使用套件管理器)
      • Debian/Ubuntu:
        sudo apt-get update && sudo apt-get install -y kubectl
        
      • Red Hat–based 系統:
        sudo yum install -y kubectl
        
  3. 驗證安裝

    kubectl version
    
  4. 組態 kubectl

    • 設定預設上下文(例如 Minikube):
      kubectl config use-context minikube
      
    • 連線到遠端叢集需要 kubeconfig 檔案。

程式碼範例與說明

以下是一個簡單的 YAML 組態檔案範例,用於佈署一個 Nginx 服務:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

#### 內容解密:

此 YAML 檔案定義了一個名為 nginx-deployment 的 Deployment 物件。它指定了:

  • replicas: 3 表示佈署 3 個副本。
  • selector.matchLabelstemplate.metadata.labels 確保 Deployment 能夠正確管理具有 app: nginx 標籤的 Pod。
  • containers 部分定義了一個名為 nginx 的容器,使用 nginx:latest 映象,並暴露容器內的 80 連線埠。

圖表說明

圖表翻譯:

此圖示展示了 Kubernetes 叢集的基本架構:

  • Kubernetes Cluster(叢集)包含多個 Nodes(節點)。
  • 每個 Node 可以執行多個 Pods。
  • Pods 中包含一個或多個 Containers(容器)。
  • Containers 中執行著實際的 Applications(應用程式)。

在資源有限的環境中建立輕量級的 Kubernetes 叢集

在開發和生產環境中,我們經常需要在資源有限的環境中佈署 Kubernetes 叢集。如何在資源有限的環境中快速建立一個精簡的 Kubernetes 叢集?

解決方案:使用 k3s 建立輕量級 Kubernetes 叢集

k3s 是一個專為資源有限的環境設計的輕量級 Kubernetes 發行版。它非常適合用於物聯網裝置、邊緣運算或需要簡單易用的 Kubernetes 叢集的場景。以下是使用 k3s 建立輕量級 Kubernetes 叢集的步驟:

步驟 1:安裝 k3s

首先,透過 SSH 連線到目標機器,然後執行以下命令下載並安裝 k3s:

curl -sfL https://get.k3s.io | sh -

這個命令會在目標機器上安裝 k3s 伺服器和 k3s 代理,建立一個單節點的 Kubernetes 叢集。

步驟 2:驗證 k3s 叢集

執行以下命令驗證 k3s 叢集是否正常運作:

k3s kubectl get nodes

這個命令會顯示 k3s 安裝所在的節點,表示我們的叢集已經活躍。

步驟 3:與 k3s 互動

現在我們的輕量級 Kubernetes 叢集已經運作,我們可以使用 kubectl 與它互動,就像與其他 Kubernetes 叢集一樣。例如,我們可以佈署應用程式、建立 Pod 和 Service,並管理叢集資源。

#### 程式碼範例與解析

以下是一個簡單的 YAML 組態檔案,用於佈署一個 Nginx 應用程式:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

內容解密:

  1. apiVersionkind 定義了 Kubernetes 資源的型別和版本。
  2. metadata 部分定義了 Deployment 的名稱。
  3. spec 部分定義了 Deployment 的規格,包括副本數量、選擇器和範本。
  4. template 部分定義了 Pod 的範本,包括標籤和容器規格。
  5. containers 部分定義了容器名稱、映像檔和連線埠。

圖表說明:Kubernetes 叢集架構圖

圖表翻譯: 此圖示展示了 Kubernetes 的基本架構,包括客戶端、API 伺服器、控制器管理器、排程器、Kubelet 和 Pod。客戶端透過 kubectl 與 API 伺服器互動,API 伺服器負責管理叢集狀態。控制器管理器和排程器負責維護叢集狀態和排程 Pod。Kubelet 負責管理節點上的 Pod,而 Pod 中執行著容器。

在 Docker 容器中執行本地 Kubernetes 叢集

在開發或測試環境中,我們需要建立一個本地的 Kubernetes 叢集,並且希望使用 Docker 容器來實作輕量級和隔離的環境。

解決方案

使用 Docker 容器執行本地 Kubernetes 叢集是開發人員的流行選擇,因為它提供了一個快速且隔離的 Kubernetes 環境。以下是建立 Kubernetes 叢集的步驟:

步驟 1:安裝 Docker

確保我們的機器上已安裝 Docker。可以從官方網站下載 Docker:Docker 下載

步驟 2:下載 Kubernetes in Docker(KinD)

KinD 是一個使用 Docker 容器「節點」執行本地 Kubernetes 叢集的工具。可以使用套件管理器或從官方發布頁面下載二進位制檔案來安裝 KinD:KinD 發布

  • 2.1 使用 Homebrew(MacOS)

brew install kind

*   **2.2 使用 Chocolatey(Windows)**
    ```choco
choco install kind
  • 2.3 手動安裝(Linux/MacOS/Windows) 下載 KinD 二進位制檔案並按照我們的作業系統的安裝說明進行操作。

步驟 3:建立 Kubernetes 叢集

執行以下命令以使用 KinD 建立本地 Kubernetes 叢集:

kind create cluster

此命令會建立一個具有預設名稱(kind)的叢集,我們可以直接使用。

步驟 4:設定 kubectl

如果 kubectl 不在我們的 PATH 中,可以建立一個符號連結。開啟終端並執行以下命令:

sudo ln -s $(which kubectl) /usr/local/bin/kubectl

步驟 5:驗證叢集

檢查叢集是否正在執行:

kubectl cluster-info

此命令應顯示有關 Kubernetes 叢集的資訊。

步驟 6:與叢集互動

現在我們的 Kubernetes 叢集已經啟動並執行,可以使用 kubectl 與其互動。例如,佈署一個範例應用程式:

kubectl create deployment hello-kind --image=k8s.gcr.io/echoserver:1.4

詳細討論

使用 KinD 在 Docker 容器中執行本地 Kubernetes 叢集為開發和測試提供了一個隔離的環境。它使我們能夠在不需要專用叢集的情況下嘗試 Kubernetes 功能。請記住,此設定適合本地開發和學習目的。

相關資源

使用 Kubeadm 建立叢集

手動建立 Kubernetes 叢集可能是一項艱巨的任務,通常容易出現錯誤和不一致性。如果沒有可靠且簡化的流程,初學者可能會發現很難啟動叢集並執行應用程式。

解決方案

  1. 安裝 Docker:確保所有機器上都安裝了 Docker。使用我們的套件管理器來安裝 Docker。

apt-get update apt-get install docker.io

2.  **停用 Swap**:停用 swap 以滿足 Kubernetes 的要求。
    ```bash
swapoff -a
  1. 安裝 Kubeadm、Kubelet 和 Kubectl

apt-get update && sudo apt-get install -y kubelet kubeadm kubectl

4.  **初始化主節點**:在指定的主節點上,使用 Kubeadm 初始化叢集。
    ```bash
kubeadm init
  1. 設定 Kubeconfig:將 kubeconfig 檔案複製到使用者的主目錄。

mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config

6.  **加入工作節點**:在每個工作節點上,執行由 kubeadm 命令提供的加入選項。
    ```bash
kubeadm join <MASTER_IP>:<MASTER_PORT> --token <TOKEN> --discovery-token-ca-cert-hash <HASH>
  1. 驗證叢集狀態:檢查狀態以確保叢集已啟動並執行。

kubectl get nodes


### 詳細討論
使用 Kubeadm 建立 Kubernetes 叢集提供了一個直接且標準化的方法。它自動化了許多複雜的任務,讓使用者能夠專注於佈署和管理應用程式,而不是處理叢集初始化的複雜性。此配方是我們 Kubernetes 之旅中的基本步驟,使我們能夠為可擴充套件和彈性的容器化應用程式建立堅實的基礎。

### 相關資源
*   [Kubeadm 官方檔案](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm)

## 使用 Kubernetes Operations(kOps)建立叢集
手動建立 Kubernetes 叢集可能是一個耗時且容易出錯的過程。隨著組織採用 Kubernetes 進行容器協調,對簡化、自動化的解決方案的需求變得明顯。

### 解決方案
1.  **安裝 kOps**:在我們的本地機器上安裝 kOps。例如,在 Linux 上:
    ```bash
wget https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/releases/latest | grep tag_name | cut -d '"' -f 4)/kops-linux-amd64 -O /usr/local/bin/kops
chmod +x /usr/local/bin/kops
  1. 建立叢集組態:使用 kOps 生成叢集組態。這包括指定叢集名稱、區域和其他必要的引數。

詳細討論

使用 kOps 建立 Kubernetes 叢集簡化了多節點叢集的管理,並提供了彈性與自動化功能,能夠滿足生產環境的需求。對於需要高度可擴充套件性和管理的企業來說,kOps 提供了一個強大的工具來簡化叢集佈署與維護。未來,隨著 Kubernetes 生態系統的不斷演進,kOps 將持續發揮其在自動化管理與高效維運方面的優勢,幫助企業更靈活地應對日益複雜的雲原生需求。

圖表說明:Kubernetes叢集架構圖

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Kubernetes叢集佈署

package "Kubernetes Cluster" {
    package "Control Plane" {
        component [API Server] as api
        component [Controller Manager] as cm
        component [Scheduler] as sched
        database [etcd] as etcd
    }

    package "Worker Nodes" {
        component [Kubelet] as kubelet
        component [Kube-proxy] as proxy
        package "Pods" {
            component [Container 1] as c1
            component [Container 2] as c2
        }
    }
}

api --> etcd : 儲存狀態
api --> cm : 控制迴圈
api --> sched : 調度決策
api --> kubelet : 指令下達
kubelet --> c1
kubelet --> c2
proxy --> c1 : 網路代理
proxy --> c2

note right of api
  核心 API 入口
  所有操作經由此處
end note

@enduml

圖表翻譯: 此圖顯示了Kubernetes的主要元件及其相互關係。客戶端透過kubectl與API伺服器互動,後者負責排程、管理控制器及工作節點,最終執行Pod中的容器,實作應用佈署與管理。透過此架構圖,我們可以清楚瞭解Kubernetes如何協調各個元件以高效執行容器化應用。

相關資源

  • 更多關於kOps的使用方法,請參閱官方檔案與Kubernetes相關檔案。