平台
顯而易見的解決方案是使用 Red Hat Enterprise Linux CoreOS(Red Hat Enterprise Linux 的一個變體)和 CRI-O 作為標準,原因如下...
由於航行這個主題在解釋 Kubernetes 和容器的工作時非常適合尋找類比,所以讓我們試著用一個例子來談談 CoreOS 和 CRI-O 解決的業務問題
現在想像一下,如果 Brunel 必須為 20 種不同的船舶模型(Kubernetes 版本)和五個具有完全不同海流和風的不同行星(雲端提供者)完成這項工作。此外,從船長(管理集群運行的操作員)的角度來看,所有船舶(OpenShift 集群),無論在哪個行星上進行導航,都必須表現得相同。繼續用海事類比來說,船長根本不關心他們的船上使用什麼樣的索具組 (CRI-O) - 對他們來說最重要的是這些索具堅固可靠。
OpenShift 4 作為一個雲端平台,面臨著非常相似的業務挑戰。如果節點之一發生故障或擴展叢集時,必須在建立叢集時建立新節點。建立並初始化新節點時,必須相應配置關鍵主機元件(包括 CRI-O)。與其他生產一樣,必須在一開始就提供“原材料”。就船舶而言,原料是金屬和木材。但是,在建立用於在 OpenShift 4 叢集中部署容器的主機時,您需要將設定檔和提供 API 的伺服器作為輸入。然後,OpenShift 將在整個生命週期中提供所需的自動化水平,為最終用戶提供必要的產品支持,從而收回平台投資。
OpenShift 4 的創建方式是為所有主要雲端運算供應商、虛擬化平台甚至裸機系統提供在平台的整個生命週期(版本 4.X)中方便更新系統的能力。為此,必須在可互換元素的基礎上建立節點。當叢集需要新版本的 Kubernetes 時,它也會收到 CoreOS 上對應版本的 CRI-O。由於 CRI-O 版本直接與 Kubernetes 綁定,這極大地簡化了用於測試、故障排除或支援目的的任何排列。此外,這種方法還降低了最終用戶和紅帽的成本。
這是一種全新的 Kubernetes 叢集思考方式,為規劃一些非常有用且引人注目的新功能奠定了基礎。 CRI-O(容器運行時介面 - 開放容器計劃,縮寫為 CRI-OCI)已被證明是大規模創建與 OpenShift 配合使用所需的節點的最成功選擇。 CRI-O 將取代先前使用的 Docker 引擎,為 OpenShift 使用者提供服務
開放容器的世界
長期以來,世界一直朝著開放式容器的方向發展。無論是在 Kubernetes 中,還是在較低級別,
一切都始於開放容器倡議的創建
隨後,Kubernetes 社群為可插拔介面開發了一個單一標準,稱為
紅帽和Google的工程師看到了市場對能夠透過 CRI 協議接受 Kubelet 請求的容器引擎的需求,並引入了與上述 OCI 規範相容的容器。所以
圖。 1。
CRI-O 和 CoreOS 的創新
隨著 OpenShift 4 平台的推出,它發生了變化
等等,這怎麼樣?
沒錯,隨著 OpenShift 4 的出現,不再需要連接到各個主機並安裝容器引擎、設定儲存、設定搜尋伺服器或設定網路。 OpenShift 4 平台經過徹底重新設計,可以使用
Kubernetes 始終允許使用者透過定義所需狀態並使用
透過在平台中使用 Operator,OpenShift 4 將這種新範例(使用設定和實際狀態的概念)引入到 RHEL CoreOS 和 CRI-O 的管理中。配置和管理作業系統和容器引擎版本的任務是使用所謂的自動化
運行容器
自從版本 3.7 處於技術預覽狀態以及版本 3.9 處於正式可用狀態(目前支援)以來,用戶有機會在 OpenShift 平台中使用 CRI-O 引擎。此外,紅帽大量使用
米。 2. 容器如何在 Kubernetes 叢集中運作
CRI-O 透過在初始化新節點以及發布 OpenShift 平台新版本時同步整個頂層,簡化了新容器主機的建立。整個平台的修訂允許事務性更新/回滾,還可以防止容器尾部核心、容器引擎、節點(Kubelet)和 Kubernetes Master 節點之間的依賴關係出現死鎖。透過集中管理所有平台元件,並進行控制和版本控制,從狀態A 到狀態B 始終有一條清晰的路徑。這簡化了更新過程,提高了安全性,改進了效能報告,並有助於降低更新和安裝新版本的成本。
展示替換元素的力量
如前所述,在 OpenShift 4 中使用 Machine Config Operator 管理容器主機和容器引擎提供了新的自動化水平,這在 Kubernetes 平台上以前是不可能實現的。為了示範新功能,我們將展示如何更改 crio.conf 檔案。為了避免被術語混淆,請嘗試專注於結果。
首先,讓我們建立所謂的容器執行時間配置 - Container Runtime Config。將其視為代表 CRI-O 配置的 Kubernetes 資源。實際上,它是 MachineConfig 的專門版本,MachineConfig 是作為 OpenShift 叢集的一部分部署到 RHEL CoreOS 電腦的任何配置。
建立這個名為 ContainerRuntimeConfig 的自訂資源是為了讓叢集管理員更輕鬆地設定 CRI-O。工具功能強大,只能應用於某些節點,取決於 MachineConfigPool 設定。將其視為具有相同目的的一組機器。
請注意我們要在 /etc/crio/crio.conf 檔案中更改的最後兩行。這兩行與 crio.conf 檔案中的行非常相似,它們是:
vi ContainerRuntimeConfig.yaml
結論:
apiVersion: machineconfiguration.openshift.io/v1
kind: ContainerRuntimeConfig
metadata:
name: set-log-and-pid
spec:
machineConfigPoolSelector:
matchLabels:
debug-crio: config-log-and-pid
containerRuntimeConfig:
pidsLimit: 2048
logLevel: debug
現在讓我們將此檔案推送到 Kubernetes 叢集並檢查它是否確實已建立。請注意,該操作與任何其他 Kubernetes 資源完全相同:
oc create -f ContainerRuntimeConfig.yaml
oc get ContainerRuntimeConfig
結論:
NAME AGE
set-log-and-pid 22h
在建立 ContainerRuntimeConfig 後,我們需要修改其中一個 MachineConfigPool,以向 Kubernetes 發出訊號,表示我們希望將此配置套用到叢集中的特定機器群組。在這種情況下,我們將更改主節點的 MachineConfigPool:
oc edit MachineConfigPool/master
結論(為了清晰起見,留下主要精華):
...
metadata:
creationTimestamp: 2019-04-10T23:42:28Z
generation: 1
labels:
debug-crio: config-log-and-pid
operator.machineconfiguration.openshift.io/required-for-upgrade: ""
...
此時,MCO 開始為叢集建立新的 crio.conf 檔案。此時,可以使用 Kubernetes API 查看完整的設定檔。請記住,ContainerRuntimeConfig 只是 MachineConfig 的專門版本,因此我們可以透過查看 MachineConfigs 中的相關行來查看結果:
oc get MachineConfigs | grep rendered
結論:
rendered-master-c923f24f01a0e38c77a05acfd631910b 4.0.22-201904011459-dirty 2.2.0 16h
rendered-master-f722b027a98ac5b8e0b41d71e992f626 4.0.22-201904011459-dirty 2.2.0 4m
rendered-worker-9777325797fe7e74c3f2dd11d359bc62 4.0.22-201904011459-dirty 2.2.0 16h
請注意,主節點的最終設定檔是比原始配置更新的版本。要查看它,請運行以下命令。順便說一句,我們注意到這可能是 Kubernetes 歷史上最好的俏皮話之一:
python3 -c "import sys, urllib.parse; print(urllib.parse.unquote(sys.argv[1]))" $(oc get MachineConfig/rendered-master-f722b027a98ac5b8e0b41d71e992f626 -o YAML | grep -B4 crio.conf | grep source | tail -n 1 | cut -d, -f2) | grep pid
結論:
pids_limit = 2048
現在讓我們確保配置已套用至所有主節點。首先我們取得叢集中的節點列表:
oc get node | grep master
Output:
ip-10-0-135-153.us-east-2.compute.internal Ready master 23h v1.12.4+509916ce1
ip-10-0-154-0.us-east-2.compute.internal Ready master 23h v1.12.4+509916ce1
ip-10-0-166-79.us-east-2.compute.internal Ready master 23h v1.12.4+509916ce1
現在讓我們看看安裝的檔案。您將看到該檔案已更新為我們在 ContainerRuntimeConfig 資源中指定的 pid 和 debug 指令的新值。優雅本身:
oc debug node/ip-10-0-135-153.us-east-2.compute.internal — cat /host/etc/crio/crio.conf | egrep 'debug||pid’
結論:
...
pids_limit = 2048
...
log_level = "debug"
...
對叢集的所有這些更改甚至都沒有運行 SSH。所有工作都是透過造訪Kuberentes主節點來完成的。也就是說,這些新參數僅在主節點上配置。工作節點沒有改變,這證明了 Kubernetes 方法的好處,即使用與容器主機和具有可互換元素的容器引擎相關的指定和實際狀態。
上面的範例展示了對具有三個生產節點的小型 OpenShift Container Platform 4 叢集或具有 3000 個節點的大型生產叢集進行變更的能力。無論如何,工作量都是相同的 - 而且非常小 - 只需配置 ContainerRuntimeConfig 文件,並更改 MachineConfigPool 中的一個標籤。您可以使用在整個生命週期中執行 Kubernetes 的任何版本的 OpenShift Container Platform 4.X 來執行此操作。
通常,科技公司發展得如此之快,以至於我們無法解釋為什麼我們為底層組件選擇某些技術。容器引擎歷來是使用者直接互動的元件。由於容器的流行自然是隨著容器引擎的出現而開始的,因此使用者經常對它們表現出興趣。這也是紅帽選擇CRI-O的另一個原因。容器正在不斷發展,現在的重點是編排,我們發現 CRI-O 在使用 OpenShift 4 時提供了最佳體驗。
來源: www.habr.com