ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenStack Mitaka 从零搭建:认证、镜像、计算、网络与面板部署

OpenStack Mitaka 从零搭建:认证、镜像、计算、网络与面板部署 目录系统初始化准备工作控制节点环境部署消息队列memcache认证服务创建服务实体和API端点创建三类 EndpointAPI 访问端点创建域、项目、用户和角色创建 admin 管理项目验证操作加载 admin 环境脚本并测试安装和配置镜像服务下载镜像服务包计算服务节点安装和配置计算节点Networking 服务选择公共网络安装并控制计算节点验证操作云主机前置资源准备换镜像创建云主机实例dashboard参考网址https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/environment-packages.html系统初始化准备工作OpenStack Mitaka 集群部署前期网络环境准备步骤完成节点网卡静态模式配置 集群节点主机名互通保证 controller 控制节点、compute 计算节点、block 存储节点之间网络稳定通信为后续认证、镜像、计算等服务搭建打好基础。windows关闭虚拟机平台点击编辑虚拟机设置将内存大小设为4GB添加新的网卡选择NAT模式点击处理器勾选虚拟化Intel启动虚拟机有的windows默认设置会使服务器无法成功启动解决方法WinR输入optionalfeatures回车打开【启用或关闭 Windows 功能】下图红框中的内容取消勾选此时点击确认会提醒你重启windows重启完成后在启动虚拟机即可顺利启动修改网卡vim /boot/grub2/grub.cfg重启生效关闭NetworkMangersystemctl disable --now NetworkManagercd /etc/sysconfig/network-scripts/vim ifcfg-eth0拷贝一份vim ifcfg-eth1重启网络服务使配置生效systemctl restart network添加解析vim /etc/hosts192.168.73.178 controllerIP 为 192.168.73.178 的节点主机名是controller控制节点OpenStack 核心管理节点192.168.73.179 compute1compute1是计算节点负责创建、运行云主机实例192.168.73.180 block1block1是块存储节点负责云硬盘存储控制节点环境部署本节属于 Mitaka 控制节点基础环境部署搭建离线 Yum 源、安装配置 MariaDBOpenStack 所有组件的元数据都会存入该数据库。解压 mitaka 离线 yum 源压缩包到/opt/目录后续本地 yum 仓库直接读取这个目录里的 rpm 包不需要联网。[rootcontroller ~]# tar xf mitaka.tar -C /opt/升级系统已有软件包如果本次升级更新了内核需要重启服务器加载新内核避免后续依赖异常。[rootcontroller ~]# yum upgrade创建 mitaka 本地离线 yum 源[rootcontroller ~]# cat /etc/yum.repos.d/mitaka-local.repo EOF [mitaka-local] nameMitaka Local Offline Repo baseurlfile:///opt/mitaka enabled1 gpgcheck0 EOF清理旧yum缓存生成新缓存[rootcontroller ~]# yum clean all yum makecache安装 OpenStack 通用命令行客户端后续所有 openstack 资源操作都可以用这条命令执行。[rootcontroller ~]# yum install python-openstackclient安装 MariaDB 数据库与 python 数据库驱动[rootcontroller ~]# yum install mariadb mariadb-server python2-PyMySQL数据库配置文件 /etc/my.cnf.d/openstack.cnf[rootcontroller ~]# vim /etc/my.cnf.d/openstack.cnf启动并设置 MariaDB 开机自启[rootcontroller ~]# systemctl enable --now mariadb.serviceMariaDB 安全初始化[rootcontroller ~]# mysql_secure_installation消息队列OpenStack 各个组件之间大量异步通信依赖 RabbitMQ 消息队列比如 Nova、Glance、Neutron 之间通过它传递任务消息是控制节点核心基础组件。安装 rabbitmq-server[rootcontroller ~]# yum install rabbitmq-server[rootcontroller ~]# systemctl enable --now rabbitmq-server.service创建 openstack 专用账号并授权[rootcontroller ~]# rabbitmqctl add_user openstack openstack[rootcontroller ~]# rabbitmqctl set_permissions openstack .* .* .*rabbitmqctl add_user openstack openstack新增用户名openstack密码openstack后续 OpenStack 各组件连接队列就使用这个账号不使用默认 guest 账号。rabbitmqctl set_permissions openstack .* .* .*给 openstack 用户授予所有权限配置、写、读权限全部放开.*是正则表示匹配所有资源。开启 Web 管理插件重启服务验证端口[rootcontroller ~]# rabbitmq-plugins enable rabbitmq_management[rootcontroller ~]# systemctl restart rabbitmq-server[rootcontroller ~]# netstat -antlp |grep 15672tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 57008/beam.smp访问地址http://192.168.73.178:15672/memcacheMemcached 是 OpenStack 控制节点的分布式内存缓存服务主要用于 Keystone 认证服务的令牌Token缓存提升认证查询效率避免每次请求都查数据库。安装 memcached 及 Python 驱动[rootcontroller ~]# yum install memcached python-memcached[rootcontroller ~]# systemctl enable --now memcached.service[rootcontroller ~]# vim /etc/sysconfig/memcachedPORT11211Memcached 服务监听端口默认 11211USERmemcached运行 Memcached 服务的系统用户MAXCONN1024最大并发连接数CACHESIZE64缓存内存大小单位 MB这里分配 64MBOPTIONS关键配置监听所有网卡地址[rootcontroller ~]# systemctl restart memcached.service[rootcontroller ~]# netstat -antlp | grep 11211tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 57512/memcachedtcp6 0 0 :::11211 :::* LISTEN 57512/memcached认证服务Keystone 是 OpenStack 的核心认证授权服务负责用户、项目、角色管理以及令牌Token发放校验所有 OpenStack 组件都要通过 Keystone 完成身份认证。Mitaka 版本中 Keystone 基于 Apache httpd mod_wsgi 运行。创建 keystone 数据库与数据库账号并授权[rootcontroller ~]# mysql -u root -pMariaDB [(none)] CREATE DATABASE keystone;MariaDB [(none)] GRANT ALL PRIVILEGES ON keystone.* TO keystonelocalhost \- IDENTIFIED BY keystone;MariaDB [(none)] GRANT ALL PRIVILEGES ON keystone.* TO keystone% \- IDENTIFIED BY keystone;安装 Keystone 以及 Apache 相关包[rootcontroller ~]# yum install openstack-keystone httpd mod_wsgiopenssl rand -hex 10随机生成 10 字节十六进制字符串作为初始 admin_token用于 keystone 初始化阶段初始化完成后该 token 会被弃用。[rootcontroller ~]# openssl rand -hex 10f7d608ecb23666b930de[rootcontroller ~]# vim /etc/keystone/keystone.confadmin_token填入上面 openssl 生成的随机字符串初始化阶段认证用同步数据库表结构[rootcontroller ~]# su -s /bin/sh -c keystone-manage db_sync keystone以keystone系统用户执行keystone-manage db_sync自动在 keystone 库中生成所有数据表access_token、user、project、endpoint 等执行完后可以登录 mysql 验证表是否生成[rootcontroller ~]# mysql -u root -pMariaDB [(none)] use keystone;MariaDB [keystone] show tables;[rootcontroller ~]# yum install openstack-keystone httpd mod_wsgi配置 Fernet 密钥Mitaka 推荐的 token 加密方式替代旧的 UUID token[rootcontroller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone[rootcontroller ~]# vim /etc/httpd/conf/httpd.conf[rootcontroller ~]# vim /etc/httpd/conf.d/wsgi-keystone.conf[rootcontroller ~]# systemctl enable --now httpd.service创建服务实体和API端点本节作用在 Keystone 中注册identity 认证服务并创建三类访问端点public/internal/admin。 前置已经配置好OS_TOKEN临时管理令牌用来初始化 Keystone 资源。临时环境变量声明使用初始 admin_token 认证[rootcontroller ~]# export OS_TOKENf7d608ecb23666b930de[rootcontroller ~]# export OS_URLhttp://controller:35357/v3[rootcontroller ~]# export OS_IDENTITY_API_VERSION3创建 identity 服务实体[rootcontroller ~]# openstack service create \ --name keystone --description OpenStack Identity identity执行成功后会生成 service_id后续创建端点时会自动关联这个 ID创建三类 EndpointAPI 访问端点OpenStack 一个服务通常包含 3 种接口public外部用户访问端口 5000internal集群内部各组件互相调用端口 5000admin管理员操作接口端口 353571. public 公共端点[rootcontroller ~]# openstack endpoint create --region RegionOne \ identity public http://controller:5000/v32. internal 内部端点[rootcontroller ~]# openstack endpoint create --region RegionOne \ identity internal http://controller:5000/v33. admin 管理员端点[rootcontroller ~]# openstack endpoint create --region RegionOne \ identity admin http://controller:35357/v3创建域、项目、用户和角色Keystone v3 采用域 (domain) → 项目 (project) → 用户 (user) → 角色 (role)的权限模型。本节用来搭建实验环境三套基础资源管理员项目 admin、服务项目 service、普通 demo 项目。创建默认域 default[rootcontroller ~]# openstack domain create --description Default Domain default创建 admin 管理项目[rootcontroller ~]# openstack project create --domain default \ --description Admin Project admin--domain default归属 default 域admin管理员项目用于管理员操作云平台创建 admin管理 用户[rootcontroller ~]# openstack user create --domain default --password admin admin创建 admin 角色[rootcontroller ~]# openstack role create admin将 admin 角色授予 admin 用户admin 项目内[rootcontroller ~]# openstack role add --project admin --user admin admin创建 service 服务项目[rootcontroller ~]# openstack project create --domain default \ --description Service Project service创建 demo 项目[rootcontroller ~]# openstack project create --domain default \ --description Demo Project demo创建 demo普通用户[rootcontroller ~]# openstack user create --domain default \ --password-prompt demoUser Password:Repeat User Password:创建user普通角色[rootcontroller ~]# openstack role create user将角色添加到demo项目[rootcontroller ~]# openstack role add --project demo --user demo user验证操作本节目标废弃之前临时OS_TOKEN使用正式账号验证 Keystone 鉴权编写环境变量脚本openrc后续部署 Glance/Nova 等服务直接加载脚本认证。清除临时认证环境变量[rootcontroller ~]# unset OS_TOKEN OS_URL验证 admin 管理员账号获取 token[rootcontroller ~]# openstack --os-auth-url http://controller:35357/v3 \ --os-project-domain-name default --os-user-domain-name default \ --os-project-name admin --os-username admin token issuePassword:验证 demo 普通租户账号获取 token[rootcontroller ~]# openstack --os-auth-url http://controller:5000/v3 \ --os-project-domain-name default --os-user-domain-name default \ --os-project-name demo --os-username demo token issuePassword:编写 admin 管理员环境脚本[rootcontroller ~]# vim admin-openrc编写 demo普通用户环境脚本[rootcontroller ~]# vim demo-openrc加载 admin 环境脚本并测试[rootcontroller ~]# . admin-openrc[rootcontroller ~]# openstack token issue与前面 验证 admin 管理员账号获取 token 值相同安装和配置镜像服务Glance 是 OpenStack 镜像管理服务负责虚拟机镜像的注册、存储与分发监听 9292 端口。Mitaka 版本包含glance-api对外 APIglance-registry元数据管理两个组件。创建 glance 数据库并授权[rootcontroller ~]# mysql -u root -p MariaDB [(none)] GRANT ALL PRIVILEGES ON glance.* TO glancelocalhost IDENTIFIED BY glance; MariaDB [(none)] GRANT ALL PRIVILEGES ON glance.* TO glance% \ - IDENTIFIED BY glance;在 Keystone 创建 glance 服务账号[rootcontroller ~]# . admin-openrc[rootcontroller ~]# openstack user create --domain default --password-prompt glanceUser Password:Repeat User Password:给 glance 用户授予 service 项目的 admin 权限[rootcontroller ~]# openstack role add --project service --user glance admin注册 image 服务实体[rootcontroller ~]# openstack service create --name glance \ --description OpenStack Image image创建 glance 三类 API 端点public/internal/admin统一 9292 端口[rootcontroller ~]# openstack endpoint create --region RegionOne \ image public http://controller:9292[rootcontroller ~]# openstack endpoint create --region RegionOne \ image internal http://controller:9292[rootcontroller ~]# openstack endpoint create --region RegionOne \ image admin http://controller:9292安装 glance 软件包[rootcontroller ~]# yum install openstack-glance[rootcontroller ~]# vim /etc/glance/glance-api.conf[rootcontroller ~]# vim /etc/glance/glance-registry.conf同步数据库表结构[rootcontroller ~]# su -s /bin/sh -c glance-manage db_sync glance[rootcontroller ~]# systemctl enable openstack-glance-api.service \ openstack-glance-registry.service[rootcontroller ~]# systemctl start openstack-glance-api.service \ openstack-glance-registry.service下载镜像服务包后续这个镜像会因为版本问题无法成功运行虚拟机为了避免这个问题直接按照官网建议下载0.3.4版本如你下载错误版本后续也有换镜像的解决方法[rootcontroller ~]# wget http://download.cirros-cloud.net/0.6.0/cirros-0.6.0-x86_64-disk.img上传镜像到glance[rootcontroller ~]# openstack image create cirros --file cirros-0.6.0-x86_64-disk.img --disk-format qcow2 --container-format bare --public[rootcontroller ~]# openstack image list计算服务节点按照控制节点进行初始化添加网卡设为NAT模式开启虚拟服务修改网卡设置静态IP配置yum源拉取mitaka压缩包并解压值至/opt/下关闭防火墙设置时间同步新开compute1节点创建 nova_api 和 nova 数据库对数据库进行正确的授权[rootcontroller ~]# mysql -u root -pMariaDB [(none)] CREATE DATABASE nova_api;MariaDB [(none)] CREATE DATABASE nova;MariaDB [(none)] GRANT ALL PRIVILEGES ON nova_api.* TO novalocalhost \- IDENTIFIED BY nova;MariaDB [(none)] GRANT ALL PRIVILEGES ON nova_api.* TO nova% \- IDENTIFIED BY nova;MariaDB [(none)] GRANT ALL PRIVILEGES ON nova.* TO novalocalhost \- IDENTIFIED BY nova;MariaDB [(none)] GRANT ALL PRIVILEGES ON nova.* TO nova% \- IDENTIFIED BY nova;MariaDB [(none)] exit创建 nova 用户[rootcontroller ~]# openstack user create --domain default --password-prompt novanova 用户添加 admin 角色[rootcontroller ~]# openstack role add --project service --user nova admin创建 nova 服务实体[rootcontroller ~]# openstack service create --name nova \ --description OpenStack Compute compute创建 Compute 服务 API 端点 [rootcontroller ~]# openstack endpoint create --region RegionOne \ compute public http://controller:8774/v2.1/%\(tenant_id\)s[rootcontroller ~]# openstack endpoint create --region RegionOne \ compute internal http://controller:8774/v2.1/%\(tenant_id\)s[rootcontroller ~]# openstack endpoint create --region RegionOne \ compute admin http://controller:8774/v2.1/%\(tenant_id\)s控制节点安装 Nova 核心组件包[rootcontroller ~]# yum install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler[rootcontroller ~]# vim /etc/nova/nova.confnova-compute 启动后不会自动注册进 cellcontroller 执行下面命令发现主机[rootcontroller ~]# su -s /bin/sh -c nova-manage api_db sync nova[rootcontroller ~]# su -s /bin/sh -c nova-manage db sync nova忽略所有的警告信息[rootcontroller ~]# systemctl enable openstack-nova-api.service \ openstack-nova-consoleauth.service openstack-nova-scheduler.service \ openstack-nova-conductor.service openstack-nova-novncproxy.service[rootcontroller ~]# systemctl start openstack-nova-api.service \ openstack-nova-consoleauth.service openstack-nova-scheduler.service \ openstack-nova-conductor.service openstack-nova-novncproxy.service[rootcontroller ~]# openstack compute service list此时并没有nova就位下来配置compute1节点安装和配置计算节点安装 nova-compute 组件[rootcompute1 ~]# yum install openstack-nova-compute[rootcompute1 ~]# vim /etc/nova/nova.conf检测 CPU 硬件虚拟化支持[rootcompute1 ~]# egrep -c (vmx|svm) /proc/cpuinfo2如果这个命令返回了 one or greater 的值那么你的计算节点支持硬件加速且不需要额外的配置。如果这个命令返回了 zero 值那么你的计算节点不支持硬件加速。你必须配置 libvirt 来使用 QEMU 去代替 KVM在 /etc/nova/nova.conf 文件的 [libvirt] 区域做出如下的编辑[libvirt] ... virt_type qemu[rootcompute1 ~]# systemctl enable libvirtd.service openstack-nova-compute.service[rootcompute1 ~]# systemctl start libvirtd.service openstack-nova-compute.service[rootcontroller ~]# openstack compute service list已就位Networking 服务创建neutron 数据库并授权[rootcontroller ~]# mysql -u root -pMariaDB [(none)] CREATE DATABASE neutron;MariaDB [(none)] GRANT ALL PRIVILEGES ON neutron.* TO neutronlocalhost \- IDENTIFIED BY neutron;MariaDB [(none)] GRANT ALL PRIVILEGES ON neutron.* TO neutron% \- IDENTIFIED BY neutron;获得 admin 凭证来获取只有管理员能执行的命令的访问权限[rootcontroller ~]# . admin-openrc创建neutron用户[rootcontroller ~]# openstack user create --domain default --password-prompt neutron添加admin 角色到neutron 用户[rootcontroller ~]# openstack role add --project service --user neutron admin创建neutron服务实体[rootcontroller ~]# openstack service create --name neutron \ --description OpenStack Networking network创建网络服务API端点[rootcontroller ~]# openstack endpoint create --region RegionOne \ network public http://controller:9696[rootcontroller ~]# openstack endpoint create --region RegionOne \ network internal http://controller:9696[rootcontroller ~]# openstack endpoint create --region RegionOne \ network admin http://controller:9696选择公共网络控制节点安装 Neutron 相关包[rootcontroller ~]# yum install openstack-neutron openstack-neutron-ml2 \ openstack-neutron-linuxbridge ebtables[rootcontroller ~]# vim /etc/neutron/neutron.conf[rootcontroller ~]# vim /etc/neutron/plugins/ml2/ml2_conf.ini[rootcontroller ~]# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini[rootcontroller ~]# vim /etc/neutron/dhcp_agent.ini[rootcontroller ~]# vim /etc/neutron/metadata_agent.ini[rootcontroller ~]# vim /etc/nova/nova.conf软链接、初始化数据库[rootcontroller ~]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini[rootcontroller ~]# 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[rootcontroller ~]# systemctl restart openstack-nova-api.service[rootcontroller ~]# systemctl enable neutron-server.service \ neutron-linuxbridge-agent.service neutron-dhcp-agent.service \ neutron-metadata-agent.service[rootcontroller ~]# systemctl start neutron-server.service \ neutron-linuxbridge-agent.service neutron-dhcp-agent.service \ neutron-metadata-agent.serviceopenstack network agent list能看到 linuxbridge、dhcp、metadata、server 四个 agent 状态 up代表控制节点 neutron 部署完成。安装并控制计算节点计算节点安装linuxbridge代理包[rootcompute1 ~]# yum install openstack-neutron-linuxbridge ebtables ipset[rootcompute1 ~]# vim /etc/neutron/neutron.conf[rootcompute1 ~]# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini[rootcompute1 ~]# vim /etc/nova/nova.conf[rootcompute1 ~]# systemctl restart openstack-nova-compute.service[rootcompute1 ~]# systemctl enable --now neutron-linuxbridge-agent.service验证操作查看neutron扩展组件[rootcontroller ~]# neutron ext-list[rootcontroller ~]# neutron agent-list云主机前置资源准备规格 flavor 管理[rootcontroller ~]# openstack flavor list查看 已有的fiavor示例自定义创建m1.nano规格ID01核64M内存1G磁盘[rootcontroller ~]# openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano密钥对[rootcontroller ~]# ssh-keygen -q -N Enter file in which to save the key (/root/.ssh/id_rsa):将公钥上传openstack命名mykey[rootcontroller ~]# openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey查看[rootcontroller ~]# openstack keypair list安全组规则放行 ping 和 ssh[rootcontroller ~]# openstack security group rule create --proto icmp default[rootcontroller ~]# openstack security group rule create --proto tcp --dst-port 22 default[rootcontroller ~]# . admin-openrc创建flat共享网络[rootcontroller ~]# neutron net-create --shared --provider:physical_network provider \ --provider:network_type flat provider创建子网地址池192.168.73.101~130网关192.168.73.2DNS114.114.114.114[rootcontroller ~]# neutron subnet-create --name provider --allocation-pool start192.168.73.101,end192.168.73.130 --dns-nameserver 114.114.114.114 --gateway 192.168.73.2 provider 192.168.73.0/24列出可用示例类型[rootcontroller ~]# openstack flavor list[rootcontroller ~]# openstack image list[rootcontroller ~]# openstack network list[rootcontroller ~]# openstack security group list换镜像删除原有旧cirros镜像[rootcontroller ~]# openstack image delete 7918d915-2ef6-4e8a-8182-751df6dace20[rootcontroller ~]# openstack image list下载新的镜像[rootcontroller ~]# wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img上传新镜像到glance设置公开[rootcontroller ~]# openstack image create cirros-0.3.4 \ --file ./cirros-0.3.4-x86_64-disk.img \ --disk-format qcow2 \ --container-format bare \ --public[rootcontroller ~]# openstack image list创建云主机实例创建provider-instance实例使用m1.nano规格、cirros-0.3.4镜像、flat provider网络、default安全组[rootcontroller ~]# openstack server create --flavor m1.nano \ --image cirros-0.3.4 \ --nic net-idacb63641-ca7d-436a-b58a-285deb9fc60d \ --security-group default \ provider-instance[rootcontroller ~]# openstack server list查看实例状态ACTIVE表示实例正常运行可看到分配IP 192.168.73.102[rootcontroller ~]# openstack console url show provider-instance获取novnc远程控制台访问链接浏览器打开可直接登录cirros云主机浏览器访问网址注意如果windows没有controller解析则这里的直接写成控制节点的ip即可使用给定的用户和密码登录测试网络解析通不通ssh登录云主机[rootcontroller ~]# ssh 192.168.73.107cirros成功登陆dashboardHorizon 是 OpenStack 的 Web 可视化管理面板也叫 Dashboard基于 Django 开发。前面所有操作都是在命令行下调用各个组件 API 来管理云资源而 Horizon 可以提供图形化页面不需要敲命令能够可视化管理身份、镜像、计算实例、网络等 OpenStack 资源方便运维人员直观操作云平台。 Horizon 本身不存储数据只是作为前端对接 Keystone、Glance、Nova、Neutron 等后端服务所有的实际创建、修改资源的动作最终还是由各个 OpenStack 组件完成。本次实验在控制节点部署 Horizon对接已部署好的 Memcached 缓存修改配置放开访问限制重启服务后通过浏览器访问页面使用 demo 租户账号完成登录标志整套 OpenStack Train 云平台全部组件部署完成。[rootcontroller ~]# yum install openstack-dashboard[rootcontroller ~]# vim /etc/openstack-dashboard/local_settings[rootcontroller ~]# systemctl restart httpd.service memcached.service浏览器访问http://192.168.73.178/dashboard/可以在可视化面板直接对云主机进行操作今天的博客到这里就结束啦886~
返回列表