美文网首页
玩转OpenStack(三)架构、安装、screen

玩转OpenStack(三)架构、安装、screen

作者: 河码匠 | 来源:发表于2019-02-24 09:16 被阅读0次

    终于开始 OpenStack 的介绍了。
    本节将介绍 OpenStack 架构和安装。模块的详细功能将在后面的小节中介绍。

    一、概念架构(Conceptual Architecture)

    概念架构

    1. 核心模块说明

    • Nova: 管理计算资源,管理虚拟机的生命周期

    • Neutron:管理网络资源,负责创建和管理 L2,L3 网络,为虚拟机提供虚拟网络和物理网络

    • Glance:管理虚拟机的启动镜像,Nova 创建虚拟机时将使用 Glance 提供的镜像

    • Cinder:为虚拟机提供块存储服务,Cinder 提供虚拟机的虚拟硬盘,一般作为数据盘

    • Keystone:为各种服务提供认证和权限管理服务。OpenStack 的每个操作必须通过 Keystone 的审核

    2. 可选服务

    • Swift:对象存储服务

    • Ceilometer:提供 OpenStack 监控和计量服务,为报警、统计或计费提供数据

    • Horzon:Web 操作页面

    • Ironic:是一个进行裸机部署安装的模块,可以很方便的对指定的一台或多台裸机,执行硬盘 RAID、分区和格式化;安装操作系统、驱动程序;安装应用程序的操作

    • Trove:为用户提供的数据库即服务 (DBaaS)

    • Heat:Heat 是 OpenStack 提供的自动编排功能的组件,基于描述性的模板,来编排复合云应用程序。

    • Sahara:为用户提供简单部署 Hadoop 集群的能力,比如通过简单的配置:Hadoop 版本、集群结构、节点硬件信息等。在用户提供了这些参数后,Sahara 迅速把 Hadoop 集群部署起来。同时也支持集群的扩容和减容。

    二、 逻辑架构(Logical Architecture)

    逻辑架构

    在逻辑架构中可以看到每个服务由若干个组件组成。每个组件的详细信息后面的章节会逐个介绍。

    三、安装OpenStack

    我使用的是 OpenStack 的 DevStack 进行开发环境的部署。
    DevStack 有丰富的选项让我们能够灵活的选择和部署想要的 OpenStack 服务。

    1. 部署拓扑

    • 控制节点(Controller Node)

    管理 OpenStack,运行的服务有 Keystone、Glance、Horizon、Nove 和 Neutron 中管理相关的组件。
    运行支持 OpenStack 的服务,如:数据库(MySQL)、消息队列(RabbitMQ)和网络时间服务 NTP。

    • 网络节点(Network Node)

    运行的服务为 Neutron 为 OpenStack 提供 L2 和 L3 网络。包含虚拟机网络、DHCP、路由、NAT 等。

    逻辑上,OpenStack 至少包括下面几类网络:

    • Management 网络
      用于节点之间的 message queue 内部通信以及访问 database 服务,所有的节点都需要连接到 management 网络。

    • API 网络
      OpenStack 各组见通过该网络向用户暴露 API 服务。Keystone、Nova、Neutron、Glance、Cinder、Horizon 的 Endpoint 均配置在 API 网络上。

    • VM 网络
      VM 网络也叫 Tenant 网络,用于 Instance 之间通讯。VM 网络可以选择的类型包括 local、flat、vlan、vxlan 和 gre。VM 网络由 Neutron 配置和管理。

    • External 网络
      External 网络指的是 VM 网络之外的网络,该网络不由 Neutron 管理。Neutron 可以将 router 连接到 External 网络,为 Instance 提供可以访问外部网络的能力。

    这几类网络只是逻辑上的划分,物理实现上可以有非常大的自由度。我可以为每个网络分配单独的网卡,也可以多种网络使用一个网卡。

    • 存储节点 (Storage Node)

    提供块存储(Cinder)或对象存储(Swift)服务。

    • 计算节点(Compute Node)

    运行 Hypervisor (默认使用KVM)服务。同时运行 Neuron 服务的 agent,为虚拟机提供网络支持。

    以上节点是从功能上进行的逻辑划分,在实际中可以根据需求配置。

    2. 开发环境

    • 两台虚拟机

    • devstack-controller:控制节点 + 网络节点 + 块存储节点 + 计算节点

    • devstack-compute:计算节点

    拓扑图如下:


    开发环境拓扑图
    • 虚拟机配置

    • devstack-controller:
      CPU 1~2
      Memory 8 GB
      Disk 100 GB
      NIC 3
      System Ubuntu-16.04

    • devstack-compute:
      CPU 2~4+
      Memory 8+ GB
      Disk 100+ GB
      NIC 2
      System Ubuntu-16.04

    • 网络规划

    • devstack-controller:
      eth0:内部管理,如服务之间的通信问题。可以和外部网络共用一个。
      eth1:部署的虚拟机所使用的网络。内部私有网络(Tenant Network)。
      eth2:外部网络(External Network)。

    • devstack-compute:
      eth0:内部管理用的管理网络。
      eth1:部署虚拟机使用的网络。

    • 虚拟机网卡配置信息如下

    • devstack-controller:
      /etc/network/interfaces 配置文件

    root@controller:~# vim /etc/network/interfaces
    # This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5).
    
    source /etc/network/interfaces.d/*
    
    # The loopback network interface
    auto lo
    iface lo inet loopback
    
    # The primary network interface
    auto ens35
    iface ens35 inet static
         address 172.16.245.138
         netmask 255.255.255.0
         gateway 172.16.245.2
    dns-nameservers 172.16.245.2
    
    auto ens33
    iface ens33 inet manual
    
    auto ens34
    iface ens34 inet manual
    

    网卡信息

    root@controller:~# ifconfig
    ens33     Link encap:Ethernet  HWaddr 00:0c:29:45:54:1b
              inet6 addr: fe80::20c:29ff:fe45:541b/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:45867 errors:0 dropped:0 overruns:0 frame:0
              TX packets:119 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:2758193 (2.7 MB)  TX bytes:10194 (10.1 KB)
              Interrupt:19 Base address:0x2000
    
    ens34     Link encap:Ethernet  HWaddr 00:0c:29:45:54:25
              inet6 addr: fe80::20c:29ff:fe45:5425/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 B)  TX bytes:1048 (1.0 KB)
              Interrupt:16 Base address:0x2080
    
    ens35     Link encap:Ethernet  HWaddr 00:0c:29:45:54:2f
              inet addr:172.16.245.138  Bcast:172.16.245.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe45:542f/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:719810 errors:122 dropped:4 overruns:0 frame:0
              TX packets:414852 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:1022413200 (1.0 GB)  TX bytes:30446706 (30.4 MB)
              Interrupt:17 Base address:0x2400
    
    • devstack-compute:
      /etc/network/interfaces 配置文件
    root@compute:~# vim /etc/network/interfaces
    # This file describes the network interfaces available on your system
    # and how to activate them. For more information, see interfaces(5).
    
    source /etc/network/interfaces.d/*
    
    # The loopback network interface
    auto lo
    iface lo inet loopback
    
    # The primary network interface
    auto ens33
    iface ens33 inet static
         address 172.16.245.140
         netmask 255.255.255.0
         gateway 172.16.245.2
    dns-nameservers 172.16.245.2
    
    auto ens34
    iface ens34 inet manual
    

    网卡信息

    root@compute:~# ifconfig
    ens33     Link encap:Ethernet  HWaddr 00:0c:29:cd:cf:60
              inet addr:172.16.245.140  Bcast:172.16.245.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fecd:cf60/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:201970 errors:81 dropped:81 overruns:0 frame:0
              TX packets:105843 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:291109470 (291.1 MB)  TX bytes:6866198 (6.8 MB)
              Interrupt:19 Base address:0x2000
    
    ens34     Link encap:Ethernet  HWaddr 00:0c:29:cd:cf:6a
              inet6 addr: fe80::20c:29ff:fecd:cf6a/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 B)  TX bytes:648 (648.0 B)
              Interrupt:16 Base address:0x2080
    

    3. 开始安装

    • 更新 apt-get
    # apt-get update
    # apt-get upgrade
    

    \color{red}{注意}apt-get的源建议不要修改,虽然会很慢。有些源内容不完整,会有很多错误哦。
    以下源我使用安装的目前没有报错。/etc/apt/sources.list

    deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
    
    • 安装并且更新 pip
    # apt-get install python-pip
    # pip install --upgrade pip
    # pip install -U os-testr
    

    \color{red}{注意}:如果pip版本很旧的话在安装 DevStack 时会报错

    • 设定时区

    设定时区: Asia -> Shanghai -> OK

    # dpkg-reconfigure tzdata
    
    • 同步时间

    安装时间同步工具 ntpdate

    # apt-get install ntpdate
    

    与网络服务器同步时间

    # ntpdate cn.pool.ntp.org
    

    查看是否成功

    # date
    
    • 安装 git
    # apt-get install git
    
    • 创建stack用户并设置权限
    # sudo useradd -s /bin/bash -d /opt/stack -m stack
    # echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
    

    \color{red}{注意}:因为stack账户会修改系统的权限,所以要给一个高级权限。

    • 进入 stack 账户
    # su - stack
    
    • 下载 devstack

    为了方便将 devstack 放在 /opt/stack/ 目录下

    # cd /opt/stack
    # git clone https://github.com/openstack-dev/devstack -b stable/ocata
    

    devstack 有很多分支,可以去这里 https://git.openstack.org/cgit/openstack-dev/devstack 查看

    • 配置 Devstack 编辑 local.conf 文件
    • devstack-controller
      目录:/opt/stack/devstack/local.conf
      内容如下:
      HOST_IP 为控制节点内部管理IP;
      # Credentials 相关服务的密码
      # Branches 是安装的版本(也就是分支名);

    [[local|localrc]]
    MULTI_HOST=true
    GIT_BASE=http://git.trystack.cn
    # management & api network
    HOST_IP=172.16.245.138
    LOGFILE=/opt/stack/logs/stack.sh.log
    # Credentials
    ADMIN_PASSWORD=admin
    MYSQL_PASSWORD=admin
    RABBIT_PASSWORD=admin
    SERVICE_PASSWORD=admin
    SERVICE_TOKEN=abcdefghijklmnopqrstuvwxyz
    # enable neutron-ml2-vlan
    disable_service n-net
    enable_service q-svc,q-agt,q-dhcp,q-l3,q-meta,neutron,q-lbaas,q-fwaas,q-vpn
    
    enable_plugin neutron-fwaas http://git.trystack.cn/openstack/neutron-fwaas.git
    enable_plugin neutron-fwaas-dashboard http://git.trystack.cn/openstack/neutron-fwaas-dashboard.git
    enable_plugin neutron-lbaas http://git.trystack.cn/openstack/neutron-lbaas.git
    enable_plugin neutron-lbaas-dashboard http://git.trystack.cn/openstack/neutron-lbaas-dashboard.git
    
    Q_AGENT=linuxbridge
    ENABLE_TENANT_VLANS=True
    TENANT_VLAN_RANGE=3001:4000
    PHYSICAL_NETWORK=default
    LOG_COLOR=True
    LOGDIR=$DEST/logs
    SCREEN_LOGDIR=$LOGDIR/screen
    # Branches
    # KEYSTONE_BRANCH=stable/ocata
    # NOVA_BRANCH=stable/ocata
    # NEUTRON_BRANCH=stable/ocata
    # SWIFT_BRANCH=stable/ocata
    # GLANCE_BRANCH=stable/ocata
    # CINDER_BRANCH=stable/ocat
    

    enable_service 服务介绍

    服务 介绍
    q-agt Core Agent,包括 Linux Bridge Agent 和 Open vSwitch Agent
    q-dhcp dhcp agent
    q-l3 L3 Agent 提供 routing 服务
    q-meta Neutron Metadata Agent
    q-lbaas Load Balance Agent
    q-fwaas Firewall 服务
    q-vpn VPN Agent 提供 VPN as a Service
    • devstack-compute
      目录:/opt/stack/devstack/local.conf
      内容如下:
      HOST_IP 为计算节点内部管理IP;
      # Credentials 相关服务的密码
      SERVICE_HOST 为控制节点IP;
      # Branches是安装的版本(也就是分支名);
      # vnc config 为vnc 配置信息;
    [[local|localrc]]
    MULTI_HOST=true
    GIT_BASE=http://git.trystack.cn
    # management & api network
    HOST_IP=172.16.245.140
    # Credentials
    ADMIN_PASSWORD=admin
    MYSQL_PASSWORD=admin
    RABBIT_PASSWORD=admin
    SERVICE_PASSWORD=admin
    SERVICE_TOKEN=abcdefghijklmnopqrstuvwxyz
    # Service information
    SERVICE_HOST=172.16.245.138
    MYSQL_HOST=$SERVICE_HOST
    RABBIT_HOST=$SERVICE_HOST
    GLANCE_HOSTPORT=$SERVICE_HOST:9292
    Q_HOST=$SERVICE_HOST
    KEYSTONE_AUTH_HOST=$SERVICE_HOST
    KEYSTONE_SERVICE_HOST=$SERVICE_HOST
    CEILOMETER_BACKEND=mongodb
    DATABASE_TYPE=mysql
    ENABLED_SERVICES=n-cpu,q-agt,neutron
    Q_AGENT=linuxbridge
    ENABLE_TENANT_VLANS=True
    TENANT_VLAN_RANGE=3001:4000
    PHYSICAL_NETWORK=default
    # vnc config
    NOVA_VNC_ENABLED=True
    NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"
    VNCSERVER_LISTEN=$HOST_IP
    VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN
    LOG_COLOR=True
    LOGDIR=$DEST/logs
    SCREEN_LOGDIR=$LOGDIR/screen
    # Branches
    # KEYSTONE_BRANCH=stable/ocata
    # NOVA_BRANCH=stable/ocata
    # NEUTRON_BRANCH=stable/ocata
    # SWIFT_BRANCH=stable/ocata
    # GLANCE_BRANCH=stable/ocata
    # CINDER_BRANCH=stable/ocata
    # use TryStack git mirror
    GIT_BASE=http://git.trystack.cn
    
    • 可以使用国内源安装 OpenStack

    [[local|localrc]] 添加下面代码即可,国内源

    GIT_BASE=http://git.trystack.cn
    

    \color{red}{注意}: 国内源存在同步滞后,可能包不兼容或者下载某些包失败问题,出现这种情况时只需要重新替换原来的镜像源,然后重新运行 ./stack.sh 即可。

    • 部署其它 OpenStack 服务

    使用 enable_plugin plugin_name [code repo] [branch] 即可如下

    enable_plugin neutron-fwaas http://git.trystack.cn/openstack/neutron-fwaas.git
    enable_plugin neutron-fwaas-dashboard http://git.trystack.cn/openstack/neutron-fwaas-dashboard.git
    enable_plugin neutron-lbaas http://git.trystack.cn/openstack/neutron-lbaas.git
    enable_plugin neutron-lbaas-dashboard http://git.trystack.cn/openstack/neutron-lbaas-dashboard.git
    

    配置安装防火墙和负载均衡服务。

    • 开始安装
    # /opt/stack/devstack/stack.sh
    

    时间超长等待即可。如果提示time out重新执行就可以;

    安装成功后,如果重启系统,需要手动启动OpenStack

    # su stack
    # screen -c stack-screenrc
    

    关于 screen 后面有介绍。

    • 控制节点安装成功返回如下信息:


    • 计算节点安装成功返回如下信息:


    系统信息 系统信息
    • 删除测试网络

    在部署完成时会自动创建几个测试网络,为了一个干净的环境删掉即可
    Admin -> 系统 -> 路由
    Admin -> 系统 -> 网络
    把这两个里面的内容删掉,就可以得到一个干净的环境了。

    三、可能遇到的错误

    • 执行./stack.sh1. If you wish to run this script anyway run with FORCE=yes

    # FORCE=yes ./stack.sh
    
    • 在执行安装前一定要把 pip 升级,升级可能遇到的错误如下

    Traceback (most recent call last):
      File "/usr/bin/pip", line 9, in <module>
        from pip import main
    ImportError: cannot import name main
    

    删除 /usr/bin/pip, 然后重新软连ln -s /usr/local/bin/pip /usr/bin/pip;
    \color{red}{注意} :这个操作切换到root用户下执行。

    • 错误 Unable to locate package libsystemd-dev

    ubuntu 16.04

    # apt-get install libsystemd-dev
    

    ubuntu 14.04

    # apt-get install libsystemd-daemon-dev
    
    • 加载不到模块 openstack_auth

    ImportError: No module named openstack_auth
    

    解决办法:
    进入 root 用户下,卸载 openstack_auth pip uninstall django_openstack_auth
    然后升级 pip 到最新,我目前是 19.X。然后再用最新的 pip 重新安装 pip install django_openstack_auth 然后就可以了。
    蛋疼啊~~

    • 执行过程中需要重新执行

    如果安装过程中某个包提示找不到,则需要重新执行 ./stack.sh(如果有其他问题则需要先 ./unstack.sh)。在整个 devstack 安装过程中会有很多次重新执行 ./stack.sh

    • 安装过程 pip 报错 from pip._internal import main

    修改/opt/stack/.local/bin/pip2.7

    将 from pip._internal import main
    改 from pip import main
    
    • 安装计算节点时报错 Didn't find service registered by hostname after 120 seconds

    在计算节点的 local.conf 中添加placement-api.。如下

    ENABLED_SERVICES=n-cpu,q-agt,neutron,placement-api
    或者直接
    enable_service placement-api
    
    • 在创建 Instance 时使用 cirros 测试镜像报错,计算节点找不到硬盘。

    Booting from Hard Disk...GRUB
    

    修改计算节点 /etc/nova/nova.confvirt_type=kvm 改为 virt_type=qemu 重启 nova 服务即可

    • 在创建 Instance 时使用 cirros 测试镜像报错,cpu x86-64错误时

    This kernel requires an x86-64 CPU, but only detected an i686 CPU.
    Unable to boot - please use a kernel appropriate for your CPU.
    

    因为当前计算节点的操作系统不是 x86-64 的系统。所以不能跑 x86-64 的镜像。

    四、screen工具的使用

    1. 查看

    stack@controller:~/devstack$ screen -ls
    There is a screen on:
        16041.stack (Saturday, February 23, 2019 06:56:47 CST)  (Detached)
    1 Socket in /var/run/screen/S-stack.
    

    2. 进入

    stack@controller:~/devstack$ screen -x 16041
    

    screen -x stack 进入

    可以看见 Terminal 最下方有一串白色的字符串,其中的每一个数字对应一个子 screen 也就是一个 Openstack services 。 下图:


    3. 退出 ctrl + a + d

    4. 切换子screen

    • ctrl + a + p:切换到上一个 screen
    • ctrl + a + n:切换到下一个 screen
    • ctrl + a + a:返回上一个 screen
    • ctrl + a + 等一秒 + shift + '(单引号): 显示所有的子 screen 的列表
    • ctrl + a + 数字: 切换到数字所对应的子screen中,当需切换至10以上的子
    • ctrl+a+'(单引号) 切换10以上时使用, 屏幕下出现 Switch to window: + 数字
    • ctrl + a + ?:帮助,同样 ctrl+a 按一会儿松开后在按 shift + ?
    • ctrl + [:开始滚动模式 ,然后可以使用上下左右键滚屏
    • ctrl + ]:退出滚动模式

    5. 第一次出现问题 Cannot open your terminal '/dev/pts/0' - please check.

    # script /dev/null  
    

    5. 退出和重启任务

    • ctrl + c:终止一个 screen
    • 进入希望 Restart 的 Openstack Services 的 screen 中,然后输入 ctrl + c 结束这个进程,输入 并重新执行上一条指令。

    以上就是本节全部内容。
    下一节将介绍 Keystone、Glance 模块

    相关文章

      网友评论

          本文标题:玩转OpenStack(三)架构、安装、screen

          本文链接:https://www.haomeiwen.com/subject/knxpyqtx.html