#####この記事は Oracle Cloud Advent Calendar 2018 の12/3の記事として書かれています
突然ですが、みなさん Red Hat 系の Linux ディストリビューションは何を使っていますか? CentOS派? Fedra派?
私はオンプレミス(=自宅)では昔は Scientific Linux、今はだいたい CentOS を使うのですが、OCI で使う場合はほぼ100% Oracle Linux を使います。
なぜって? そりゃ理由はもちろん、デフォルトのまま変えるのが面倒くさいから・・・ ではなく、今日ご紹介する oci-utils というパッケージが使えるからなんです。これを使うと、OCI を使う際にどうしても避けられない面倒なコマンドライン操作のあれやこれやが、スパッと簡単にできてしまうんです。
oci-utilsを使うと便利なこと
oci-utilsを使うと、例えばこんなことができます。
- iSCSIモードでのブロックボリュームを「簡単に」アタッチ、デタッチする
- インスタンスのセカンダリvNICをOSに「簡単に」認識させる
- インスタンスのOCIDをインスタンスの中から「簡単に」調べる
- インスタンスに割りあたっているパブリックIPアドレスをインスタンスの中から「簡単に」調べる
- ブートボリュームのサイズを大きくしたあと、ファイルシステムも「簡単に」大きくする
そう、ポイントはどれも頑張ればできるんだけど、oci-utilsを使うとそれが簡単だってことです。
では、さっそく使ってみましょう。
oci-utilsのインストール、起動、準備
oci-utils は、Oracle Linux のパッケージとして提供されています。とはいっても実は OCI 上の Oracle Linux のイメージにはには予めパッケージが含まれているので、普通はインストールは不要です。もしお手元のインスタンスに oci-utils が含まれていない場合は sudo yum -y install oci-utils
でインストールすることができます。
フル機能を使うには ocid.service というサービスを立ち上げておく必要があります。必須ではないですがあると便利なので起動しておきましょう。
$ sudo systemctl start ocid.service
そうすると、/usr/libexec/ocid というプロセスが立ち上がってきます。
[opc@ol7 ~]$ ps -ef | grep ocid
root 16970 1 0 03:04 ? 00:00:00 python2.7 /usr/libexec/ocid
opc 17267 16849 0 03:08 pts/0 00:00:00 grep --color=auto ocid
使ってみる
まずは簡単なところから試してみましょう。インスタンスに割り当てられているパブリックIPを知るコマンドです。
[opc@ol7 ~]$ oci-public-ip
Public IP address: 129.213.0.1
インスタンスのメタデータを取得するコマンドです。基本的にコンソールのインスタンスの詳細画面に表示されている情報が取得できます。
[opc@ol7 ~]$ oci-metadata
Instance details:
Instance name: ol7
Region: iad - us-ashburn-1 (Ashburn, VA, USA)
Availability Domain: xSEP:US-ASHBURN-AD-1
Fault domain: FAULT-DOMAIN-1
Instance shape: VM.Standard2.1
Instance created at: 2018-12-03 02:43:28 UTC
Instance state: Running
Instance OCID: ocid1.instance.oc1.iad.abuwcl......poa6tq
Compartment OCID: ocid1.compartment.oc1..aaaaaa......hxkxgq
Image OCID: ocid1.image.oc1.iad.aaaaaa......mktdiq
canonicalRegionName: us-ashburn-1
Instance Metadata:
user_data: dW5kZWZpbmVk
ssh_authorized_keys: ssh-rsa AAAAB3NzaC1......i6WudnDSvw1JHw== mmarukaw@MMARUKAW-LAP2
Networking details:
Private IP address: 10.0.0.8
MAC address: 02:00:17:02:A9:99
Subnet CIDR block: 10.0.0.0/24
Virtual router IP address: 10.0.0.1
VNIC OCID: ocid1.vnic.oc1.iad.abuwcl......bgmohq
VLAN tag: 588
--get
オプションを使うとマッチする特定キーの値のみが取得できます。
[opc@ol7 ~]$ oci-metadata --get region
Instance details:
Region: iad - us-ashburn-1 (Ashburn, VA, USA)
[opc@ol7 ~]$ oci-metadata --get shape
Instance details:
Instance shape: VM.Standard2.1
インスタンスにアタッチされているiSCSIブロック・ボリュームの情報を見てみます。
[opc@ol7 ~]$ oci-iscsi-config --show
Currently attached iSCSI devices:
Target iqn.2015-02.oracle.boot:uefi
Persistent portal: 169.254.0.2:3260
Current portal: 169.254.0.2:3260
State: LOGGED_IN
Attached device: sda
Size: 46.6G
Partitions: Device Size Filesystem Mountpoint
sda1 200M vfat /boot/efi
sda2 8G swap [SWAP]
sda3 38.4G xfs /
Need OCI services to display available devices.
##便利な機能を試してみる
さて、ここまでならインスタンスの情報をちょっと見るのにいいコマンド、くらいなかんじですが、一番便利な機能は実はここからです。先程 ocid というデーモンサービスを起動しましたが、実はこいつはバックグラウンドで素敵なことをしてくれるのです。具体的には・・・
1. インスタンスにブロック・ボリュームがアタッチされたら、自動的にiSCSIでログインしてくれる
2. インスタンスに追加のVNICがアタッチされたら、自動的に仮想インタフェースを登録してくれる
という仕事をしてくれます。
さあ、やってみましょう!! ということでまずはブロック・ボリュームのアタッチです。
詳しい手順は割愛します。もしやり方がわからない方は、こちらのチュートリアルを参考にブロック・ボリュームを作成してインスタンスにiSCSIでアタッチしてみてください。
普通はこのあと、インスタンスにsshでアクセスして、このiscsiadmコマンドを流す必要がありますよね。
でも今回はこの手順は必要ありません。しばらくすると ocid デーモンがアタッチされたボリュームを検知して、自動でデバイスとして見えるようになります。oci-iscsi-config --show
コマンドでアタッチされたボリュームの情報が確認できます。
[opc@ol7 ~]$ oci-iscsi-config --show
Currently attached iSCSI devices:
Target iqn.2015-12.com.oracleiaas:1515ce34-f006-4568-a8c5-f8c358fe724c
Persistent portal: 169.254.2.2:3260
Current portal: 169.254.2.2:3260
State: LOGGED_IN
Attached device: sdb
Size: 50G
File system type: Unknown
Mountpoint: Not mounted
Target iqn.2015-02.oracle.boot:uefi
Persistent portal: 169.254.0.2:3260
Current portal: 169.254.0.2:3260
State: LOGGED_IN
Attached device: sda
Size: 46.6G
Partitions: Device Size Filesystem Mountpoint
sda1 200M vfat /boot/efi
sda2 8G swap [SWAP]
sda3 38.4G xfs /
Need OCI services to display available devices.
この上のボリュームが、自動的にアタッチされたブロック・ボリュームです。lsblk
コマンドでも/dev/sdb
として見えています。
[opc@ol7 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 50G 0 disk
sda 8:0 0 46.6G 0 disk
├─sda2 8:2 0 8G 0 part [SWAP]
├─sda3 8:3 0 38.4G 0 part /
└─sda1 8:1 0 200M 0 part /boot/efi
では、次にネットワークの方も試してみましょう。
OCIコンソールから、仮想NICをもうひとつアタッチします。
しばらくすると、ocid が自動的に新しい仮想NICを検知して、インタフェースとして登録してくれます。その情報は oci-network-config
コマンドで確認できます。( root 権限が必要です)
[opc@ol7 ~]$ sudo oci-network-config --show
CONFIG ADDR SPREFIX SBITS VIRTRT NS IND IFACE VLTAG VLAN STATE MAC VNIC
- 10.0.0.8 10.0.0.0 24 10.0.0.1 - 0 ens3 - - UP 02:00:17:02:a9:99 ocid1.vnic.oc1.iad.abuwcljtf52zh5piglznfcjpcl4u5osqvurj54drtww2gatcpefuqkbgmohq
- 10.0.0.10 10.0.0.0 24 10.0.0.1 - 1 ens4 - - UP 02:00:17:02:41:62 ocid1.vnic.oc1.iad.abuwcljtmnwvccrsi2ztvo7jxxve2qu5w77eqzhp5udwcfoft5wxmgddzrea
もちろん ip
コマンドでも確認できます。
[opc@ol7 ~]$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
link/ether 02:00:17:02:a9:99 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.8/24 brd 10.0.0.255 scope global dynamic ens3
valid_lft 68291sec preferred_lft 68291sec
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
link/ether 02:00:17:02:41:62 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.10/24 scope global ens4
valid_lft forever preferred_lft forever
OCI CLIをセットアップするともう少し高度なこともできる
さて、これだけでも十分便利な oci-utils ですが、OCI CLI と合わせて使うともう少しいろいろなことができたりします。OCI CLI のセットアップ方法は、このチュートリアルあたりを参考に実施してみてください。ただ、Oracle Linuxからだとインストール自体はもっと簡単に、yum
コマンドを使ってインストールできます。
[opc@ol7 ~]$ sudo yum -y install python-oci-cli
Loaded plugins: langpacks, ulninfo
Resolving Dependencies
(略)
Complete!
###ブロックボリュームを作成し、インスタンスにアタッチして、iSCSIでログインする
さて、oci-utils + CLI がセットアップできたので、遊んでみましょう。
oci-iscsi-config --create-volume
コマンドを使うと、ブロック・ボリュームを作成し、インスタンスにアタッチし、iSCSIでログインするという一連の作業がシングルコマンドでできてしまいます。こんなかんじ。
[opc@ol7 ~]$ sudo oci-iscsi-config --create-volume 50
Creating a new 50 GB volume
Volume abuwcljtvsiu6zdwy4rsmd3ss3z7gn6o5fvvsqqqhjlu6v55x73sxpvyv6vq created
Volume abuwcljtvsiu6zdwy4rsmd3ss3z7gn6o5fvvsqqqhjlu6v55x73sxpvyv6vq is ATTACHED
--create-volume
のあとの50という数字は、50GBのブロック・ボリュームを作るというコマンドです。
ボリュームの作成、インスタンスへのアタッチ、iSCSIでのログインまで完了していますので、lsblk
でOSから見ることができます。
[opc@ol7 ~]$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 50G 0 disk
sda 8:0 0 46.6G 0 disk
├─sda2 8:2 0 8G 0 part [SWAP]
├─sda3 8:3 0 38.4G 0 part /
└─sda1 8:1 0 200M 0 part /boot/efi
CLIを使って一つずつコマンドを実行してもいいですが、ちょっとしたディスクの追加作業がコマンド一つでできてしまうのはとても便利ですね。
###ブートボリュームを大きくした場合に、rootのファイルシステム領域も大きくする
インスタンスのブート・ボリュームは、初期値のままだと46.6GBで作成されますが、あとからサイズを大きくすることができます。
例えばこんなかんじです。これは、46.6GBで作成したブート・ボリュームを、あとから100GBに拡大した場合の例です。
しかし、ファイルシステムとしては46.6GBが最初に固定で作られるため、100GBのうちファイルシステムが作られているのは46.6GBだけです。
[opc@ol7 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda2 8:2 0 8G 0 part [SWAP]
├─sda3 8:3 0 38.4G 0 part /
└─sda1 8:1 0 200M 0 part /boot/efi
残念ながらあとから拡大した部分は、まだ使われていませんね。
普通はここでパーティションを切って、vgextendで拡張して・・・みたいな作業が必要になるわけですが、oci-utils
の oci-growfs
コマンドを使うと、これも簡単にやってくれます。
このコマンドにはなぜかpathが通っていないので、/usr/libexec/oci-growfs
のようにフルパスで指定する必要があります。
[opc@ol7 ~]$ sudo /usr/libexec/oci-growfs
CHANGE: disk=/dev/sda partition=3: start=17188864 old: size=80486399,end=97675263 new: size=192526302,end=209715166
Confirm? [y/n]: y
CHANGED: disk=/dev/sda partition=3: start=17188864 old: size=80486399,end=97675263 new: size=192526302,end=209715166
meta-data=/dev/sda3 isize=256 agcount=4, agsize=2515200 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=0 finobt=0 spinodes=0 rmapbt=0
= reflink=0
data = bsize=4096 blocks=10060800, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=4912, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 10060800 to 24065787
簡単ですね。途中に確認メッセージが出るので、y
と答えるだけです。これ、再び lsblk
コマンドで見てみると、
[opc@ol7 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda2 8:2 0 8G 0 part [SWAP]
├─sda3 8:3 0 91.8G 0 part /
└─sda1 8:1 0 200M 0 part /boot/efi
無事にroot以下が91.8GBまで拡張されました!!
まとめ
というわけで、oci-utils を使うと
- OCIコンソールにいかなくても、インスタンスの中から様々な情報が簡単に調べられる
- デーモンを立ち上げておけば、ボリュームやNICを追加しても勝手にいい感じに認識してくれる
- CLIと組み合わせると、普通ならちょっと面倒な操作をコマンド一発で実行できる
みたいないいことがあるので、OCI で Oracle Linux を使うときは、oci-utils をぜひ使ってみてください。きっと手放せなくなりますよ!!
Oracle Cloud Advent Calendar2018に参加しています
さて、こちらのアドベントカレンダーに参加しています。まだ3日目ですが、25日まで埋まっているようですので、その他の記事も毎日楽しみにチェックしてみてください。
そしてパート2にはまだ空きもあるようなので、我こそと思う方はぜひご参加ください!
Oracle Cloud Advent Calendar 2018 - Adventar