chike0905の日記

何者かになりたい

OpenStack調査メモ

本稿は慶應義塾大学 SFC 村井研 (RG) Advent Calendar 2021の2日目である。

本稿は実験環境のクラウド環境のOpenStackへの移行を検討するために調査を行なったメモである。

OpenStackとは

主要なものは以下

コンピュート (Nova)

ネットワーキング (Neutron)

ブロックストレージ (Cinder)

アイデンティティサービス (Keystone)

イメージサービス (Glance)

オブジェクトストレージ (Swift)

ダッシュボード (Horizon)

OpenStackのリリースサイクル

OpenStackを試す

OpenStackはそれぞれのコンポネントを組み合わせることで、クラウド環境を構築できる。また、コンポネントがそれ別の物理サーバ上において、スケールさせるということもできる。一方でサクッと試したい場合は必要なコンポネントが全て入った(All-in-One)な環境を作る、ということもできる。

Openstackのアーキテクチャを設計し、個々にデプロイしていくこともできるが、構成ツールがいくつかある。主要なものは以下に掲載。少し古いので、それぞれ調査する必要あり。 https://noaboutsnote.hatenablog.com/entry/openstack_installer

microstackを使った動作検証

microstackを使うと容易にall-in-oneの環境構築ができる

Microstackのデプロイ

  1. ESXIの仮想化をOpenstackから利用可能にする

  2. microstackインストールのためのsnapのインストール sudo apt install snapd

    • 再ログインしないと /snap/bin にパスが通らないので注意
  3. microstackのインストール

     sudo snap install microstack --devmode --beta
    
    • インストールの確認は以下

        snap list microstack
      
      • 2021.11.22時点でussuriが入ったので、少し古いか
  4. microstackの起動

      sudo microstack init --auto --control
    
    • 検証環境では、sudo時のPATHに/snap/binが引き継がれないためvisodoでsecure_pathに追加
    • このコマンド実行は数十分かかる
  5. Horizonへのログイン
    • https://ホストマシンでHorizonのログイン画面にアクセス可能
      • TLSエラーが出るがchoromeでは「thisisunsafe」と打つとアクセスできる
    • ユーザ名はadmin
    • パスワードを以下のコマンドで取得
     sudo snap get microstack config.credentials.keystone-password
    

VMの起動

debianVMをデプロイしてみる。ImageからVMの起動がHorizonからだと失敗するので、以下はCLIからのみ検証 追記: MicroStackではCinderが未対応らしい、Volumeを作らなければHorizonからでもできた

  1. Imageの準備
     wget https://cloud.debian.org/images/cloud/OpenStack/current-10/debian-10-openstack-amd64.qcow2
    
    • Imageの作成
     sudo microstack.openstack image create --disk-format qcow2 --container-format bare --public --file ./debian-10-openstack-amd64.qcow2 debian10
    
    • Imageの確認
     microstack.openstack image list
    
  2. ssh用鍵の登録
    • 鍵の作成
     ssh-keygen -t ed25519
    
    • 鍵の登録
     microstack.openstack keypair create --public-key ~/.ssh/id_ed25519.pub newkey
    
  3. VMの起動
    • 今回はdebian10testという名前のVMを作成
     microstack.openstack server create \
     --flavor m1.small \
     --nic net-id=test \
     --image debian10 \
     --key-name newkey \
     debian10test
    
    • nic net-idでデフォルトの内部ネットワークであるtestを指定
    • 起動を確認
      • statusがActiveになれば起動済み
        microstack.openstack server list
      
  4. ネットワークの設定
    • デフォルトではexternalという名前のネットワークがVMからホスト、外向けのネットワークとして構成されている
    • 外部(VM<->ホスト)のネットワーク設定
      • IPの払い出し
        microstack.openstack floating ip create external
      
      • 払い出されたIPの確認
        microstack.openstack floating ip list
      
      • 払い出されたIPをVMに設定
        • 確認時のFloating IP Addressを設定
        openstack server add floating ip debian10test FLOATING_IP_ADDRESS 
      
    • HVのマシンからSSH
      • 必要に応じて登録したssh鍵を指定
      • debianクラウドイメージではデフォルトユーザはdebian
     ssh debian@FLOATING_IP_ADDRESS 
    
    • インターネット疎通性を確保
      • externalDNSサーバを設定
        microstack.openstack subnet set --dns-nameserver 8.8.8.8 external-subnet
      
      • HVマシン上でNAT設定
        sudo iptables -t nat -A POSTROUTING -s 10.20.20.1/24 ! -d 10.20.20.1/24 -j MASQUERADE
        sudo sysctl net.ipv4.ip_forward=1
      
      • sshし、VMの中から疎通性確認

複数HV(Computing Node)での操作

Computing Nodeを追加する。

手順
  1. 上記手順の「3. microstackのインストール」までは同様の手順
  2. 既存のControl Node上でjoinするための情報を得る
    • この手順はComputing Nodeごとに必要
     sudo microstack add-compute
    
  3. 新規Compute Node上で上記で出力された文字列をCONNECTION_STRINGとして以下のコマンドを実行

     sudo microstack init --auto --compute --join CONNECTION_STRING
    
  4. 既存のControl Node上でhypervisorとして追加されたことを確認

     microstack.openstack hypervisor list
    
  5. VMの起動
    • 2021.11.23 Note: Horizonからインスタンスを起動するホストの指定方法が不明のため、CLIから起動確認
      • 今回はdebian10test02として起動
        • --availability-zoneHYPERVISORに先述の4で確認した新規hypervisorを指定
        microstack.openstack server create \
        --availability-zone nova:HYPERVISOR \
        --flavor m1.small \
        --nic net-id=test \
        --image debian10 \
        --key-name newkey \
        debian10test02
      
      • Note: VMは起動したようだが、keyが設定されておらずdebianだとデフォルトパスワードが存在しないためsshが不可能な状態だった
        • crriosならデフォルトパスワードでログイン可能なことを確認
          • 未解決

ToDo

  • 複数HV(Computing Node)での操作
    • Horizonからのインスタンスデプロイ
      • (解決済み) どのようにnovaクラスタ内でallocateされるか?
        • novaのshcedulerによってallocateされる
      • (解決済み) 自動でallocateされるような風だが、HVのリソースを使い切った上でインスタンスデプロイしても別HVへallocateされない
        • 実際に使い切ったかどうかではなく、schedulerによる判断による
    • インスタンスマイグレーションが動かない
      • 実行されている風だが、実態に変化なし
    • Key Pairのインスタンスへのインポート
      • Control Node以外のHVを指定して作成したインスタンスにpubkeyが設置されない
        • 2021.11.24 NOTE:
          • cloud-init中のプロセスで、metadataの取得ができていないことが判明
            • 169.254.169.254へアクセスしようとするがだめ
  • Cinderなしで実用できるか or Cinderだけ別で立てるか?

解決済み

  • (解決済み) HorizonからのVM作成
    • ImageからInstance作成時に以下のエラーが発生する
      Build of instance 13731f21-5c7e-4d14-a715-26c7b82953b1 aborted: Invalid input received: Invalid image identifier or unable to access requested image. (HTTP 400) (Request-ID: req-20c4229b-e3bc-4941-ae15-c0102985e8b2)
    
    • どうやらCinderでVolumeを作るのに失敗している様子
      • Volumeなしで作ると成功する

        MicroStack quickly installs OpenStack on a single machine. Supported services are currently Glance, Horizon, Keystone, Neutron (with OVN), and Nova.

      • https://microstack.run/docs
      • Cinder対応しとらんやんけ!!!!
  • (解決済み) VPNを作ってInstanceへアクセス

感想

構成ツールとかが出てきているので、ひと頃噂で聞いてたよりは構築は容易にできそう。しかし、クラスタ化して安定運用するためには様々なことを理解せねばならず、使い勝手は必ずしもよくない印象。というか、マイクロサービス化されていて疎結合になってるのに構築するの難しいからall-in-oneの密結合になったパッケージ使っちゃうのどうなのよ、と言う気分もある。最近はProxmoxというのも話題だそうなので、試してみる予定。

Appendix

VPN越しでOpenstack上のインスタンスへのアクセス

VyOS上でStatic Routeを指定し、VPNでpush-routeする。

  • 想定環境
    • vpnのIF: vtun0
    • VyOS(ルータ)のStatic IP: 10.8.0.1/24
    • Openstack Control NodeのStatic IP: 10.4.150.1
    • OpenstackのExternal Subnet: 10.20.20.0/24

手順

  1. VyOS Static Routeの指定

     set protocols static route 10.20.20.0/24 next-hop 10.4.150.1
    
  2. VyOS VPNへpush-route

     set interfaces openvpn vtun0 server push-route 10.20.20.0/24
    
  3. Openstack Control Node 上でのiptablesの設定

     sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -d 10.20.20.0/24 -j MASQUERADE
    
  4. インスタンスsshして確認する