地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【OpenStack】入門する

f:id:ryuichi1208:20210711090758p:plain

背景

仕事で使う機会が出てきたのでそもそもなんなのかから調べていく。聞いたことはあるけど実際それぞれなにしてるのかはよくわかっていない。構築とはまでは別でやるとしてそもそもの用語整理とコンポーネントについて理解するのが目標。

目次

概要

OpenStackとは

OpenStack は、クラウドコンピューティングのためのオープンソース・フリーソフトウェアであり、クラウドの分類のIaaSサービスとして仮想マシンやその他のリソースを提供する[2]。 OpenStackは、データセンター全体の処理、ストレージ、およびネットワークリソースのマルチベンダーハードウェアプールを制御するコンポーネントで構成されている。 そして、Webベースのダッシュボード、コマンドラインツール、または Webサービスを通じて操作する。

参考: OpenStack - Wikipedia

OpenStack は、プールされた仮想リソースを使用してプライベートクラウドおよびパブリッククラウドを構築および管理するプラットフォームというのがわかった。仮想化管理プラットフォームとかと似た印象があるが全く同じものではないらしい。

www.redhat.com

2010年にリリースされて以降今も開発は続いている。OpenStackが提供するのは仮想サーバーやストレージ、ネットワークなどを制御するための機能であり、これを利用することで独自のクラウド環境を構築することが可能となる。

用語集抜粋

ATA over Ethernet (AoE)

Ethernet 内をトンネルされるディスクストレージプロトコル

テナント

ユーザーのグループ。Compute リソースへのアクセスを分離するために使用される。プロジェクトの別名。

テナント API

プロジェクトにアクセス可能な API

テナントエンドポイント

1 つ以上のプロジェクトと関連付けられた Identity サービス API エンドポイント。

テナント ID

project ID の別名。

コンポーネント

コンピュート (Nova)

直訳は「新星」。Novaは仮想サーバーの作成と管理を司るサービス

などを担当する。Novaの主要コンポーネントは以下

• API Server ( nova-api )
  – 外部にAPIを提供

• Message Queue ( rabbit-mq server )
  – 各コンポーネントへの通信をキューイング

• Compute Workers ( nova-compute )
  – インスタンスの管理

• Network Controller ( nova-network )
  – ネットワークの管理

• Volume Worker ( nova-volume )
  – ボリュームの管理

• Scheduler ( nova-scheduler )
  – API呼び出しのコンポーネントへの割り当て

ネットワーキング (Neutron)

ルータやネットワークインタフェースなど、ネットワーク全般を処理するためのサービス

Linux名前空間機能を利用し、プロジェクト毎に独立したネットワークサービスを提供する。

Linuxのdnsmasq機能を利用し、仮想DHCPサーバ機能を提供する。

Linuxlinux-brdige機能(あるいはOpen vSwitch)を利用し、受け取ったパケットのVLANIDから対応する仮想ルータ(プロジェクトネットワーク)にパケットをL2転送する。

Linuxのパケットフォワーディング機能とパケットフィルタリング機能(iptables)を利用し、仮想ルータ機能を提供する。

eutronが提供するネットワーク機能は、非常に高度なものを目指しており、テナント分割や、GREやVXLANなどのL3トンネリングをサポート、LBaaS(Load Balancer as a Service)、VPNaaS(VPN as a Service)、FWaaS(Fire Wall as a Service)、分散ルーティング機能などの実装を行っている。

www.atmarkit.co.jp

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

仮想マシンに仮想外部ストレージを管理するサービスボリュームの作成/削除、テナントごとのquotaの設定、スナップショットの作成/削除などの機能を持つ

主要コンポーネント

* cinder-api
API リクエストを受け付け、それらを処理するために cinder-volume に中継します。

* cinder-volume
cinder-scheduler などの Block Storage サービスやプロセスと直接やり取りを行います。また、メッセージキュー経由でもこれらのプロセスと連携します。 cinder-volume サービスは、Block Storage サービスへ送られた読み出し、書き込みリクエストに応答し、状態を管理します。ドライバーアーキテクチャーになっており、様々なストレージプロバイダーと連携できます。

* cinder-scheduler デーモン
ボリュームを作成するのに適切なストレージプロバイダーノードを選択します。 nova-scheduler と同様のコンポーネントです。

* cinder-backup デーモン
cinder-backup サービスは、あらゆる種類のボリュームのバックアップをバックアップストレージプロバイダーに提供します。 cinder-volume サービスのように、ドライバーアーキテクチャーになっており、さまざまな種類のストレージプロバイダーを利用できます。

* メッセージングキュー
Block Storage プロセス間で情報を転送します。

docs.openstack.org

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

直訳は「要石(かなめいし)」。OpenStackの認証とエンドポイントの管理をつかさどるサービス

認証トークンはmemcached上で管理する。

Keystoneのインストール直後ではユーザが登録されていないため、admin_tokenと呼ばれるkeystone.confに定義された特別なトークンを利用して管理者ユーザーをまず作成する。

環境変数

CLIから操作する上で必要となる環境変数は以下。テナントとか認証情報とかを設定しておくことでopenstackコマンドから色々呼び出すことが可能となる。

export OS_PROJECT_DOMAIN_ID = default 
export OS_USER_DOMAIN_ID = default 
export OS_PROJECT_NAME = admin 
export OS_TENANT_NAME = admin 
export OS_USERNAME = admin 
export OS_PASSWORD = password 
export OS_AUTH_URL = http://controller:35357/v3

使いそうなコマンド

#プロジェクト一覧
keystone tenant-list
openstack project list

#プロジェクト詳細
keystone tenant-get <tenant>
openstack project show <project>

#プロジェクト作成
keystone tenant-create --name <tenant_name>
openstack project create <project_name>

#プロジェクト削除
keystone tenant-delete <tenant>
openstack project delete <project>

#プロジェクト情報更新
keystone tenant-update <tenant>
openstack project set <project>


#ユーザ一覧
keystone user-list
openstack user list

#指定プロジェクトのユーザ一覧
keystone user-list --tenant-id=<tenant_id>
openstack user list --project <project>

#ユーザ詳細
keystone user-get <user>
openstack user show <user>

#ユーザ作成
keystone user-create --name <user_name>
openstack user create <user_name>

#ユーザ削除
keystone user-delete <user>
openstack user delete <user>

#ユーザ情報更新
keystone user-update <user>
openstack user set <user>

#ユーザ(一般ユーザ)のパスワード変更
keystone user-password-update --pass <password> <user>
openstack user set --password <password> <user>


#ロール一覧
keystone role-list
openstack role list

#ロール詳細
keystone role-get <role>
openstack role show <role>

#ロール作成
keystone role-create --name <role_name>
openstack role create <role_name>

#ロール削除
keystone role-delete <role>
openstack role delete <role>


#ユーザのロール一覧
keystone user-role-list
openstack user role list

#ユーザにロールを与える
keystone user-role-add --user <user> --role <role>
openstack role add --user <user> <role>

#ユーザに与えられたロールを取り除く
keystone user-role-remove --user <user> --role <role>
openstack role remove --user <user> <role>

イメージサービス (Glance)

直訳は「見る」。NOVAによって作られる仮想マシンの基となるイメージを扱うサービス

glance-apiとglance-registryのプロセス間はAMQPを利用せずにREST-APIで連携している。

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

直訳は「迅速」。バックアップなど、各種オブジェクトを格納するストレージとして利用できるサービス

Swiftでは"アカウント情報"と"コンテナ(ディレクトリ)情報"と"オブジェクト(ファイル)"の3種類のファイルを管理する。これらへのアクセスはSwiftのプロキシサーバーを経由する必要があり、プロキシサーバーでは認証や負荷分散が行われる。

コンテナにオブジェクトをアップロードするとコンテナとオブジェクトは自動でレプリカが作成され、各ストレージノードに冗長保管される。冗長保管のため耐障害性が高い。デフォルトでは3つのゾーンに冗長化される。

主要コンポーネント
* swift-proxy-server
SwiftのREST-APIを提供するプロセス。

* swift-account-server
アカウント管理のREST-APIを提供し、実際に操作するプロセス。

* swift-container-server
コンテナ情報管理のREST-APIを提供し、実際に操作するプロセス。

* swift-object-server
オブジェクト管理のREST-APIを提供し、実際に操作するプロセス。

ダッシュボード (Horizon)

直訳は「地平線」。OpenStackのWeb管理コンソールで、WebブラウザからOpenStackを管理・操作する機能を提供します。VMインスタンスやネットワーク、リソース使用状況等が確認できる。

主要コンポーネント

* ironic-conductor
IPMI経由でのベアメタルノードの電源投入やiSCSI経由でのベアメタルノードへのイメージ転送を行うプロセス。

* ironic-python-agent
ブートローダのインストールやOSイメージのインストール等を行うためのREST-APIを提供するプロセス。

コマンドUsage

#サブコマンド一覧
openstack help <command>

#サブコマンドパラメータ一覧
openstack help <command> <subcommand>

#デバッグオプション。デバッグログを出力しながら実行
openstack --debug <command> <subcommand>

詳しいまとめは以下にあった

docs.openstack.org

感想

とりあえず概要だけでも知れたので良かった。