ラベル OpenStack の投稿を表示しています。 すべての投稿を表示
ラベル OpenStack の投稿を表示しています。 すべての投稿を表示

2018年5月18日金曜日

OpenStack API v3 を Ruby からコールしてみた

概要

OpenStack Queens は API のバージョンが v3 になっています
今回は Ruby SDK を使ってコールしてみました

環境

  • CentOS 7.4 64bit
  • packstack 12.0.0
  • OpenStack Queens (API v3.10)
  • Ruby 2.4.1p111
  • openstack 3.3.17 (gem)

インスタンスの一覧を取得する

require 'openstack'

compute = OpenStack::Connection.create({
  :username => "demo",
  :api_key=> "b44ae9c293214e6d",
  :auth_method=> "password",
  :auth_url => "http://192.168.100.1:5000/v3",
  :authtenant_name => "demo",
  :service_type=> "compute",
  :is_debug => false,
  :project_name => "demo",
  :project_domain_name => "default"
})

p compute.servers

前半は認証になります
ID/PW での認証ですが、それ以外に認証用の URL やテナント名サービスタイプなどが必要になります
インスタンスの一覧を取得する場合は compute を設定します
他には compute, ec2, identity, image, network, or volume が指定できるようです

ポイントはパラメータの以下 2 つ :project_name, :project_domain_name です
この 2 つを付与しないと Password authentication with scoped authorization と呼ばれる scope パラメータ付きのレスポンスが返ってこないため認証エラーとなってしまいます

インスタンスの作成

認証部分に関しては上記を同じです

ret = compute.create_server(
  :name => "test2",
  :imageRef => compute.images.first[:id],
  :flavorRef => compute.flavors.first[:id],
  :security_groups => [ compute.security_groups.flatten.first ]
)
pp ret

各パラメータはとりあえず先頭のものを使っています
必要であれば配列 or ハッシュを探索してください

インスタンスの削除

server = compute.get_server "33f686df-ce67-4779-aefd-a6ff8fae3598"
puts server.delete!

id の部分はインスタンスの一覧で取得できる id を使ってください
openstack の場合インスタンスが起動していても削除できます

最後に

OpenStack の API を Ruby から試してみました
とりあえずインスタンス関係の API をコールしましたが他にも機能ごとに API があるので興味があれば試してみてください

参考サイト

2018年5月17日木曜日

OpenStack で既存インスタンスにサクッとディスクを追加してみた

概要

ディスクはデータを永続化するために使う機能です
今回は CirrOS に対してディスクを追加してみました

環境

  • CentOS 7.4 64bit
  • packstack 12.0.0
  • OpenStack Queens

ディスクの作成とインスタンスへの接続

ボリュームの一覧から「ボリュームの作成」を選択します
とりあえず名前だけ決定しました
disk_add1.png

作成すると一覧に表示されるのでプルダウンから「接続の管理」を選択します
disk_add2.png

接続するインスタンスを選択します
disk_add3.png

接続が完了するとブロックデバイスが表示されます
disk_add4.png

CirrOS でマウントする

あとは普通に OS 上でやることをコマンド実行するだけです

  • fdisk -l
Disk /dev/vdb: 2147 MB, 2147483648 bytes
16 heads, 63 sectors/track, 4161 cylinders, total 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/vdb doesn't contain a valid partition table

ブロックデバイスとして接続されていることを確認します

  • fdisk /dev/vdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x2d8a673a.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-4194303, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4194303, default 4194303): 
Using default value 4194303

新規パーティションを作成します
今回は全領域をフォーマットします

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

w で書き込みして終了です

  • mkfs.ext4 /dev/vdb1

ディスクを ext4 でフォーマットします

  • mkdir /data
  • mount /dev/vdb1 /data
  • df -h /dev/vdb1
Filesystem                Size      Used Available Use% Mounted on
/dev/vdb1                 2.0G     35.0M      1.8G   2% /data

あとはマウントするディレクトリを作成し mount を実行すれば OK です
必要に応じて /etc/fstab にマウント情報を記載しておけば reboot 時もマウントされた状態で起動します

/dev/vdb1 /data auto defaults,nofail 0 0

最後に

OpenStack のボリューム機能を使ってインスタンスにディスク領域を追加してみました
かなり簡単に追加できると思います
ボリュームを作成しておけばスナップショットとして簡単にディスクのバックアップを行うことができます
一旦ディスクの接続を切断する必要がありますが、ボリュームを拡張することも簡単にできます (その際は再度 fdisk によるフォーマットが必要です)

OpenStack のかなり基本的な機能になるので覚えておいて損はないと思います
また今回は UI をベースに行いましたが CLI や API を使っても同様のことが可能です

参考サイト

2018年5月16日水曜日

動作している VM がどのホストにいるか調べる方法

概要

OpenStack 上で VM を動かした際にどのハイパーバイザ上で動作しているか知りたくなることがあると思います
admin 権限になり nova コマンドを使うことで取得することができました

環境

  • CentOS 7.4 64bit
  • packstack 12.0.0
  • OpenStack Queens

admin としてコマンドを利用する

  • source /root/keystonerc_admin

nova コマンドを使う

hypervisor-list でハイパーバイザ (ホスト) の一覧を表示して

[root@localhost ~(keystone_admin)]# nova hypervisor-list
+--------------------------------------+-----------------------+-------+---------+
| ID                                   | Hypervisor hostname   | State | Status  |
+--------------------------------------+-----------------------+-------+---------+
| 0dd06146-f9ec-410f-9a46-20df27791819 | localhost.localdomain | up    | enabled |
| 3bcf902b-cc90-453c-881c-4fab30aa8e4f | compute0              | up    | enabled |
+--------------------------------------+-----------------------+-------+---------+

hypervisor-servers で乗っている VM の一覧を取得する感じ

[root@localhost ~(keystone_admin)]# nova hypervisor-servers compute0
+----+------+---------------+---------------------+
| ID | Name | Hypervisor ID | Hypervisor Hostname |
+----+------+---------------+---------------------+
+----+------+---------------+---------------------+
[root@localhost ~(keystone_admin)]# nova hypervisor-servers localhost.localdomain
+--------------------------------------+-------------------+--------------------------------------+-----------------------+
| ID                                   | Name              | Hypervisor ID                        | Hypervisor Hostname   |
+--------------------------------------+-------------------+--------------------------------------+-----------------------+
| cfa2fa5d-5a01-404a-ac2a-735ad35e3330 | instance-00000001 | 0dd06146-f9ec-410f-9a46-20df27791819 | localhost.localdomain |
+--------------------------------------+-------------------+--------------------------------------+-----------------------+

他にも nova listnova-manage を使う方もあるらしいですが nova list の場合は admin で VM を作成していないので見れず nova-manage は vm list サブコマンドが Queens だと廃止になっており使えませんでした

参考サイト

2018年5月15日火曜日

packstack で構築した OpenStack 上にホストを 1 台追加してみる

概要

ホスト用の VM (CentOS7) を 1 台作成してそれを OpenStack 配下にホストとして登録してみました

環境

  • CentOS 7.4 64bit
  • packstack 12.0.0
  • OpenStack Queens

answer ファイルの修正

ホームディレクトリ配下にある packstack-answers ファイルを編集します

  • vim packstack-answers-20180510-163950.txt
CONFIG_COMPUTE_HOSTS=192.168.100.1,192.168.100.2

CONFIG_COMPUTE_HOSTS に追加したいホストの IP を記載します
192.168.100.2 が今回新たに作成した VM でホストとして追加する対象になります
同じように NETWORK や STORAGE の項目もあり OpenStack はコンポーネントごとに登録したいホストを選択することができます

EXCLUDE_SERVERS=192.168.100.1

またこれまで standalone であったノードは EXCLUDE_SERVERS に追加します

id_rsa.pub の登録

追加するホストにコントローラ用のホストから SSH 出来る必要があります
コントローラホストの ~/.ssh/id_rsa.pub を追加する対象のホストの ~/.ssh/authorized_keys に追記しましょう

これでコントローラホストから追加対象のホストに公開鍵を使ったノンパスでの SSH 認証ができるようになります
Permission denied(publickey) などが出る場合は ~/.ssh/authorized_keys にコピペした内容が間違っていないか確認してください
改行や余分なスペースなどが入っていても当該エラーが発生します

NetworkManager を停止する

追加対象のホストで実施します

  • systemctl start network
  • systemctl stop NetworkManager

ホスト名を変更する

追加対象のホストで実施します
localhost.localdomain のままだとすでにあるノードと被ってしまい追加できないので変更します

  • hostnamectl set-hostname compute0
  • reboot -h now

ホストを登録する

あとは answers ファイルを使って再度 packstack コマンドを実行します

  • packstack --answer-file=packstack-answers-20180510-163950.txt

puppet によるマイグレートが再度走るので気長に待ちましょう
以下のようになれば成功です

 **** Installation completed successfully ******

Additional information:
 * Time synchronization installation was skipped. Please note that unsynchronized time on server instances might be problem for some OpenStack components.
 * File /root/keystonerc_admin has been created on OpenStack client host 192.168.100.1. To use the command line tools you need to source the file.
 * To access the OpenStack Dashboard browse to http://192.168.100.1/dashboard .
Please, find your login credentials stored in the keystonerc_admin in your home directory.
 * The installation log file is available at: /var/tmp/packstack/20180511-101818-jVIdOL/openstack-setup.log
 * The generated manifests are available at: /var/tmp/packstack/20180511-101818-jVIdOL/manifests

動作確認

  • source /root/keystonerc_admin
  • nova hypervisor-list
+--------------------------------------+-----------------------+-------+---------+
| ID                                   | Hypervisor hostname   | State | Status  |
+--------------------------------------+-----------------------+-------+---------+
| 0dd06146-f9ec-410f-9a46-20df27791819 | localhost.localdomain | up    | enabled |
| 3bcf902b-cc90-453c-881c-4fab30aa8e4f | compute0              | up    | enabled |
+--------------------------------------+-----------------------+-------+---------+

こんな感じで追加されていれば OK です
UI で確認すると以下のように見えます
openstack_add_host_1.png

最後に

OpenStack にホストを 1 台追加してみました
これで standalone だった環境に専用のホストができました
今回はこれまでの standalone ノードもホストノードとして残しています
もし、コントローラ専用ノードにしたい場合は answers ファイルの CONFIG_COMPUTE_HOSTS から除外すれば OK です
同じように VM を作成してホストとして追加すれば 2 台目を追加することができます

また、nova コマンドが Queens というバージョンからだいぶ変わっているので man コマンドや help コマンドを使ってどう使えば良いか確認してください

参考サイト

2018年5月14日月曜日

OpenStack 上の CirrOS で作成した VM に IPv4 で SSH ログインする

概要

前回 CentOS7 上に OpenStack を構築してみました
CirrOS で IPv4 でアクセスできないという問題があったので解決しました
かなり単純なミスでしたがメモがてら紹介します

環境

  • CentOS 7.4 64bit
  • packstack 12.0.0
  • OpenStack Queens

ログインするユーザは demo にする

前回 admin を使っていましたがそうするとプロジェクトも admin になります
実は demo プロジェクトにはすでに public と private 用のネットワークがあります
これを使えばプライベート側で dhcp を使って IP を取得して更に Floating IP を追加することで public のネットワークから cirros にログインすることができるようになります

ネットワークの設定

VM を作成する際のネットワークの設定は private ネットワークを割り当てます
ここで public ネットワークがないじゃんと思いますがあとで Floating IP という機能を使う時に public ネットワークは登場します
cirros_ipv4_1.png

こんな感じで private IP が振られていれば OK です
cirros_ipv4_2.png

Floating IP の割り当て

作成した VM に Floating IP と呼ばれる SSH するための IP を割り当てます
これは public ネットワークから払い出した IP になります

VM の一覧から Floating IP の割り当てを選択します
cirros_ipv4_3.png

モーダルが表示されます
また 1 つも Floating IP が存在しないので「+」ボタンで作成します
cirros_ipv4_4.png

必要であれば説明を入力してください
Floating IP は public の領域から自動で払い出されます
cirros_ipv4_5.png

あとは割り当てボタンを押せば OK です
cirros_ipv4_6.png

こんな感じで割り当てられれば OK です
cirros_ipv4_7.png

SSH してみる

これで今度は IPv4 で CirrOS に接続できるはずです
先ほど割り当てた Floating IP を使ってアクセスします

  • ssh cirros@172.24.4.10

でパスワードは cubswin:) です
ちなみにセキュリティグループを default にしている場合は以下のルールの追加が必要です
cirros_ipv4_8.png

ping も打ちたい場合は ICMP もルールに追加してあげてください

[root@localhost ~]# ssh cirros@172.24.4.10
The authenticity of host '172.24.4.10 (172.24.4.10)' can't be established.
RSA key fingerprint is SHA256:db0CDtcKuKvvG10Bg72N7zjbmdnzigbNnHVLZoddk20.
RSA key fingerprint is MD5:86:ee:f2:07:16:e1:d4:d9:92:eb:fd:62:8d:50:45:b1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.24.4.10' (RSA) to the list of known hosts.
cirros@172.24.4.10's password: 
$ ip a show ens0
ip: can't find device 'ens0'
$ ip a show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast qlen 1000
    link/ether fa:16:3e:1a:f8:9a brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.11/24 brd 10.0.0.255 scope global eth0
    inet6 fe80::f816:3eff:fe1a:f89a/64 scope link 
       valid_lft forever preferred_lft forever

最後に

OpenStack 上に作成した VM に IPv4 で SSH ログインする方法を紹介しました
これが王道の使い方なので実際に環境を構築する場合などはこちらの方法を使ってください

2018年5月13日日曜日

CentOS7 に OpenStack 環境を構築してみる

概要

OpenStack は RedHat 社が提供する IaaS を構築できる OSS のツールです
大掛かりなサーバマシンやストレージは持っていなくミニマムで初めようとしたら PackStack というインストーラを見つけてこれならできそうだということで環境構築してみました

環境

  • CentOS 7.4 64bit
  • packstack 12.0.0

packstack のインストール手順

  • vim /etc/environment
LANG=en_US.utf-8
LC_ALL=en_US.utf-8
  • yum install -y python-setuptools
  • yum install -y centos-release-openstack-queens
  • yum update -y
  • yum install -y openstack-packstack

OpenStack 環境の構築

以下のコマンドだけで CentOS 上に構築してくれます
当然ですがホストマシンやストレージ機器は別途用意してセットアップする必要があります

  • packstack --allinone

_controller.pp, _network.pp, _compute.pp の puppet の処理がかなり長いので気長に待ちましょう
だいたい 30 - 50 分ほどかかります
Installation completed successfully が出たら完了です

ダッシュボードを表示してみる

http://localhost/dashboard にアクセスするとダッシュボードが表示されます
ユーザ名は admin でパスワードは /root/keystonerc_admin というファイルの OS_PASSWORD という変数名の値になります
packstack_1.png

インスタンスを 1 台立ててみる

せっかくなので VM を 1 台作成してみましょう
左メニューから「プロジェクト」->「インスタンス」->「インスタンスの起動」を選択します
packstack_2.png
インスタンスを作成するモーダルが表示されるので必要な情報を入力していきます

名前を入力しましょう
次へを選択します
packstack_3.png

インスタンスを作成するソースを選択します
今回はデフォルトの cirros を選択します
選択するのは右端にある上矢印を選択します
packstack_4.png

インスタンスのサイズを選択します
一番小さい m1.tiny を選択します
packstack_5.png

これで最低限の設定はできました、インスタンスを起動しましょう
こんな感じでステータスが稼働中になれば OK です
packstack_8.png

セキュリティグループの設定

「プロジェクト」->「ネットワーク」->「セキュリティグループ」と選択しましょう
default というセキュリティグループがあるのでこれに IPv6 で通信できるルールを追加します
packstack_9.png

ping もしたいので ICMP のルールも追加しました
今回外に出るテストはしませんが、デフォルトであったのでそのまま追加しています

なぜ IPv6 のルールを追加しているかと自分の環境では IPv4 が取得できなかったからです
static に振ってもよかったのですが面倒だったので IPv6 環境をそのまま使います

SSH してみる

では作成したインスタンスに SSH してみましょう
ネットワークは ex-br というネットワークを使うので OpenStack をインストールした CentOS 上から SSH します

  • ssh cirros@fe80::f816:3eff:feb1:9910%br-ex

パスワードはデフォルトの cubswin:) になります
問題なく SSH できれば OK です

ちなみに ping は以下になります

  • ping6 -I br-ex fe80::f816:3eff:feb1:9910

最後に

CentOS7 に packstack で OpenStack 環境を構築してみました
とりあえずスタンドアロンでも動かせる環境が作れるようです

IPv4 が使えないなどの問題はありますがとりあえず動作したので良しとします
今回の操作は UI からだったので CLI や API からもやってみたいと思います

参考サイト