Glanceは、ミラーの追加操作のプロセス全体を完了します.

7137 ワード

概要
まずGlanceプロジェクトを簡単に紹介します.Glanceプロジェクトは主に仮想マシンミラーの発見、登録、検索サービスを提供します.標準のRESTインタフェースを提供することによって、異なるバックエンドに格納されたミラーに対するクエリー要求とミラーに関する情報を返す.
Glanceミラーサービスでは、以下のようなプライベートまたは共有の異なるフォーマットのミラーをアップロードできます.
Raw
Machine (kernel/ramdisk outside of image, a.k.a. AMI)
VHD (Hyper-V)
VDI (VirtualBox)
qcow2 (Qemu/KVM)
VMDK (VMWare)
OVF (VMWare, others)
他のOpenStackプロジェクトと同様に、Glanceも以下の設計原則に従います.
1.コンポーネントベース
2.高可用性
3.高許容誤差
4.拡張性
5.オープンスタンダード
スキーマ#スキーマ#
Glanceプロジェクトについて一定の認識が得られた後、OpenStackでの位置を理解する必要があります.下図を見てください.
 
GlanceのOpenStackでの位置
GlanceによりOpentackの3大コンポーネントが1つに接続されていることがわかる.Glacneのストレージインタフェースには様々な実装があり、Swiftはその1つとしてGlanceに実際のストレージサービスを提供することができる.一方、GlanceはNovaにミラーの検索操作を提供する.同時に、この3つのコンポーネントはKeystoneの認証を取得する必要があります.
Glanceのアーキテクチャは次の図に示されています.
 
Glanceアーキテクチャ
プライマリコンポーネント
Glance-APIは、主に様々なREST要求に応答し、他のモジュール(主にglance-registryコンポーネントおよびバックエンドストレージインタフェース)を介してミラーのアップロード、削除、クエリーなどの操作を完了するために使用されます.簡単に2つの部分に分けることができます.1つのミドルウェアは、主にリクエストの解析作業(出版番号の分析など)を行い、もう1つの部分は実際のサービス(ミラーアップロードダウンロードのバックエンドストレージインタフェースとインタラクティブなど)を提供します.デフォルトのバインドポートは9292です.
Glance-Registryミラー登録サービスは、ミラーメタデータのRESTインタフェースを提供するために使用されます.主な仕事は、ミラーのメタデータを保存または取得し、MySQLデータベースと対話することです.また、APIと具体的なサーバの2つの部分に簡単に細分化することもできます.メタデータとは、id、size、status、location、checksum、min_disk、min_ram、ownerなどのミラー関連情報を指し、実際のミラーデータは実際に使用されるバックエンドストレージ(swift、s 3、filesystemなど)に保存される.デフォルトでバインドされているポートは9191です.
Image Storeは厳密にはimage storeはGlanceのコンポーネントに属していません.ここでは、理解を容易にするために個別に分けられています.これはインタフェース層にすぎず、ミラーストレージとクエリーのインタフェースを提供しています.具体的な実装には、外部記憶(Swift,S 3)のサポートが必要である.
Glanceミラーを追加するプロセス全体
実は、この流れを理解してglanceサービスの原理を大体身につけました.
次のコマンドを使用します.
glance add name="cirros-0.3.0-i386-11-28" is_public=true container_format=ovf disk_format=qcow2 < ./cirros-0.3.0-i386-disk.img

結果を返します.
Added new  image with ID: 81cbb863-a38e-48d6-9ff3-4c52800ef10d

このコマンドを使用する場合、実際にはコマンドラインを介してglance-apiにリクエストを送信し、ミラーへの追加操作を完了します.glanceコマンドラインはnovaコマンドラインと同様にhttpをカプセル化したクライアントです.クライアントは我々が入力したコマンドから必要なパラメータを取得した後、ミラーのメタデータをHTTPパケットヘッダにパッケージし、ミラーを要求したbodyに読み込み、POST要求でglance-apiにデータを提出する.
glance-apiの役割はすでに上で紹介したが、彼がどのようにRESTAPIに応答しているかを知るには、glance/etc/glance-api-pasteというファイルを理解する必要がある.ini.このファイルはnova-apiのiniファイルに似ています.まずiniプロファイルのいくつかの概念とそれらの関係を熟知します.
app:REST API要求を実際に処理するpythonクラス.
filter:appにパッケージを提供し、appが要求を処理する前にfilterのオブジェクトを呼び出す装飾器.
pipeline:対応するオブジェクトはfilterとappのパッケージであり、複数のfilterとあるappを結合し、appが要求を処理する前にpiplineで指定したappより前のfilterの処理を先に通過する.
router:RESTリクエストのURLに基づいて異なるオブジェクトの異なる方法でこのRESTリクエストを処理させる.
今見てみましょうiniファイル、glance/etc/glance-api-paste.iniは多くの異なるpipelineを定義し、彼らの違いは異なるfilterを定義して要求を処理し、最終要求はglance.api.v1.router:APIのオブジェクト処理.そしてrouterを見てみましょうpyファイルのAPIクラス.wsgiを継承していますRouterは、RESTリクエストのURLおよびリクエストの種類(GET、PUTなど)に応じてリクエストを異なるオブジェクトにマッピングする異なる方法で処理することができる.
glance/api/v1/router.pyマッピング要求の一部のコードは次のとおりです.
images_resource = images.create_resource()

mapper.resource("image", "images", controller=images_resource,
                collection={'detail': 'GET'})
mapper.connect("/", controller=images_resource, action="index")
mapper.connect("/images/{id}", controller=images_resource,
               action="meta", conditions=dict(method=["HEAD"]))

members_resource = members.create_resource()
mapper.resource("member", "members", controller=members_resource,
                parent_resource=dict(member_name='image',
                collection_name='images'))
mapper.connect("/shared-images/{id}",
               controller=members_resource,
               action="index_shared_images")
mapper.connect("/images/{image_id}/members",
               controller=members_resource,
               action="update_all",
               conditions=dict(method=["PUT"]))

完全なコード(v 1およびv 2)を表示することにより、要求は最終的にimagesによって行われることが分かる.py、image_data.py、schemas.py、image_access.pyおよびimage_tags.pyのコントロールクラスの異なる方法で処理します.ミラーを追加するリクエストはglance/api/v 1/imagesになります.pyのControllerクラスのcreate関数処理を呼び出します_handle_sourceメソッド、さらに呼び出す_upload_and_activateメソッド._upload_and_activateメソッドはselfを呼び出す2つの重要なことをしました.uploadアップロードミラー、self._を呼び出すActivateはglance registryサービスを通じてglanceデータベース内のミラーの状態を更新します.特定のストレージインタフェースインスタンスの選択はself.uploadメソッドで.その後、特定のストレージインタフェースのaddメソッドが呼び出され、アップロードする必要があるミラーが保存されます.
全体の流れは次の図のように見えます.
 
Glance処理ミラー要求を追加するプロセス
1.管理者はアップロードミラーコマンドを使用します.Glance-APIサービスはリクエストを受信し,そのミドルウェアを介して出版本号などの情報を解析する.
2,3.Glance-Registryサービスのapiはregistry clientを取得し、registry clientのadd_を呼び出します.イメージ関数.このとき、ミラーの状態は「queued」であり、ミラーIDが保持されているが、ミラーはまだアップロードされていないことを示す.
4.Glance-Registryサービス実行クライアントのadd_image関数は、glanceデータベースにinsertをレコードします.
5,6,7.Glance-API呼び出しGlance-Registryのupdate_image_metadata関数は、データベース内のミラーのステータスが「saving」であることを更新し、ミラーがアップロードされていることを示します.
8.Glance-APIはバックエンドストレージインタフェースが提供するadd関数を呼び出してミラーファイルをアップロードする.
9,10,11.Glance-API呼び出しGlance-Registryのupdate_image_metadata関数は、データベース内のミラーのステータスが「active」の同時通知であることを更新します.Activeは、Glanceでミラーが完全に使用可能であることを示します.
ミラーアップロードが完了したら、Registryのログを表示し、Glance-Registryサービスの主なタスクがsqlalchemyを介してMySQLデータベースと対話していることを確認します.
2012-11-28 09:24:22 INFO sqlalchemy.engine.base.Engine [-] BEGIN (implicit)

BEGIN (implicit)

2012-11-28 09:24:22 INFO sqlalchemy.engine.base.Engine [-] INSERT INTO images (created_at, updated_at, deleted_at, deleted, id, name, disk_forma

t, container_format, size, status, is_public, location, checksum, min_disk, min_ram, owner, protected) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %

s, %s, %s, %s, %s, %s, %s, %s, %s)

INSERT INTO images (created_at, updated_at, deleted_at, deleted, id, name, disk_format, container_format, size, status, is_public, location, che

cksum, min_disk, min_ram, owner, protected) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)

 
Glanceによるミラーの管理
本文の最後に、主にglanceクライアントコマンドであるGlanceの簡単な使用について説明します.
GlanceサービスはKeystone認証を取得するため、環境変数を設定します.
export OS_USERNAME=user
export OS_PASSWORD=password
export OS_TENANT_ID=tenant
export OS_AUTH_URL=http://127.0.0.1:35357/v2.0

設定を完了し、glance index-d-vで正常かどうかを確認します.成功すると、次のコマンドでGlanceを使用できます.
現在存在するミラーを表示:
glance index    glance image-list

ミラーを削除するには
glance delete ID

ミラーの詳細を表示します.
glance show ID

既存のミラーのプロパティを変更するには、次の手順に従います.
glance ID    =    

たとえば、ミラーのprotectedプロパティを変更します.
glance update ID protected = false

指定したテナントにプライベートミラーを開放するには、次の手順に従います.
glance member-add ID tenant1

ミラーをアップロードするコマンドは、上のプロセス分析で書かれています.もちろん、これらの基本コマンドに加えて、次のような他のパラメータを追加することもできます.
-d、デバッグ情報の印刷
-v:詳細を表示
注:以上のすべての「ID」はミラーのIDであり、glance image-listで得ることができる.
詳細なGlanceクライアントコマンド
以下を参照してください.http://docs.openstack.org/developer/glance/glance.html#the-update-command