使用 Sealos 在離線環境中光速安裝 K8s 叢集

2023-09-04 12:00:47

作者:尹珉。Sealos 開源社群 Ambassador,雲原生愛好者。

當容器化交付遇上離線環境

在當今快節奏的軟體交付環境中,容器化交付已經成為許多企業選擇的首選技術手段。在可以存取公網的環境下,容器化交付不僅能夠提高軟體開發和交付的效率,還能夠幫助企業實現快速迭代和持續交付。

然而,在離線環境中,容器化交付面臨著諸多挑戰,包括軟體包和映象的準備困難、設定繁瑣、部署時間長等。在本文中,我們將以運維的角度去探討基於離線環境下使用容器化交付的痛點,提出一些解決方案以幫助企業在離線環境中實現高效的容器化交付。

業務場景

我司主要面向政企客戶,所交付的產品必須是部署在內網中。作為運維負責人,一直苦惱於如何在客戶離線環境中以容器化的方式交付業務系統。政企客戶 IDC 機房的環境特殊性,導致目前運維同學在使用容器化交付時效率不高,客戶滿意度不高的情況,為了解決這個問題,我們需要找到一個能夠在離線環境中快速部署和管理 Kubernetes 叢集的工具。

在離線環境中用容器化交付存在以下常見痛點

1. 學習和理解成本高

Kubernetes 是一個複雜的系統,需要進行一定的學習和理解才能熟練使用。這對於不是很精通這項技術的運維工程師來說是一個很大的難點。

2. 映象管理

在離線環境中,無法直接從網際網路下載 Kubernetes 的映象和依賴項。因此需要將所需的映象和依賴項提前下載到本地,並將其匯入到 Kubernetes 叢集中。這可能需要花費一定的時間和精力。

3. 環境設定

在離線環境中,需要手動設定 Kubernetes 所需的所有元件和依賴項,例如 etcd、kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy 等等。這需要在部署時有較高的運維經驗來對環境初始化問題進行排查和解決。

4. 網路設定

Kubernetes 叢集需要正確設定網路設定,以便容器之間可以互相通訊。在離線環境中,網路設定可能會更加複雜,需要仔細設定才能確保正常執行。

基於以上常見的痛點,我們可以看出,在離線環境中用容器化技術進行交付還是存在較高的學習門檻和設定難度,達不到開箱即用閃電交付的效果。

解決方案

1. 使用 Sealos 實現一鍵打包閃電交付?

Sealos 可以像 Docker 那樣把整個叢集製作成映象,實現分散式軟體的構建、交付、執行。

Sealos 專案地址:https://github.com/labring/sealos

2. 應用場景

  • Kubernetes 叢集安裝
  • Kubernetes 叢集、資料庫、中介軟體、SaaS 應用整體打包,一鍵交付
  • 離線交付,多架構支援,國產化支援
  • 各種在 Kubernetes 上編排的分散式應用交付

3.部署架構圖

4. 編寫一個和 Dockerfile 很類似的 Kubefile,就可以構建一個叢集映象,使用 Clusterfile 去執行一個叢集

實戰部署

1. 下載 Sealos 二進位制檔案

$ wget https://github.com/labring/sealos/releases/download/v4.1.4/sealos_4.1.4_linux_amd64.tar.gz \
   && tar zxvf sealos_4.1.4_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin

2. 編寫 kubefile 並構建叢集映象

說明:此處基於 Kubernetes1.24.0 封裝含有 Calico 的映象作為演示,實際的業務映象也可以基於此方式進行封裝即可。

FROM labring/kubernetes:v1.24.0-amd64
COPY cni ./cni
CMD ["kubectl apply -f cni/tigera-operator.yaml","kubectl apply -f cni/custom-resources.yaml"]
$ sealos build -t registry.cn-hangzhou.aliyuncs.com/flowyun/kubernetes-calico:latest -f Kubefile .

3. 儲存構建出的映象

$ sealos save -o Kubernetes.tar registry.cn-hangzhou.aliyuncs.com/demo/Kubernetes-calico:latest

4. 拷貝 sealos 二進位制檔案和叢集映象到離線環境

$ tar zxvf sealos_4.1.4_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin
$ sealos load -i Kubernetes.tar

5. 檢視叢集映象是否匯入成功

$ sealos images

6. 安裝叢集

說明:以單機安裝為例,叢集安裝同理。

$ sealos run registry.cn-hangzhou.aliyuncs.com/demo/Kubernetes-calico:latest --single

7. 驗證叢集

$ kubectl get pod -A

8.存取業務系統驗證

效率對比

部署服務名稱 傳統交付方式部署耗時 Sealos 閃電交付方式部署耗時
MariaDB資料庫 1'hour 1'min
中介軟體(redis、nacos) 1'hour 30'min
Kubernetes搭建 4'hour
Kubernetes元件設定偵錯 2'hour
業務系統服務 2'hour
12'hour/人 31'min/人

七、總結

  1. Sealos 可以快速部署和升級 Kubernetes 叢集。由於 Sealos 使用離線包來提供軟體,因此不需要依賴 Internet 連線,可以在離線環境下快速部署和升級叢集,提高了部署效率。
  2. Sealos 在離線環境下執行非常穩定和可靠。由於不受外部網路波動等影響,Sealos 的設計使得它在離線環境下執行時非常穩定和可靠,提高了可靠性。
  3. Sealos 使用離線包,不需要從 Internet 下載軟體,因此不易受到網路攻擊和惡意軟體的影響,提高了安全性。
  4. Sealos 使用標準的 Kubernetes YAML 檔案來建立叢集,這意味著使用者可以根據自己的需求進行客製化和擴充套件,從而提高了靈活性。
  5. Sealos 使用簡單,不需要複雜的設定和命令,只需按照指南進行操作即可,降低了學習和使用的門檻,提高了易用性。

Sealos 是一款功能強大、易於使用的工具,可以幫助企業在離線環境中實現高效的容器化交付。Sealos 可以快速部署和升級 Kubernetes 叢集,在離線環境下執行非常穩定和可靠,使用離線包,不需要從 Internet 下載軟體,因此不易受到網路攻擊和惡意軟體的影響,使用標準的 Kubernetes YAML 檔案來建立叢集,降低了學習和使用的門檻,提高了易用性。