はじめに
OCI Computeにブロック・ボリュームをアタッチする際、ボリューム・アタッチメント・タイプとして「iSCSI」を選択した場合、ボリュームを使用可能にするために、インスタンスからボリュームを接続してマウントする必要があります。Linux OSにアタッチする場合は、iscsiadmツールを使用してボリュームを登録などを行います。コマンドはOCI Webコンソールで確認可能ですが、今回は、oci cliを使ってiscsiadmツールを使用するコマンドを生成してみました。
前提条件
- Oracle Linux 8 で稼働するOCI Computeインスタンス
- Computeインスタンスにoci cliをインストールとセットアップ
- iSCSIでブロック・ボリュームをアタッチ
ボリューム接続に必要な情報
ボリュームを接続するには、次の情報で、それらを oci cli で取得します
- iSCSI IPアドレス
- iSCSIポート番号
- CHAP資格証明(CHAPを有効にした場合)
- IQN
作業ステップ
- ComputeインスタンスのOCIDの取得
- インスタンスにアタッチされているブロック・ボリュームのOCIDを取得
- ボリューム接続に必要な情報
- iSCSIコマンド生成
- /etc/fstab の通りにマウント
Shell スクリプトの生成
#!/bin/bash
# コンパートメントOCIDのセット
COMPARTMENT_ID="ocid1.compartment.oc1..aaaaaaaa"
# ホスト名の取得
OCIHOST=$(hostname)
# 1. インスタンスのOCIDを取得
INSTANCE_OCID=$(oci compute instance list \
--compartment-id $COMPARTMENT_ID \
--display-name $OCIHOST \
--lifecycle-state RUNNING \
--profile default \
--query "data[0].id" \
--raw-output)
echo "Instance OCID: $INSTANCE_OCID"
# 2. インスタンスにアタッチされているBlock VolumeのOCIDを取得
# アタッチされているブロック・ボリュームの1つ目のみ対応
VOLUME_ATTACHMENT_OCID=$(oci compute volume-attachment list \
--compartment-id $COMPARTMENT_ID \
--instance-id $INSTANCE_OCID \
--profile default \
--query "data[0].id" \
--raw-output)
echo "ATTACHMENT OCID: $VOLUME_ATTACHMENT_OCID"
# 3. ボリューム接続に必要な情報
ISCSI_IP=$(oci compute volume-attachment get \
--volume-attachment-id $VOLUME_ATTACHMENT_OCID \
--profile default \
--query "data.ipv4" \
--raw-output)
ISCSI_IQN=$(oci compute volume-attachment get \
--volume-attachment-id $VOLUME_ATTACHMENT_OCID \
--profile default \
--query "data.iqn" \
--raw-output)
ISCSI_PORT=$(oci compute volume-attachment get \
--volume-attachment-id $VOLUME_ATTACHMENT_OCID \
--profile default \
--query "data.port" \
--raw-output)
# 4. iSCSIコマンド生成
echo "sudo iscsiadm -m node -o new -T $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT"
echo "sudo iscsiadm -m node -o update -T $ISCSI_IQN -n node.startup -v automatic"
echo "sudo iscsiadm -m node -T $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT --login"
sudo iscsiadm -m node -o new -T $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT
sudo iscsiadm -m node -o update -T $ISCSI_IQN -n node.startup -v automatic
sudo iscsiadm -m node -T $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT --login"
# 5. ファイルシステムのマウント
sudo mount -a
ボリュームからの切断
接続と同じように切断のコマンドも生成可能です。
#!/bin/bash
# コンパートメントOCIDのセット
COMPARTMENT_ID="ocid1.compartment.oc1..aaaaaaaa"
# ホスト名の取得
OCIHOST=$(hostname)
# 1. インスタンスのOCIDを取得
INSTANCE_OCID=$(oci compute instance list \
--compartment-id $COMPARTMENT_ID \
--display-name $OCIHOST \
--lifecycle-state RUNNING \
--profile default \
--query "data[0].id" \
--raw-output)
echo "Instance OCID: $INSTANCE_OCID"
# 2. インスタンスにアタッチされているBlock VolumeのOCIDを取得
# アタッチされているブロック・ボリュームの1つ目のみ対応
VOLUME_ATTACHMENT_OCID=$(oci compute volume-attachment list \
--compartment-id $COMPARTMENT_ID \
--instance-id $INSTANCE_OCID \
--profile default \
--query "data[0].id" \
--raw-output)
echo "ATTACHMENT OCID: $VOLUME_ATTACHMENT_OCID"
# 3. ボリューム接続に必要な情報
ISCSI_IP=$(oci compute volume-attachment get \
--volume-attachment-id $VOLUME_ATTACHMENT_OCID \
--profile default \
--query "data.ipv4" \
--raw-output)
ISCSI_IQN=$(oci compute volume-attachment get \
--volume-attachment-id $VOLUME_ATTACHMENT_OCID \
--profile default \
--query "data.iqn" \
--raw-output)
ISCSI_PORT=$(oci compute volume-attachment get \
--volume-attachment-id $VOLUME_ATTACHMENT_OCID \
--profile default \
--query "data.port" \
--raw-output)
# 4. iSCSIコマンド生成
echo "iqn= $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT"
echo "sudo iscsiadm -m node -T $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT -u"
echo "sudo iscsiadm -m node -o delete -T $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT"
# 5. ファイルシステムのアンマウントと切断コマンドの実行
sudo umount /mnt/bv1
sudo iscsiadm -m node -T $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT -u
sudo iscsiadm -m node -o delete -T $ISCSI_IQN -p $ISCSI_IP:$ISCSI_PORT
おわりに
Shellスクリプトでブロック・ボリュームへの接続操作ができるようになりました。