Kubernetes 叢集的建立流程會因雲端服務供應商而異,DigitalOcean 提供了 CLI、API 和控制台等多種建立方式,OVH 則提供託管 Kubernetes 服務簡化管理流程,而 Hetzner 則可使用 Claudie 工具進行佈署。選擇合適的工具和方法取決於團隊的需求和技術能力。除了叢集建立,提升 Kubernetes 開發體驗也至關重要。Kustomize 提供了彈性的組態管理方式,Lens 則提供了直觀的叢集監控和管理介面,而 DevSpace 則簡化了應用程式的開發和佈署流程。這些工具的整合使用能大幅提升開發效率,並降低 Kubernetes 的使用門檻。

在不同雲端服務供應商上建立 Kubernetes 叢集

本章節將介紹如何在不同的雲端服務供應商上建立 Kubernetes 叢集,包括 DigitalOcean、OVH 和 Hetzner。我們將探討使用不同方法建立叢集的步驟和優缺點。

在 DigitalOcean 上建立 Kubernetes 叢集

DigitalOcean 提供了一種簡便的方式來建立 Kubernetes 叢集。有三種方法可以建立叢集:使用 DigitalOcean 命令列介面(CLI)、DigitalOcean API 和 DigitalOcean 控制台。

使用 DigitalOcean CLI 建立叢集

  1. 安裝 CLI:下載並安裝 DigitalOcean CLI(doctl)。
  2. 驗證身分:使用 doctl auth init 驗證您的 DigitalOcean 帳戶。
  3. 建立叢集:指定區域、節點大小和 Kubernetes 版本。使用 doctl kubernetes options versions 檢索選項。
  4. 執行建立命令:使用 doctl kubernetes cluster create <叢集名稱> --region nyc1 --version <版本> --count 3 --size s-1vcpu-2gb 建立叢集。

使用 DigitalOcean API 建立叢集

  1. 產生 API Token:從 DigitalOcean 儀錶板建立一個具有必要許可權的 token。
  2. 設定 API 請求:使用以下 curl 命令範本建立叢集:
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -d '{
  "name": "example-cluster",
  "region": "nyc3",
  "version": "1.20.7-do.0",
  "node_pools": [{
    "size": "s-1vcpu-2gb",
    "count": 3,
    "name": "worker-pool"
  }]
}' "https://api.digitalocean.com/v2/kubernetes/clusters"

使用控制台建立叢集

  1. 開啟建立選單:登入 DigitalOcean 控制台,點選「建立」並選擇「Kubernetes」。
  2. 設定叢集:選擇 Kubernetes 版本、資料中心區域、VPC 網路和節點池。
  3. 完成建立:命名叢集,檢查成本,然後點選「建立叢集」按鈕。

#### 內容解密:

上述三種方法各有其優缺點。CLI 方法適合需要快速、指令碼化存取的使用者。API 方法適合需要將 Kubernetes 整合到自定義應用程式或自動化基礎設施設定的使用者。控制台方法是最使用者友好的圖形方法,適合喜歡視覺化設定流程的使用者。

在 OVH 上建立 Kubernetes 叢集

OVH 提供了一種託管的 Kubernetes 環境,以簡化叢集管理和網路設定。

建立叢集步驟

  1. 存取 OVH Cloud 面板:登入 OVH Cloud 面板以管理資源。
  2. 建立 Kubernetes 叢集:導航到「Public Cloud」部分,然後從側邊欄選擇「Kubernetes」。
  3. 點選建立按鈕:點選「Create a Kubernetes Cluster」按鈕並遵循螢幕上的指示。
  4. 設定節點池:組態節點池,包括大小和例項數量以滿足工作負載需求。
  5. 設定存取:下載 kubeconfig 檔案並使用 kubectl 設定對叢集的存取。

#### 內容解密:

OVH 的託管 Kubernetes 服務處理基礎伺服器基礎設施的設定、擴充套件和維護,讓使用者能夠專注於佈署和管理應用程式。規劃可擴充套件性、資源管理和成本是使用 OVH Kubernetes 服務的重要考量。

在 Hetzner 上使用 Claudie 建立 Kubernetes 叢集

Claudie 是一個管理多雲和混合雲 Kubernetes 叢集的工具。

建立叢集步驟

  1. 安裝 Claudie:在現有的 Kubernetes 叢集上安裝 Claudie。
  2. 建立 Hetzner API 金鑰:從 Hetzner Cloud 控制檯建立一個新的 API token,具有讀取和寫入許可權。
  3. 建立 Claudie 清單檔案:定義叢集組態,包括節點池和提供者規格。
apiVersion: claudie.io/v1beta1
kind: InputManifest
metadata:
  name: kubernetes-hetzner
spec:
  providers:
  - name: hetzner-secret
    providerType: hetzner
    secretRef:
      name: hetzner-secret
      namespace: default
  nodePools:
    dynamic:
    - name: control-hetzner-1
      providerSpec:
        name: hetzner-secret
        region: fsn1
        zone: fsn1-dc14
        count: 1
        serverType: cpx21
        image: ubuntu-22.04

#### 內容解密:

Claudie 提供了一種簡化在 Hetzner 上建立和管理 Kubernetes 叢集的方法。定義明確的清單檔案允許使用者輕鬆地組態和管理節點池和提供者規格。

圖表翻譯:

此圖表描述了在不同的雲端服務供應商(DigitalOcean、OVH 和 Hetzner)上建立 Kubernetes 叢集的流程。每個供應商都有其特定的建立方法,但都涉及設定節點池和網路或存取控制。Claudie 提供了一種簡化在 Hetzner 上建立和管理叢集的方法。最終,所有方法都完成叢集的建立。

在雲端供應商上佈署Kubernetes的挑戰與解決方案

4.7 Kubespray:簡化Kubernetes佈署的工具

在多樣的基礎設施上佈署Kubernetes,例如AWS、GCE、Azure、OpenStack、vSphere、Equinix Metal、Oracle Cloud Infrastructure,或甚至在裸機和隔離環境中,都可能非常複雜且容易出錯。這個過程通常會根據底層基礎設施的不同而有很大的差異,從而導致不一致性和潛在的故障。Kubespray由Ansible提供支援,提供了一個強大的解決方案來標準化和自動化生產級Kubernetes叢集的佈署,旨在減少複雜性並確保可重複性。

解決方案

  1. 準備工作

    • 安裝依賴項:確保所有先決條件軟體和工具,包括Python和Ansible,都安裝在控制器機器上。
    • 設定庫存:準備構成Kubernetes叢集的主機庫存。這包括在Ansible的庫存檔案中定義主節點和工作節點:
      git clone https://github.com/kubernetes-sigs/kubespray
      cp -r inventory/sample inventory/mycluster
      declare -a IPS=(10.10.1.3 10.10.1.4 10.10.1.5)
      CONFIG_FILE=inventory/mycluster/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
      
  2. 組態

    • 自定義組態:編輯inventory/mycluster/group_vars/all/all.ymlinventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml來設定網路組態、叢集名稱和API設定,並自定義Kubernetes元件,如網路外掛(Calico、Flannel、Canal)。
  3. 佈署

    • 執行Kubespray Playbook:執行Ansible playbook來佈署Kubernetes。這將在所有指定的主機上設定Kubernetes和必要的元件:
      ansible-playbook -i inventory/mycluster/hosts.yml cluster.yml -b -v --private-key=~/.ssh/private_key
      
  4. 驗證

    • 檢查叢集健康狀況,驗證叢集是否正確執行。檢查節點和Pod的狀態,以確保所有元件都按預期執行:
      kubectl get nodes
      kubectl get pods --all-namespaces
      

討論

  • 多樣性和可擴充套件性:Kubespray提供了在幾乎任何平台上佈署Kubernetes的靈活性,使其成為混合和多雲環境的理想選擇。
  • 組態管理:利用Ansible進行組態管理簡化了維護和更新叢集設定的過程。
  • 可擴充套件性:透過修改庫存檔案並重新執行playbook,可以輕鬆擴充套件叢集。
  • 安全性:Kubespray包含設定高度安全叢集的角色,預設情況下為網路策略和其他安全設定應用最佳實踐。
  • 設定複雜性:雖然Kubespray抽象了設定Kubernetes的大部分複雜性,但初始組態和引數調優對於新使用者來說可能令人生畏。
  • 對Ansible的依賴:有效地使用Kubespray需要具備Ansible的操作能力,這對於不熟悉組態管理工具的團隊來說可能是一個障礙。
  • 高用性:Kubespray支援高用性組態,允許您佈署確保生產環境中不間斷服務的Kubernetes叢集。

4.8 認證的Kubernetes軟體一致性(Sonobuoy)

由雲原生計算基金會(CNCF)監督的認證Kubernetes軟體一致性計劃確保每個供應商的Kubernetes版本都支援所需的API,並提供一致的體驗。目標是保持不同Kubernetes解決方案之間的互操作性和一致性,讓使用者在採用Kubernetes時更加安全和容易,而不會被鎖定在特定的供應商。

挑戰

使用Kubernetes的組織面臨著確保其佈署與各種Kubernetes服務和工具相容的挑戰。隨著來自不同供應商的Kubernetes產品的激增,這種挑戰變得更加複雜。

#### 內容解密:

此段落描述了使用Kubernetes時面臨的主要挑戰,即確保佈署與多種Kubernetes服務和工具的相容性。隨著市場上出現越來越多的Kubernetes發行版,這一挑戰變得尤為重要。CNCF的一致性計劃旨在透過確保所有Kubernetes實作都遵循一套標準化的API和功能,從而提高不同Kubernetes發行版之間的互操作性。

圖表翻譯:

此圖示說明瞭CNCF認證的Kubernetes軟體一致性計劃如何確保不同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

圖表翻譯: 此圖表呈現了CNCF如何透過其一致性計劃確保不同Kubernetes發行版之間的API一致性,從而提高它們之間的互操作性,並最終簡化了對Kubernetes的採用過程。

第5章 在Kubernetes中提升開發者體驗

本章旨在透過探索各種工具和實踐來提升Kubernetes中的開發者體驗,以簡化開發工作流程。主要內容包括設定Lens整合開發環境(IDE)、利用dev spaces、透過kubens/kubectx進行名稱空間管理,以及將Gitpods納入開發流程。

5.1 命令列工具

問題

管理Kubernetes叢集無疑是複雜且耗時的,特別是在處理佈署、擴充套件和維護等重複性任務時。為了維護穩健的Kubernetes環境,確保這些操作的連貫性、可靠性和效率至關重要。手動處理這些任務可能導致錯誤、低效率以及在管理大規模環境時面臨挑戰。此外,迭代和互動式的命令列操作對於即時反饋、快速故障排除和調整至關重要。

解決方案

kubectl

首先介紹Kubernetes中主要的命令列工具:kubectl。kubectl是用於與Kubernetes叢集互動的主要命令列工具,可用於建立、擴充套件、編輯、檢視和列出所有Kubernetes資源。透過為常用的kubectl命令建立自定義別名,可以加快工作流程。

通常需要輸入kubectl命令來執行所有操作,以取得或將資源放入API伺服器。為了避免在每個操作前輸入kubectl,可以在Linux系統中建立別名,並將其新增到~/.bashrc或~/.zshrc檔案中。在檔案末尾新增以下行:

alias k=kubectl

對於Linux使用者,還可以使用kubectl自動補全功能。同樣,可以將自動補全新增到zshrc或bashrc中。有關所有作業系統的完整說明,請參閱https://kubernetes.io/docs/reference/kubectl/generated/kubectl_completion/。

oh-my-zsh

如果您是Linux使用者,可能會使用zsh和oh-my-zsh,它們具有良好的自動補全功能和Kubernetes資源選擇功能,無需先列出資源,因為雙擊Tab鍵可以顯示所有可用的資源。

對於zsh使用者,可以透過簡單地將kubectl新增到zshrc檔案來安裝oh-my-zsh的kubectl外掛:

plugins=(git history kubectl)

啟動新的zsh程式或重新載入zshrc檔案後,將啟用新外掛。這樣,每當輸入kubectl並雙擊Tab鍵時,它將顯示更多選項。嘗試列出資源時,kubectl將向主API傳送請求並傳回結果。請參閱圖5-1的範例。

krew

krew是kubectl的外掛管理器,讓發現和安裝外掛變得更加容易。從https://krew.sigs.k8s.io/安裝krew for kubectl。要檢查是否安裝成功,請執行kubectl krew

現在可以透過krew自動為kubectl新增外掛:

kubectl krew install ctx

CTX用於輕鬆切換上下文。

kubectl ctx your_context_name
kubectl krew install ns
vcluster kubectl ns kube-public

上下文“kind-kind”已修改。活動名稱空間為“kube-public”。

helm

Helm是Kubernetes的套件管理器,簡化了應用程式的佈署和管理。

Helm Charts

使用預先組態的範本(charts)來佈署應用程式。

使用Helm進行自動化

使用Helm charts自動佈署和更新應用程式:

helm install my-release my-chart
helm upgrade my-release my-chart

內容解密:

  • kubectl 是與Kubernetes叢集互動的主要命令列工具,用於管理Kubernetes資源。
  • 建立別名和使用自動補全功能可以提高工作效率。
  • oh-my-zsh 的kubectl外掛提供了更便捷的資源選擇和自動補全功能。
  • krew 是用於管理kubectl外掛的工具,簡化了外掛的發現和安裝過程。
  • helm 是Kubernetes的套件管理器,簡化了應用程式的佈署和管理。

圖表翻譯:

圖5-1展示了使用自動補全功能時的kubectl註解選項,顯示了可用的選項。 圖5-2展示了使用kubectl自動補全功能列出pods的情況,顯示了所有可用的pods。

本章介紹了多種提升Kubernetes中開發者體驗的工具和實踐,包括命令列工具的使用、自動補全功能的設定,以及Helm套件管理器的應用。這些工具和實踐有助於簡化開發工作流程,提高開發效率,並確保Kubernetes環境的穩定性和可靠性。

提升 Kubernetes 開發體驗的關鍵工具

Kubernetes 已成為現代雲原生應用的事實標準,但其複雜性也為開發者帶來了挑戰。本章將探討幾種提升 Kubernetes 開發體驗的關鍵工具,包括 Kustomize、Lens 和 DevSpace。

使用 Kustomize 管理 Kubernetes 組態

Kustomize 是一種無需範本的 Kubernetes 組態管理工具,允許開發者透過覆寫(overlays)來管理不同環境(如開發、生產)的組態。

Kustomize 的基本用法

kustomize build overlays/prod | kubectl apply -f -

上述命令展示瞭如何使用 Kustomize 構建生產環境的組態,並將其應用到 Kubernetes 叢集。

內容解密:

  1. kustomize build overlays/prod:此命令告訴 Kustomize 根據 overlays/prod 目錄下的組態生成最終的 Kubernetes 資源清單。
  2. | kubectl apply -f -:將 Kustomize 生成的清單透過管道傳遞給 kubectl apply 命令,以應用到 Kubernetes 叢集。
    • -f - 表示從標準輸入讀取資源清單。

Lens:Kubernetes 的 IDE

Lens 是一款專為 Kubernetes 設計的整合開發環境(IDE),提供了豐富的功能來簡化叢集管理和除錯。

Lens 的主要功能

  1. 即時資源監控:Lens 提供實時的叢集資源狀態概覽。
  2. 視覺化指標:透過圖表展示資源使用情況,如 Job 的執行狀態。
  3. 資源管理:允許瀏覽和修改叢集中的資源。

使用 Lens 管理叢集

  1. 新增叢集:在 Cluster Management View 中指定 kubeconfig 檔案的位置。
  2. 瀏覽資源:透過 Lens 的介面瀏覽叢集中的各種資源。
  3. 修改資源:可以直接在 Lens 中修改資源,但需注意這會直接寫入 etcd,可能導致組態漂移。

圖表翻譯:

此圖示展示了 Lens 的叢集儀錶板,能夠即時顯示叢集資源的狀態。

DevSpace:簡化 Kubernetes 開發流程

DevSpace 是一款開源的 Kubernetes 開發工具,旨在簡化雲原生應用的開發和佈署流程。

DevSpace 的核心功能

  1. 宣告式工作流程:透過 devspace.yaml 檔案集中管理工作流程。
  2. 團隊協作:支援團隊成員分享組態,簡化佈署流程。
  3. 熱過載:支援程式碼變更的即時同步,無需重建映像或重啟容器。
  4. 自動化:自動處理映像構建、佈署和日誌串流等任務。

DevSpace 的工作流程

# 示例 devspace.yaml 組態
version: v1beta11
images:
  app:
    image: myregistry/myimage:latest
    dockerfile: ./Dockerfile
deployments:
  - name: myapp
    helm:
      chart:
        name: mychart
        version: "1.0.0"
      values:
        image:
          tag: latest

內容解密:

  1. version:指定 DevSpace 組態檔案的版本。
  2. images:定義要構建的 Docker 映像。
  3. deployments:定義佈署組態,此處使用 Helm Chart 進行佈署。

圖表翻譯:

此圖示展示了 DevSpace 的工作流程,包括構建、測試、佈署和除錯等階段。