2015年1月15日 星期四

三主機安裝 OpenStack Juno(二):安裝 Controller Node

前言:
這系列的文章只是我自己的 OpenStack Juno 安裝記錄,不過基本上內容都跟官方文件一樣
只是把一些細節整合起來,讓安裝時的設定稍微沒那麼繁瑣一點
但如果想知道各個步驟的原因以及用途,建議還是應該回頭去看看官方的安裝文件。

安裝環境的硬體、網路配置介紹請參考前文:三主機安裝 OpenStack Juno(一):安裝環境介紹


    系統環境與前置工作
    1. 作業系統為 Ubuntu 14.04.1。
    2. 將會在 Controller 上安裝的各元件版本如下(使用 apt-show-versions):
      cinder-api:all/trusty-updates 1:2014.2.1-0ubuntu1~cloud0 uptodate
      cinder-scheduler:all/trusty-updates 1:2014.2.1-0ubuntu1~cloud0 uptodate
      glance:all/trusty-updates 1:2014.2.1-0ubuntu1~cloud0 uptodate
      keystone:all/trusty-updates 1:2014.2.1-0ubuntu1~cloud0 uptodate
      nova-api:all/trusty-updates 1:2014.2.1-0ubuntu1~cloud0 uptodate
      nova-cert:all/trusty-updates 1:2014.2.1-0ubuntu1~cloud0 uptodate
      nova-conductor:all/trusty-updates 1:2014.2.1-0ubuntu1~cloud0 uptodate
      nova-consoleauth:all/trusty-updates 1:2014.2.1-0ubuntu1~cloud0 uptodate
      nova-novncproxy:all/trusty-updates 1:2014.2.1-0ubuntu1~cloud0 uptodate
      nova-scheduler:all/trusty-updates 1:2014.2.1-0ubuntu1~cloud0 uptodate
    3. 安裝開始前,先編輯 /etc/hosts 設定節點的別名,以供每個服務皆能正確識別服務所在的位址。
      127.0.0.1 controller
      127.0.0.1 image
    Controller Node 安裝流程
    基本環境
    1. 設定網路時間。
      apt-get install ntp
    2. 設定 OpenStack Repository。
      apt-get install ubuntu-cloud-keyring
      echo "deb http://ubuntu-cloud.archive.canonical.com/ubuntu" "trusty-updates/juno main" > /etc/apt/sources.list.d/cloudarchive-juno.list
      apt-get update && apt-get dist-upgrade
    MariaDB 資料庫服務
    1. 安裝 MariaDB 資料庫 (http://docs.openstack.org/juno/install-guide/install/apt/content/ch_basic_environment.html#basics-database) 以及方便管理 MariaDB 的工具 phpMyAdmin(註:phpMyAdmin 是我的個人習慣,並非一定要安裝 XD)
      apt-get install mariadb-server python-mysqldb phpmyadmin
    2. 編輯 /etc/mysql/my.cnf 設定允許操作 MariaDB 的 IP 位址(這裡設為允許任意位址連線),同時加入推薦的預設值。
      [mysqld]
      bind-address = 0.0.0.0
      
      default-storage-engine = innodb
      innodb_file_per_table
      collation-server = utf8_general_ci
      init-connect = 'SET NAMES utf8'
      character-set-server = utf8
    3. 重新啟動資料庫,並且執行安全設定。
      service mysql restart
      mysql_secure_installation
    4. 進入 MariaDB 資料庫的指令列(或者透過 phpMyAdmin 管理介面),輸入以下的指令建立包括 Keystone、Glance、Nova 以及 Neutron 需要的資料庫與對應的使用者權限。
      CREATE DATABASE keystone;
      GRANT ALL PRIVILEGES ON keystone.* TO 'opkeystone'@'controller' IDENTIFIED BY 'keystone';
      GRANT ALL PRIVILEGES ON keystone.* TO 'opkeystone'@'%' IDENTIFIED BY 'keystone';
      CREATE DATABASE nova;
      GRANT ALL PRIVILEGES ON nova.* TO 'opnova'@'compute1' IDENTIFIED BY 'nova';
      GRANT ALL PRIVILEGES ON nova.* TO 'opnova'@'compute2' IDENTIFIED BY 'nova';
      GRANT ALL PRIVILEGES ON nova.* TO 'opnova'@'%' IDENTIFIED BY 'nova';
      CREATE DATABASE glance;
      GRANT ALL PRIVILEGES ON glance.* TO 'opglance'@'controller' IDENTIFIED BY 'glance';
      GRANT ALL PRIVILEGES ON glance.* TO 'opglance'@'%' IDENTIFIED BY 'glance';
      CREATE DATABASE neutron;
      GRANT ALL PRIVILEGES ON neutron.* TO 'opneutron'@'controller' IDENTIFIED BY 'neutron';
      GRANT ALL PRIVILEGES ON neutron.* TO 'opneutron'@'network' IDENTIFIED BY 'neutron';
      GRANT ALL PRIVILEGES ON neutron.* TO 'opneutron'@'%' IDENTIFIED BY 'neutron';
      FLUSH PRIVILEGES;
    訊息服務
    依照官方文件,以下以 RabbitMQ 為例
    1. 安裝 RabbitMQ 服務,並設定 quest 帳號(RabbitMQ 預設的管理員帳號)的密碼為 qwer。
      apt-get install rabbitmq-server
      rabbitmqctl change_password guest qwer
    2. 為方便日後可以快速從 RabbitMQ 管理介面看出各個節點和服務的狀態,可用以下指令針對節點與服務個別建立不同的 RabbitMQ 帳戶。大體上就是先建立一個名稱為 openstack 的獨立的 virtual host,然後為每個節點與服務各自建立不同的使用者帳號,並且設定存取權限為可存取 openstack 這個 virtual host。
      rabbitmqctl add_vhost openstack
      
      rabbitmqctl add_user opglance glance
      rabbitmqctl add_user opnova nova
      rabbitmqctl add_user opnovacompute nova
      rabbitmqctl add_user opnovanetwork nova
      rabbitmqctl add_user opneutron neutron
      rabbitmqctl add_user opneutronnetwork neutron
      
      rabbitmqctl set_permissions -p openstack opglance ".*" ".*" ".*"
      rabbitmqctl set_permissions -p openstack opnova ".*" ".*" ".*"
      rabbitmqctl set_permissions -p openstack opnovacompute ".*" ".*" ".*"
      rabbitmqctl set_permissions -p openstack opnovanetwork ".*" ".*" ".*"
      rabbitmqctl set_permissions -p openstack opneutron ".*" ".*" ".*"
      rabbitmqctl set_permissions -p openstack opneutronnetwork ".*" ".*" ".*"
    3. 啟用 RabbitMQ 的管理介面,方便後續可直接從管理介面觀察或設定 RabbitMQ。
      rabbitmq-plugins enable rabbitmq_management
      service rabbitmq-server restart
    OpenStack 驗證服務:Keystone
    安裝 Keystone
    相關官方文件參考:Install and configure
    1. 安裝 Keystone 套件。
      apt-get install keystone python-keystoneclient
    2. 設定系統變數,並將設定的系統變數存在 /root/keystonerc。這些變數是之後要使用 OpenStack 的指令時會一直需要帶入的參數,像是告知 KeyStone 的位置、管理員的帳號密碼或者管理員金鑰等等的資訊,如果將這些資訊直接存放在系統變數(即下述的最後一行,source 的指令),後面操作 OpenStack 的指令就可以簡潔一些。相關官方文件參考:Create OpenStack client environment scripts
      cat >/root/keystonerc <<EOF
      export OS_TENANT_NAME=admin
      export OS_USERNAME=admin
      export OS_PASSWORD=qwer
      export MYSQL_PASS=qwer
      export SERVICE_PASSWORD=qwer
      export OS_AUTH_URL="http://controller:5000/v2.0/"
      export SERVICE_ENDPOINT="http://controller:35357/v2.0"
      export SERVICE_TOKEN=$(openssl rand -hex 10)
      EOF
      source /root/keystonerc
    3. 編輯 /etc/keystone/keystone.conf 設定 Keystone 的資料庫連線。此處以 Keystone 存取 MariaDB 的帳號是 opkeystone、密碼是 keystone、連線位址是 controller(controller 這個網域對應的 IP 位址已經在 /etc/hosts 檔案中定義了)、資料庫名稱是 keystone。
      另外同時需設定 Keystone 的 ADMIN_TOKEN,請將下述範例中的 SERVICE_TOKEN 置換成實際產生的值(即剛剛 /root/keystonerc 檔案產生出來的 SERVICE_TOKEN 的值)以及 log 寫入位置在 [DEFAULT] 之內。
      [DEFAULT]
      ...
      # A "shared secret" between keystone and other openstack services
      admin_token = SERVICE_TOKEN
      ...
      [database]
      # The SQLAlchemy connection string used to connect to the database
      connection = mysql://opkeystone:keystone@controller/keystone
    4. 因為 Keystone 預設會使用內建的 SQLite 資料庫做控制,但我們會使用 MariaDB 供 OpenStack 做控制,因此需刪除安裝時自動產生的 SQLite 資料庫,確保 Keystone 不會誤用。
      rm /var/lib/keystone/keystone.db
    5. 匯入 Keystone 需要的資料庫結構到 MariaDB。
      su -s /bin/sh -c "keystone-manage db_sync" keystone
    6. 重新啟動 Keystone
      service keystone restart
    7. 設定 crontab 每小時自動刪除逾期的 token。
      (crontab -l -u keystone 2>&1 | grep -q token_flush) || echo '@hourly /usr/bin/keystone-manage token_flush >/var/log/keystone/keystone-tokenflush.log 2>&1' >> /var/spool/cron/crontabs/keystone
    設定各個服務在 Keystone 上的使用者帳號
    相關官方文件參考:Create tenants, users, and rolesCreate the service entity and API endpoint
    1. 複製以下的 shell script 並執行,會建立出如註解的表格中所示 tenant、user 及 role 到 Keystone 中,供之後陸續安裝的其他 OpenStack 元件使用。(每個 OpenStack 元件都會透過 Identity 服務來得知目前 OpenStack 環境可以提供哪些服務、服務要從哪裡存取。因此每個服務都必須知道要去哪裡存取 Identity 服務,並且需要擁有 Identity 的帳號,用以存取 Identity 提供的資料)
      需要注意的是,要執行以下的 shell script 前必須先確認有執行過 source /root/keystonerc 的指令,因為以下指令在建立使用者時,會以 /root/keystonerc 裡的資料去指定密碼(所有使用者會被設定為同一個密碼,即 /root/keystonerc 裡設定的 "ADMIN_PASSWORD" 參數)。
      #!/bin/bash
      #
      # Initial data for Keystone using python-keystoneclient
      #
      # Tenant User Roles
      # ------------------------------------------------------------------
      # admin admin admin
      # service glance admin
      # service nova admin, ResellerAdmin
      # service neutron admin
      #
      # Variables set before calling this script:
      # SERVICE_TENANT_NAME - name of tenant containing service accounts
      
      ADMIN_PASSWORD=${ADMIN_PASSWORD:-$OS_PASSWORD}
      SERVICE_TENANT_NAME=${SERVICE_TENANT_NAME:-service}
      
      function get_id () {
       echo `$@ | awk '/ id / { print $4 }'`
      }
      
      # Tenants
      ADMIN_TENANT=$(get_id keystone tenant-create --name=admin)
      SERVICE_TENANT=$(get_id keystone tenant-create --name=$SERVICE_TENANT_NAME)
      
      # Users
      ADMIN_USER=$(get_id keystone user-create --name=admin \
        --pass="$ADMIN_PASSWORD" \
        --email=admin@domain.name)
      
      # Roles
      ADMIN_ROLE=$(get_id keystone role-create --name=admin)
      KEYSTONEADMIN_ROLE=$(get_id keystone role-create --name=KeystoneAdmin)
      KEYSTONESERVICE_ROLE=$(get_id keystone role-create --name=KeystoneServiceAdmin)
      # ANOTHER_ROLE demonstrates that an arbitrary role may be created and used
      # TODO(sleepsonthefloor): show how this can be used for rbac in the future!
      ANOTHER_ROLE=$(get_id keystone role-create --name=anotherrole)
      
      # Add Roles to Users in Tenants
      keystone user-role-add --user $ADMIN_USER --role $ADMIN_ROLE --tenant_id $ADMIN_TENANT
      
      # TODO(termie): these two might be dubious
      keystone user-role-add --user $ADMIN_USER --role $KEYSTONEADMIN_ROLE --tenant_id $ADMIN_TENANT
      keystone user-role-add --user $ADMIN_USER --role $KEYSTONESERVICE_ROLE --tenant_id $ADMIN_TENANT
      
      # The Member role is used by Horizon and Swift so we need to keep it:
      MEMBER_ROLE=$(get_id keystone role-create --name=Member)
      
      # Configure service users/roles: Nova
      echo "Create user for Nova service"
      NOVA_USER=$(get_id keystone user-create --name=nova \
       --pass="$SERVICE_PASSWORD" \
       --tenant_id $SERVICE_TENANT \
       --email=nova@domain.name)
      keystone user-role-add --tenant_id $SERVICE_TENANT \
        --user $NOVA_USER \
        --role $ADMIN_ROLE
      
      # Configure service users/roles: Glance
      echo "Create user for Glance service"
      GLANCE_USER=$(get_id keystone user-create --name=glance \
      --pass="$SERVICE_PASSWORD" \
      --tenant_id $SERVICE_TENANT \
      --email=glance@domain.name)
      keystone user-role-add --tenant_id $SERVICE_TENANT \
        --user $GLANCE_USER \
        --role $ADMIN_ROLE
      
      # Configure service users/roles: Neutron
      echo "Create user for Neutron service"
      NEUTRON_USER=$(get_id keystone user-create --name=neutron \
      --pass="$SERVICE_PASSWORD" \
      --tenant_id $SERVICE_TENANT \
      --email=neutron@domain.name)
      keystone user-role-add --tenant_id $SERVICE_TENANT \
        --user $NEUTRON_USER \
        --role $ADMIN_ROLE
      
      # Nova needs ResellerAdmin role to download images when accessing
      # swift through the s3 api. The admin role in swift allows a user
      # to act as an admin for their tenant, but ResellerAdmin is needed
      # for a user to act as any tenant. The name of this role is also
      # configurable in swift-proxy.conf
      RESELLER_ROLE=$(get_id keystone role-create --name=ResellerAdmin)
      keystone user-role-add --tenant_id $SERVICE_TENANT \
       --user $NOVA_USER \
       --role $RESELLER_ROLE
    2. 在 Keystone 上註冊 Keystone 自己這個服務,供日後其他 OpenStack 元件尋找 Identity 服務時可以知道該去哪裡存取。
      keystone service-create --name=keystone --type=identity --description="OpenStack Identity"
      keystone endpoint-create --service-id=$(keystone service-list | awk '/ identity / {print $2}') --publicurl=http://controller:5000/v2.0 --internalurl=http://controller:5000/v2.0 --adminurl=http://controller:35357/v2.0
    OpenStack Image Service
    相關官方文件可參考:OpenStack Image ServiceInstall and configure
    元件說明:
    glance-api
    Accepts Image API calls for image discovery, retrieval, and storage.
    glance-registry
    Stores, processes, and retrieves metadata about images. Metadata includes items such as size and type.
    安裝 Glance 服務
    1. 安裝 Glance 套件。
      apt-get install glance python-glanceclient
    2. 編輯 /etc/glance/glance-api.conf:
      (1) 設定 Glance 的資料庫連線。此處以 Glance 存取 MariaDB 的帳號是 opglance、密碼是 glance、連線位址是 controller、資料庫名稱是 glance。
      (2) 依據前面 Message Service 設定的資料,編輯 Glance 存取 RabbitMQ 的相關設定。
      (3) 設定 Glance 存取 Keystone 的方法。
      (4) 設定 Glance 儲存映像檔的方法(設定為存在本機的磁碟)。
      [DEFAULT]
      ...
      rpc_backend = rabbit
      rabbit_host = controller
      rabbit_port = 5672
      rabbit_use_ssl = false
      rabbit_userid = opglance
      rabbit_password = glance
      rabbit_virtual_host = openstack
      
      [database]
      connection = mysql://opglance:glance@controller/glance
      
      [keystone_authtoken]
      auth_uri = http://controller:5000/v2.0
      identity_uri = http://controller:35357
      admin_tenant_name = service
      admin_user = glance
      admin_password = qwer
      
      [paste_deploy]
      ...
      flavor = keystone
    3. 編輯 /etc/glance/glance-registry.conf,設定 Glance 內部服務的相關資訊。
      [database]
      connection = mysql://opglance:glance@controller/glance
      
      [keystone_authtoken]
      auth_uri = http://controller:5000/v2.0
      identity_uri = http://controller:35357
      admin_tenant_name = service
      admin_user = glance
      admin_password = qwer
      
      [paste_deploy]
      ...
      flavor = keystone
      
      [glance_store]
      default_store = file
      filesystem_store_datadir = /var/lib/glance/images/
    4. 刪除安裝套件自動建立的 SQLite 資料庫檔,避免 Glance 誤用。
      rm -f /var/lib/glance/glance.sqlite
    5. 同步 Glance 資料庫結構至 MariaDB。
      su -s /bin/sh -c "glance-manage db_sync" glance
    6. 在 Keystone 節點上註冊映像檔服務,並設定對應的服務位置。
      keystone service-create --name=glance --type=image --description="OpenStack Image Service"
      keystone endpoint-create --service-id=$(keystone service-list | awk '/ image / {print $2}') --publicurl=http://image:9292 --internalurl=http://image:9292 --adminurl=http://image:9292 
    7. 重新啟動 Glance 服務
      service glance-registry restart && service glance-api restart
    8. 驗證 Glance 服務的方法為執行 glance image-list 指令,即要求 Glance 服務印出映像檔清單。正常執行的話,此時應會回覆 "The service catalog is empty."。
    OpenStack 運算管理服務:Nova Management Service
    安裝 Nova Management
    相關官方文件參考:Add the Compute service
    1. 安裝 OpenStack Nova 相關套件
      apt-get install nova-api nova-cert nova-conductor nova-consoleauth nova-novncproxy nova-scheduler python-novaclient
    2. 編輯 /etc/nova/nova.conf:
      (1) 設定資料庫連線資訊。假設 Nova 存取 MariaDB 的帳號是 nova、密碼是 qwer、連線位址是 controller、資料庫名稱是 nova。
      (2) 依據前面 Message Service 設定的資料,編輯 Nova Management 存取 RabbitMQ 的相關設定。
      (3) 設定跟 Controller Node 連接的管理介面 IP(這裡因為 Nova 管理服務本來就裝在 Controller 上,因此就直接使用 Controller 用來連接 Administrative Network 的網卡 IP "192.168.18.1")。
      [DEFAULT]
      # Message service
      rpc_backend = rabbit
      rabbit_host = controller
      rabbit_port = 5672
      rabbit_use_ssl = false
      rabbit_userid = opnova
      rabbit_password = nova
      rabbit_virtual_host = openstack
      
      # Address of management network
      my_ip = 192.168.18.1
      
      # Address of management network for VNC proxy
      vncserver_listen = 192.168.18.1
      vncserver_proxyclient_address = 192.168.18.1
      
      # Authentication
      auth_strategy = keystone
      
      [database]
      connection = mysql://opnova:nova@controller/nova
      
      [keystone_authtoken]
      auth_uri = http://controller:5000/v2.0
      identity_uri = http://controller:35357
      admin_tenant_name = service
      admin_user = nova
      admin_password = qwer
      
      [glance]
      host = controller
       
    3. 刪除安裝程序自動建立的 SQLite 資料庫,防止 Nova 誤用。
      rm -f /var/lib/nova/nova.sqlite
    4. 同步 Nova 的資料庫結構
      su -s /bin/sh -c "nova-manage db sync" nova
    5. 在 Identity Service 上註冊 Compute
      keystone service-create --name nova --type compute --description "OpenStack Compute"
      keystone endpoint-create --service-id $(keystone service-list | awk '/ compute / {print $2}') --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
    6. 重新啟動 Compute Management 服務
      service nova-api restart && service nova-cert restart && service nova-consoleauth restart && service nova-scheduler restart && service nova-conductor restart && service nova-novncproxy restart
    OpenStack 網路管理服務:Neutron Management Service
    相關官方文件參考:Neutron Controller Node
    安裝 Neutron Management
    1. 安裝 Neutron 套件。
      apt-get install neutron-server neutron-plugin-ml2 python-neutronclient
    2. 編輯 /etc/neutron/neutron.conf 設定檔:
      (1) 設定資料庫連線資訊。假設 Neutron 存取 MariaDB 的帳號是 opneutron、密碼是 qwer、連線位址是 controller、資料庫名稱是 neutron。
      (2) 依據前面 Message Service 設定的資料,編輯 Nova Management 存取 RabbitMQ 的相關設定。
      (3) 設定網路拓樸變更時的通知以及其他需要的套件。
      [DEFAULT]
      ...
      rpc_backend = rabbit
      rabbit_host = controller
      rabbit_port = 5672
      rabbit_use_ssl = false
      rabbit_userid = opneutron
      rabbit_password = neutron
      rabbit_virtual_host = openstack
      
      # Authentication
      auth_strategy = keystone
      
      # Enable the Modular Layer 2 (ML2) plug-in, router service, and overlapping IP addresses
      core_plugin = ml2
      service_plugins = router
      allow_overlapping_ips = True
      
      # Configure Networking to notify Compute of network topology changes
      notify_nova_on_port_status_changes = True
      notify_nova_on_port_data_changes = True
      nova_url = http://controller:8774/v2
      nova_admin_auth_url = http://controller:35357/v2.0
      nova_region_name = regionOne
      nova_admin_username = nova
      nova_admin_tenant_id = SERVICE_TENANT_ID
      nova_admin_password = qwer
      
      [database]
      connection = mysql://opneutron:qwer@controller/neutron
      
      [keystone_authtoken]
      auth_uri = http://controller:5000/v2.0
      identity_uri = http://controller:35357
      admin_tenant_name = service
      admin_user = neutron
      admin_password = qwer
    3. 編輯 /etc/neutron/plugins/ml2/ml2_conf.ini 以設定 Modular Layer 2 plug-in,以透過 Open vSwitch (OVS) 建立虛擬網路。然而需要注意的是,Controller Node 並不需要安裝 OVS 套件,因為實際提供網路服務、處理網路流量的節點為 Network Node:
      (1) 設定 Neutron 使用 flat 與 generic routing encapsulation (GRE) 型態提供網路服務。
      (2) 以 Open vSwitch 套件作為提供網路服務的驅動程式。
      (3) 啟用 security group 以及 OVS 提供的 iptables 防火牆等。
      [ml2]
      ...
      type_drivers = flat,gre
      tenant_network_types = gre
      mechanism_drivers = openvswitch
      
      [ml2_type_gre]
      ...
      tunnel_id_ranges = 1:1000
      
      [securitygroup]
      ...
      enable_security_group = True
      enable_ipset = True
      firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
    4. 在 Keystone 上建立 Neutron 的服務。
      keystone service-create --name neutron --type network --description "OpenStack Networking"
      keystone endpoint-create --service-id $(keystone service-list | awk '/ network / {print $2}') --publicurl http://controller:9696 --adminurl http://controller:9696 --internalurl http://controller:9696 --region regionOne
    5. 編輯/etc/nova/nova.conf:
      (1) 預設的網路是使用Compute中的網路設定,因此要變更預設的網路是使用Compute中的網路設定,因此要變更 Nova Management 的設定,將網路變更為 Neutron。
      (2) 預設中Compute使用內部防火牆,若要使用 Neutron 的防火牆則必須關掉預設的。
      (3) 設定讓 Nova Management 存取 Neutron 資料庫的方法。(4) 產生一組金鑰字串,並置換下述的 METADATA_SECRET 作為 Neutron 與 Nova 間共享的 proxy secret。
      [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 = qwer
      
      # Metadata proxy and secret
      service_metadata_proxy = True
      metadata_proxy_shared_secret = METADATA_SECRET
    6. 同步 Neutron 資料庫結構至 MariaDB。
      su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade juno" neutron
    7. 重新啟動 Nova Management 及 Neutron Management。
      service nova-api restart && service nova-scheduler restart && service nova-conductor restart && service neutron-server restart
    參考資料:
    1、OpenStack Installation Guide for Ubuntu 14.04
    2、Ubuntu 12.04 Openstack Essex 安装(单节点)

    沒有留言: