天天看點

如何通過 Kubernetes 管理不可變基礎設施

作者

王海龍,SUSE Rancher 中國社群技術經理,Linux Foundation APAC Evangelist,負責 Rancher 中國技術社群的維護和營運。擁有 8 年的雲計算領域經驗,經曆了 OpenStack 到 Kubernetes 的技術變革,無論底層作業系統 Linux,還是虛拟化 KVM 或是 Docker 容器技術都有豐富的運維和實踐經驗。

本文整理自王海龍在 SUSECON 北京 2022 開源技術峰會上的主題演講。

本文主要介紹如何通過 Kubernetes 在邊緣裝置上部署和管理作業系統,然後将這些邊緣裝置組建成一個 Kubernetes 叢集,最後統一接入到 Rancher 中進行管理。

雲原生技術的基礎定義

如何通過 Kubernetes 管理不可變基礎設施

雲原生相信大家已經非常了解了,上圖是 CNCF 對雲原生的定義,也列出了雲原生的代表技術,其中容器、服務網格、微服務、聲明式 API 這些技術,相信大家都已經非常熟悉。

其中一項叫不可變基礎設施,這個概念并不常見,用起來和我們傳統方式有些沖突,有時候大家可能會感覺别扭,我們就從不可變基礎設施談起。

Mutable vs Immutable

如何通過 Kubernetes 管理不可變基礎設施

先來對比一下可變和不可變,也就是 Mutable 和 Immutable。

從基礎設施角度來看,Mutable 更傾向于我們傳統的運維視角,其實就是一個 update in-place,即在原地更新這樣的理念,比如:您原來的主機上安裝了 apache2,上面部署了業務,想換成 nginx,需要先解除安裝掉 apache2 服務,然後再重新安裝一個 nginx,可能也需要重新開機服務或者系統來讓這次變更生效。這個過程,您的基礎設施為了滿足業務需求,進行了一次或者多次變更,實際上它就是一個可變的基礎設施。

Immutable 的核心思想是任何基礎設施的執行個體一旦建立之後變成為隻讀狀态,如需修改和更新,則使用新的執行個體進行替換。如果您有新的變更需求,就應該去準備(provision)一個新的基礎設施,而不是說在原來的基礎上做一個本地的更新。

最大的差別,就是原來的 Mutable 人工幹預的比較多,需要靠人工去作業系統裡進行各種更改。Immutable 的話,更偏向自動化,您已經預先把基礎設施及其依賴都定義好了,這時隻需要去觸發新的變更就可以完成變更。這裡并不涉及到去更改原始的基礎設施,這對于基礎設施來說,就變成不可變的了。

介紹完這兩種理念,大家應該立刻想到了容器技術。您可以建構一個鏡像,然後在鏡像的基礎上去部署業務。如果出現問題,我們不會去容器裡去做變更,而是從容器建構階段去解決問題。是以從容器的角度,鏡像就是一個不可變的基礎設施。容器技術出現後,Immutable 就變得非常直覺,也出現了類似 OCI Image 這樣的規範。

Immutable 不隻存在于容器領域,也逐漸下沉到了作業系統的層面,Immutable OS 也借助 Container 的理念,形成了許多 Container OS,比如:RancherOS,K3os,CoreOS。這些 OS 的理念,都是從這個角度衍生出來的。

Elemental-toolkit:提供 Container based OS 的自定義能力

如何通過 Kubernetes 管理不可變基礎設施

我們之前在使用作業系統的時候,很少自己建構;就算有特殊需求需要建構作業系統,我們自定義的内容也不會特别多。

既然是 Container OS,那就應該像容器一樣,能夠傳遞給使用者一個充分自定義能力的作業系統。是以我們做了一個叫 Elemental-toolkit 的工具,來讓使用者自己去建構一個自定義的 Container OS。

這個工具有兩個非常重要的特點:

  • 可以使用 Dockerfile 定義作業系統,就像寫原始的 docker images 那樣。Elemental-toolkit 可以基于您寫的 dockerfile 來去建構一個作業系統。這并不是一個簡單的鏡像,而是一個作業系統,這裡面有核心、rootfs,還有您加的軟體包。
  • 為了和 OCI Image 的理念整合,是以這個作業系統是可以使用 OCI Image 去做分發;也就是說您建構出來的作業系統,可以上傳到 dockerhub。更新的時候,就直接到 dockerhub 去拉這個鏡像,然後自動到您的作業系統上安裝。也就是說您運維作業系統和運維容器沒什麼差別。

使用 Kubernetes 管理邊緣基礎設施

如何通過 Kubernetes 管理不可變基礎設施

Elemental-toolkit 可以建構一個自定義的基礎作業系統,然後就可以借助 Kubernetes 能力來去管理邊緣基礎設施。當然,還需要借助一些工具才能實作:

  • RancherD:其實就是一個部署工具,可以實作自定義部署 Rancher/k3s/rke2。RancherD 可以封裝到由 Elemental-tools 建構的作業系統裡,這樣啟動作業系統之後就會自動建立 K3s 叢集。
  • RancherOS Operator:可以實作自動注冊節點到叢集,然後批量更新和管理作業系統的版本等一些功能。我們可以通過 RancherOS Operator 來管理這些不可變的基礎設施,也就是由 Elemental-toolkit 建構的這些不可變的作業系統。

Demo:通過 Kubernetes 在邊緣裝置上安裝和管理 OS

  • RancherOS Operator 安裝和設定
  • 建構引導 ISO 映像
  • 建立下遊叢集
  • 将 OS 安裝到節點,并添加到叢集
  • 更新 OS

繼續閱讀