TechBox

スタートアップで働くRails&機械学習エンジニアのブログ。

GCPにNutanix CEを自力デプロイの検証をしてみる パート1

前置き

Nutanixの提案やラボ環境を作る時、demo.nutanixやravelloを使えば良いのですが、
やっぱり1から構築したいなぁと思い立った時の壁が、要求されるハイスペック機だったりします。

要件を満たす物理マシン、Nestできる仮想環境も手元になかった当時、
パブリッククラウドでできないかな〜と思ってましたが、
Intel VT-xが有効化されてなかったのでムリでした。

もう1年ほど前ですが、Google Compute EngineでNested Virtualizationが有効化されたので、
今回デプロイできるかやってみました。
Enabling Nested Virtualization for VM Instances  |  Compute Engine Documentation  |  Google Cloud

読んで頂く前に結果ですが、失敗しています。
今回はその経緯を綴りつつ、次のパート2に繋げたいと思います。

現状GCPではCentOS等のKVMの動作確認のみが実施されており、その他はサポート対象外となります。

Nutanix CE とGCP の準備

  1. Nutanix CEダウンロード
    Nutanixでアカウント登録を行い、
    Download Nutanix CE, Docs, and Guides | Nutanix Community より Community Edition をダウンロードします。
    今回は「ce-2018.05.01-stable.img.gz」でした。

  2. インポート用のプロジェクトを準備
    手順は省略しますが、GCPのアカウント登録を行い、プロジェクトの作成を行います。

Nutanix CE のインポート

先にGoogle Cloud SDKを作業端末にインストールしておく必要があります。
Google Cloud SDK ドキュメント  |  Cloud SDK  |  Google Cloud
ダウンロードされた「ce-2018.05.01-stable.img.gz」(2018/12/18現在)を解凍します。

アップロードを実行する為、ターミナルからgcloudコマンドを実行します。

#GCPのプロジェクト一覧表示
gcloud projects list
#プロジェクトの選択
gcloud config set project <project-id>
#インポート
gcloud compute images import <image-name> --source-file <source-file-path> --os centos-7

project-id: GCPで作成したプロジェクトのID(名前じゃないです)
image-name: インポート後のイメージ名
source-file-path: 先の手順でダウンロードしたimgのフルパス

--osは、インポート時に対象OSのGCP用ドライバーのインストールの為に使用されます。
NutanixCEだとCentOSだったら入るだろうと思い設定したら入りました。

インポートが成功すると、Compute Engine→イメージの一覧に表示されます。
f:id:daisuke-jp:20181220101854p:plain

Nested可能なインスタンスの作成

  1. ディスク作成用インスタンスの作成・削除 インポートしたイメージを使用したインスタンスを作成し、NutanixCEの入ったディスクを作成します。
    今回はディスクを作成したいだけなので、スペックは問いません。
    インスタンス作成時、ブートディスクでインポートしたイメージを選択します。
    f:id:daisuke-jp:20181220103954p:plain

【インスタンスを削除する際にブートディスクを削除する】のチェックを外してください。

作成したインスタンスを削除して、ディスクだけが残る状態にします。

  1. Nestedイメージ作成 GCEでNested VMを有効化する為、以下のgcloudコマンドを使用します。
gcloud compute images create <nested-image-name> --source-disk <source-disk-name> --source-disk-zone <source-disk-zone> --licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"

nested-image-name: 作成される
source-disk-name: 先のインスタンス作成手順で作成されたディスク名
source-disk-zone: 先のインスタンス作成手順で作成されたディスクがあるゾーン(asia-northeast1-aなど)

  1. Nestedインスタンス作成
    ここからNested可能なNutanixCEイメージを使ってインスタンスを作成していきます。

CPUやメモリは要件を満たすよう、適宜設定します。
f:id:daisuke-jp:20181220110237p:plain

ブートディスクには先の手順で作ったNested有効化をしたNutanixCEをしていします。
f:id:daisuke-jp:20181220111207p:plain

Hot TierとCold Tier用のディスクを追加します。
f:id:daisuke-jp:20181220112100p:plain f:id:daisuke-jp:20181220112109p:plain

作成したらインスタンスの編集に入り、「シリアルポート接続を有効化」にチェックをいれます。

Nutanix CE インストール

  1. SSD化 インスタンスの追加ディスクでSSDを選択しましたが、SSDとの認識になっていません。
    その為、コンソール接続をしてrotationalを変更します。
    ※ローカルSSDスクラッチディスクを選択するとSSD認識がなされますが、インスタンスの停止ができなくなります。
    rootでログインして実施します。
lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   10G  0 disk 
└─sda1   8:1    0    7G  0 part /
sdb      8:16   0  200G  0 disk 
sdc      8:32   0  500G  0 disk

echo 0 > /sys/block/sdb/queue/rotational 
cat /sys/block/sdb/queue/rotational 
0

exit
  1. インストール実行
    installでログインし、実行します。





    Installation did not succeed.
    Press to return to the login prompt.

失敗しました。

ログを確認すると、以下のようなところでエラーが出ていました。

FATAL: An exception was raised: Traceback (most recent call last):
 File "/ce_installer_cUB2wz/phoenix/locale_select.py",line 36, in <module>
  main()
 File "/ce_installer_cUB2wz/phoenix/locale_select.py",line 28, in main
  params = gui.get_params(gui.LocaleGui)
 File "/ce_installer_cUB2wz/phoenix/gui.py",line 1676, in get_params
  return run_gui(guitype, args=args)
 File "/ce_installer_cUB2wz/phoenix/gui.py",line 1758, in run_gui
  raise e
error: init_pair() returned ERR

rootでログインし、中身を確認していると
/home/install/phx_iso/phoenix/gui.py
辺りでエラーが出ているようで、単純にGUIが無い為に発生している模様?

GCPだとSSHかシリアルコンソールでのみ接続可能となる為、
ESXiのNestedのように画面のコンソールが使えない…。

結論

今回のような通常のインポートの手順では、NestedでAHVをインストールする事は難しいと判断しました。

GUI周りでエラーが出ているようだったので、VNCで接続した中でinstallを走らせると動くのかと思い、
別のLINUXインスタンスの追加ディスクとしてマウントした上でpartedによってパーティションを拡張、
拡張したディスクでインスタンスを作成してGUI関連とVNCをインストールしたらどうなるか?
とも考えましたが、そもそもHyperVisorにするべき事ではないのでやめました。

以上から、今回のGCPでのNested AHVのインストールは失敗しました。

次は別の方法でデプロイをして、アップしたいと思います。

PyCharmでAnaconda(Python)とDjangoの開発環境を構築する  その2

PyCharmのGUIのみでAnacondaの仮想環境と、Djangoの開発環境を作っていきます。
前提として、

  • Anacondaはインストール済み
  • 例題のプロジェクト名はskyline
  • 例題のアプリ名はgtr
  • 例題の仮想環境名はnissan

と想定します。

Anacondaのインストールはこちらをご覧下さい。 www.techbox.jp

  1. PyCharmを起動して、[Create New Project]を選択します。 f:id:daisuke-jp:20170921103608p:plain

  2. 左のツリーから[Django]を選択し、[Location]にプロジェクトの保存先を指定します。
    末尾が~\untitledになっているので、作成するプロジェクトの名前に変更します。
    ※例ではskyline f:id:daisuke-jp:20170921104133p:plain

  3. [interpreter]の右の歯車をクリックし[Create conda env]を選択します。
    ここから新規でAnacondaの仮想環境の作成が行えます。

  4. [Name]に仮想環境名を入力します。ここではnissan
    そうすると、[Location]にはAnacondaの仮想環境保存先が指定され、末尾が[Name]で指定したディレクトリになるハズです。
    最後に使用するPythonのバージョンを指定します。 f:id:daisuke-jp:20170921104746p:plain

  5. OKを押すとAnacondaの仮想環境の作成が始まるので、しばらく待ちます。
    終わったらロケーションに設定したディレクトリにnissanフォルダが作成されています。

  6. New Project画面に戻るので、[More Settings]をクリックし、設定画面を表示します。

  7. [Template language]にDjango
    [Application name]にgtr
    を設定し、[Enable Django admin]はお好みでチェックを入れます。
    f:id:daisuke-jp:20170921105313p:plain ここで注意点ですが、プロジェクト名とアプリケーション名は同一の物は設定できません。
    これらの名称の関係性としては、作成後のフォルダ構成を見れば分かりますが、
    以下の様な形で作成されます。

skyline/
  ├ gtr/
  │  ├ migrations/
  │  ├ _init_.py 
  │  ├ admin.py
  │  ├ apps.py
  │  ├ models.py
  │  ├ tests.py
  │  ├ views.py
  ├ skyline/
  │  ├ _init_.py 
  │  ├ settings.py
  │  ├ urls.py
  │  ├ wsgi.py
  ├ templates/
  └ manage.py

プロジェクト名配下にプロジェクト名のディレクトリと、アプリケーション名のディレクトリが作成されます。
例えばこのプロジェクトで外部にAPIを公開する様になれば、 gtrと同じ構成で、apiというディレクトリがskylineディレクトリ内に追加される感じです。

以上で完了となります。

非常に簡単に環境を整える事ができました。
AnacondaとPyCharmさえインストールしておけば、GUIだけでここまでできてしまいます。 Anacondaのコマンドも難しくないので手動でもできますが、準備は簡単に超した事はないので有り難い機能かなと思います。

www.techbox.jp

PyCharmでAnaconda(Python)とDjangoの開発環境を構築する  その1

今回はPyCharmでPythonとDJangoの開発環境を作っていきたいと思います。
Pycharmはデフォルト設定とプロジェクト設定、2パターンの設定方法があります。
今回は、

既に作成した仮想環境を、Pycharmデフォルトの設定にする

方法を行っていきます。
プロジェクト単位での設定と、完全にGUIで構築する手順はその2で記載します。

  1. Anaconda、Djangoインストールと仮想環境構築
    以下のリンクに沿って実行して下さい。 www.techbox.jp

  2. Pycharmを起動し、スタート画面で右下の
    [configure]>[settings]
    をクリック f:id:daisuke-jp:20170920175049p:plain

  3. 左のツリーから[Project Interpreter]を選択し、
    右側上部のコンボボックスに、手順1で作成した仮想環境のpython.exeがリストアップされる事を確認し、選択します。 f:id:daisuke-jp:20170920175112p:plain

  4. 選択すると仮想環境にインストールされているパッケージの一覧が表示されます。
    ここでDjangoがインストールされている事がわかります。 f:id:daisuke-jp:20170920175127p:plain

  5. [Apply]を押し、設定を保存します。

以上でデフォルトの設定が完了しました。
後はCreate new projectやGitからリポジトリを取ってきて、
今回の設定をベースに立ち上げる事が可能です。

今回はAnacondaの仮想環境を手動で作成し、Pycharmのデフォルト設定のみを設定する方法でした。

その2では、仮想環境の構築、Djangoのインストール、新しいプロジェクトの立ち上げまでをPycharmのGUIのみで行う手順を書こうと思います。 実際の所、次の手順で立ち上げる事の方が多いような気がします。

AnacondaとPythonのインストール(python2とpython3の共存)とDjango

個人的にdjangoとnumpyなどPythonを使う機会があり、
折角なのでローカル開発環境としてのAnacondaのインストール方法をまとめました。
僕の環境がGCPのSDKが入っている関係で、Python2とPython3の共存が必要ので、その辺りもあります。

f:id:daisuke-jp:20190116101031p:plain

前提

  • Windows(Macと手順のベースは変わらないですが、コマンドに若干再有り)
  • pythonコマンドだとPython2が動作し、python3だとPython3が動作します

手順

  1. Anacondaのインストーラーをダウンロードしインストール
    ※ Python2と3を共存させる場合、インストーラーでPathは通さない。

  2. Pathを通す
    インストールディレクトリ\Anaconda3
    インストールディレクトリ\Anaconda3\Scripts
    インストールディレクトリ\Anaconda3\Library\bin

  3. Anaconda3内のシンボリックリンクを作成する
    それぞれAnaconda3内にあるexeです。
    元のexeがある場所にそれぞれに3を付けたシンボリックリンクを作成します。
    ショートカットだと上手く動作しなかったので、シンボリックリンクとしました。

python.exe -> python3.exe  
anaconda.exe -> anaconda3.exe  
anaconda-script.py -> anaconda3-script.py  
conda.exe -> conda3.exe  
conda-script.py -> conda3-script.py  
easy_install.exe -> easy_install3.exe  
easy_install-script.py -> easy_install3-script.py  
pip.exe -> pip3.exe  
pip-script.py ->pip3-script.py  
spyder.exe -> spyder3.exe  
spyder-script.py -> spyder3-script.py  
  1. 動作確認
    コマンドプロンプトでpythonとpython3でそれぞれのバージョンのPythonが起動する事を確認します。

  2. 仮想環境作成
    実際に開発する際に使用する仮想環境を作成します。
    これを作る事で、djangoなどのパッケージをインストールしても、
    プロジェクト毎に開発環境を分けられるというメリットがあります。
    conda create -n py36 python=3.6

  3. 仮想環境確認
    今ある仮想環境の確認ができます。
    念のため、先の手順で作成した仮想環境があるか確認を行います。
    conda env list

  4. 仮想環境有効化
    実際に使用する仮想環境を選択します。
    activateした環境で動作する事になります。 activate py36

  5. 仮想環境無効化
    やらなくても良い手順です。 仮想環境をオフにする場合に行って下さい。
    deactivate

  6. ザックリ環境説明
    仮想環境などを作成すると、最初はどうゆう構成になっているのか掴めなくなる事もあるので、
    超簡単にですが、こんな感じです。

windows - python2(Myの環境場合)
        - anaconda3(python3.6) - py36(ここを開発環境とする)
                               - pytest(仮想環境を作成するとこんな感じで追加されます)
  1. condaコマンド
    インストールから仮想環境の構築までは完了しました。
    今後は仮想環境にパッケージをインストールしたりして、開発をしていきます。
    その際に使用するのがcondaコマンドです。
    よく使いそうなコマンドが以下かなと思います。
conda list [ インストール済みのパッケージ一覧 ]
conda search django [ パッケージ検索 ]
conda install django [ パッケージインストール ]
conda update django [ パッケージアップグレード ]
conda remove django [ パッケージアンインストール ]

以上で取り敢えずAnacondaの環境は整いました。 今後はpycharmを使用したdjango開発環境を作っていきたいと思います。

【2017/9/20 追記】
仮想環境へのDjangoのインストールを追記します。
仮想環境を
activate <仮想環境名>
で有効化し、
conda install django
でインストールします。
これだけです。

仮想環境の意味が把握できていない場合、この手順の後にdeactivateし、
conda list
を実行してみて下さい。djangoが入っていないと思います。
これは、仮想環境でconda installでDjangoをインストールしたので、
rootにはインストールされていないという事です。
この様に、仮想環境事にパッケージのバージョンなども変更できるので、
一つAnacondaを入れておけば、複数のPython環境を切り替えて使えるようになるというのがメリットです。

www.techbox.jp