Kubernetes 叢集的測試和實驗需要一個穩定的實驗室環境。本文將介紹如何使用 Minikube、Kubespray 等工具,以及虛擬機器、樹莓派等平台來建構 Kubernetes 實驗室環境。同時,我們也會探討 Ansible 在 Kubernetes 任務管理中的應用,OpenShift Local 的快速佈署方式,以及 K3s 輕量級 Kubernetes 的優勢。最後,文章將提供 Kubernetes 叢集升級策略和步驟,確保讀者能夠有效管理和維護 Kubernetes 環境。
建立Kubernetes實驗室環境
建立一個Kubernetes實驗室環境對於測試和實驗Kubernetes叢集是非常有用的。本文將介紹如何使用不同的工具和方法來建立這樣的環境。
使用Minikube或Kubespray佈署Kubernetes
Minikube是一個流行的工具,用於在本機上佈署單節點的Kubernetes叢集,非常適合用於開發和測試。Kubespray則是一個用於佈署多節點Kubernetes叢集的工具,支援多種平台,包括雲端供應商。
Minikube的優勢
- 簡單易用:只需一條命令即可在本機上啟動一個Kubernetes叢集。
- 快速佈署:Minikube支援多種虛擬機器驅動,如VirtualBox、VMware等。
Kubespray的優勢
- 支援多節點叢集:可以佈署由多個節點組成的Kubernetes叢集。
- 高度可定製:支援多種組態選項,可以根據需要自定義叢集。
使用虛擬機器建立叢集
在實驗室環境中,可以使用虛擬機器來模擬實際的叢集環境。有多種虛擬機器管理軟體可供選擇,如Microsoft Hyper-V、Oracle VirtualBox等。
虛擬機器管理的關鍵步驟
- 選擇虛擬機器管理軟體:根據需求選擇合適的虛擬機器管理軟體。
- 建立虛擬機器:根據所選軟體的,建立新的虛擬機器。
- 安裝作業系統:在虛擬機器上安裝所需的作業系統。
- 組態Kubernetes:在虛擬機器上安裝和組態Kubernetes。
使用樹莓派建立叢集
樹莓派是一種流行的單板電腦,可以用於建立低成本的叢集實驗環境。最新的樹莓派4型號B具備強大的處理能力和多種介面,非常適合用於實驗。
使用樹莓派建立叢集的優勢
- 低成本:樹莓派相對便宜,非常適合用於建立低成本的實驗環境。
- 靈活性:可以根據需要選擇不同型號和組態的樹莓派。
圖表翻譯:
此圖示展示了Type 1和Type 2 Hypervisor之間的區別。Type 1 Hypervisor直接執行在硬體之上,而Type 2 Hypervisor則執行在宿主作業系統之上。這兩種型別的Hypervisor各有其特點和適用場景。
@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
@endumlKubernetes叢集佈署工具比較
本文將比較幾種常用的Kubernetes叢集佈署工具,包括Minikube、Kubespray等,以幫助讀者選擇最適合自己需求的工具。
Minikube
Minikube是一個單節點的Kubernetes叢集佈署工具,非常適合用於開發和測試。它支援多種虛擬機器驅動,如VirtualBox、VMware等。
Minikube的主要特點
- 簡單易用:只需一條命令即可在本機上啟動一個Kubernetes叢集。
- 快速佈署:支援多種虛擬機器驅動,可以快速在本機上佈署Kubernetes叢集。
Kubespray
Kubespray是一個多節點的Kubernetes叢集佈署工具,支援多種平台,包括雲端供應商。它提供了高度的可定製性,可以根據需要自定義叢集組態。
Kubespray的主要特點
- 支援多節點叢集:可以佈署由多個節點組成的Kubernetes叢集。
- 高度可定製:支援多種組態選項,可以根據需要自定義叢集。
其他佈署工具
除了Minikube和Kubespray之外,還有多種其他的Kubernetes叢集佈署工具可供選擇,如K3s、RKE等。每種工具都有其特點和適用場景。
內容解密:
本文比較了幾種常用的Kubernetes叢集佈署工具,包括Minikube、Kubespray等。讀者可以根據自己的需求,選擇最適合自己的工具來佈署和管理Kubernetes叢集。每個工具都有其獨特之處,瞭解這些特點有助於做出更明智的選擇。
在Raspberry Pi上安裝Kubernetes
Jeff Geerling在YouTube上因測試和眾包叢集板專案而聞名。Raspberry Pi Compute Module可以用作叢集或伺服器叢集。安裝Kubernetes軟體通常是透過SSH終端介面進行。請記住,Raspberry Pi處理器使用ARM處理器架構,這可能與您主要電腦的不同。
有多種方法可以在單一Raspberry Pi或Raspberry Pi叢集上安裝Kubernetes。這取決於您使用Kubernetes的經驗,其中最簡單的是MicroK8s。它只需使用microk8s snap進行佈署,並使用microk8s命令列工具進行互動。您可以使用microk8s start和microk8s stop命令來啟動和停止叢集,以節省電池。您可以使用microk8s status命令來驗證狀態:正在執行或未執行。
您可以使用microk8s enable dashboard命令啟用一些Kubernetes功能,例如Kubernetes儀錶板。還有更多功能可用:rbac、dns、registry、istio、helm、ingress、prometheus、hostpath-storage等。啟用後,可以使用microk8s dashboard-proxy命令存取Kubernetes儀錶板。請記住,在/boot/firmware/cmdline.txt檔案中新增以下行,以在核心啟動時啟用cgroup,因為它在ARM平台上預設被停用:
cgroup_enable=memory cgroup_memory=1
Kubespray
Kubespray專案專注於在雲端提供者上佈署Kubernetes平台:Amazon Web Services(AWS)、Microsoft Azure、Google Cloud Platform(GCP)、OpenStack、VMWare vSphere、Equinix Metal、Oracle Cloud Infrastructure(實驗性)和裸機。當您想要佈署叢集且不想手動編譯整個Kubernetes生態系統時,Kubespray是首選。
Kubespray使用簡單的組態管理(由Ansible提供)、組態工具和平台知識來佈署Kubernetes叢集。其結果是:
- 叢集高用性
- 模組化(網路外掛程式之間的選擇)
- 支援大多數流行的Linux發行版
- 由CI/CD測試
- Kubernetes版本1.22+,Ansible v2.11+,Jinja 2.11+和python-netaddr
安裝步驟
- 在inventory/mycluster檔案中設定叢集IP,如下所示:
node1 ip=10.3.0.1
node2 ip=10.3.0.2
node3 ip=10.3.0.3
[kube_control_plane]
node1
node2
[etcd]
node1
node2
[kube_node]
node2
node3
[k8s_cluster:children]
kube_node
kube_control_plane
- 使用以下檔案自定義Ansible群組all和k8s_cluster的變數:
- inventory/mycluster/group_vars/all/all.yml
- inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
- 執行playbook來設定節點:
$ ansible-playbook -i inventory/mycluster --become --become-user=root cluster.yml
OpenShift Local
OpenShift Local(前身為CodeReady Containers)是一種簡單快速的方式,可以在虛擬機器中佈署OpenShift叢集,用於實驗室測試。
其目的是僅供本地和實驗室測試,因為它旨在是短暫的。控制平面和工作節點嵌入在單節點虛擬機器中。它支援許多作業系統,包括Red Hat Enterprise Linux/CentOS x86_64(7、8和9)和最新的兩個穩定版Fedora、Windows 10 x86_64 Fall Creators Update(版本1709+)和macOS(BigSur 11+ Intel晶片x86_64或Apple Silicon arm64)。所需的最低資源是4個vCPU、8 GiB記憶體和35 GiB儲存空間。
安裝步驟
- 從官方Red Hat網站下載crc命令列工具。
- 在Windows和macOS上,提供了一個引導式安裝程式,具有簡單直接的流程。
- 成功安裝後,您可以從終端機執行crc命令列實用程式,並繼續進行OpenShift Local設定。
- 下載最新版本的OpenShift Local虛擬機器,並將其儲存在目前使用者的.crc目錄下。
- 使用以下命令啟動環境:
$ crc setup
$ crc start
- 您可以使用以下命令驗證OpenShift Local叢集的執行狀態:
$ crc status
- 您可以使用oc命令列實用程式(類別似於kubectl)透過命令列存取OpenShift Local叢集,並使用API端點https://api.crc.testing:6443或透過網頁控制檯https://console-openshift-console.apps-crc.testing。
使用OpenShift Local
您可以使用oc-env引數的oc命令與執行中的叢集一起組態所需的變數,以與OpenShift Local叢集和oc命令列實用程式的路徑互動。常見的做法是將其與eval終端表示式結合使用:
$ eval $(crc oc-env)
在設定過程中自動建立了兩個具有不同功能的使用者:
- 管理員:使用者名稱:kubeadmin,密碼自動生成。
- 標準使用者:使用者名稱:developer,密碼:developer。
使用Ansible管理Kubernetes任務
登入OpenShift Local叢集
要登入OpenShift Local叢集,只需提供所需的使用者名稱(-u 引數)和密碼(-p 引數):
$ oc login -u developer -p developer https://api.crc.testing:6443
或者,您可以使用從OpenShift控制檯檢索到的令牌:
$ oc login --token=sha256~xxxxxx --server=https://api.crc.testing:6443
您可以使用以下命令檢查您目前登入的使用者:
$ oc whoami
OpenShift Local叢集內部也有一個容器映像登入檔。使用相同的使用者,您可以透過網址存取OpenShift Local儀錶板(如圖4-7所示)。網址為 https://console-openshift-console.apps-crc.testing。
圖表翻譯:
此圖示顯示了OpenShift Local控制檯的登入介面。
在Hetzner上佈署OpenShift Container Platform 4
當您的目標雲端提供商是Hetzner時,您可以使用RedHat-EMEA-SSA-Team的hetzner-ocp4專案(https://github.com/RedHat-EMEA-SSA-Team/hetzner-ocp4)。它在Hetzner的CentOS Root Server裸機伺服器上佈署並使用Red Hat OpenShift Container Platform 4環境作為沙箱。目前,它支援CentOS Stream 8和Red Hat Enterprise Linux 8和9。
內容解密:
hetzner-ocp4專案利用Ansible來組態、安裝、啟動、停止和刪除Red Hat OpenShift Container Platform 4叢集。它還使用“Let’s Encrypt”專案更新SSL憑證,並設定公用DNS記錄。目前的工具允許使用三種現成的DNS提供商(AWS Route53、Cloudflare、DigitalOcean和GCP DNS)或設定一些環境變數(Azure、CloudFlare、Gandi和TransIP)。
使用Minikube建立叢集
最小和最簡單的Kubernetes叢集僅包含一個節點。顯然,這種設定足夠用於工作站實驗室,但不適用於需要更多節點以保證高用性的生產環境。
Minikube是Kubernetes的一種Go實作,它在本地機器上建立一個虛擬機器並佈署一個單節點的簡單叢集。Minikube適用於最新的作業系統——Linux、macOS和Windows。
首先,您需要在本地機器上安裝Minikube命令列工具。成功安裝後,您可以透過輸入以下命令啟動Minikube:
$ minikube start
內容解密:
Minikube工具會下載最新的Kubernetes映像並設定虛擬機器,例如,使用VirtualBox,組態2個CPU、2GiB記憶體和20 GiB儲存空間。在虛擬機器內部,工具會下載Minikube ISO,設定虛擬IP地址,組態Docker容器執行時,下載kubelet和kubeadm,啟動Kubernetes叢集,組態叢集許可權,並驗證元件健康狀態。
您也可以透過指定記憶體引數和所需的CPU數量來啟動Minikube:
$ minikube start --memory=8192 --cpus 2
此命令將輸出如圖4-8所示的結果。
圖表翻譯:
此圖示顯示了Minikube啟動命令列輸出的結果。
Kubeadm
Kubeadm是一個用於建立Kubernetes叢集的工具,遵循最佳實踐的“快速路徑”,用於建立叢集生命週期管理、自我託管佈局、動態發現服務等的領域知識。
它提供了一個簡單的kubeadm命令列實用程式,具有以下選項:
init:設定初始Kubernetes控制平面節點。join:設定額外的Kubernetes控制平面節點並將其加入叢集或工作節點。upgrade:將Kubernetes叢集升級到更新版本。reset:還原由init或join對目前主機所做的任何更改。
Minikube還提供了一個儀錶板功能,可以透過以下命令啟用:
$ minikube dashboard
內容解密:
此命令將開啟Kubernetes儀錶板並傳回連線的URL,如圖4-9所示。
圖表翻譯:
此圖示顯示了Minikube Kubernetes儀錶板的介面。
K3s:輕量級Kubernetes的強大之處
K3s是一個由CNCF(雲原生計算基金會)沙盒專案,於2020年建立,最初由Rancher Labs開發並封裝成單一二進位制檔案,佔用空間極小(小於100 MB)。它建立了一個Kubernetes叢集,從Raspberry Pi到AWS a1.4x大型32 GB伺服器,都能簡單安裝、執行和自動更新。K3s非常適合物聯網(IoT)、邊緣運算和ARM處理器。其輕量級儲存後端根據sqlite3,並可擴充套件至etcd3、MySQL和PostgreSQL。K3s既可以在容器中執行,也可以作為原生Linux服務執行。結合Rancher和K3s,您可以使用GitOps持續交付管道管理超過1,000個邊緣叢集。
與K3s叢集互動
當叢集啟動並執行時,您可以使用簡單的命令與其互動。
$ export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
如同往常,您可以使用kubectl命令列工具與叢集互動。例如,以下命令顯示叢集中所有名稱空間中的所有Pod:
$ kubectl get pods --all-namespaces
內容解密:
此命令首先設定KUBECONFIG環境變數,指定K3s叢集的組態檔案路徑。接著,使用kubectl命令列工具取得叢集中所有名稱空間的Pod資訊。這是管理Kubernetes叢集的基本操作,能夠幫助管理員監控叢集狀態。
Kubernetes升級策略
Kubernetes擁有活躍的社群,每年發布四個版本,因此預計每三個月就會有一個新版本。在撰寫本文時,最新的Kubernetes版本是1.26.1。在Kubernetes術語中,版本號由Major、Minor和Patch組成。例如,1.26.1代表Major版本1,Minor版本26,Patch版本1。Major版本通常包含重大變更,可能會破壞與過去版本的相容性。Minor版本引入新功能並棄用某些API。Patch版本通常只是修復錯誤的版本,會由控制平面每月自動應用。
Kubernetes版本生命週期
Kubernetes版本的生命週期包括一般可用(Generally Available)、維護模式(Maintenance)和生命週期結束(End-of-Life)。例如,版本1.26於2022年12月9日正式發布,2023年12月28日進入維護模式,並將於2024年2月24日進入官方的生命週期結束階段。
升級Kubernetes叢集
升級Kubernetes叢集時,必須一次升級一個Minor版本,不能跳過版本。同時,也不能回復升級過程。始終需要計劃升級,仔細閱讀檔案、變更日誌和發布說明,以瞭解是否有API專案將被棄用。建立檢查清單並確定哪個團隊負責升級。通常,安全、維運和基礎設施團隊參與此操作。定義、測試和記錄升級程式,並制定回復/後備計劃。
升級步驟
- 升級控制平面節點:首先設定節點為不可排程狀態(cordon),然後驅逐節點上的工作負載(drain),升級kubelet和kubectl套件,重啟kubelet服務,最後將節點還原為可排程狀態(uncordon)。
- 升級工作節點:升級kubeadm工具,執行
kubeadm upgrade node命令,將節點設為drain模式,升級kubelet和kubectl,重啟kubelet程式,然後將節點還原為uncordon狀態。
內容解密:
升級Kubernetes叢集需要謹慎規劃和執行。首先升級控制平面節點,確保其穩定後再升級工作節點。每一步都需要仔細檢查,以避免服務中斷。