#Day1
-
OpenStack はアパッチと似たFoundation運営をしている
-
License Apache2.0
-
python2.7
-
OpenStackはAWS2.0を目指したもの
-
NASA:Nova
-
RackSpace:Swift
-
MirantsはCactusよりSIしている
-
Essexリリースの際、OpenStackFoundationが設立された
-
RedHatはGrizzlyより参加
-
Essexでプロジェクトが分割され様々ベンダが各分野で積極的に関与するようになった。
-
Mirantisが始めた Murano はPaaSを目指したものだが、Heatが存在するためまだ
- stackforge:(OpenStack外のプロジェクト)
- Incubation:(斜体)
- Integration:
| target | Project |
|---|---|
| Compute | Nova |
| Networking | Neutron |
| ObjectSotre | Swift |
| Block Storage | Cinder |
| Image | Glance |
| Identity | Keystone |
| Dashboard | Horizon |
| Metering | Ceilometer |
| Orchestration | Heat |
| DataProcessing | Sahara |
| DatabaseService | Trove |
| target | Project |
|---|---|
| QueService | Zaqar |
| BareMetal | Ironic |
| Key managment | Barbican |
| DNS Service | Desinate |
- NFVでOpenStackを利用する
- OpenStackはDatabaseに全ての情報を保持している
- cloudstack/vmware はInternalAPIと、PublicAPIが分離されているが、OpenStackはInternal/Publicが同じAPIを提供している
- Nova -> MQ
- Cinder -> MQ
- Ceilometerは頻繁にMQにアクセスするので、MQの性能が問題になる。
- APIを提供していない
- おおよその処理を実装しているがOpenStackの全ての操作を網羅しているわけではない
role ->
project/tenant-> user
Domain ->
OpenStack
|
+- Domain
|
+-Project/Tenant
- NovaのDBはMySQL
- 一番利用しているのはGalera
- Multi-Master-Replicationはあまり使っていない。
- MirantisではRabbitMQを一部カスタマイズして使っている。
- ZeroMQ(性能がよくなかった)
- RPCCALLの使い分け
- rpc.cast: result受信を待たない
- rpc.call: result受信を待つ
- HA構成とする必要がある
| Scheduler | Description | Behavior |
|---|---|---|
| Chance | --- | Random |
| Filter | 動作可能なComputeを探して起動する |
- Filterには様々な規則を作成可能
- HyperThredingを有効にしてOvercommitする場合、Core数を1.3として計算すべき!
- CustomFiterも作成可能
Filter:デプロイ可能なnodeを全nodeから探す。CPU,Memory,Disk,Networkの状態などを判断する
Weight:Filterの結果動作可能なnodeから集中させるか、分散させるか、選択して対応する
- Nova ComputeがVMの状態をrpc.callでnova-Conductorで情報を提供し、Nova-ConductorがDBの情報を更新している
- Nova Computeが直接DBを操作することはない。
- Nova ConductorがDBを更新している
- NovaNetworkは分散アーキテクチャだったが、HavanaのNeutronは分散アーキテクチャではなかったため、
- NeutronはNovaNetworkがデフォルト
| Name | 説明 |
|---|---|
| Neutron Plugin | SDN Controller |
| Neutron L2Agent | Local vSwitches |
| Neutron L3 Agent | Optionalであり、PluginでL3を実装しているなら不要となる。 |
| Neutron DHCP Agent -> DHCPサーバではなく、Staticな情報を仮想マシンにNetwork情報を提供するための仕組み(HAが必要) | |
| Other Network Services | FWaas, VPNaaS, LBaaS等々、 |
| Neutron Metadata Agent | 使う使わないは、環境依存。 |
- Multi-back-endなので、Tierの形式でVolume提供が可能になっている。
- Ceph, Swift, Clerversafe
- iscsiであればマイグレーションが可能
- Ceph:LVD-iscsi
-
Ephemeral storage:
-
VMのローカルディスク
-
VMがTerminateするまで永続化
-
BlockStorage: Cinder
-
ユーザが削除するまで永続化
-
VMからblock deviceとしてアクセス
-
Object storage:
-
ユーザが削除するまで永続化
-
Volume
- 読み書き可能なブロックデバイス
- VMの2ndストレージ
- 1つのインスタンスで利用する
-
Snapshot
- hot backup
- Volumeのread-only point in time copy
-
Backup
- cold backup
- アーカイブバックアップ
-
DRを行う場合は、snapshotをSwiftにいれて
-
Manila: FileShare as a Service(Incubate), NetAppとMirantis社のプロジェクト
- Swift
- Ceph
- IBM Tivoli Storage Manager(TSM)
-
hard drive
-
iso
-
other storage media
-
パーティションなどの情報を含んでいる
-
仮想マシンのISO
-
Create VM(qemu-img create)
-
cloud-init(Linux)
-
cloudbase-init(Windows)
-
virtIO dirvers(Windows only)
-
virtIO:JunoからSCSIもサポート
- Glanceはクラウド内のImage情報を管理する
- 様々なバックエンドストレージに対応している
- 同時に複数のLocationを保持することが可能
- GlanceAPI(+StoreAdapter)
- Cinder
- FileSystem
- GridFS
- Sheepdog
- Swift
- S3
- Ceph(RBD)
- GlanceRegistry
- GlanceDB
- バックエンドの機能を100%提供していない
- Swiftで開発・テストされている
- CRUD images
- Search images via below filters
- name
- container format
- disk format
- size_min, size_max
- status
- Cache images
- SQLite or FS support(xattrs)
- queues images for prefetching
- prefetches images
- prune images(イメージ廃棄の予約的な感じ)
- cleans invalid cache entries
Disk Formats
- raw は性能が必要な時に使う
Image Containers
- bare
- ovf
下記要件を対応
- tier変更
- デフォルト値からのチューニング
- AD連携
- DRをやりたいなどの
- FUEL
- TripleO(OpenStack on OpenStackインストール)
- Juju(devstack)
- HPが製作した、OpenStackによりOpenStackをインストールさせるプロジェクト
- Ironic: Baremetal
- OpenStack: TripleO でインストール完了
- Cobbler(将来的にはIronic)でBaremetal
- FuelではH/Wのボンディングから、Pluginの選択までできるようになっている
- VMにパラメータ追加
- VM Name
- Image(OStype)
- Flavor
- Network(Neutron経由)
- Optional(SSH Keys, PersistetVol,comments.etc)
- Createを選択
- HorizonがHTTP POSTでバックエンドへリクエスト
- HorizonがKeystoneへHTTPリクエスト
- username, passwordなどを送信
- keystoneはtemporary tokenを返却
- Keystoneがキャッシュしていた場合
- NovaAPIのtokenがExpireしていた場合
- APIリクエストをNovaへ送信
- NovaAPIはでKeystoneへToken認証を実施
- NovaDBにParseしたリクエスト情報を格納
- DBにVMの初期化の状態を登録
- MQに次のアクションを格納
- NovaAPIがrpc_castでSchedulerにMQの情報を取得させる
- SchedulerにVM情報がPublishされる
- NovaSchedulerはFilterで利用可能なホストを選択
- Filterの種類は多数存在
- CPU、Ram, DiskなどのHW情報
- 極力同じHostにのせるか?別のホストにするか?
- AZで選択
- Group選択
- IoOps
- Instance数
- イメージ名
- カスタムイメージも作成可能
- Weightingで利用するホストを選択
- SchedulerがNovaDBからfilter, compute node,などの情報を取得
- SchedulerがVMのProvisioningのメッセージをMQにPublish
- Nova Computeが rpc_callでNovaConductorにDBの情報をQueue経由で取得
- Nova ComputeがNeutronAPIへVM用のNWプロビジョニング情報に従って命令を発行する
- NeutronのPluginとAgentがIP,GateWay,DNS Name, L2設定などなどをVM用に実施する
- MACアドレス確保
- IPアドレスを確保
- IPとMACとVM情報をDBに格納
- L2設定を実施(NeutronPlugin, OVS Bridge)
- L3設定を実施(DHCP/Gateway)
- Nova ComputeがCinderAPIへVM用のNWプロビジョニング情報に従って命令を発行する
- CinderAPIよりNovaComputeにボリューム情報を提供(/dev/vdx)
- NovaComputeがGlanceAPIにVMイメージを要求(ImageID)
- もしImageIDがあれば取得用 HTTP URIをNovaComputeへ返却
- NovaComputeがURIより直接イメージをダウンロードする。(ex. Swift/Ceph)
- GlanceServerはCache機能によりイメージを
- NovaComputeがVMを起動するためHypervisorのコマンドを実行
- NovaComputeがVMが起動したことをQueueへ情報を格納
- NovaConductorがVMの状態をDBに格納
- NovaAPIをPollingしているHorizonがDBよりVMの状態を取得して返却
#Day2
-
Projectに含まれるおおよそのコンポーネント
- Process(daemon)
- database
- queue
- plugin
- oslo
-
Tokenを取得してAPIは通信している送信する情報は以下のとおり
- credential情報
- tenant/project
- policy.json(APIのconfiguration)
- username
- password
- tenant/project
- credential情報
-
Tokenを使わない場合はPKIで実施する
�- VMware/OpenStack比較
| 項目 | VMware | OpenStack |
|---|---|---|
| メンタリティ | 1台ずつ厳密に管理したい(ペット) | 機能が問題なく稼働していればよい(家畜) |
| ステート | ステートフルアプリでも動作可能 | ステートレスアプリを推奨 |
| LiveMigration | vCenter機能で提供 | 機能は存在するが、厳密にCloudWatch/Zabbixなどとの連携が重要 |
- 複数のハイパーバイザーを管理したい場合はAZでKVMZone,ESXZoneなどを規定する方法
- CERN: NovaNetworkを使っている
-
Single-Host Networking(routingは単一ホストで提供)
- Cactus/Diabloの時
- routingを単一Hostで提供
-
Multi-Host Networking
- routing/NAT機能を全ホストに分散した
- L3サービスのSPOF解消
- スケーラビリティの獲得
- 各nodeがL3NWに接続する必要がでてきた
- ComputeのNW処理負荷が上がってきた
-
Network Managers
- LinuxBridgesの作成
- IP提供(DHCP/NWConfig)
- VLAN設定
- TrafficFilterling
-
FlatManager
- Debianでしか利用できなかった
- 大きなIPPoolをChunkで分割
-
FlatDHCPManager
- dnsmasq でIP管理を始めた
- Debian以外のホストでも利用できる状態になった
-
DHCPServer(dnsmasq)
- MacAddressに応じてstatic leaseを行った
- この状態では全てのテナントが通信できる状態なので、
-
VlanManager
- dnsmasq+vlanを用いてテナントを分離した
- dhcpサーバ数が増加(tenant毎)
- 802.1q を利用した
- NW機器にVlantagの設定が必要になった
-
Fixed IPs:
- インスタンス起動時に提供
- Private IP
- instance間の通信、外部NWとの通信で利用
- 外部NWからアクセスはできない
-
Floating IPs:
- ユーザがinstanceに付与する
- 外部NWからアクセス可能
-
外部からのアクセスに対しては iptablesの DNAT rule でfloating IP -> fixed IP のNATを行っている
-
内部からのインターネットアクセスに対しては、eth0(物理NIC)をGatewayとしたSNATにより実施している
- NW管理をクラウド管理したい
- Enterpriseで利用されるようなNWトポロジに対応したい
- Pluginを用いたマルチベンダ対応環境を使いたい
- VLANはDynamicProvisioningできないので自動化できない
- 複数のネットワークカプセル化に対応できない
- 論理NWトポロジに向かいたかった
- OpenvSwitch
- L2 Network
- VLANなどのL2ネットワーク
- Subnet(IP pools and DHCP)
- v4,v6のIPアドレスと関連する状態を保持
- Port
- deviceを1つバインドする
- Router
- local networkのroutingを制御
- NAT変換を行う
| feature | NovaNetwork | Notes | Neutron |
|---|
| |
** Controller(NetworkNode) **
-
Neutron Server(NeutronAPI)
- pluginをもつ
- SDN Controllerなどと連携
-
Neutron L3 Agent
- plugin依存
-
Neutron DHCP Agents
- Queueと通信している
- Network
-
Other Network Services
- FWaaS, VPNaaS, LBaaS...etc
- Driver経由で実施(HAProxyでも、F5などのH/Wでも可能)
-
Neutron Metadata Agent
- Neutronサーバに導入されている。
- Cloud-Init(Linux), CloudBase-Init(Win)の情報や、ホスト名などが入っている
-
DB
-
Queue
** Compute Node **
- Neutron L2 Agent
- local の vSwitchを管理している
- 各ComputeNodeで稼働する
- L2,L3,L4, LBaaS,+L7レイヤまでサポート予定
- Plugin経由で様々なH/W対応
- http://stackalystics.com/report/driverlog
- 実際のテストの内容を参照できる
- Neutron は Niciraのプロジェクトだった
- ml2はCiscoのプロジェクト(multi-layer2の略)
- AZ,HostAggregateを使って同じ仮想マシンに集中させると、bridge数、ethが節約できるためスケールさせることができる
- IPアドレスはNetworkNode上のDHCPAgentが割り当てる
- NameSpace(netns)で
- FLAT
- VLAN
- Tunnel(GRE,VXLAN,IPSec,GRE, VXLAN over IPSec)
- STP, VM instance毎のQoS Control
- OpelFlow support
- Remote Configuration(C,python)
- Kernel/user-spaceで利用可能(Hyper-V対応)
- br-eth0 デバイスで untagged
- 802.1q Trunkで通信する
- LovalVLANtagをglobalVLANtagへ変更する, segmentation vlanid
- GRE tunnel IDs
- Local Vlan tag を GRE tunnel tag へ変更する
| Type | Bits | Max Number of Tenant Networks |
|---|---|---|
| VLAN ID | 12-bit | 4096 |
| VXLAN ID | 24-bit | xxxxx |
| GRE tunnel ID | 32-bit | 4294967296 |
- GRE tunnelを使えばよいが、、使う場合はNIC Off-Loadingを行わないと性能がでなかった
- 理由はMTUサイズによるパケット分割
- ただし、NIC OffLoadingを使用する場合、同一H/W+NICを利用してファームウェアバージョン管理が必要など、制約が増えてきて、クラウド向きではなくなってきた。
- VXLAN(24bit)を利用すれば問題ないが、VXLANをOVSで利用する場合マルチキャストで問題があるため、利用が難しいと言われている。(Kiloなら問題解決?)
- NiCira は GRE + STT で対応しようとしたが、FireWallを通過できないという問題がある
- JunoまではL3-Agentの冗長化を行う場合HAで対応が必要だった。
- もしくは、複数のパブリックIPを利用可能ならL3−Agentを冗長化できたが、
- SDNコントローラはL3Agentの冗長化、HAなどを提供できていたので、Neutron+SDNが必要だった(NovaNetworkという選択も存在した)
- 同一のPluginで複数のベンダの機構を利用することができるようになった
- OpenvSwitch+LinuxBridgeを利用する場合はML2−Pluginを利用する必要がある
- Neutron
|
+->ML2
|
+->Mechanism(Vendor)
-
TypeManager
- VLAN
- VXLAN
- GRE
-
Mechanism Manager
- Hyper-V
- CiscoNexus
- OVS, LinuxBridege
- ML2によりOVS関連の機能が分離されたため、自社製品にのみ対応すればよくなったので、開発が効率化された
-
GENEVE
- STT(NSX):ジャンボフレームで通常のTCP
- DPDK:intelが作成した。DataPlaneDeplymentKit(OVS-DPDK)。もうやめた
- GRE:
- VXLAN:
-
Neutronの問題
- L3Agentが可用性、スケーラビリティの面で問題があった。
- IPAM(IP address Management service)をDHCP&NeutronDBでインスタンスに提供
- Routing,NAT(DNAT,SNAT)
- DHCPマネジメントを提供
- 論理Routerを作成
- 様々なサブネットを接続、GWとしても機能
- L3 Connectivityを提供(NAT)
| ** | Nova-Network | Neutron |
|---|
|
NovaNetworkと同等の機能を提供するためNeutronでは下記機能を実装
- Schedulerにより複数のDHCPAgentを利用したスケールアウトができる
- JunoリリースでDVR and VRRPがリリースされた。おそらくKiloで性能面も担保されると思われる。
- DHCP, L3Agnetを異なるnodeで提供するため
- HAなどで利用する
- DHCP
- dnsmasq
- L3 Routing and NAT
- iptables, routing table
- Access Control Lists
- Neutron Security Service
- LBaaS
- HAProxy
- Radware vDirect
- LVS
- FWaaS
- iptables
- vArmor -VPN as a Service
- OpenSwan IPSec VPN
- HAProxyが標準
- 他のベンダもサポートしている
- アルゴリズム
- Round-Robin
- Least-Connection
- Source-IP
- ヘルスモニタ
- ICMP
- TCP
- HTTP
- HTTPS
- 資料参照
- 資料参照
- 資料を参照
- 資料を参照
- AWS互換サービス
- 169.254.169.254を使っている
- OverLapping IP Poolが使えない(NameSpaceが使えない)
- nova インスタンス起動
$ nova boot server1 --image --flavor
- subnetID確認
$ neutron subnet-list
- lb-pool を subnet に作成
$ neutron lb-pool-create --name <> --lb-method <> --protocol HTTP --subnet-id <subnet-id>
- subnetに属するinstanceのIPを確認
$ nova list
- pool に member追加
$ neutorn lb-member-create mypool --address <IP> --protocol-port 80
- healthmonitor を作成
$ neutron lb-healthmonitor-create --delay 3 --type HTTP --max-retries 3 --timeout 3
- healthmonitor と poolを関連づけ
$ neutron lb-healthmonitor-associate <healthmonitor ID> mypool
- VIPとpoolを関連づけ
$ neutron lb-vip-create --name myvip --protocol-port 80 --protocol HTTP --subnet-id <subnet ID> mypool
- SSH/HTTP通信の許可
$ neutron security-group-rule-create default --port-range-min 22 --port-range-max 22 --protocol tcp --remote-ip-prefix 172.24.4.0/24
$ neutron security-group-rule-create default --port-range-min 80 --port-range-max 80 --protocol tcp --remote-ip-prefix 172.24.4.0/24
$ ifconfig
$ route -n
$ sudo iptables -nL -t nat
$ sudo ip netns list
$ sudo ip netns exec qrouter-**** ifconfig
$ sudo ip netns exec qrouter-****
- Consistency
- Availability
- Patition tolerance
Swift Availability and Partition
- 完全分散
- 3つ以上のデータ冗長性
- buil-in audit of drives
- RAID必要なし
- REST API
- Multi-tenancy
User
|
+ - Proxy
|
+- Account:
| |
+- Container:
| |
+- Object:
|
+-- Auditors
|
+-- Updaters
|
+-- Replicators
-
Ring
- AccountRing
- ContainerRing
- ObjectRing
-
Account/Containerが参照するDBは(SQLite)を用いているがファイルの数が増えてくると
- REST APIを公開している
- errorを処理する
- Objectはキャッシュしない
- consist hasing ringを使ってデータを返却可能なストレージnodeを決定する
- Clusterにおけるデータの場所を決定するMapping
- zone,device,partigin,replicaの情報を保持している
- クラスタの全nodeにコピーする
| key | value |
|---|---|
| id | 全デバイスのIndex |
| zone | どのzoneに属するか |
| weight | 他のデバイスから見た重みづけ |
| IP | IPアドレス |
| port | port番号 |
| device | /dev/sdaのようなディスク名 |
| meta | General−use fieled |
- ringのパーティション数
- md5 hashのビット数
- 2の乗数で計算
- ring sizeと最大のクラスタサイズのバランスを探す
- replica数
- zone数を確認
- 最小は5を推奨
- Create rings:
- Add devices:
- Verify consistency of ring file:
- Rebalance rings:
- ローカルストレージを利用してblob storage
- xattrsに対応したファイルシステムを利用する必要あり(XFS)
- objectのversioningに対応
- objectのexpirationに対応
- ContainerServer
- オブジェクトのリストを保持
- nested Containerは作成できない
- AccountServer:
- containerのリストを保持
- 使用状況の集計を行っている
- SQLiteDBを利用している
- corruptを検知したらreplicaを試みる
- Tombstone cleanup(expireデータを削除する)
- Replicator:
- hashファイルより計算
- 異なるzoneにreplicaリクエストを発行
- push bsed mechanism
- Replicator:
- low-cost hash comparison
- hashが異なる場合は壊れている行を探す
- データベースが利用できない場合は、完全なデータベースをコピーしてくる
- (DB ReplicatorによるAccout/Containerのレプリカは同期的)
- Upload時のセグメントサイズを決定
- Upload時に
- ローカルオブジェクトを巡回して完全性を確認
- quarantinedとして破壊されたオブジェクトmarkする。
- containerリストに含まれる、accout/objectの情報をアップデート
- account,container毎のオブジェクト数を記録する
- Keytstone
- Swift認証機構(temp/swauth)
- Refferer
- HTTP Reffererの情報を確認している
- Accounts/Users
- ACLはchain可能
- ProxyサーバはCPU、Network I/Oネック
- Account/Container/Objectサーバは Disk, Network I/Oネック
- Do not use RAID on servers
- ProxyへデータをPOSTする
- ProxynodeがHashに従い格納先を決定する
- replica数の設定に従いファイルをアップロードする(一貫性はBASE)
- ストレージの過半数に書き込みが成功したら、ユーザへレスポンス変更
- レプリケータはRingからデータを読み取り、パーティションを比較して、一貫性が取れていない場合
-
net
-
subnet
-
router
-
port
-
floating ip
-
Network起動
-
mac address を付与
-
network node上の dhcp agent(dnsmasq)よりIP付与
-
dhcp agentはNameSapce
-
monasuca(Sensuを使ったMonitoring as a Service)
- Metering *** <- Ceilometerが提供する
- Rating
- Billing
- Metering
- Multi-publisher
- Capacity Planning, Monitoring, Debuggingなど
- Alarming
- monitoring + event trigger -> Action
- OpenStackをpollingしている
- CeilometerAPI経由でデータ取得可能
- 閾値+trigger
- リソースの利用状況を確認
- RESTAPI
- RabbitMQよりデータを取得するため、全コンポーネントは共通のRabbitMQを取得する必要がでてきた
- 詳細は資料参照
- Ceilometer API
- Ceilometer Database
- Ceilometer Messages Queue
- Metring and Multi-publisher related
- Agent
- Compute Agent
- Central Agent
- Notification Agent(icehouse)
- Ceilometer Collector
- Alarming related
- Ceilometer Evaluator
- Ceilometer Notifier
- Agent
- REST API via HTTP
- 複数のDBドライバーをもつが、1度に1つのDBを選択する
- SQLAlchemy, MySQL, PostgresSQL
- NoSQL: MongoDB, HBase
- MongoDB が最も利用されている
- 自動的にデータを取得している
- time_to_live=-1 のため、永遠にデータ保持される
- MongoDB 2.2以上をサポート
- CollectorによってPurgeされる
- 全てのOpenStackコンポーネントと同一のRabbitMQを使う必要がある
- Agentは測定情報をpublishしている
- Collectorは測定情報を受信して、DBに格納する
- 他のOpenStack Serviceはnotification messageをpublishしている
- それぞれのCompute Nodeで稼働している
- Nova APIをPollingをしている
- KeyStoneと接続する(PKIを使えるのであれば代替可能)
- ハイパーバイザより実際の利用状況をpollingして取得している
- Current CPU time and usage, memory consumption
- Disk write and reads
- incoming and outgoing network traffic(bytes and number of packets)
- 対応ハイパーバイザ
- libvirt
- HyperV
- VMware vSphereAPI(icehouse)
- RPCでCeilometer metering message que に送信している(UDPへ変更も可能)
- Active/Passive HAのみ対応
- OpenStack APIをpollingしている
- Nova API: floating IPの有無
- Glance API: imageサイズとイメージの有無
- Swift API: コンテナ数、オブジェクトのトータルサイズ、コンテナ毎のオブジェクトサイズ
- OpenStack APIをpollingするため、Keystoneと接続する必要がある
- Kwapi をpollingして電力消費量を取得できる
- SDNコントローラをpollingできる
- RPCでCeilometer metering message queueに送信している(UDPへ変更も可能)
- スケールアップのために Ceilometer Collectorより分割された
- HA構成でデプロイ可能(スケールアップ?)
- OpenStackサービスのnotification message queueを確認している
- notificationから情報を抽出して、Metering情報を格納する
-
From Nova:
- インスタンスの状態、スケジュール、flavor, deleted
- memory, vCPU, epehemeralDisk
- CPU
-
From Cinder:
- Volumeとサイズ
-
From Glance:
- image, アップロード数、更新回数、削除回数
- イメージダウンロードサイズ
-
From Neutron
- network, subnet, port, router, floating ip 作成数、更新リクエスト数
- Network traffic bandwidthとIPアドレスグループを確認
-
From Heat:
- stackの作成、更新、サスペンド、resume、削除リクエスト数
-
From OpenStackAPI:
- APIの呼び出し数
-
Ceilometer用にコンバートしたnotification数を保存している
-
YAML形式に変換ルールを記載する
-
DB, File, dispacherに格納可能
- HA構成が可能。スケールアウト可能
- Ceilometer message queueを参照している
- Compute Agent
- Central Agent
- Notification Agent
- message signatureをvalidate
- UDP socketも作成可能
- DB, File, dispacherに格納可能
- HA構成が可能。スケールアウト可能
- Ceilometer APIを定期的にpollingしている
- KeyStoneとの接続が必要
- alarm state changeを評価している
- Threshold-oriented alarms
- meta alarm
- alarmをトリガとしてCeilometer Notifier Message queueにメッセージを送信する
- HA構成、スケールアウト可能
- alarm evaluatorのalarm messageが格納されるnotifier message queueをListenしている
- アラームによってアクションを起こせる
- HTTP(s) callback
- 特定のURLをcallできる request
- log
- HTTP(s) callback
- Meters
- Sample
- statics
- event
- 資料参照
- Cumulative
- Delta
- Gauge
- YAML で定義可能
- OpenStackインフラデプロイのテンプレートエンジン
- Deployment機能をstack(deployment)を呼ぶ
- OpenStack resources:server, network, volumes,,,,etcを記述
- RelationShips resources:
- templateと呼ばれるテキストフォーマットで記述
- インフラを管理する
- templateを変更し適用すると自動的にインフラ構成を変更できる
- stackを削除するとインフラ構成を削除できる
- Configuration management toolsと統合できる
- VM作成と一緒にpuppetと連携
- cloud-initに値を渡せる
- Ceilometerと連携するとAutoScaleが実現できる
- 対応しているフォーマット
- AWS CloudFormation(CFN)
- TOSCA(Topology and Orchestration Specification for Cloud Applications)
- OASIS(Cloud Application Management for Platforms)
- Heat Domain Specific Language(DSL)
- Others
- Heatは HeatDSL, AWS CFN のフォーマットをNATIVEサポート
- heat-api: OpenStack Native reST API
- heat-api-cfn: AWS Query API
- どちらもQueueを利用している
- オーケストレーションを行う
- AWSのCloudWatchを参照して作った
- デフォルトはCeilometerに置き換わる
- Auto-Scalingにつかわれた
- templateからstackを生成する
- orchestrationの情報を
- structure�, abstractionはAWS CloudFormationと同じ
- YAML or JSON で記述
- Parameters
- Resources
- Heatを使うリソース
- Type, Properties, dependencyを記述
- Outputs
Parameters:
<param name>:
type: <string | number | json | comma_delimited_list | boolean>
label: <human-readable name of the parameter>
description: <description of the parameter>
default: <default value for parameter>
hidden: <true | false>
constraints:
<parameter constraints>
parameters:
key_name:
type: string
description: Name of key-pair to be used for compute instance
image_id:
type: string
description: Image to be used for compute instance
instance_type:
type: string
description: Type of instance (flavor) to be used
constraints:
- length: { min: 6, max: 8 }
description: User name must be between 6 and 8 characters
- range: { min: 0, max: 10 }
description: Number of floating-ips to allocate
- allowed_values: [ m1.medium, m1.large, m1.xlarge ]
description: Value must be one of m1.medium, m1.large or m1.xlarge.
- allowed_pattern: "[A-Z]+[a-zA-Z0-9]*”
description: User name must start with an uppercase character
parameters:
server_name:
type: string
description: Name of the server
default:
str_replace:
template: my_stack_name
params:
stack_name: { get_param: "OS::stack_name" }
key_name:
type: string
description: Name of key-pair to be used for instance
image_id:
type: string
description: Image to be used for compute instance
instance_type:
type: string
description: Type of instance (flavor) to be used
resources:
my_instance:
type: OS::Nova::Server
properties:
name: { get_param: server_name }
key_name: { get_param: key_name }
image: { get_param: image_id }
flavor: { get_param: instance_type }
user_data: |
#!/bin/bash
sudo apt-get update
- Heat + Ceilometer Alarming = Alarming
- Up/Down Scaling
| name | description |
|---|---|
| OS::Heat::AutoScalingGroup | An autoscaling group that can scale arbitrary resources |
| OS::Heat::ScalingPolicy | A resource to manage scaling of OS::Heat::AutoScalingGroup |
| OS::Ceilometer::Alarm | The resource for defining a ceilometer alarm |
| OS::stack_id | Heat “stack” indentifier used as glue to tie an OS::Ceilometer::Alarm to an OS::Heat::AutoScalingGroup |
--
- project
$ keystone tenant-create --name prac01 --description 'Comprehensive Practice project 01'
$ keystone tenant-list
- user
$ keystone user-create --name john01 --email 'john01@domain.tld' --pass nova --tenant prac01
$ keystone user-role-add --user john01 --role admin --tenant prac01
$ keystone user-role-list --user john01 --tenant prac01
$ keystone user-role-remove --user john01 --tenant prac01 --role _member_
- quota
$ nova quota-show --tenant fa08ab5f7f6e478cad8d83e02fa97ce9
$ cinder quota-show fa08ab5f7f6e478cad8d83e02fa97ce9
$ nova quota-update --instances 2 --cores 4 fa08ab5f7f6e478cad8d83e02fa97ce9
$ cinder quota-update --gigabytes 3 fa08ab5f7f6e478cad8d83e02fa97ce9
- net
$ neutron net-create --tenant-id 925fd528e0454a31aee5ff3d9d82792d prac01
- subnet
$ neutron subnet-create --name prac01subnet --gateway 10.2.0.225 --allocation-pool start=10.2.0.240,end=10.2.0.245 --tenant-id 925fd528e0454a31aee5ff3d9d82792d prac01 '10.2.0.224/27'
- security group
$ nova secgroup-create custom
$ nova secgroup-list-rules custom
$ nova secgroup-add-rule custom icmp -1 -1 0.0.0.0/0
$ nova secgroup-add-rule custom tcp 22 22 0.0.0.0/0
$ nova secgroup-add-rule custom tcp 80 80 0.0.0.0/0
- nova boot
$ nova boot --image cirros-0.3.2-x86_64-uec --flavor m1.tiny john01
$ nova show john01
$ nova add-secgroup john01 custom
- image 登録
$ glance image-create --name ubuntu --container-format bare --disk-format qcow2 < images/ubuntu1204.img
- telemetry
$ ceilometer alarm-threshold-create --name cpu_high --description 'Instance running hot' -m cpu_util --statistic avg --period 600 --evaluation-periods 3 --comparison-operator gt --threshold 80 --alarm-action 'log://' -q resource_id=40ec0b1d-8478-4244-ab33-c388da21c135
- nova boot(demo)
$ nova boot --image cirros-0.3.2-x86_64-uec --flavor m1.tiny demo01
- neutron(lb)
$ neutron subnet-list
$ neutron lb-pool-create --name prac01pool --lb-method ROUND_ROBIN --protocol HTTP --subnet-id 602805df-69af-48c1-b319-2bd4e0fdf296
$ nova list
$ neutron lb-member-create prac01pool --address 10.2.0.240 --protocol-port 80
$ neutron lb-member-create prac01pool --address 10.2.0.242 --protocol-port 80
$ neutron
(neutron) lb-healthmonitor-create --delay 3 --type HTTP --max-retries 3 --timeout 3
CTRL + C
$
$ neutron lb-healthmonitor-associate fec30d95-347b-495a-a82e-419018332ba8 prac01pool
$
$ neutron lb-vip-create --name prac01vip --protocol-port 80 --protocol HTTP --subnet-id 602805df-69af-48c1-b319-2bd4e0fdf296 prac01pool
- neutron(router)
$ neutron router-create prac01router
$ neutron router-gateway-set 65791e44-3720-4b5a-a942-2e79bfe2a815 a6e7c067-925c-444a-b38f-57064f54819e
$ neutron router-list
$ neutron subnet-list
$ neutron router-interface-add 65791e44-3720-4b5a-a942-2e79bfe2a815 602805df-69af-48c1-b319-2bd4e0fdf296
- floating-ip
$ neutron floatingip-create public
$ neutron floatingip-show 59defabb-c210-47fc-a45e-7acf2cabb3f8
$ neutron router-port-list prac01router
$ neutron floatingip-associate 59defabb-c210-47fc-a45e-7acf2cabb3f8 ba68e53d-44d1-4679-a317-d9aae6f8180c
ロードバランサのVIPのポート番号を FloatingIPに紐付ける
FloatingIPからロードバランサのポート番号を選択する