OpenStack-Kilo "hands"をデプロイします

すべてのハブラリュディにこんにちは!



前の記事で 、DevStackを使用してテスト環境を迅速にデプロイする方法について説明しました。 この出版物では、構成内の2つのマシン(コントローラー、コンピュート)にOpenStack「クラウド」をデプロイする方法を説明します。





一般に、このシステムにより、多くの仮想マシンを起動し(メモリとCPUが計算できる限り)、仮想ネットワークを作成し、仮想ディスクを作成してVMに接続し、もちろんすべてを便利なダッシュボードで管理できます。



ご注意 コマンドと設定のリストを含む多くの「フットラップ」!





私はすぐに言わなければなりません:





無意識のうちに「コピーアンドペースト」しないでください。 もちろん、これはこのガイドのOpenStack環境の確立に役立ちますが、この知識を現場で使用することは教えません。



何を使用しますか?




OS: Ubuntu 14.04 (CentOSを使用できますが、ガイドはUbuntuに基づいています)。

OpenStackエディション: Kilo



準備する


ネットワーク




元のマニュアルでは4つのネットワークを使用しています。

管理-10.0.0.0/24-VLAN 10

トンネル-10.0.1.0/24-VLAN 11

ストレージ-10.0.2.0/24-VLAN 12

外部-192.168.1.0/24



私たちの場合、外部ネットワークはホームネットワークのどこかに見えますが、概してこのインターフェイスはWorld Wide Webも見ることができます。それはすべて、クラウドを展開する対象によって異なります。



機能しているdns-serverがあると非常に便利です。 私はdnsmasqを使用しました。

# cat /etc/hosts 10.0.0.11 controller 10.0.0.31 compute1
      
      







インターフェイスを構成する

コントローラー上:
 # cat /etc/network/interfaces auto p2p1.10 iface p2p1.10 inet static address 10.0.0.11 netmask 255.255.255.0 gateway 10.0.0.1 dns-nameservers 10.0.0.1 auto p2p1.11 iface p2p1.11 inet static address 10.0.1.11 netmask 255.255.255.0 auto p2p1.12 iface p2p1.12 inet static address 10.0.2.11 netmask 255.255.255.0 #     auto p3p1 iface p3p1 inet manual up ip link set dev $IFACE up down ip link set dev $IFACE down
      
      









コンピューティングノード:
 # cat /etc/network/interfaces auto p2p1.10 iface p2p1.10 inet static address 10.0.0.31 netmask 255.255.255.0 gateway 10.0.0.1 dns-nameservers 10.0.0.1 auto p2p1.11 iface p2p1.11 inet static address 10.0.1.31 netmask 255.255.255.0 auto p2p1.12 iface p2p1.12 inet static address 10.0.2.31 netmask 255.255.255.0
      
      









両方の車がお互いを見てネットワークに行くことを確認します。



NTP


コントローラー上:

 # apt-get install ntp -y # cat /etc/ntp.conf server ntp.oceantelecom.ru iburst restrict -4 default kod notrap nomodify restrict -6 default kod notrap nomodify # service ntp stop # ntpdate ntp.oceantelecom.ru # service ntp start
      
      







計算ノードで:

 # apt-get install ntp -y # cat /etc/ntp.conf server controller iburst # service ntp stop # ntpdate controller # service ntp start
      
      







Kiloリポジトリ




 # apt-get install ubuntu-cloud-keyring # echo "deb http://ubuntu-cloud.archive.canonical.com/ubuntu" "trusty-updates/kilo main" > /etc/apt/sources.list.d/cloudarchive-kilo.list
      
      







Kiloはかなり若いリリースです-2015年4月。 このリリースの何よりも、Horizo​​nインターフェイスでロシア語が気に入った。

詳細はこちらをご覧ください



更新された:

 # apt-get update && apt-get dist-upgrade -y
      
      







SQL + RabbitMQ


SQLサーバーの役割は、MySQL、PostgreSQL、Oracle、またはSQLAlchemyでサポートされているその他の役割です。 公式マニュアルのようにMariaDBをインストールします。

 # apt-get install mariadb-server python-mysqldb -y # cat /etc/mysql/conf.d/mysqld_openstack.cnf [mysqld] bind-address = 10.0.0.11 default-storage-engine = innodb innodb_file_per_table collation-server = utf8_general_ci init-connect = 'SET NAMES utf8' character-set-server = utf8 # service mysql restart # mysql_secure_installation
      
      





優れたパフォーマンスを備えた追加のHDDがあれば、データベースファイルをその上に置くことができ、コンピューティングノードでスタンドを開発することを計画している場合、それは不要ではありません。



そしてもちろん、RabbitMQ:

 # apt-get install rabbitmq-server # rabbitmq-plugins enable rabbitmq_management # service rabbitmq-server restart
      
      





キューを追跡するのに便利なように、再起動を設定し、管理WebGUIを実行します。



ユーザーを作成し、そのユーザーに権利を設定します。

 rabbitmqctl add_user openstack RABBIT_PASS rabbitmqctl set_permissions openstack ".*" ".*" ".*"
      
      







キーストーン


Keystoneは、OpenStackの認証センターです。 すべての承認はそれを通過します。 KeystoneはデータをSQLデータベースに保存しますが、memcacheも使用します。



データベースを準備します。

 # mysql -u root -p CREATE DATABASE keystone; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS'; GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
      
      





当然、他の場所のようにパスワードを置き換えることを忘れないでください。



keystoneサービスの自動起動をオフにして、必要なすべてのコンポーネントをインストールします。

 # echo "manual" > /etc/init/keystone.override # apt-get install keystone python-openstackclient apache2 libapache2-mod-wsgi memcached python-memcache
      
      







/etc/keystone/keystone.conf config 、次の行を記述します。

 [DEFAULT] admin_token = ADMIN_TOKEN [database] connection = mysql://keystone:KEYSTONE_DBPASS@controller/keystone [memcache] servers = localhost:11211 [token] provider = keystone.token.providers.uuid.Provider driver = keystone.token.persistence.backends.memcache.Token [revoke] driver = keystone.contrib.revoke.backends.sql.Revoke
      
      







openssl rand -hex 16 」を使用するADMIN_TOKENジェネレーター。

ローカルデータベースをSQLサーバーと同期します

 # su -s /bin/sh -c "keystone-manage db_sync" keystone
      
      







Apacheを構成します。

フットクロス
 # cat /etc/apache2/apache2.conf ... ServerName controller ... # cat /etc/apache2/sites-available/wsgi-keystone.conf Listen 5000 Listen 35357 <VirtualHost *:5000> WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone display-name=%{GROUP} WSGIProcessGroup keystone-public WSGIScriptAlias / /var/www/cgi-bin/keystone/main WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On <IfVersion >= 2.4> ErrorLogFormat "%{cu}t %M" </IfVersion> LogLevel info ErrorLog /var/log/apache2/keystone-error.log CustomLog /var/log/apache2/keystone-access.log combined </VirtualHost> <VirtualHost *:35357> WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone display-name=%{GROUP} WSGIProcessGroup keystone-admin WSGIScriptAlias / /var/www/cgi-bin/keystone/admin WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On <IfVersion >= 2.4> ErrorLogFormat "%{cu}t %M" </IfVersion> LogLevel info ErrorLog /var/log/apache2/keystone-error.log CustomLog /var/log/apache2/keystone-access.log combined </VirtualHost> # ln -s /etc/apache2/sites-available/wsgi-keystone.conf /etc/apache2/sites-enabled # mkdir -p /var/www/cgi-bin/keystone # curl http://git.openstack.org/cgit/openstack/keystone/plain/httpd/keystone.py?h=stable/kilo | tee /var/www/cgi-bin/keystone/main /var/www/cgi-bin/keystone/admin # chown -R keystone:keystone /var/www/cgi-bin/keystone # chmod 755 /var/www/cgi-bin/keystone/* # service apache2 restart # rm -f /var/lib/keystone/keystone.db
      
      







ServerNameをコントローラーの名前に変更します。

openstackリポジトリから作業スクリプトを取得します。



エンドポイントを構成します。 実際、openstackはどこでどのサービスが機能するかを知っているエンドポイントのおかげです。



keystoneパラメーターで毎回指定しないように、環境変数を追加します。

 # export OS_TOKEN=ADMIN_TOKEN # export OS_URL=http://controller:35357/v2.0
      
      







次に、サービスを作成します。

 # openstack service create --name keystone --description "OpenStack Identity" identity
      
      





さて、エンドポイントAPIを作成します。

 # openstack endpoint create --publicurl http://controller:5000/v2.0 --internalurl http://controller:5000/v2.0 --adminurl http://controller:35357/v2.0 --region RegionOne identity
      
      





RegionOneは、人間が読める任意の名前に変更できます。 「仲良くしない」ように使用します。



プロジェクト、ユーザー、ロールを作成します。



公式マナに従って引き続き行うので、すべて同じです:管理者とデモ

 # openstack project create --description "Admin Project" admin # openstack user create --password-prompt admin # openstack role create admin # openstack role add --project admin --user admin admin
      
      





管理者のパスワードを自分で作成します。 順序:「管理プロジェクト」プロジェクト、ユーザーおよび管理ロールを作成し、プロジェクトとユーザーをロールに接続します。



次に、 サービスプロジェクトを作成します

 # openstack project create --description "Service Project" service
      
      







adminとの類推により、デモを作成します。

 # openstack project create --description "Demo Project" demo # openstack user create --password-prompt demo # openstack role create user # openstack role add --project demo --user demo user
      
      







環境スクリプトを作成します。

スクリプト
 # cat admin-openrc.sh 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=ADMIN_PASS export OS_AUTH_URL=http://controller:35357/v3 export OS_IMAGE_API_VERSION=2 export OS_VOLUME_API_VERSION=2 # cat demo-openrc.sh export OS_PROJECT_DOMAIN_ID=default export OS_USER_DOMAIN_ID=default export OS_PROJECT_NAME=demo export OS_TENANT_NAME=demo export OS_USERNAME=demo export OS_PASSWORD=DEMO_PASS export OS_AUTH_URL=http://controller:5000/v3 export OS_IMAGE_API_VERSION=2 export OS_VOLUME_API_VERSION=2
      
      









実際:

 # source admin-openrc.sh
      
      





これで、 キーストーンサービスのセットアップが完了しました。



一目


Glanceは、仮想マシンのテンプレート(イメージ)を保存するためのOpenStackツールです。 画像はSwiftのGlance独自のリポジトリに保存できますが、他の場所にも保存できます。主なことは、この画像はhttp経由で取得できることです。



いつも通りmysqlから始めましょう:

 # mysql -u root -p CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS'; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';
      
      







将来のサービスに関するキーストーン情報を作成します。

 # openstack user create --password-prompt glance # openstack role add --project service --user glance admin # openstack service create --name glance --description "OpenStack Image service" image # openstack endpoint create --publicurl http://controller:9292 --internalurl http://controller:9292 --adminurl http://controller:9292 --region RegionOne image
      
      





ユーザー一覧を作成し、 管理者ロールに接続します。 すべてのサービスはこのロールから正確に機能します。Glanceサービスを作成し、エンドポイントを設定します。



次に、インストールを続行します。

 # apt-get install glance python-glanceclient
      
      





およびセットアップ:

カスタマイズ
 # cat /etc/glance/glance-api.conf [DEFAULT] ... notification_driver = noop [database] connection = mysql://glance:GLANCE_DBPASS@controller/glance [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 auth_plugin = password project_domain_id = default user_domain_id = default project_name = service username = glance password = GLANCE_PASS [paste_deploy] flavor = keystone [glance_store] default_store = file filesystem_store_datadir = /var/lib/glance/images/
      
      









[keystone_authtoken]セクションを削除する必要があるものは何でも。 GLANCE_PASS-keystoneのユーザー目線からのパスワード。 filesystem_store_datadirは、イメージが置かれるリポジトリへのパスです。 ディスク障害によってすべてのイメージが誤って失われないように、このディレクトリにRAIDアレイまたは信頼できるネットワークストレージをマウントすることをお勧めします。



/etc/glance/glance-registry.confで 、セクションデータベースkeystone_authtoken、paste_deploy、DEFAULTから同じ情報を複製します



データベースを同期します。

 # su -s /bin/sh -c "glance-manage db_sync" glance
      
      







サービスを再起動し、ローカルデータベースを削除します。

 # service glance-registry restart # service glance-api restart # rm -f /var/lib/glance/glance.sqlite
      
      







公式マニュアルでは、 cirrosがロードされますが、これは一般に必要ないため、Ubuntuイメージをロードします。

 # mkdir /tmp/images # wget -P /tmp/images http://cloud-images.ubuntu.com/releases/14.04.2/release/ubuntu-14.04-server-cloudimg-amd64-disk1.img # glance image-create --name "Ubuntu-Server-14.04.02-x86_64" --file /tmp/images/ubuntu-14.04-server-cloudimg-amd64-disk1.img --disk-format qcow2 --container-format bare --visibility public --progress # rm -r /tmp/images
      
      





必要なすべての画像をすぐに入力できますが、ダッシュボードが表示されるまで待つと思います。

全体-Glanceサービスの準備ができました。



ノヴァ


NovaはOpenStackのIaaSの主要部分です。 Novaのおかげで、仮想マシンは自動的に作成されます。 NovaはKVM、Xen、Hyper-V、VMwareと対話できますが、皮肉なようです(正直なところ、どのように機能するのかよくわかりません)。 KVMを使用しますが、他のハイパーバイザーでは構成が異なります。



コントローラー




再び、データベースから始めます。

 # mysql -u root -p CREATE DATABASE nova; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
      
      







keystoneに情報を追加します。

 # openstack user create --password-prompt nova # openstack role add --project service --user nova admin # openstack service create --name nova --description "OpenStack Compute" compute # openstack endpoint create --publicurl http://controller:8774/v2/%\(tenant_id\)s --internalurl http://controller:8774/v2/%\(tenant_id\)s --adminurl http://controller:8774/v2/%\(tenant_id\)s --region RegionOne compute
      
      







必要なパッケージをインストールします。

 # apt-get install nova-api nova-cert nova-conductor nova-consoleauth nova-novncproxy nova-scheduler python-novaclient
      
      







/etc/nova/nova.conf
 [DEFAULT] ... rpc_backend = rabbit auth_strategy = keystone my_ip = 10.0.0.11 vncserver_listen = 10.0.0.11 vncserver_proxyclient_address = 10.0.0.11 [database] connection = mysql://nova:NOVA_DBPASS@controller/nova [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 auth_plugin = password project_domain_id = default user_domain_id = default project_name = service username = nova password = NOVA_PASS [glance] host = controller [oslo_concurrency] lock_path = /var/lib/nova/tmp
      
      









データベースを同期し、サービスを再起動して、ローカルデータベースを削除します。

 # su -s /bin/sh -c "nova-manage db sync" nova # service nova-api restart # service nova-cert restart # service nova-consoleauth restart # service nova-scheduler restart # service nova-conductor restart # service nova-novncproxy restart # rm -f /var/lib/nova/nova.sqlite
      
      







計算ノード


これで、コンピューティングノードでの作業がようやく始まりました。 説明されているすべてのアクションは、システム内の各コンピューティングノードで有効です。

 # apt-get install nova-compute sysfsutils
      
      







/etc/nova/nova.conf
 [DEFAULT] ... verbose = True rpc_backend = rabbit auth_strategy = keystone my_ip = 10.0.0.31 #MANAGEMENT_INTERFACE_IP_ADDRESS vnc_enabled = True vncserver_listen = 0.0.0.0 vncserver_proxyclient_address = 10.0.0.31 #MANAGEMENT_INTERFACE_IP_ADDRESS novncproxy_base_url = http://controller:6080/vnc_auto.html [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 auth_plugin = password project_domain_id = default user_domain_id = default project_name = service username = nova password = NOVA_PASS [glance] host = controller [oslo_concurrency] lock_path = /var/lib/nova/tmp [libvirt] virt_type = kvm
      
      







MANAGEMENT_INTERFACE_IP_ADDRESSは、VLAN 10の計算ノードのアドレスです。

novncproxy_base_urlコントローラーは、Webブラウザーからアクセスできるアドレスに対応する必要があります。 そうしないと、Horizo​​nからvncコンソールを使用できません。



サービスを再起動し、データベースのローカルコピーを削除します。

 # service nova-compute restart # rm -f /var/lib/nova/nova.sqlite
      
      







すべてが正常に機能するかどうかを確認します。

 # nova service-list +----+------------------+------------+----------+---------+-------+----------------------------+-----------------+ | Id | Binary | Host | Zone | Status | State | Updated_at | Disabled Reason | +----+------------------+------------+----------+---------+-------+----------------------------+-----------------+ | 1 | nova-conductor | controller | internal | enabled | up | 2014-09-16T23:54:02.000000 | - | | 2 | nova-consoleauth | controller | internal | enabled | up | 2014-09-16T23:54:04.000000 | - | | 3 | nova-scheduler | controller | internal | enabled | up | 2014-09-16T23:54:07.000000 | - | | 4 | nova-cert | controller | internal | enabled | up | 2014-09-16T23:54:00.000000 | - | | 5 | nova-compute | compute1 | nova | enabled | up | 2014-09-16T23:54:06.000000 | - | +----+------------------+------------+----------+---------+-------+----------------------------+-----------------+
      
      





5行目は、すべてが正しく行われたことを示しています。



最も重要なことを行いました-今ではIaaSがあります。



中性子


Neutronは、サービスとしてのネットワーク(NaaS)サービスです。 一般に、公式文書では若干異なる定義が提供されていますが、より明確になると思います。 Nova-networkingはOpenStackの新しいバージョンでは廃止されていると宣言されているため、使用しません。 はい、中性子の機能ははるかに広いです。



コントローラー


マニュアルでは3番目のノードが使用されていますが、コントローラーにネットワークコアをインストールします。 多数のコンピューティングノード(> 10)が存在する場合、および/またはネットワークの負荷が非常に高くなる場合は、ネットワークサーバーを別のノードに移動することをお勧めします。



いつものように、データベースから始めましょう

 # mysql -u root -p CREATE DATABASE neutron; GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS'; GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';
      
      







キーストーン:

 # openstack user create --password-prompt neutron # openstack role add --project service --user neutron admin # openstack service create --name neutron --description "OpenStack Networking" network # openstack endpoint create --publicurl http://controller:9696 --adminurl http://controller:9696 --internalurl http://controller:9696 --region RegionOne network
      
      







必要なコンポーネントをインストールします。

 # apt-get install neutron-server neutron-plugin-ml2 python-neutronclient neutron-plugin-openvswitch-agent neutron-l3-agent neutron-dhcp-agent neutron-metadata-agent
      
      







/etc/sysctl.confを修正することも必要です

 # cat /etc/sysctl.conf net.ipv4.ip_forward=1 net.ipv4.conf.all.rp_filter=0 net.ipv4.conf.default.rp_filter=0 # sysctl -p
      
      







/etc/neutron/neutron.conf
 [DEFAULT] ... rpc_backend = rabbit auth_strategy = keystone core_plugin = ml2 service_plugins = router allow_overlapping_ips = True notify_nova_on_port_status_changes = True notify_nova_on_port_data_changes = True nova_url = http://controller:8774/v2 [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS [database] connection = mysql://neutron:NEUTRON_DBPASS@controller/neutron [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 auth_plugin = password project_domain_id = default user_domain_id = default project_name = service username = neutron password = NEUTRON_PASS [nova] auth_url = http://controller:35357 auth_plugin = password project_domain_id = default user_domain_id = default region_name = RegionOne project_name = service username = nova password = NOVA_PASS
      
      







設定を編集するとき、コメントアウトされた行を除いて、そこから何も削除しないでください。

/etc/neutron/plugins/ml2/ml2_conf.ini
 [ml2] type_drivers = flat,vlan,gre,vxlan tenant_network_types = gre mechanism_drivers = openvswitch [ml2_type_gre] tunnel_id_ranges = 1000:2000 [ml2_type_flat] flat_networks = external [securitygroup] enable_security_group = True enable_ipset = True firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver [ovs] local_ip = 10.0.1.11 #INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS bridge_mappings = external:br-ex [agent] tunnel_types = gre
      
      









/etc/neutron/l3_agent.ini
 [DEFAULT] interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver external_network_bridge = router_delete_namespaces = True
      
      









/etc/neutron/dhcp_agent.ini
 [DEFAULT] interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq dhcp_delete_namespaces = True dnsmasq_config_file = /etc/neutron/dnsmasq-neutron.conf
      
      









/etc/neutron/dnsmasq-neutron.conf
 dhcp-option-force=26,1454
      
      





公式ドキュメントでは、この設定はジャンボフレームをサポートしていないネットワークデバイスに使用されていましたが、一般に、dnsmasqのほぼすべての設定をそこに記述できます。





すべてのdnsmasqプロセスを強制終了します

 # pkill dnsmasq
      
      







/etc/neutron/metadata_agent.ini
 [DEFAULT] auth_uri = http://controller:5000 auth_url = http://controller:35357 auth_region = RegionOne auth_plugin = password project_domain_id = default user_domain_id = default project_name = service username = neutron password = NEUTRON_PASS nova_metadata_ip = controller metadata_proxy_shared_secret = METADATA_SECRET
      
      









/etc/nova/nova.conf
 [DEFAULT] ... network_api_class = nova.network.neutronv2.api.API security_group_api = neutron linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver firewall_driver = nova.virt.firewall.NoopFirewallDriver [neutron] url = http://controller:9696 auth_strategy = keystone admin_auth_url = http://controller:35357/v2.0 admin_tenant_name = service admin_username = neutron admin_password = NEUTRON_PASS service_metadata_proxy = True metadata_proxy_shared_secret = METADATA_SECRET
      
      





METADATA_SECRETは、 10〜16文字の文字セットでもあります





nova.confからは何も削除せず、追加するだけです。



データベースを同期し、サービスを再起動します。

 # su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron # service nova-api restart # service neutron-server restart # service openvswitch-switch restart
      
      







ブリッジを作成し、外部インターフェイスに接続します

 # ovs-vsctl add-br br-ex # ovs-vsctl add-port br-ex p3p1
      
      







インターフェースを再起動する

 # service neutron-plugin-openvswitch-agent restart # service neutron-l3-agent restart # service neutron-dhcp-agent restart # service neutron-metadata-agent restart
      
      







計算ノード




コメントはありません。

 # cat /etc/sysctl.conf net.ipv4.conf.all.rp_filter=0 net.ipv4.conf.default.rp_filter=0 net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 # sysctl -p
      
      







 # apt-get install neutron-plugin-ml2 neutron-plugin-openvswitch-agent
      
      







/etc/neutron/neutron.conf
 [DEFAULT] ... rpc_backend = rabbit auth_strategy = keystone core_plugin = ml2 service_plugins = router allow_overlapping_ips = True [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 auth_plugin = password project_domain_id = default user_domain_id = default project_name = service username = neutron password = NEUTRON_PASS
      
      









/etc/neutron/plugins/ml2/ml2_conf.ini
 [ml2] type_drivers = flat,vlan,gre,vxlan tenant_network_types = gre mechanism_drivers = openvswitch [ml2_type_gre] tunnel_id_ranges = 1000:2000 [ml2_type_flat] flat_networks = external [securitygroup] enable_security_group = True enable_ipset = True firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver [ovs] local_ip = 10.0.1.31 #INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS bridge_mappings = external:br-ex [agent] tunnel_types = gre
      
      









openvswitchを再起動します

 # service openvswitch-switch restart
      
      







/etc/nova/nova.confに行を追加します

 [DEFAULT] ... network_api_class = nova.network.neutronv2.api.API security_group_api = neutron linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver firewall_driver = nova.virt.firewall.NoopFirewallDriver [neutron] url = http://controller:9696 auth_strategy = keystone admin_auth_url = http://controller:35357/v2.0 admin_tenant_name = service admin_username = neutron admin_password = NEUTRON_PASS
      
      







サービスを再起動します。

 # service nova-compute restart # service neutron-plugin-openvswitch-agent restart
      
      







言及することを忘れなかった場合、次のようになります。

 # neutron agent-list +--------------------------------------+--------------------+----------+-------+----------------+---------------------------+ | id | agent_type | host | alive | admin_state_up | binary | +--------------------------------------+--------------------+----------+-------+----------------+---------------------------+ | 30275801-e17a-41e4-8f53-9db63544f689 | Metadata agent | network | :-) | True | neutron-metadata-agent | | 4bd8c50e-7bad-4f3b-955d-67658a491a15 | Open vSwitch agent | network | :-) | True | neutron-openvswitch-agent | | 756e5bba-b70f-4715-b80e-e37f59803d20 | L3 agent | network | :-) | True | neutron-l3-agent | | 9c45473c-6d6d-4f94-8df1-ebd0b6838d5f | DHCP agent | network | :-) | True | neutron-dhcp-agent | | a5a49051-05eb-4b4f-bfc7-d36235fe9131 | Open vSwitch agent | compute1 | :-) | True | neutron-openvswitch-agent | +--------------------------------------+--------------------+----------+-------+----------------+---------------------------+
      
      







ネットワーク


次に、ネットワークの初期調達を行います。 1つの外部ネットワークと1つの内部ネットワークを作成します。



仮想ネットワークを作成します。

 # neutron net-create ext-net --router:external --provider:physical_network external --provider:network_type flat
      
      







外部サブネットを構成します。

 # neutron subnet-create ext-net 192.168.1.0/24 --name ext-subnet \ --allocation-pool start=192.168.1.100,end=192.168.1.200 \ --disable-dhcp --gateway 192.168.1.1
      
      





外部ネットワークは192.168.1.0/24であり、ルーターはインターネット上で192.168.1.1をリリースしています。 クラウドの外部アドレスは、192.168.1.101-200の範囲から発行されます。



次に、 デモプロジェクトの内部ネットワークを作成します。そのため、デモユーザーの変数を読み込む必要があります。

 # source demo-openrc.sh
      
      







次に、仮想内部ネットワークを作成します。

 # neutron net-create demo-net # neutron subnet-create demo-net 172.16.1.0/24 --name demo-subnet --gateway 172.16.1.1
      
      





仮想ネットワークが172.16.1.0/24になり、そこからのすべてのインスタンスが172.16.1.1をルーターとして受信することは明らかです。

質問:このルーターは何ですか?

回答:これは仮想ルーターです。



「トリック」は、Neutronで十分に多数のサブネットを持つ仮想ネットワークを構築できることです。つまり、仮想ルーターが必要です。 各仮想ルーターは、利用可能な仮想および外部ネットワークのいずれかにポートを追加できます。 そして、これは本当に「強力」です! ネットワークへのアクセスのみをルーターに割り当て、すべてのファイアウォールルールをセキュリティグループから管理します。 さらに! ソフトウェアルーターを使用して仮想マシンを作成し、必要なすべてのネットワークへのインターフェイスを構成し、それを介してアクセスを制御できます(Mikrotikを使用してみました)。

一般的に、Neutronには想像力の余地があります。



仮想ルーターを作成し、demo-subnetでインターフェイスを割り当て、外部ネットワークに接続します。

 # neutron router-create demo-router # neutron router-interface-add demo-router demo-subnet # neutron router-gateway-set demo-router ext-net
      
      







これで、仮想ルーターは外部ネットワークから応答するはずです。

 # ping 192.168.1.100 PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data. 64 bytes from 192.168.1.100: icmp_req=1 ttl=64 time=0.619 ms 64 bytes from 192.168.1.100: icmp_req=2 ttl=64 time=0.189 ms 64 bytes from 192.168.1.100: icmp_req=3 ttl=64 time=0.165 ms 64 bytes from 192.168.1.100: icmp_req=4 ttl=64 time=0.216 ms ...
      
      







一般に、ネットワークを備えた稼働中のクラウドがすでにあります。



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


Cinderは、ブロックデバイス(仮想ディスク)を管理し、それらを仮想インスタンスにアタッチする機能を提供するサービスです。 仮想ディスクも起動可能にすることができます。 これは、VMを別のコンピューティングインスタンスに転送する場合に非常に便利です。



DB:

 # mysql -u root -p CREATE DATABASE cinder; GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'CINDER_DBPASS'; GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'CINDER_DBPASS';
      
      







キーストーン:

 # openstack user create --password-prompt cinder # openstack role add --project service --user cinder admin # openstack service create --name cinder --description "OpenStack Block Storage" volume # openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2 # openstack endpoint create --publicurl http://controller:8776/v2/%\(tenant_id\)s --internalurl http://controller:8776/v2/%\(tenant_id\)s --adminurl http://controller:8776/v2/%\(tenant_id\)s --region RegionOne volume # openstack endpoint create --publicurl http://controller:8776/v2/%\(tenant_id\)s --internalurl http://controller:8776/v2/%\(tenant_id\)s --adminurl http://controller:8776/v2/%\(tenant_id\)s --region RegionOne volumev2
      
      







必要なパッケージのインストール:

 # apt-get install cinder-api cinder-scheduler python-cinderclient
      
      







設定を修正しましょう:

/etc/cinder/cinder.conf
 [DEFAULT] ... rpc_backend = rabbit auth_strategy = keystone my_ip = 10.0.0.11 [oslo_messaging_rabbit] rabbit_host = controller rabbit_userid = openstack rabbit_password = RABBIT_PASS [database] connection = mysql://cinder:CINDER_DBPASS@controller/cinder [keystone_authtoken] auth_uri = http://controller:5000 auth_url = http://controller:35357 auth_plugin = password project_domain_id = default user_domain_id = default project_name = service username = cinder password = CINDER_PASS [oslo_concurrency] lock_path = /var/lock/cinder
      
      









次に、データベースを同期し、サービスを再起動します。

 # su -s /bin/sh -c "cinder-manage db sync" cinder # service cinder-scheduler restart # service cinder-api restart
      
      







なぜなら コントローラーもリポジトリーになるため、次のアクションも実行します。

必要なパッケージをインストールします。

 # apt-get install qemu lvm2
      
      





構成で2つの500GBドライブについて言及したことを覚えていますか? RAID 1を作成します(説明しません)。 純粋に技術的には、2つの物理ディスクからlvmパーティションを作成することもできますが、HAプロジェクトがなく、ディスクの1つが落下することが重要になる可能性があるため、このオプションは不適切です。 RAIDアレイの作成方法は分析しませんが、簡単にグーグルです。 RAIDは/ dev / md1と呼ばれると仮定します:

 # pvcreate /dev/md1 # vgcreate cinder-volumes /dev/md1
      
      





物理LVMデバイスを作成し、 cinder-volumes lvmグループを作成しました。

次に、/ etc/lvm/lvm.confを編集します。

そこで次の行を見つけます(または追加します)。

 devices { ... filter = [ "a/md1/", "r/.*/"]
      
      





raidセクションを除き、lvmとは何の関係もないと仮定します。 作業セクションもlvmにデプロイされている場合は、追加する必要があります。 たとえば、システムが/ dev / md0にデプロイされ、lvmがその上にデプロイされている場合、構成は次のようになります。

 devices { ... filter = [ "a/md0/", "a/md1/", "r/.*/"]
      
      





一般に、lvmに出会った人にとってこれは難しくないはずだと思います。



必要なパッケージをインストールします。

 # apt-get install cinder-volume python-mysqldb
      
      







構成に追加します。

/etc/cinder/cinder.conf
 [DEFAULT] ... enabled_backends = lvm glance_host = controller [lvm] volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver volume_group = cinder-volumes iscsi_protocol = iscsi iscsi_helper = tgtadm
      
      









そして、サービスを再起動します。

 # service tgt restart # service cinder-scheduler restart # service cinder-api restart # service cinder-volume restart
      
      







Horizo​​n (ダッシュボード)


Horizo​​n-Python 2.7で記述されたOpenStackのダッシュボード。エンジンはDjangoです。OpenStack環境全体の完全な管理は、ユーザー/プロジェクト/ロール管理、イメージ管理、仮想ディスク、インスタンス、ネットワークなどから実行されます。



設置


 # apt-get install openstack-dashboard
      
      





コントローラーノードにアクセスできる別のサーバーにインストールを実行できますが、コントローラーにインストールします。



まっすぐに設定/etc/openstack-dashboard/local_settings.py

 ... OPENSTACK_HOST = "controller" ... ALLOWED_HOSTS = '*' ... CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', } } ... OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user" ... TIME_ZONE = "Asia/Vladivostok" ...
      
      





TIME_ZONE-あなたのタイムゾーンは異なっているかもしれません(そしておそらくそうなるでしょう)。ここにあります。



Apacheを再起動します。

 # service apache2 reload
      
      







これで、コントローラー/ホライズンに移動できます私の以前の出版物では、ダッシュボードのスクリーンショットを見ることができます。Ubuntuはさらに、openstack-dashboard-ubuntu-themeパッケージをインストールします。これにより、Jujuのヒントを含むリンクが追加されます。元のバージョンを返したい場合は、単にパッケージを削除できます。



ユーザープロフィールでロシア語のインターフェース言語を選択することもできます。これにより、開発者の作業が大幅に促進されます。



できた!



出版物は非常に面倒であることが判明しましたが、共有したくありませんでした。

記事が誰にも役立つことを願っています。

次の出版物(「トマト」でカルマを投げない場合)では、Chefサーバーの基本的なインストールと簡単なレシピについて説明します。



All Articles