This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.2.2. odo アーキテクチャー
				このセクションでは、odo アーキテクチャーについて説明し、odo による OpenShift Container Platform リソースのクラスターでの管理方法について説明します。
			
2.2.1. 開発者の設定
odo を使用すると、ターミナルを使って OpenShift Container Platform クラスターでアプリケーションを作成し、デプロイできます。コードエディタープラグインは、ユーザーがそれぞれの IDE ターミナルから OpenShift Container Platform クラスターと対話することを可能にする odo を使用します。odo を使用するプラグインの例: VS Code Openshift Connector、OpenShift Connector for Intellij、Codewind for Eclipse Che。
odo は Windows、macOS、および Linux のオペレーティングシステムで機能し、すべてのターミナルから使用できます。odo は bash および zsh コマンドラインシェルの自動補完を提供します。
odo 1.1.0 は Node.js および Java コンポーネントをサポートします。
2.2.2. OpenShift source-to-image
OpenShift Source-to-Image (S2I) はオープンソースプロジェクトであり、ソースコードからアーティファクトをビルドし、これらをコンテナーイメージに挿入するのに役立ちます。S2I は、Dockerfile なしにソースコードをビルドすることで、実行可能なイメージを生成します。odo は、コンテナー内で開発者ソースコードを実行するために S2I ビルダーイメージを使用します。
2.2.3. OpenShift クラスターオブジェクト
2.2.3.1. Init コンテナー
init コンテナーはアプリケーションコンテナーが起動する前に実行される特殊なコンテナーであり、アプリケーションコンテナーの実行に必要な環境を設定します。init コンテナーには、アプリケーションイメージにないファイル (設定スクリプトなど) を含めることができます。Init コンテナーは常に完了するまで実行され、Init コンテナーのいずれかに障害が発生した場合にはアプリケーションコンテナーは起動しません。
odo によって作成された Pod は 2 つの Init コンテナーを実行します。
- 
								copy-supervisordInit コンテナー。
- 
								copy-files-to-volumeInit コンテナー。
2.2.3.1.1. copy-supervisord
							copy-supervisord Init コンテナーは必要なファイルを emptyDir ボリュームにコピーします。メインのアプリケーションコンテナーはこれらのファイルを emptyDir ボリュームから使用します。
						
emptyDir ボリュームにコピーされるファイル:
- バイナリー: - 
											go-initは最小限の init システムです。アプリケーションコンテナー内の最初のプロセス (PID 1) として実行されます。go-init は、開発者コードを実行するSupervisorDデーモンを起動します。go-init は、孤立したプロセスを処理するために必要です。
- 
											SupervisorDはプロセス制御システムです。これは設定されたプロセスを監視し、それらが実行中であることを確認します。また、必要に応じてサービスを再起動します。odo の場合、SupervisorDは開発者コードを実行し、監視します。
 
- 
											
- 設定ファイル: - 
											supervisor.confは、SupervisorD デーモンの起動に必要な設定ファイルです。
 
- 
											
- スクリプト: - 
											assemble-and-restartは、ユーザーソースコードをビルドし、デプロイするための OpenShift S2I の概念です。assemble-and-restart スクリプトは、まずアプリケーションコンテナー内でユーザーソースコードをアセンブルしてから、ユーザーの変更を有効にするために SupervisorD を再起動します。
- 
											Runは、アセンブルされたソースコードを実行することに関連した OpenShift S2I の概念です。runスクリプトはassemble-and-restartスクリプトで作成されたアセンブルされたコードを実行します。
- 
											s2i-setupは、assemble-and-restartおよび run スクリプトが正常に実行されるために必要なファイルおよびディレクトリーを作成するスクリプトです。このスクリプトは、アプリケーションのコンテナーが起動されるたびに実行されます。
 
- 
											
- ディレクトリー: - 
											language-scripts: OpenShift S2I はカスタムのassembleおよびrunスクリプトを許可します。language-scriptsディレクトリーにいくつかの言語固有のカスタムスクリプトがあります。カスタムスクリプトは、odo のデバッグを機能させる追加の設定を提供します。
 
- 
											
							emtpyDir Volume は、Init コンテナーとアプリケーションコンテナーの両方の /opt/odo マウントポイントにマウントされます。
						
2.2.3.1.2. copy-files-to-volume
							copy-files-to-volume Init コンテナーは、S2I ビルダーイメージの /opt/app-root にあるファイルを永続ボリュームにコピーします。次に、ボリュームはアプリケーションコンテナーの同じ場所 (/opt/app-root) にマウントされます。
						
							PersistentVolume が /opt/app-root にないと、このディレクトリーのデータは、PersistentVolumeClaim が同じ場所にマウントされる際に失われます。
						
							PVC は、Init コンテナー内の /mnt マウントポイントにマウントされます。
						
2.2.3.2. アプリケーションコンテナー
アプリケーションコンテナーは、ユーザーソースコードが実行されるメインコンテナーです。
アプリケーションコンテナーは、以下の 2 つのボリュームでマウントされます。
- 
								emptyDirボリュームは/opt/odoにマウントされます。
- 
								PersistentVolumeは/opt/app-rootにマウントされます。
						go-init はアプリケーションコンテナー内の最初のプロセスとして実行されます。次に、go-init プロセスは SupervisorD を起動します。
					
						SupervisorD は、ユーザーのアセンブルされたソースコードを実行し、監視します。ユーザープロセスがクラッシュすると、SupervisorD がこれを再起動します。
					
2.2.3.3. PersistentVolume および PersistentVolumeClaim
						PersistentVolumeClaim (PVC) は、PersistentVolume をプロビジョニングする Kubernetes のボリュームタイプです。PersistentVolume のライフサイクルは Pod ライフサイクルとは異なります。PersistentVolume のデータは Pod の再起動後も永続します。
					
						copy-files-to-volume Init コンテナーは、必要なファイルを PersistentVolume にコピーします。メインアプリケーションコンテナーは、実行時にこれらのファイルを使用します。
					
						PersistentVolume の命名規則は <component-name>-s2idata です。
					
| Container | PVC のマウント先 | 
|---|---|
| 
										 | 
										 | 
| アプリケーションコンテナー | 
										 | 
2.2.3.4. emptyDir ボリューム
						emptyDir ボリュームは、Pod がノードに割り当てられている際に作成され、Pod がノードで実行されている限り存在します。コンテナーが再起動または移動すると、emptyDir の内容が削除され、Init コンテナーはデータを emptyDir に復元します。emptyDir の初期状態は空です。
					
						copy-supervisord Init コンテナーは必要なファイルを emptyDir ボリュームにコピーします。これらのファイルは、実行時にメインアプリケーションコンテナーによって使用されます。
					
| Container | emptyDir Volumeのマウント先 | 
|---|---|
| 
										 | 
										 | 
| アプリケーションコンテナー | 
										 | 
2.2.3.5. サービス
サービスは、一連の Pod と通信する方法を抽象化する Kubernetes の概念です。
odo はすべてのアプリケーション Pod についてサービスを作成し、これが通信用にアクセス可能にします。
2.2.4. odo push のワークフロー
					このセクションでは、odo push ワークフローについて説明します。odo push は必要なすべての OpenShift Container Platform リソースを使って OpenShift Container Platform クラスターにユーザーコードをデプロイします。
				
- リソースの作成 - まだ作成されていない場合には、 - odo pushは以下の OpenShift Container Platform リソースを作成します。- デプロイメント設定 (DC): - 
											2 つの init コンテナー copy-supervisordおよびcopy-files-to-volumeが実行されます。init コンテナーはファイルをemptyDirとPersistentVolumeタイプのボリュームのそれぞれにコピーします。
- 
											アプリケーションコンテナーが起動します。アプリケーションコンテナーの最初のプロセスは、PID=1 の go-initプロセスです。
- go-initプロセスは SupervisorD デーモンを起動します。注記- ユーザーアプリケーションコードはアプリケーションコンテナーにコピーされていないため、 - SupervisorDデーモンは- runスクリプトを実行しません。
 
- 
											2 つの init コンテナー 
- サービス
- シークレット
- 
									PersistentVolumeClaim
 
- ファイルのインデックス設定 - ファイルインデックサーは、ソースコードディレクトリーのファイルをインデックス化します。インデックサーはソースコードディレクトリー間を再帰的に移動し、作成、削除、または名前が変更されたファイルを検出します。
- 
									ファイルインデックサーは、.odoディレクトリー内の odo インデックスファイルにインデックス化された情報を維持します。
- odo インデックスファイルが存在しない場合、ファイルインデックサーの初回の実行時であることを意味し、新規の odo インデックス JSON ファイルが作成されます。odo index JSON ファイルにはファイルマップが含まれます。移動したファイルの相対パスと、変更され、削除されたファイルの絶対パスが含まれます。
 
- コードのプッシュ - ローカルコードは、通常は - /tmp/srcの下にあるアプリケーションコンテナーにコピーされます。
- assemble-and-restartの実行- ソースコードのコピーに成功すると、 - assemble-and-restartスクリプトは実行中のアプリケーションコンテナー内で実行されます。