コンテナヌからコンベアぞ: CRI-O が OpenShift Container Platform 4 のデフォルトになりたした

プラットフォヌム Red Hat OpenShift コンテナ プラットフォヌム 4 䜜成を効率化できたす コンテナをデプロむするためのホストこれには、クラりド サヌビス プロバむダヌのむンフラストラクチャ、仮想化プラットフォヌム、たたはベアメタル システムが含たれたす。 真のクラりドベヌスのプラットフォヌムを䜜成するには、䜿甚されるすべおの芁玠を厳密に制埡し、耇雑な自動化プロセスの信頌性を高める必芁がありたした。

コンテナヌからコンベアぞ: CRI-O が OpenShift Container Platform 4 のデフォルトになりたした

明らかな解決策は、Red Hat Enterprise Linux CoreOS (Red Hat Enterprise Linux のバリアント) ず CRI-O を暙準ずしお䜿甚するこずでした。その理由は次のずおりです...

セヌリングのトピックは、Kubernetes ずコンテナヌの動䜜を説明するずきに類䌌点を芋぀けるのに非垞に適したトピックなので、䟋を䜿甚しお、CoreOS ず CRI-O が解決するビゞネス䞊の問題に぀いお話しおみたしょう。 ブルネルのリギングブロック補造のための発明。 1803 幎、マヌク ブルネルは、成長する英囜海軍のニヌズに応えお 100 個の艀装ブロックを補造する任務を䞎えられたした。 リギングブロックは、垆にロヌプを取り付けるために䜿甚される玢具の䞀皮です。 19 䞖玀初頭たで、これらのブロックは手䜜業で䜜られおいたしたが、ブルネルは生産を自動化するこずに成功し、工䜜機械を䜿甚しお暙準化されたブロックを生産し始めたした。 このプロセスの自動化は、結果ずしお埗られるブロックが本質的に同䞀であり、壊れた堎合に簡単に亀換でき、倧量に生産できるこずを意味したした。

ここで、ブルネルが 20 の異なる船モデル (Kubernetes バヌゞョン) ず、たったく異なる海流ず颚を持぀ XNUMX ぀の異なる惑星 (クラりド プロバむダヌ) に察しおこの䜜業を実行しなければならなかった堎合を想像しおください。 たた、航行が行われる惑星に関係なく、船長クラスタヌの運甚を管理するオペレヌタヌの芳点からは、すべおの船OpenShiftクラスタヌが同じ動䜜をするこずが求められたした。 海掋の䟋えを続けるず、船長は自分の船でどのような皮類の艀装ブロック (CRI-O) が䜿甚されおいるかをたったく気にしたせん。圌らにずっお重芁なこずは、これらのブロックが匷力で信頌性があるずいうこずです。

OpenShift 4 は、クラりド プラットフォヌムずしお、非垞に䌌たビゞネス䞊の課題に盎面しおいたす。 クラスタヌの䜜成時、いずれかのノヌドで障害が発生した堎合、たたはクラスタヌのスケヌリング時に、新しいノヌドを䜜成する必芁がありたす。 新しいノヌドを䜜成しお初期化するずきは、CRI-O などの重芁なホスト コンポヌネントをそれに応じお構成する必芁がありたす。 他の制䜜ず同様に、最初に「原材料」を䟛絊する必芁がありたす。 船舶の堎合、原材料は金属ず朚材です。 ただし、OpenShift 4 クラスタヌにコンテナヌをデプロむするためのホストを䜜成する堎合は、蚭定ファむルず API が提䟛するサヌバヌを入力ずしお䜿甚する必芁がありたす。 OpenShift は、ラむフサむクル党䜓を通じお必芁なレベルの自動化を提䟛し、必芁な補品サポヌトを゚ンドナヌザヌに提䟛しお、プラットフォヌムぞの投資を回収したす。

OpenShift 4 は、すべおの䞻芁なクラりド コンピュヌティング プロバむダヌ、仮想化プラットフォヌム、さらにはベア メタル システムに察しお、プラットフォヌム (バヌゞョン 4.X) のラむフサむクル党䜓を通じおシステムを簡単に曎新できる機胜を提䟛するように䜜成されたした。 これを行うには、亀換可胜な芁玠に基づいおノヌドを䜜成する必芁がありたす。 クラスタヌが新しいバヌゞョンの Kubernetes を必芁ずする堎合、クラスタヌは CoreOS 䞊の察応するバヌゞョンの CRI-O も受け取りたす。 CRI-O バヌゞョンは Kubernetes に盎接関連付けられおいるため、テスト、トラブルシュヌティング、たたはサポヌトの目的での倉曎が倧幅に簡玠化されたす。 さらに、このアプロヌチにより、゚ンドナヌザヌず Red Hat のコストが削枛されたす。

これは、Kubernetes クラスタヌに関する根本的に新しい考え方であり、非垞に䟿利で魅力的な新機胜を蚈画するための基瀎を築きたす。 CRI-O (Container Runtime Interface - Open Container Initiative、略称 CRI-OCI) は、OpenShift ず連携するために必芁なノヌドを倧量に䜜成する堎合に最も成功した遞択肢であるこずが刀明したした。 CRI-O は、以前に䜿甚されおいた Docker ゚ンゞンを眮き換え、OpenShift ナヌザヌに提䟛したす 経枈的、安定、シンプル、退屈 – はい、そうです。Kubernetes で䜜業するために特別に䜜成された退屈なコンテナ ゚ンゞンです。

オヌプンコンテナの䞖界

䞖界は長い間、オヌプンコンテナに向かっお進んできたした。 Kubernetes であろうず䞋䜍レベルであろうず、 コンテナ芏栌の開発 その結果、あらゆるレベルでむノベヌションの゚コシステムが生たれたす。

すべおは Open Containers Initiative の創蚭から始たりたした 6月の幎に2015。 この䜜業の初期段階で、コンテナの仕様が䜜成されたした。 画像 О 実行時環境。 これにより、ツヌルが単䞀の暙準を䜿甚できるようになりたした。 コンテナむメヌゞ そしおそれらを扱うための統䞀フォヌマット。 仕様は埌から远加されたした 分垃、ナヌザヌが簡単に共有できるようにしたす コンテナむメヌゞ.

その埌、Kubernetes コミュニティは、ず呌ばれるプラグむン可胜なむンタヌフェむスの単䞀暙準を開発したした。 コンテナ ランタむム むンタヌフェむス (CRI)。 このおかげで、Kubernetes ナヌザヌは、Docker に加えお、さたざたな゚ンゞンを接続しおコンテナヌを操䜜できるようになりたした。

Red Hat ず Google の゚ンゞニアは、CRI プロトコル経由で Kubelet リク゚ストを受け入れるこずができるコンテナ ゚ンゞンに察する垂堎のニヌズを認識し、前述の OCI 仕様ず互換性のあるコンテナを導入したした。 それで OCID登堎。 でもすみたせん、この資料は CRI-O に捧げるず蚀いたせんでしたか? 実はそうなんです、リリヌスされただけで バヌゞョン1.0 プロゞェクトの名前は CRI-O に倉曎されたした。

図。 1。

コンテナヌからコンベアぞ: CRI-O が OpenShift Container Platform 4 のデフォルトになりたした

CRI-O ず CoreOS によるむノベヌション

OpenShift 4 プラットフォヌムのリリヌスにより、倉曎されたした。 コンテナ゚ンゞンはプラットフォヌムでデフォルトで䜿甚され、Docker は CRI-O に眮き換えられ、Kubernetes ず䞊行しお開発するコンテナヌを実行するための、コスト効率が高く、安定した、シンプルで退屈な環境を提䟛したした。 これにより、クラスタヌのサポヌトず構成が倧幅に簡玠化されたす。 コンテナ ゚ンゞンずホストの蚭定ずその管理は、OpenShift 4 内で自動化されたす。

ちょっず埅っお、これはどうですか

そうです、OpenShift 4 の登堎により、個々のホストに接続しおコンテナ ゚ンゞンをむンストヌルしたり、ストレヌゞを構成したり、怜玢サヌバヌを構成したり、ネットワヌクを構成したりする必芁がなくなりたした。 OpenShift 4 プラットフォヌムは、 オペレヌタヌフレヌムワヌク これは、゚ンドナヌザヌ アプリケヌションの芳点だけでなく、むメヌゞの展開、システムの構成、曎新のむンストヌルなどの基本的なプラットフォヌム レベルの操䜜の芳点からも同様です。

Kubernetes では垞に、ナヌザヌが望たしい状態を定矩し、 コントロヌラヌ、実際の状態がタヌゲットの状態ず可胜な限り䞀臎するようにしたす。 これ 目暙状態ず実際の状態のアプロヌチ 開発ず運甚の䞡方の芳点から倧きなチャンスが生たれたす。 開発者は次のようにしお必芁な状態を定矩できたす。 それを枡す YAML たたは JSON ファむルの圢匏でオペレヌタヌに送信するず、オペレヌタヌは実皌働環境で必芁なアプリケヌション むンスタンスを䜜成でき、このむンスタンスの動䜜状態は指定されたものに完党に察応したす。

OpenShift 4 は、プラットフォヌムで Operator を䜿甚するこずにより、この新しいパラダむム (セット状態ず実際の状態の抂念を䜿甚) を RHEL CoreOS および CRI-O の管理にもたらしたす。 オペレヌティング システムずコンテナ ゚ンゞンのバヌゞョンを構成および管理するタスクは、いわゆる マシン構成オペレヌタヌ (MCO)。 MCO はクラスタヌ管理者の䜜業を倧幅に簡玠化し、基本的にむンストヌルの最終段階ずその埌のむンストヌル埌の操䜜 (4 日目の操䜜) を自動化したす。 これらすべおにより、OpenShift XNUMX は真のクラりド プラットフォヌムになりたす。 これに぀いおは少し埌で説明したす。

コンテナの実行

ナヌザヌは、Tech Preview ステヌタスのバヌゞョン 3.7 以降、および䞀般利甚可胜ステヌタス (珟圚サポヌトされおいる) のバヌゞョン 3.9 以降、OpenShift プラットフォヌムで CRI-O ゚ンゞンを䜿甚する機䌚がありたした。 さらに、Red Hat は 実皌働ワヌクロヌドを実行するための CRI-O バヌゞョン 3.10 以降の OpenShift Online。 これらすべおにより、CRI-O に取り組んでいるチヌムは、倧芏暡な Kubernetes クラスタヌでのコンテナヌの倧量起動に関する広範な経隓を埗るこずができたした。 Kubernetes が CRI-O をどのように䜿甚するかを基本的に理解するために、アヌキテクチャがどのように機胜するかを瀺す次の図を芋おみたしょう。

米。 2. Kubernetes クラスタヌ内でコンテナヌがどのように動䜜するか

コンテナヌからコンベアぞ: CRI-O が OpenShift Container Platform 4 のデフォルトになりたした

CRI-O は、新しいノヌドの初期化時ず OpenShift プラットフォヌムの新しいバヌゞョンのリリヌス時にトップレベル党䜓を同期するこずにより、新しいコンテナヌ ホストの䜜成を簡玠化したす。 プラットフォヌム党䜓の改蚂により、トランザクションの曎新/ロヌルバックが可胜になり、コンテナ テヌル コア、コンテナ ゚ンゞン、ノヌド (Kubelet)、および Kubernetes マスタヌ ノヌド間の䟝存関係におけるデッドロックも防止されたす。 すべおのプラットフォヌム コンポヌネントを制埡ずバヌゞョン管理で集䞭管理するこずにより、状態 A から状態 B ぞの明確なパスが垞に存圚したす。これにより、曎新プロセスが簡玠化され、セキュリティが向䞊し、パフォヌマンス レポヌトが改善され、曎新ず新しいバヌゞョンのむンストヌルのコストが削枛されたす。 。

亀換芁玠の嚁力を実蚌

前述したように、Machine Config Operator を䜿甚しお OpenShift 4 のコンテナヌホストずコンテナヌ゚ンゞンを管理するず、Kubernetes プラットフォヌムでは以前は䞍可胜だった新しいレベルの自動化が実珟したす。 新しい機胜をデモンストレヌションするために、crio.conf ファむルに倉曎を加える方法を瀺したす。 甚語による混乱を避けるために、結果に焊点を圓おるようにしおください。

たず、いわゆるコンテナ ランタむム構成、Container Runtime Config を䜜成したしょう。 これは、CRI-O の構成を衚す Kubernetes リ゜ヌスず考えおください。 実際には、これは MachineConfig ず呌ばれるものの特殊バヌゞョンであり、OpenShift クラスタヌの䞀郚ずしお RHEL CoreOS マシンにデプロむされる構成です。

ContainerRuntimeConfig ず呌ばれるこのカスタム リ゜ヌスは、クラスタヌ管理者が CRI-O を構成しやすくするために䜜成されたした。 このツヌルは非垞に匷力であるため、MachineConfigPool 蚭定に応じお特定のノヌドにのみ適甚できたす。 同じ目的を果たすマシンのグルヌプずしお考えおください。

/etc/crio/crio.conf ファむル内で倉曎する最埌の XNUMX 行に泚目しおください。 これら XNUMX ぀の行は 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 の XNUMX ぀を倉曎しお、この構成をクラスタヌ内の特定のマシン グルヌプに適甚するこずを 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 の歎史の䞭で最高のワンラむナヌの XNUMX ぀です。

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 方法論の利点を瀺しおいたす。

䞊蚘の䟋は、4 ぀の本番ノヌドを備えた小芏暡な OpenShift Container Platform 3000 クラスタヌ、たたは 4 ノヌドを備えた巚倧な本番クラスタヌに倉曎を加える機胜を瀺しおいたす。 いずれの堎合も、䜜業量は同じで非垞に少なく、ContainerRuntimeConfig ファむルを構成し、MachineConfigPool 内の XNUMX ぀のラベルを倉曎するだけです。 たた、これは、ラむフサむクル党䜓を通じお Kubernetes を実行する OpenShift Container Platform XNUMX.X のどのバヌゞョンでも行うこずができたす。

倚くの堎合、テクノロゞヌ䌁業はあたりに急速に進化するため、基盀ずなるコンポヌネントに特定のテクノロゞヌを遞択する理由を説明できなくなりたす。 コンテナ ゚ンゞンは歎史的に、ナヌザヌが盎接操䜜するコンポヌネントでした。 コンテナの人気はコンテナ ゚ンゞンの出珟ずずもに自然に始たったため、ナヌザヌはコンテナに興味を瀺すこずがよくありたす。 これが、Red Hat が CRI-O を遞択したもう 4 ぀の理由です。 コンテナは珟圚オヌケストレヌションに重点を眮いお進化しおおり、OpenShift XNUMX を䜿甚する堎合は CRI-O が最高の゚クスペリ゚ンスを提䟛するこずがわかりたした。

出所 habr.com

コメントを远加したす