By Ghulam Qadir, Alibaba Cloud Tech Share Author.
OpenStack は、パブリックおよびプライベート クラウド用の IaaS (infrastructure-as-a-service) を提供する、フリーでオープンソースのソフトウェア プラットフォームです。 OpenStackの中核機能はIaaSプラットフォームの提供ですが、DBaaS (database-as-a-service) やHadoopクラスタの構築、コンテナのオーケストレーションなど、さまざまな用途で使用されています。 これらのコンポーネントの管理は、Web ベースのインターフェイスまたは OpenStack コマンドラインの助けを借りて行うことができます。
このチュートリアルでは、複数ノードへの展開も可能ですが、rdo リポジトリを使用して単一ノードにインストールした OpenStack で独自のプライベートクラウド基盤を展開する方法を紹介します。 このサービスは、CentOS 7 を使用した Alibaba Cloud Elastic Compute Service (ECS) インスタンス上に展開します。
- Hostname = openstack.example.com
- IP アドレス = 192.168.1.40
- netmask = 255.255.255.255.255.0
- Gateway = 192.168.1.1
- DNS = 192.168.1.254
Prerequisites
- Alibaba Cloud Elastic Compute Service(ECS)が有効になっていること、有効な支払い方法が検証されていること、です。 新規ユーザーの場合、Alibaba Cloudアカウントで無料アカウントを取得することができます。 ECSインスタンスのセットアップ方法がわからない場合は、こちらのチュートリアルやクイックスタートガイドを参照してください。
- サーバーのホスト名を設定してください。
- AlibabaCloudのVNCコンソールまたはPCにインストールしたSSHクライアントにアクセスします。
前提条件を満たした後、SSHクライアント(例:Putty)またはAlibaba Cloudアカウントダッシュボードで利用できるVNCコンソールから、ルートユーザー名&パスワードでログインします。
システムに16GB以上のRAMとVTサポート付きプロセッサがあることを確認します。
egrep --color 'vmx|svm' /proc/cpuinfo | wc –l
Output 以下のコマンドを使用してVTサポートを確認します。 (ゼロであってはなりません)
2
初期システム構成
- 独自の仮想クラウド基盤を展開するためにノードの準備を始める前に、まず root アカウントでログインして、システムが最新であることを確認します。
yum -y update
- 次に、ss -tulpn コマンドを実行して、実行中のすべてのサービスを一覧表示します。
Ss -tulpn
ここで不要なサービスを特定して、それらを停止、無効化、削除してください。 主にPostfix、NetworkManager、Firewalldです。
# systemctl stop postfix firewalld NetworkManager # systemctl disable postfix firewalld NetworkManager # systemctl mask NetworkManager # yum remove postfix NetworkManager NetworkManager-libnm
以下のコマンドを実行して、LinuxマシンでSelinuxポリシーを恒久的に無効にします。
# setenforce 0 # getenforce # vi /etc/selinux/config
次のステップでは、hostnamectlコマンドを使用して、Linuxシステムのホスト名を設定します。
# hostnamectl set-hostname cloud.centos.lan
最後に、NTPサーバーと時間を同期するためにntpdateをインストールします。
# yum install ntpdate
CentOSとRHELにOpenStackをインストール
OpenStack はrdoリポジトリ (OpenStack RPM Distribution) から提供される PackStackパッケージを使ってノード上に配置されます。
RHEL 7でrdoリポジトリを有効にするには、以下のコマンドを実行します。
# yum install https://www.rdoproject.org/repos/rdo-release.rpm
CentOS7では、ExtrasリポジトリにOpenStackリポジトリを起動するためのRPMが含まれています。 Extrasはすでに有効になっているので、OpenStackリポジトリをセットアップするためのRPMを簡単にインストールできます。
# yum install -y centos-release-openstack-mitaka # yum update –y
次のコマンドを使用して、LinuxマシンにPackstatパッケージをインストールします。
ファイル名は、生成時の現在のタイムスタンプ (日、月、年) にちなんで付けられます。
# packstack --gen-answer-file='date +"%d.%m.%y"'.conf # ls
次に、お気に入りのテキスト エディタで回答ファイルを編集して、以下のパラメータを以下の値と一致するように置き換えます。 安全のため、パスワードフィールドは適宜置き換えてください。
CONFIG_NTP_SERVERS=0.ro.pool.ntp.org
CONFIG_PROVISION_DEMO=n
CONFIG_KEYSTONE_ADMIN_PW=your_password for Admin user
SSL を有効にし HTTP で OpenStack ダッシュボードにアクセスする。
CONFIG_HORIZON_SSL=y
MySQLサーバのルートパスワード
CONFIG_MARIADB_PW=mypassword1234
編集終了後、ファイルを保存して閉じます。 また、SSHサーバの設定ファイルを開き、以下のスクリーンショットに示すように、PermitRootLogin行の先頭のハッシュタグを削除してコメントを解除してください。
# systemctl restart sshd
Packstackのアンサーファイルを使ってOpenstackのインストールを開始する
最後に、以下のコマンド構文を実行して、上で編集したアンサーファイルを使ってOpenstackのインストール処理を開始します。
# packstack --answer-file 13.04.16.conf
OpenStack コンポーネントのインストールが正常に完了すると、インストーラは OpenStack と Nagios のローカル ダッシュボード リンクと両方のパネルにログインするために上記で設定済みの必要な認証情報を数行で表示します。
認証情報は、ホーム ディレクトリの keystonerc_admin ファイルにも保存されます。
何らかの理由でインストール プロセスが httpd サービスに関するエラーで終了した場合、 /etc/httpd/conf.d/ssl.conf ファイルを開き、下図のように次の行をコメントすることを確認します。
#Listen 443 https
その後、Apache デーモンを再起動して変更を適用してください。
# systemctl restart httpd.service
注意: ポート 443 の Openstack Web パネルをまだ閲覧できない場合は、最初のデプロイ時に発行したものと同じコマンドでインストールプロセスを最初からやり直してください。
# packstack --answer-file /root/26.07.18.conf
Remotely Access OpenStack Dashboard
LAN内のリモートホストからOpenStack Webパネルにアクセスするには、HTTPSプロトコル経由で自分のマシンIPアドレスまたはFQDN/ダッシュボードにナビゲートしてください。
エラーを受け入れ、ユーザーadminと、上記のアンサーファイルのCONFIG_KEYSTONE_ADMIN_PWパラメータに設定したパスワードでダッシュボードにログインしてください。
https://192.168.1.40/dashboard
あるいは、OpenStack用のNagiosコンポーネントをインストールすることを選択した場合、次のURIでNagios Webパネルを参照し、回答ファイルに設定された資格情報を使用してログインすることも可能です。
https://192.168.1.40/nagios
設定
OpenStack はオープンソースプロジェクトのコンポーネントで、クラウドサービスを設定できるようにするための集まりです。 各コンポーネントは、同様の構成手法と INI ファイル オプションの共通フレームワークを使用します。
このガイドでは、次の OpenStack コンポーネントの複数のリファレンスと構成オプションを引き出します。
- Bare Metal service
- Block Storage service
- Compute service
- Dashboard
- Database service
- Data Processing service
- Identity service
- Image service
- Message サービス
- ネットワークサービス
- オブジェクトストレージサービス
- オーケストレーションサービス
- 共有ファイルシステムサービス
- テレメトリサービス
OpenStackでは設定ファイルとしてINIファイル形式を使用します。 INI ファイルは、オプションを key=value のペアで指定するシンプルなテキストファイルで、セクションにグループ化されています。 DEFAULTセクションには、ほとんどの設定オプションが含まれています。 ハッシュ記号(#)で始まる行はコメント行です。 例:
# Print debugging output (set logging level to DEBUG instead # of default WARNING level). (boolean value) debug = true # The SQLAlchemy connection string used to connect to the # database (string value) connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
オプションは、値に対して異なるタイプを持つことができます。 サンプル設定ファイルのコメント欄には常にこれらの値が記載され、表には (BoolOpt) Toggle… のように最初の項目として Opt 値が記載されています。 OpenStack では、次のタイプが使用されます:
ブール値 (BoolOpt)
オプションを有効にするか無効にするか指定します。
# Enable the experimental use of database reconnect on # connection lost (boolean value) use_db_reconnect = false
浮動小数点値 (FloatOpt)
浮動小数点数は 0.25 や 1000 です。
# Sleep time in seconds for polling an ongoing async task # (floating point value) task_poll_interval = 0.5
整数値 (IntOpt)
整数値は 0 や 42 など小数部分を除いた数です。
# The port which the OpenStack Compute service listens on. # (integer value) compute_port = 8774
IPアドレス (IPOpt)
IPv4またはIPv6アドレス。
# Address to bind the server. Useful when selecting a particular network # interface. (ip address value) bind_host = 0.0.0.0
キーと値のペア (DictOpt)
キーと値のペア、ディクトナリとしても知られています。 キー・バリュー・ペアはカンマで区切られ、キーとバリューの間はコロンで区切られます。 例: key1:value1,key2:value2.
# Parameter for l2_l3 workflow setup. (dict value) l2_l3_setup_params = data_ip_address:192.168.200.99, \ data_ip_mask:255.255.255.0,data_port:1,gateway:192.168.200.1,ha_port:2
リスト値 (ListOpt)
他の型の値をカンマで区切って表現します。 例として、以下では allowed_rpc_exception_modules に oslo.messaging.exceptions, nova.exception, cinder.exception の 4 つの要素を含むリストを設定します。例外:
# Modules of exceptions that are permitted to be recreated # upon receiving exception data from an rpc call. (list value) allowed_rpc_exception_modules = oslo.messaging.exceptions,nova.exception
多値 (MultiStrOpt)
多値オプションは文字列値で、複数回指定でき、すべての値が使用されます。
# Driver or drivers to handle sending notifications. (multi valued) notification_driver = nova.openstack.common.notifier.rpc_notifier notification_driver = ceilometer.compute.nova_notifier
ポート値 (PortOpt)
TCP/IP ポート番号です。 ポートは1~65535の範囲で指定できます。
# Port to which the UDP socket is bound. (port value) # Minimum value: 1 # Maximum value: 65535 udp_port = 4952
文字列値 (StrOpt)
文字列は、オプションでシングルまたはダブルクォートで囲めます。
# Enables or disables publication of error events. (boolean value) publish_errors = false # The format for an instance that is passed with the log message. # (string value) instance_format = " "
セクション
構成オプションはセクションごとにグループ化されています。 ほとんどの設定ファイルは、少なくとも以下のセクションをサポートしています:
ほとんどの設定オプションを含んでいます。 設定オプションのドキュメントでセクションが指定されていない場合、このセクションに表示されると仮定してください。
OpenStackサービスの状態を格納するデータベース用の設定オプション。 設定オプションを設定した後、$OPTION のように $ を前に付けると、後の設定値で参照できます。
次の例では、rabbit_host と rabbit_port の値を使用して rabbit_hosts オプションの値を定義し、この場合は controller:5672.
# The RabbitMQ broker address where a single node is used. # (string value) rabbit_host = controller # The RabbitMQ broker port where a single node is used. # (integer value) rabbit_port = 5672 # RabbitMQ HA cluster host:port pairs. (list value) rabbit_hosts = $rabbit_host:$rabbit_port
置換を回避するには、
$$ とすると単一の $ と置き換わります。 例えば、LDAP DNSのパスワードが$xkj432の場合、次のように指定します:
ldap_dns_password = $$xkj432
このコードはPythonの文字列を使用します。 Template.safe_substitute()メソッドを使用して、変数の置換を実装しています。
ホワイトスペース
設定値にホワイトスペースを含めるには、引用符で囲まれた文字列を使用します。 例:
ldap_dns_passsword='a password with spaces'
Define an Alternate Location for a Config File
ほとんどのサービスおよび -manage コマンド ライン クライアントは、構成ファイルを読み込みます。 設定ファイルの代替場所を定義するには、サービスの起動時または -manage コマンドの呼び出し時に –config-file CONFIG_FILE パラメータを渡します。
まとめ
Red Hat、CentOS および Fedora Linux 上での OpenStack インストールを実演してみました。 これで、Alibaba Cloud Elastic Compute Service (ECS)上のプライベートクラウド環境をOpenStackで簡単に構築できるようになりました。