全球微資訊!Rancher RFO 正式 GA

2022-12-26 17:12:21 來源:51CTO博客

Rancher RFO GA

RFO 是 Rancher For openEuler 的縮寫,旨在面向 openEuler 打造 Rancher 基礎(chǔ)平臺。其中最核心的工作是打造一款面向 openEuler 生態(tài)的 Kubernetes 發(fā)行版。它基于上游 RKE2 的技術(shù)棧,構(gòu)建物采用 openEuler base image,致力于滿足國內(nèi)更加注重的安全合規(guī)標(biāo)準(zhǔn),對 openEuler LTS 版本擁有優(yōu)秀的兼容性。

SUSE 在歐拉開源社區(qū)中成立了 ??RFO SIG??,以社區(qū)協(xié)作方式運(yùn)作產(chǎn)品迭代,并將 RFO 發(fā)行版的工作成果進(jìn)行開源(??https://gitee.com/rfolabs/rfo)。??


(資料圖)

RFO 發(fā)行版的主要愿景如下:

完整可溯源的工程化。確保核心組件的構(gòu)建記錄和端到端測試結(jié)果均可溯源。產(chǎn)品化開箱即用。確保 RFO 的安裝部署可以快速上手,并支持從 Rancher Prime 配置部署。充分依托 openEuler 生態(tài)。確保核心組件的構(gòu)建使用 openEuler 生態(tài)體系,依托 openEuler container image 進(jìn)行最終打包。軟件供應(yīng)鏈安全與合規(guī)。確保核心組件的分發(fā)產(chǎn)物不可篡改,并致力于提供等保加固的 Kubernetes 集群環(huán)境。多樣性算力支持。提供面向 AMD64 和 ARM64 以及 RISC-V 等多樣性算力的 Kubernetes 基礎(chǔ)設(shè)施。

RFO SIG 于 2022 年 9 月初在歐拉開源社區(qū)成立,歷經(jīng) 3 個月的工程迭代,我們正式推出 RFO 發(fā)行版的 GA 版本,歡迎試用并在 Rancher 社區(qū)和歐拉開源社區(qū)進(jìn)行反饋。目前有以下已測試的版本可供使用:v1.23.14+rfor1/v1.24.8+rfor1/v1.25.4+rfor1 ,后續(xù)我們也會長期跟蹤 Kubernetes 的上游版本演進(jìn)。

快速上手

基于 RFO v1.24.8+rfor1 版本以及 openEuler 22.03-LTS 進(jìn)行快速上手演示。

安裝準(zhǔn)備

安裝準(zhǔn)備步驟需要在所有主機(jī)上運(yùn)行:

1. 查看 OS 版本:

cat /etc/os-release

輸出:

NAME="openEuler"VERSION="22.03 LTS"ID="openEuler"VERSION_ID="22.03"PRETTY_NAME="openEuler 22.03 LTS"ANSI_COLOR="0;31"

2. 配置 NetworkManager 進(jìn)行忽略 Canal CNI 的 veth 接口

touch /etc/NetworkManager/conf.d/rfo-canal.confcat >> /etc/NetworkManager/conf.d/rfo-canal.conf << EOF[keyfile]unmanaged-devices=interface-name:cali*;interface-name:flannel*EOFsystemctl disable nm-cloud-setup.service nm-cloud-setup.timersystemctl reload NetworkManager

3. 停止 openEuler 防火墻服務(wù),RFO 中默認(rèn)的 Canal CNI 與 Firewalld 網(wǎng)絡(luò)棧有沖突,需要禁用 Firewalld

systemctl stop firewalldsystemctl disable firewalld
安裝Server

1. 使用 install 腳本安裝 RFO:

curl -sfL https://gitee.com/rfolabs/rfo/raw/rfo-master/install-rfo.sh | INSTALL_RFO_VERSION="v1.24.8+rfor1" sh -

該腳本只能通過 root 用戶或 sudo 運(yùn)行

安裝結(jié)果如下:

[INFO]  using v1.24.8+rfor1 as release[INFO]  downloading checksums at https://rfolabs.oss-cn-shenzhen.aliyuncs.com/rfo/releases/v1.24.8%2Brfor1/sha256sum-amd64.txt[INFO]  downloading tarball at https://rfolabs.oss-cn-shenzhen.aliyuncs.com/rfo/releases/v1.24.8%2Brfor1/rfo.linux-amd64.tar.gz[INFO]  verifying tarball[INFO]  unpacking tarball file to /usr/local

2. 啟用 rfo-server 服務(wù)

systemctl enable rfo-server

3. 啟動 rfo-server 服務(wù)

systemctl start rfo-server.service

4. (可選)查看 rfo-server 服務(wù)日志

journalctl -u rfo-server -f

運(yùn)行此安裝程序后:

??rfo-server??服務(wù)將被安裝。??rfo-server??服務(wù)將被配置為在節(jié)點重啟后或進(jìn)程崩潰或被殺時自動重啟。其他的實用程序?qū)⒈话惭b在??/var/lib/rancher/rfo/bin/??。它們包括??kubectl??,??crictl??, 和??ctr.??注意,這些默認(rèn)不在你的路徑上。還有兩個清理腳本會安裝到??/usr/local/bin/rfo??的路徑上。它們是??rfo-killall.sh??和??rfo-uninstall.sh??。一個 kubeconfig 文件將被寫入??/etc/rancher/rfo/rfo.yaml??。一個可用于注冊其他 server 或 agent 節(jié)點的令牌將在??/var/lib/rancher/rfo/server/node-token??文件中創(chuàng)建。

注意:如果你要添加額外的 server 節(jié)點,則總數(shù)必須為奇數(shù)。需要奇數(shù)來維持選舉數(shù)。

安裝 Agent

1. 運(yùn)行安裝程序

curl -sfL https://gitee.com/rfolabs/rfo/raw/rfo-master/install-rfo.sh | INSTALL_RFO_VERSION="v1.24.8+rfor1" INSTALL_RFO_TYPE="agent" sh -

2. 啟用 rfo-agent 服務(wù)

systemctl enable rfo-agent.service

3. 配置 rfo-agent 服務(wù)

mkdir -p /etc/rancher/rfo/vim /etc/rancher/rfo/config.yaml

config.yaml 的內(nèi)容。

server: https://:9345token: 

其中 token 可以在 server 節(jié)點中運(yùn)行??cat /var/lib/rancher/rfo/server/node-token??命令獲取。

??rfo server??進(jìn)程通過端口??9345??監(jiān)聽新節(jié)點的注冊。正常情況下,Kubernetes API 仍可在端口 6443 上使用。

4. 啟動服務(wù)

systemctl start rfo-agent.service

5. (可選)查看 rfo-agent 服務(wù)日志

journalctl -u rfo-agent -f
訪問集群

在安裝完成 rfo-server 節(jié)點后,即可以在 server 節(jié)點中使用內(nèi)置的 kubectl 以及 kubeconfig 配置訪問集群:

export KUBECONFIG=/etc/rancher/rfo/rfo.ymlexport PATH=/var/lib/rancher/rfo/bin:$PATHkubectl get pods --all-namespaceshelm ls --all-namespaces

或在指令中指定 kubeconfig 文件位置:

kubectl --kubeconfig /etc/rancher/rfo/rfo.yml get pods --all-namespaceshelm --kubeconfig /etc/rancher/rfo/rfo.yml ls --all-namespaces

若希望在集群外部訪問集群,則可以復(fù)制??/etc/rancher/rfo/rfo.yml??配置文件到你位于集群外部的機(jī)器上,作為??~/.kube/config??。然后將文件中??127.0.0.1??替換為你的 RFO 服務(wù)器的 IP 或主機(jī)名。??kubectl??現(xiàn)在可以管理你的 RFO 集群了。

功能特點

精簡部署

RFO 基于 RKE2 進(jìn)行重新打包制作而成,具有 RKE2 所有的功能特點,吸取了開發(fā)和維護(hù)輕量級 Kubernetes 發(fā)行版 K3s 的經(jīng)驗教訓(xùn),并將其應(yīng)用于構(gòu)建一個具有 K3s 易用性的企業(yè)級發(fā)行版。這意味著,RFO 在最簡單的情況下是一個單一的二進(jìn)制文件,需要在所有參與 Kubernetes 集群的節(jié)點上安裝和配置。一旦啟動,RFO 就能夠引導(dǎo)和監(jiān)督每個節(jié)點上的角色合適的 agent,同時從網(wǎng)絡(luò)上獲取所需的內(nèi)容。以下為 RFO 架構(gòu)示意圖:

以下組件為 RFO 在項目中使用的 Kubernetes 組件,其中大部分經(jīng)過重新打包并使用 openEuler base image 進(jìn)行分發(fā)

在使用??install.sh??腳本進(jìn)行安裝時,rfo 將會以 linux system service 的方式安裝到系統(tǒng)中,使用 systemd 作為??RFO Supervisor??。其余方式(包括下載 rfo binary 直接啟動)并不推薦,某些場景下會沒有??RFO Supervisor??角色監(jiān)控 RFO 運(yùn)行狀態(tài),導(dǎo)致 kubelet 等程序常駐后臺運(yùn)行。

一般情況下,RFO 以安裝包的方式進(jìn)行分發(fā),安裝包中只包含??rfo??二進(jìn)制本體、systemd service 配置文件以及卸載腳本。其余組件將在 RFO 啟動后,根據(jù)啟動節(jié)點的角色進(jìn)行拉取并安裝啟動。

備份恢復(fù)

在 RFO 運(yùn)行的時候,你可以使用??etcd-snapshot??子命令來進(jìn)行 etcd 快照管理。功能包括:

使用本地目錄或 s3 作為快照存儲后端對當(dāng)前 etcd 數(shù)據(jù)建立快照對集群進(jìn)行重置并從快照中恢復(fù)數(shù)據(jù)到當(dāng)前或新節(jié)點中定時備份
Helm 集成

RFO 內(nèi)置 ??Helm Controller??,它使用 HelmChart 自定義資源定義(CRD)來管理 Helm chart。

??HelmChart 資源定義??捕獲了你通常傳遞給??helm??命令行工具的大部分選項。下面是一個例子,說明你如何從默認(rèn)的 chart 資源庫部署 Grafana,覆蓋一些默認(rèn)的 chart 值。注意,HelmChart 資源本身在??kube-system??命名空間中,但 chart 的資源將被部署到??monitoring??命名空間。

apiVersion: helm.cattle.io/v1kind: HelmChartmetadata:  name: grafana  namespace: kube-systemspec:  chart: stable/grafana  targetNamespace: monitoring  set:    adminPassword: "NotVerySafePassword"  valuesContent: |-    image:      tag: master    env:      GF_EXPLORE_ENABLED: true    adminUser: admin    sidecar:      datasources:        enabled: true

另外 RFO 支持通過??HelmChartConfig??資源來自定義部署,允許覆蓋作為 HelmCharts 部署的打包組件(如 Canal、CoreDNS、Nginx-Ingress 等)的值。??HelmChartConfig??資源必須與其對應(yīng)的 HelmChart 的名稱和命名空間相匹配,并支持提供額外的??valuesContent??,作為一個額外的值文件傳遞給??helm??命令。

注意:HelmChart??spec.set??值覆蓋 HelmChart 和 HelmChartConfig??spec.valuesContent??設(shè)置。

例如對上文例子中的 Grafana helm chart 進(jìn)行自定義 Grafana image 的 tag,可以創(chuàng)建一個 Kubernetes 資源文件,并用以下內(nèi)容填充它,并使用??kubectl apply -f ??進(jìn)行應(yīng)用:

apiVersion: helm.cattle.io/v1kind: HelmChartConfigmetadata:  name: grafana  namespace: kube-systemspec:  valuesContent: |-    image:      tag: 9.3.2
證書輪換

RFO 中的證書默認(rèn)在 12 個月后到期。如果證書已經(jīng)過期或剩余時間少于 90 天,可以使用??certificate??子命令對證書進(jìn)行輪換,當(dāng) RFO 重新啟動時,證書將被輪換。

systemctl stop rfo-server

你也可以通過傳遞??--service??標(biāo)志來輪換單個服務(wù),例如:??rfo certificate rotate --service api-server??。

Secret加密

RFO 支持通過子命令??secrets-encrypt??開啟對 Secret 進(jìn)行靜態(tài)加密,開啟后會自動進(jìn)行以下操作:

生成一個 AES-CBC 密鑰用生成的密鑰生成一個加密配置文件:
{  "kind": "EncryptionConfiguration",  "apiVersion": "apiserver.config.Kubernetes.io/v1",  "resources":    [      {        "resources": ["secrets"],        "providers":          [            {              "aescbc":                {                  "keys":                    [{ "name": "aescbckey", "secret": "xxxxxxxxxxxxxxxxxxx" }],                },            },            { "identity": {} },          ],      },    ],}
將該配置作為 encryption-provider-config 傳遞給 Kubernetes APIServer

一旦啟用,任何創(chuàng)建的 secret 都將用這個密鑰進(jìn)行加密。請注意,如果你禁用加密,那么任何加密的 secret 將無法讀取,直到你使用相同的密鑰再次啟用加密。

安全可信

RFO 設(shè)計上與 Openeuler 緊密結(jié)合,在安全合規(guī)性上與 Openeuler 系統(tǒng)一致;并在持續(xù)集成流水線中,基于 Openeuler 容器鏡像運(yùn)行 sonobuoy 測試,保證 RFO 發(fā)行版兼容 CNCF 認(rèn)證的 Kubernetes 發(fā)行版功能要求。

維護(hù)原則與發(fā)布周期

RFO 的維護(hù)與發(fā)布周期與 RKE2 以及 Kubernetes 版本生命周期一致,并遵循以下原則:

RKE2 小版本將會根據(jù)改動內(nèi)容,在 RKE2 release 后一周內(nèi)進(jìn)行跟進(jìn);如出現(xiàn)的改動與 RFO 無關(guān),則跳過小版本發(fā)布RKE2 大版本目前會跟進(jìn) Kubernetes 大版本進(jìn)行維護(hù),在 RKE2 release 后兩周內(nèi)進(jìn)行跟進(jìn)

針對 openEuler OS 的更新,遵循以下原則:

只針對 openEuler LTS(long term support)版本發(fā)布對應(yīng)的 RFO 版本,目前經(jīng)驗為 2 年一個新 LTS 版本,在新版本發(fā)布后 RFO 會在最近一個 RFO Release 進(jìn)行跟進(jìn)當(dāng) openEuler 出現(xiàn)致命或高等級系統(tǒng)漏洞的情況下,發(fā)布 RFO 小版本進(jìn)行跟進(jìn)

RFO 除 RKE2 原生的功能外,目前以測試整合 openEuler 操作系統(tǒng)為目標(biāo)進(jìn)行維護(hù),并計劃后續(xù)添加以下支持:

ARM64 平臺支持內(nèi)置 iSula 運(yùn)行時支持

后續(xù)規(guī)劃

后續(xù)規(guī)劃主要圍繞構(gòu)建物安全可信認(rèn)證以及擴(kuò)充構(gòu)建物分發(fā)途徑開展。

構(gòu)建物安全可信認(rèn)證主要包括以下方面,確保核心組件的分發(fā)產(chǎn)物不可篡改,并致力于提供等保加固的 Kubernetes 集群環(huán)境:

針對分發(fā)的容器鏡像,進(jìn)行鏡像簽名針對分發(fā)的 RFO charts,進(jìn)行 helm charts 簽名

擴(kuò)充構(gòu)建物分發(fā)途徑主要包括以下方面:

支持離線鏡像制作以及離線部署構(gòu)建 RFO 以及 ??kube-explorer?? RPM 包并通過 openEuler 的軟件源進(jìn)行分發(fā)

標(biāo)簽: 核心組件 命名空間 配置文件

上一篇:熱門:#yyds干貨盤點# 名企真題專題:怪?jǐn)?shù)
下一篇:#yyds干貨盤點# LeetCode程序員面試金典:檢查子樹