使用 Sealos 一鍵部署 Kubernetes 集羣

Sealos 是一款以 Kubernetes 爲內核的雲操作系統發行版,使用戶能夠像使用個人電腦一樣簡單地使用雲。

與此同時,Sealos 還提供一套強大的工具,可以便利地管理整個 Kubernetes 集羣的生命週期。

Sealos 不僅可以一鍵安裝一個單節點的 Kubernetes 開發環境,還能構建數千節點的生產高可用集羣。

Sealos 還可以在 Kubernetes 之上,通過集羣鏡像能力組裝各種上層分佈式應用,如數據庫、消息隊列等。

此外,Sealos 還具有自由伸縮集羣、備份恢復、釋放集羣等功能,即使在離線環境中,Sealos 也能提供出色的 Kubernetes 運行體驗。

本文將會手把手教大家如何使用 Sealos 一鍵部署 Kubernetes 集羣,包教包會。

原文鏈接:https://forum.laf.run/d/1076

突破網絡困境

首先我們需要下載 Sealos 命令行工具,Sealos 命令行工具可以到 Sealos 的 Release 頁面獲取:

有多種方式可以下載 Sealos 命令行工具,但由於國內特殊的網絡環境,無論哪一種方式都是需要魔法的。Reelase 頁面提供的各個包要麼就是無法下載,要麼就是速度奇慢。

要想突破網絡限制,首先我們需要解決 Release 頁面的鏈接訪問問題。

如果你知道如何使用魔法來訪問,那麼下面的內容就不用看了。以下方案是給不會魔法的同學提供的。

這就需要用到一個瀏覽器插件:Violentmonkey (暴力猴)。你也可以安裝 Tampermonkey (篡改猴)。他們都屬於用戶腳本管理器,本身無法爲我們發揮什麼作用,主要依靠各大社區編寫的擴展腳本 (JavaScript 代碼) 運行在瀏覽器上,來改變被訪問網頁的功能,提升我們的網頁瀏覽體驗。

我推薦使用 Violentmonkey,更輕量,更新更勤快。下面我們來進行安裝。

安裝瀏覽器插件

衆所周知,Chrome 瀏覽器的插件需要到 Chrome Web 應用商店去下載,但你需要開啓魔法才能訪問這個網站,我們需要尋求他法。

方法一

微軟出品的 Edge 瀏覽器自帶一個擴展商店頁面,而且這個頁面是可以直接訪問的。你可以選擇使用 Edge 瀏覽器,然後打開 Edge 瀏覽器的擴展商店:

然後搜索 violentmonkey,點擊獲取開始安裝:

方法二

對於 Chrome 瀏覽器,或者其他 Chromium 系的瀏覽器,我們可以從很多 Chrome 應用商店的鏡像站去獲取 Violentmonkey 的 crx 文件,這裏推薦一個鏡像站:

點擊下載最新版:

下載完成解壓後會得到一個 xxx.crx 文件,你需要打開瀏覽器設置,打開擴展程序頁面,或者直接搜索 Chrome://extensions/進入。然後保持頁面開發者模式的開啓。找到被解壓後的 crx 文件,將其拖動到擴展程序頁面,釋放並同意完成安裝。

GitHub 增強腳本獲取

Violentmonkey 插件是以運行用戶腳本來實現功能的,藉助用戶腳本,可以實現各種強大的功能。這裏我們需要安裝一個 GitHub 增強腳本,這個腳本會給 GitHub Release 頁面的文件提供多個 CDN 地址,我們可以通過 CDN 地址來下載文件,不再需要魔法。

腳本的安裝非常簡單無腦,直接瀏覽器打開這個鏈接:

然後點擊確認安裝:

安裝完成後點擊關閉即可。

打開 Violentmonkey 擴展的設置頁面,然後點擊箭頭所指的圖標打開腳本:

再其中加上一行:// @match *://githubfast.com/*,然後點擊保存,關閉。

下載 Sealos 命令行工具

現在我們打開 Sealos 的 Release 頁面:https://github.com/labring/sealos/releases。鑑於 GitHub 會時不時抽風,導致無法訪問。我們可以在任意 github 鏈接後面加上 fast,也就是 githubfast.com,以此來訪問 GitHub 頁面。例如 Release 頁面可以通過以下鏈接來訪問:

這裏有很多 Sealos 版本,建議使用正式版本,不要下載 alpha 版或者 rc 版。你可以直接使用最新的正式版,可以通過以下鏈接訪問:

現在你可以看到每一個文件後面都提供了多個 CDN 鏈接,你只需要把鼠標放到其中一個鏈接上,然後鼠標右鍵就可以複製該 CDN 鏈接。

這個倉庫裏也提供了多個 GitHub 鏡像網站:https://githubfast.com/runningcheese/MirrorSite

二進制下載

因爲 Sealos 命令行工具只有一個二進制文件,所以所有的 Linux 發行版都可以選擇直接下載二進制文件來使用 Sealos 命令行工具。

x86 架構可以選擇下載 sealos_xxx_linux_amd64.tar.gz,記得使用右邊的 CDN 鏈接下載。

獲得 CDN 鏈接後,使用下面的命令開始下載:

$ URL=<你的 CDN 鏈接>
$ wget $URL && tar zxvf sealos_*_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin

可以多嘗試幾個鏈接,找到速度較快的鏈接。

測試一下:

$ sealos version
SealosVersion:
  buildDate: "2023-10-09T10:07:15Z"
  compiler: gc
  gitCommit: 881c10cb
  gitVersion: 4.3.5
  goVersion: go1.20.8
  platform: linux/amd64

同理,arm64 架構可以下載 sealos_xxx_linux_arm64.tar.gz。

包管理工具安裝

Sealos 同時還提供了 DEB 包和 RPM 包,對於 Debian/Ubuntu 系的系統或者 Centos/RHEL 系的系統,可以選擇使用包管理工具來安裝。

以 Ubuntu 爲例,x86 架構可以選擇下載 sealos_xxx_linux_amd64.deb,下載完成後使用包管理工具安裝即可。命令如下:

$ URL=<你的 CDN 鏈接>
$ wget $URL && dpkg -i sealos_*_linux_amd64.deb

Centos/RHEL 系的系統可以使用如下命令:

$ URL=<你的 CDN 鏈接>
$ wget $URL && yum localinstall -y sealos_*_linux_amd64.rpm

安裝 Kubernetes 集羣

終於進入正題了,接下來開始正式安裝 Kubernetes 集羣。

以下是一些基本的安裝要求:

  • 每個集羣節點應該有不同的主機名。主機名不要帶下劃線。
  • 所有節點的時間需要同步。
  • 需要在 Kubernetes 集羣的第一個 master 節點上運行 sealos run 命令,目前集羣外的節點不支持集羣安裝
  • 建議使用乾淨的操作系統來創建集羣。不要自己裝 Docker!
  • 支持大多數 Linux 發行版,例如:Ubuntu、CentOS、Rocky linux。
  • 支持 Docker Hub 中的所有 Kubernetes 版本。
  • 支持使用 Containerd 作爲容器運行時。
  • 在公有云上安裝請使用私有 IP

在正式安裝之前,先來簡單理解一下 Sealos 中的一個特有的概念:集羣鏡像

Sealos 吸取了 Docker 思想的精髓,把 Docker 的思想衍生到了集羣的維度,實現分佈式軟件的構建、打包、交付、運行等等。

和操作系統 ISO 鏡像或 Docker 鏡像類似,集羣鏡像就是用一定的技術手段把整個集羣的所有文件以一定格式打成的一個資源包

以 Kubernetes 集羣鏡像爲例,裏面包含了除操作系統以外的所有文件:

  • Containerd 依賴的二進制與 systemd 配置、Containerd 配置,以及一個私有的容器鏡像倉庫。
  • Kubernetes 核心組件二進制、容器鏡像、kubelet system 配置等。
  • 其它腳本、配置與二進制工具等應用運行需要的所有依賴。

集羣鏡像的打包格式兼容了 OCI 標準,可以直接推送到 Docker 鏡像倉庫中。安裝集羣時只需要使用 sealos pull 命令將該鏡像從鏡像倉庫里拉取下來,然後再執行 sealos run 命令,整個 Kubernetes 集羣就安裝好了。。。

Docker 解決了單個容器的鏡像化問題,而 Sealos 通過把整個集羣打包,實現了分佈式軟件的一處構建,處處運行

本文由於篇幅有限,集羣鏡像的具體原理就不展開介紹了,後面有機會再寫文章介紹。感興趣的同學可以參考 Sealos 的官方文檔:

集羣鏡像版本支持說明

推薦使用 Containerd 作爲容器運行時 (CRI) 的集羣鏡像版本,Containerd 是一種輕量級、高性能的容器運行時,與 Docker 兼容。使用 Containerd 的 Kubernetes 鏡像可以提供更高的性能和資源利用率。以下是支持 Containerd 的集羣鏡像版本支持說明:

K8s 版本 Sealos 版本 CRI 版本 集羣鏡像版本
<1.25 >=v4.0.0 v1alpha2 labring/kubernetes:v1.24.0
>=1.25 >=v4.1.0 v1alpha2 labring/kubernetes:v1.25.0
>=1.26 >=v4.1.4-rc3 v1 labring/kubernetes:v1.26.0
>=1.27 >=v4.2.0-alpha3 v1 labring/kubernetes:v1.27.0

根據 Kubernetes 版本的不同,您可以選擇不同的 Sealos 版本和 CRI 版本。例如,如果您要使用 Kubernetes v1.26.0 版本,您可以選擇 sealos v4.1.4-rc3 及更高版本,並使用 v1 CRI 版本。

當然,你也可以選擇使用 Docker 作爲容器運行時,以下是支持 Docker 的集羣鏡像版本支持說明:

K8s 版本 Sealos 版本 CRI 版本 集羣鏡像版本
<1.25 >=v4.0.0 v1alpha2 labring/kubernetes-docker:v1.24.0
>=1.25 >=v4.1.0 v1alpha2 labring/kubernetes-docker:v1.25.0
>=1.26 >=v4.1.4-rc3 v1 labring/kubernetes-docker:v1.26.0
>=1.27 >=v4.2.0-alpha3 v1 labring/kubernetes-docker:v1.27.0

與支持 Containerd 的 Kubernetes 鏡像類似,您可以根據 Kubernetes 版本的不同選擇不同的 Sealos 版本和 CRI 版本。例如,如果您要使用 Kubernetes v1.26.0 版本,您可以選擇 sealos v4.1.4-rc3 及更高版本,並使用 v1 cri 版本。

查看集羣鏡像

Sealos 所有的集羣鏡像都可以在這個倉庫裏找到:

除了推送到 Docker Hub 之外,這些鏡像還被同步到了阿里雲的鏡像倉庫。Docker Hub 上可以通過以下鏈接查看 Sealos 所有的集羣鏡像:

但是集羣鏡像實在是太多了,假如我想看 Kubernetes 集羣鏡像的所有版本,有沒有更高效的方式來查看呢?

這就需要用到一個工具叫 Registry Explorer,鏈接如下:

直接輸入 registry.cn-shanghai.aliyuncs.com/labring/kubernetes,然後點擊 “Submit Query”:

你就會看到這個集羣鏡像的所有 tag。

Docker Hub 同理,輸入 docker.io/labring/kubernetes 即可查看所有 tag。

安裝集羣

Kubernetes 的小版本號越高,集羣越穩定。例如 v1.28.x,其中的 x 就是小版本號。建議使用小版本號比較高的 Kubernetes 版本。到本文截止時間爲止,v1.27 最高的版本號是 v1.27.7,而 v1.28 最高的版本號是 v1.28.3,所以建議使用 v1.27.7。你需要根據實際情況來選擇最佳的 Kubernetes 版本,不要照抄本文。

推薦使用 Containerd 作爲運行時,也就是集羣鏡像 labring/kubernetes。如果你非要使用 Docker 作爲運行時,可以使用集羣鏡像 labring/kubernetes-docker

如果你只有一個節點,可以使用以下命令來安裝:

$ sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4 --single

記得通過 Registry Explorer 來查看 helm 和 cilium 最新的版本號。

如果你有多個節點,可以使用以下命令來安裝:

$ sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4 \
     --masters <master1 的 IP>,<master2 的 IP>,... \
     --nodes <node1 的 IP>,<node1 的 IP>,... -p [your-ssh-passwd]

舉個例子,假設你有兩個節點,master 節點的 IP 是 192.168.64.10,node 節點的 IP 是 192.168.64.11,命令如下:

$ sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.7 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4 \
     --masters 192.168.64.10 \
     --nodes 192.168.64.11 -p [your-ssh-passwd]

沒了。靜靜等待安裝完成即可。安裝完成後,可以使用如下命令查看集羣狀況:

$ kubectl get node
NAME           STATUS   ROLES           AGE   VERSION
ycs-master-1   Ready    control-plane   18h   v1.27.7
ycs-node-1     Ready    <none>          18h   v1.27.7

$ kubectl -n kube-system get pod
NAME                                   READY   STATUS    RESTARTS       AGE
cilium-fmgcw                           1/1     Running   1 (48m ago)    18h
cilium-operator-86666d88cb-6h5kx       1/1     Running   1 (52m ago)    18h
cilium-skggs                           1/1     Running   0              18h
coredns-5d78c9869d-j4kkj               1/1     Running   0              18h
coredns-5d78c9869d-snlt7               1/1     Running   0              18h
etcd-ycs-master-1                      1/1     Running   9              18h
kube-apiserver-ycs-master-1            1/1     Running   9              18h
kube-controller-manager-ycs-master-1   1/1     Running   9              18h
kube-proxy-g45vv                       1/1     Running   0              18h
kube-proxy-vz4dk                       1/1     Running   1 (48m ago)    18h
kube-scheduler-ycs-master-1            1/1     Running   9              18h
kube-sealos-lvscare-ycs-node-1         1/1     Running   10 (48m ago)   18h
metrics-server-84c9bd846f-mwfbx        1/1     Running   0              47m

鏡像分發原理

Sealos 在安裝 Kubernetes 的過程中不會將鏡像拷貝到所有節點,而是採用了一種更加優雅的解決方案。Sealos 會在第一個 master 節點 (第一個 master 節點是指創建集羣的時候輸入的第一個 master 節點的地址) 上啓動一個私有鏡像倉庫,然後將 Kubernetes 集羣鏡像裏的 registry 目錄同步到私有鏡像倉庫中。

同時,每個節點都會運行一個 image-cri-shim 守護進程,kubelet 在拉取鏡像的時候會發起一個 grpc 交互命令到 image-cri-shim。該進程會根據鏡像名字在私有倉庫裏面查找,如果鏡像存在則從本地鏡像倉庫拉取,否則就從遠端拉取。

這樣就完美解決了鏡像分發問題。

詳細原理請參閱 Sealos 鏡像倉庫相關文檔:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章