Power Systems Virtual Serverでカスタム・イメージを利用する方法

IBM CloudのPower Systems Virtual Server(Power VS)でLinuxの対応が始まっています。
利用出来る機会があったので、カスタムイメージ（任意のLinuxイメージ）を持ち込んで利用する方法をまとめます。この手順で一度持ち込んだイメージは、ブート・イメージとして登録して以後必要に応じてカタログ（テンプレート）のように利用することができます。

この記事の元となる手順は以下のTutorialです。
ここでは、IBM Cloudの事前知識を補足したり、公開されているイメージ（CentOS 8.3）を利用するなどのより手軽にカスタム・イメージをインポートするステップをまとめます。

Preparing images for OpenShift Container Platform on IBM Power Systems Virtual Servers
https://developer.ibm.com/tutorials/preparing-ova-for-openshift-on-cloud/

### 事前準備

予め必要なものは以下の通りです。

* 有効な IBM Cloudのアカウント（従量課金）
 
IBM Cloudの従量課金アカウントが必要です。この手順のなかでは、IBM Cloud Object Storage、Power VSの二つを利用します。後者でインスタンスを実際に立ち上げる場合、従量課金で費用が発生します。Object Storageは、カスタムイメージのアップロードに利用しますが、イメージに必要な容量であれば、（記事作成時点では）無料の範疇でまかなえます。

* 上記のアカウントのIBM Cloud APIキー

上記のアカウントでIBM Cloudにログインし、右上メニューの「管理」>「アクセス (IAM)」>「API キー」からAPIキーを発行しておきます。
ここで発行したAPIキーは、後述のカスタム・イメージをIBMクラウドにCLIからアップロードしたり、インポートする際に利用します。

* pvsadmツールの実行環境
   
pvsadmツールは、Power VSの操作用のCLIユーティリティです。
ここでは、IBM Cloud上のObject StorageにOSイメージをアップロードしたり、Power VSのOSカタログにイメージをインポートする際に利用します。
x86または、POWER(LE)用のユーティリティが以下のgithubで公開されておりいずれもLinux向けでしたが、最近Mac向けも公開されました。

https://github.com/ppc64le-cloud/pvsadm/releases

あらかじめダウンロードして実行権限を付与しておきます。
以下はpower環境での実行例です。x86版のLinuxを利用している場合は、「pvsadm-linux-amd64」をMacを利用している場合は、「pvsadm-darwin-amd64」をダウンロードします。手元ではCatalina 10.15.7で動作確認をしています。

```ユーティリティのダウンロード
$ sudo curl -sL https://github.com/ppc64le-cloud/pvsadm/releases/download/v0.1/pvsadm-$linux-ppc64le -o /usr/local/bin/pvsadm
$ sudo chmod +x /usr/local/bin/pvsadm
$ pvsadm version
$ pvsadm image –help
```

### 作業の流れ
大まかな流れは以下の通りです。

* OVAイメージの準備
* アップロード用のバケットの作成
* PowerVSの作成
* カスタム・イメージの登録と起動

#### OVAイメージの準備

Power VSで利用するLinuxのOSイメージをOVA形式で準備する必要があります。
Distributorやコミュニティが配布する公式なBootイメージの多くは、Qcow2形式(仮想マシンイメージ)のため、変換が必要です。

例）
Red Hat Enterprise Linux 8.3 Update KVM Guest Image
https://developer.ibm.com/tutorials/preparing-ova-for-openshift-on-cloud/

CentOS 8.3
https://cloud.centos.org/centos/8/ppc64le/images/CentOS-8-GenericCloud-8.3.2011-20201204.2.ppc64le.qcow2

上に記載したToturialでは、QCOW2→OVAの変換方法が案内されています。
CentOS8.3については、OVAイメージが以下のIBMのFTPサイトから配布されているのでこの手順では以下から入手して利用します。ファイルサイズは、約1.5GB程度です。
ftp://public.dhe.ibm.com/software/server/powervs/images/

pvsadmツールを使うことで、QCOW2とOVAの変換も可能です。ただ変換処理の中で初期RAMイメージの再作成などが行われるため、今のところPowerのLinux環境を準備する必要があり、少しハードルが高くなります。
このため、ここでは、すでにOVAで利用可能なCentOS8のベースイメージを使って進めていきます。

もしPower ServerのLinux環境が手元にある場合は、イメージの変換自体は以下の1ライナーで完結します。

```ユーティリティのダウンロード

# pvsadm image qcow2ova  --image-name rhel-83-12112020 --image-url  ./rhel-8.3-ppc64le-kvm.qcow2.gz --image-dist rhel --image-size 120 --rhn-user john@example.com --rhn-password someValidPassword --os-password sOmeComplexpassword

```

### アップロード用のバケットの作成

#### IBM Cloud Object Storageのバケット作成

作成自体はダイアログに従って実行していけば完了します。
進めるにあたり理解していた方が良い用語は以下の通りです。

* バケット・・データの格納領域の管理単位。一つのObject Storageのサービスを立ち上げるとその中に複数のバケットを作ることができます。
* ロケーション・・バケットのデータが保管される地域です。Power VSへアップロードする場合、2020/12月時点では特定のロケーションに作成する必要があります。（後述）
* アクセスキー・・Object Storageでも、アクセス管理用のキーの発行ができます。この手順では、アカウントのAPIキーを利用するため、これは使用しません。

以下の手順で設定を進めていきます。

・IBM Cloudにログインし、検索ウィンドウに「Cloud Object」を探し、ダイアログにしたがってObject Storageのサービスを作成していきます。
![スクリーンショット 2020-10-02 20.15.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242827/bce8c282-8aac-1469-0b62-332f22ca46b0.png)

「リソースの構成」のサービス名に任意の名前を入力します。その後、画面右下の「作成」を押下し、画面を切り替えます。

左側のハンバーガーメニューから「バケット」を選びます。
![スクリーンショット 2020-10-07 22.44.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242827/d8278dfe-c639-06af-b6c2-a43d31721f7f.png)

今回は保管先のロケーションが選びたいので、「バケットの作成」では、カスタム・バケットを選びます。

固有のバケット名を入力し、**「ロケーション」は、us-east、us-south、eu-de、eu-gb、jp-tokのいずれかを指定**します。後続のカスタム・イメージをカタログに登録する際に、読み込むことのできるCOSのロケーションが限られているためです。最新の情報は以下に更新されていきます。

Power Systems Virtual Server 内でのカスタム・イメージのデプロイ
https://cloud.ibm.com/docs/power-iaas?topic=power-iaas-deploy-custom-image

![スクリーンショット 2020-12-21 17.56.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242827/4610622e-914e-04f6-e678-63f1c937ae2a.png)

上記を入力したらメニュー最下部の「作成」を押せばバケットの作成は完了です。


### Power Systems Virtual Serverの作成

続いて、Power Systems Virtual Server(Power VS)を有効にします。
こちらもObject Storageと同様に、１つのサービスを立ち上げてその中に複数のインスタンスを立ち上げていきます。課金は実際にインスタンスをデプロイし、削除するまでの時間で計測される（ネットワークやストレージを同時に作成している場合はその削除も含める）のでサービスの起動時点では費用は発生しません。

IBM Cloud コンソールの検索バーを、「Power Systems Virtual Server」で検索し、カタログからサービスを起動します。

![スクリーンショット 2020-12-20 23.05.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242827/718ad217-7d95-b597-b35e-1af1f1b14c87.png)

続いて表示されるメニューで、リージョンを選択し（これはどこでも構いません。）、サービス名に任意の名称を入れ、「作成」ボタンを押します。画面がリソース・リストに遷移して、Service欄に今作成したサービスがアクティブに表示されれば成功です。
クラシック・インフラストラクチャなどの他のIaaSを利用した時のようにDeviceに表示されるわけでないので一瞬違和感があるかもしれません。

![スクリーンショット 2020-12-20 23.10.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242827/adde7472-43e2-c71c-92a7-3b7b31c95465.png)

ここで作成した「サービス名」は次のアップロードの時にも利用するので覚えておきましょう。

#### OVAイメージのアップロード・インポート

事前準備で作成したpvadmsの導入された端末から、アップロードとインポートをそれぞれ実行していきます。
APIキーは、環境変数IBMCLOUD_API_KEYに指定しておきます。

``` APIキーを環境変数にいれる
export IBMCLOUD_API_KEY=<APIキー>

```

gzファイルのままovaファイルをアップロードします。

``` ファイルのアップロード
$ pvsadm image upload --bucket ova-test  --file <ovaファイルのパス> -r us-east
：
（省略）
：
I1220 20:58:04.260892   14516 s3client.go:156] Upload completed successfully in 85.676532 seconds to location https://s3.us-east.cloud-object-storage.appdomain.cloud/ova-test/CentOS_83_2.ova.gz

```
オプションは、
--bucket：先の手順で作成したバケット名
--file ：<ovaファイルのパス>
-r :バケットのあるリージョン（ここではus-east）

続いて、アップロードしたファイルをブート・イメージとしてにインポートします。

```upload-file
$ pvsadm image import --pvs-instance-name powervs-ja --bucket ova-test --object CentOS_83_2.ova.gz --pvs-image-name CentOS_83_2 --bucket-region us-east
:
I1220 21:06:56.264149   14599 import.go:194] Importing Image CentOS_83_2 is currently in queued state, Please check the Progress in the IBM Cloud UI
```
ここでのオプションは、
--pvs-instance-name :PowerVSのサービス名
--bucket :先ほどイメージをアップロードしたバケット名
--object :ovaのファイル名
--pvs-image-name :PowerVSのブート・イメージの登録名（任意）
--bucket-region ：バケットを作成したリージョン

上記のように、IBM Cloud UIへログインを促されれば成功です。導入中を示すポップアップが表示されます。リソース・リストから、先ほど作成したPowerVSのサービス>ブート・イメージを選択すると先ほど指定したイメージ名が表示されます。

![スクリーンショット 2020-12-21 0.41.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242827/26d3cb49-ba06-077e-3667-36d550e148ca.png)

以上で、インポートが完了しました。

###　イメージの作成

早速今インポートしたイメージをVMとして立ち上げます。

#### VMの作成：

同じく、Power VSのメニュー画面から、「仮想サーバー・インスタンス」を選択して「インスタンスの作成」を選択します。

![スクリーンショット 2020-12-21 0.47.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242827/4f2484a3-86d9-0d96-67b4-70197952d205.png)

続いて、作成する仮想マシンの設定やスペック類を指定いきます。

・インスタンス名と数量
・SSH公開鍵・・はじめて作成する場合は、SSH鍵の作成からアップロードできます。
![スクリーンショット 2020-12-21 0.49.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242827/63118627-1846-e7a1-23da-3a09897eb0c7.png)

・オペレーティング・システム/イメージ：今アップロードしたイメージを選択します。
・プロファイル：S922/E980から選べます。
・プロセッサー：CPUリソースの予約です。最も割安なので、上限なし共有を選んでいます。
モード違いの詳細はこちら。
https://cloud.ibm.com/docs/power-iaas?topic=power-iaas-power-iaas-faqs#processor
・コア：0.25単位で割り当てができます。ここでの指定は物理コアで、VMの立ち上げ後SMT=8まで分割して利用することができます。実際にVMを起動すると（切り上げでコアが見えます。0.5割り当ての場合1つ）
・メモリー：同じく物理容量です。

![スクリーンショット 2020-12-21 0.49.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242827/c2eb81d2-48ec-24fd-247e-7f6acb0ad40d.png)

・ストレージ・ボリューム：ブートボリューム以外にディスクを割り当てたい場合追加します。
・ネットワーク・インターフェース：sshなどでインターネットから接続させたい場合、パブリック・ネットワークを有効にします。

![スクリーンショット 2020-12-21 0.50.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242827/f6504abe-5a45-9c4a-2b2b-367cfd675b0c.png)

このネットワークの部分を少し補足します。
ここで作成出来るネットワークは管理用で、sshやhttpsなどのいくつかのセキュア・ネットワーク・プロトコルでのみ接続を許可されています。

パブリック・ネットワークとプライベート・ネットワーク
https://cloud.ibm.com/docs/power-iaas?topic=power-iaas-about-virtual-server#public-private-networks

既存のIBM ネットワークを含めた他ネットワーク上と通信させる場合、Direct LinkやVPNを使ってその他のIBM Cloud上のサービスと接続するデザインになっています。

(参考)Power Systems Virtual Server ネットワーク・アーキテクチャーの図
https://cloud.ibm.com/docs/power-iaas?topic=power-iaas-network-reference-architecture

最後に料金を確認し、使用条件への同意にチェックをし、「インスタンスの作成」を押せば完了です。
![スクリーンショット 2020-12-21 0.51.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242827/e733d01e-b2d4-42c8-51dd-02872c74978d.png)

しばらく待ち、リソースリスト上に、作成したVMが表示されたら「外部 IP」を確認してsshでログインが出来るようになっています。
![スクリーンショット 2020-12-21 1.20.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242827/edb0e7b7-a342-a85f-5233-a72e998804ef.png)

以上でカスタム・イメージの作成は完了です。