[编程开发] 到底选openstack还是vmware?

[复制链接]
diyaxu88 发表于 2023-10-18 04:05:11|来自:北京 | 显示全部楼层 |阅读模式
到底选openstack还是vmware?
    你没看错,又有人来问这个白痴问题,可偏偏,我还是问了。
    首先,我解释下,我已经工作四年,可以用一句简短的话,介绍四年来我的工作。
第一家公司,为期两年,半年java开发,然后被发配到某省移动现场,负责了OSS的项目,然后我开始了Aix、Weblogic、Oracle、Webshpere、Arcgis的学习,你知道,一个刚毕业不久的小白要接触这么多东西,无非是拿着前辈同事写的文档一遍遍的部署安装,不懂了,就打个长途问问(当时公司抠的连花费都不报销,项目经理还经常责问怎么不给客户打电话,我一个月才那么点工资,你还让我打无尽的长途),扯远了。
    两年后,我受不了了,不是被连续几个月没有休息的加班,也不是被这些负责的技术所打败,我实在忍不了这个公司的抠,移动厂家的办公室N个厂家挤在一起,每天去还得找椅子,你不贴个纸条协商你的名字,你都不好意思说这椅子是你昨天坐的,项目经理不会给你争取更多的福利,只有无尽的免费的加班。所以,我选择了北上。
    然后进入了一家外企,做上了集成工作,还是AIX、Linux,Weblogic,不过Oracle已经很少接触,但是我接触了一个高大上的技术,那就是Vmware(终于回到了重点),将近400台物理机的DataCenter,当然,这不是我一个人搭建实施,这是Vmware第三方合作伙伴(星级外包公司)亲自操刀的,之前我一直用workstation,接触这个技术,我相当好奇,刚好,我一首抓这个项目,我向这位苦逼同事要了所有介质,和一些官方文档,然后自己动手搭建了整套环境,如果不这样,我没法管控我这个项目,不然这兄弟给挖坑,后期继续要钱就麻烦了,从中,我学会了Vmware虚拟化搭建及规划,之后一直维护这这套环境,期间还有另外一些Vmware大大小小的项目都由我搭建维护。就这样,我认识了Vmware这位贵妇!
    一年后,公司另一个高大上项目-云计算部门,说需要我们负责帮忙集成,当然也只是打打杂,装几个系统写写方案调调网络我而已,期间,项目经理给我介绍了一位同事,让他给我介绍openstack架构,当时,我一副白痴样,拿着一张白纸去找他,当上路上在想,我怎么跟大牛开口,很丢人,见到同事后,满脸胡渣,满脸油光,一副IT屌丝样,不过同事非常大气,我一系列小白问题一一给我解释,非常感动,然后去openstack官网找资料来看,经过了解,渐渐有兴趣,之后便一发不可收拾,因为越来越多项目用ok,原因是免费,这是给vmware最好的反击,同时全球有越来越多知名的厂家提供支持。
    之后我一直默默无闻的做着我的集成工作,但是,我感觉看不到前途的路,感觉慢慢的在颓废,我这才工作四年,我不应该这样,还不到养老的年纪。
    我现在在考虑要去学们更有前途的技术,但这必须是我感兴趣的,想来想去也只有两门,vmware和openstack,现在vmware考试加培训的费用是9k左右,openstack只有红帽推出了可能及认证,原厂是10200,合作伙伴8k左右,但是如今vmware的学员非常抢手,学完立马就被厂家招走了,当然要考过vcp,而openstack还没大面积商用,这就是我所考虑的问题,当然我知道openstack的好戏在后头,但我依然无法抉择。
    到了24的年纪,每次老妈给我打电话就是想催我赶紧找个合适的女孩结婚定下来,其实我也想,但事情和来这么简单,这是在北京,要找个女朋友这不是要比在路上捡到500w更难?本来打算明年上半年回二线城市,但现在脑子全乱了,继续留在京城还是回我的二线城市。
    二线城市对vmware的需求越来越大,如果我现在学完Vmware并考试并通过vcp,在二线找份工作应该不难,且收入应该还行,但考虑到将来,我舍不得openstack,我感觉今后openstack才是主场,罗嗦了这么一大堆,希望在开源“社区”的朋友能帮忙指点迷津,让小弟少走点弯路,小弟感激不尽,有机会请你吃顿便饭,谢谢!
全部回复5 显示全部楼层
ues6858 发表于 2023-10-18 04:05:50|来自:北京 | 显示全部楼层
前文列表


  • 《云计算发展编年史 1725-2023(第二版)》
  • 《虚拟化技术 — 硬件辅助的虚拟化技术》
  • 《虚拟化技术 — QEMU-KVM 基于内核的虚拟机》
  • 《虚拟化技术 — VirtIO 虚拟设备接口标准》
  • 《虚拟化技术 — Linux Kernel 虚拟化网络设备》
  • 《虚拟化技术 — 应用 Bridge 和 VLAN 子接口构建 KVM 多平面网络》
  • 《虚拟化技术 — VirtIO Networking 虚拟网络设备》
  • 《虚拟化技术 — Libvirt 异构虚拟化管理组件》
目录


  • OpenStack 架构

    • Conceptual architecture
    • Logical architecture

  • 网络选型

    • Networking Option 1: Provider networks
    • Networking Option 2: Self-service networks

  • 双节点部署网络拓扑
  • 基础服务

    • DNS 域名解析
    • NTP 时间同步
    • YUM 仓库源
    • MySQL 数据库
    • RabbitMQ 消息队列
    • Memcached
    • Etcd

  • OpenStack Projects

    • Keystone(Controller)
    • Glance(Controller)
    • Nova(Controller)
    • Nova(Compute)
    • Neutron Open vSwitch mechanism driver(Controller)
    • Neutron Open vSwitch mechanism driver(Compute)
    • Horizon(Controller)
    • Cinder(Controller)


前言

OpenStake 自动化部署工具一向被视为 OpenStack 发展的重点,现已被市场认可的有 Kolla、TripleO 等优秀工具。但本文主要记录全手动部署方式,以此来更深入理解 OpenStack 的软件架构。

  • 出于稳定性的考虑选择了较早起的 Rocky 版本;
  • 出于易管理的考虑选择了双节点部署架构。
OpenStack 架构


  • 官方文档:https://docs.openstack.org/install-guide/
Conceptual architecture



Logical architecture



网络选型

Networking Option 1: Provider networks



Provider networks 是将节点的虚拟网络桥接到运营商的物理网络(e.g. L2/L3 交换机、路由器),是一种比较简单的网络模型,物理网络设备的加入也使得网络具有更高的性能。但由于 Neutron 无需启用 L3 Router 服务,所以也就不能支持 LBaaS、FWaaS 等高级功能。
Networking Option 2: Self-service networks



Self-service networks(自服务的网络),是一套完整的 L2、L3 网络虚拟化解决方案,用户可以在完全不了解底层物理网络拓扑的情况下创建虚拟网络,Neutron 为用户提供多租户隔离多平面网络。


双节点部署网络拓扑



Controller

  • ens160: 172.18.22.231/24
  • ens192: 10.0.0.1/24
  • ens224: br-provider NIC
  • sba:系统盘
  • sdb:Cinder 存储盘
Compute

  • ens160: 172.18.22.232/24
  • ens192: 10.0.0.2/24
  • sba:系统盘
NOTE:下述 "fanguiju" 均为替换密码。
基础服务

DNS 域名解析

NOTE:我们使用 hosts 文件代替。

  • Controller
  1. [root@controller ~]# cat /etc/hosts
  2. 127.0.0.1   controller localhost localhost.localdomain localhost4 localhost4.localdomain4
  3. ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  4. 172.18.22.231 controller
  5. 172.18.22.232 compute
复制代码

  • Compute
  1. [root@compute ~]# cat /etc/hosts
  2. 127.0.0.1   controller localhost localhost.localdomain localhost4 localhost4.localdomain4
  3. ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  4. 172.18.22.231 controller
  5. 172.18.22.232 compute
复制代码
NTP 时间同步


  • Controller
  1. [root@controller ~]# cat /etc/chrony.conf | grep -v ^# | grep -v ^$
  2. server 0.centos.pool.ntp.org iburst
  3. server 1.centos.pool.ntp.org iburst
  4. server 2.centos.pool.ntp.org iburst
  5. server 3.centos.pool.ntp.org iburst
  6. driftfile /var/lib/chrony/drift
  7. makestep 1.0 3
  8. rtcsync
  9. allow 172.18.22.0/24
  10. logdir /var/log/chrony
  11. [root@controller ~]# systemctl enable chronyd.service
  12. [root@controller ~]# systemctl start chronyd.service
  13. [root@controller ~]# chronyc sources
  14. 210 Number of sources = 4
  15. MS Name/IP address         Stratum Poll Reach LastRx Last sample
  16. ===============================================================================
  17. ^+ ntp1.ams1.nl.leaseweb.net     2   6    77    24  -4781us[-6335us] +/-  178ms
  18. ^? static.186.49.130.94.cli>     0   8     0     -     +0ns[   +0ns] +/-    0ns
  19. ^? sv1.ggsrv.de                  2   7     1    17    -36ms[  -36ms] +/-  130ms
  20. ^* 124-108-20-1.static.beta>     2   6    77    24   +382us[-1172us] +/-  135ms
复制代码

  • Compute
  1. [root@compute ~]# cat /etc/chrony.conf | grep -v ^# | grep -v ^$
  2. server controller iburst
  3. driftfile /var/lib/chrony/drift
  4. makestep 1.0 3
  5. rtcsync
  6. logdir /var/log/chrony
  7. [root@compute ~]# systemctl enable chronyd.service
  8. [root@compute ~]# systemctl start chronyd.service
  9. [root@compute ~]# chronyc sources
  10. 210 Number of sources = 1
  11. MS Name/IP address         Stratum Poll Reach LastRx Last sample
  12. ===============================================================================
  13. ^? controller                    0   7     0     -     +0ns[   +0ns] +/-    0ns
复制代码
YUM 仓库源


  • Controller & Compute
  1. $ yum install centos-release-openstack-rocky -y
  2. $ yum upgrade -y
  3. $ yum install python-openstackclient -y
  4. $ yum install openstack-selinux -y
复制代码
MySQL 数据库


  • Controller
  1. $ yum install mariadb mariadb-server python2-PyMySQL -y
  2. [root@controller ~]# cat /etc/my.cnf.d/openstack.cnf
  3. [mysqld]
  4. bind-address = 172.18.22.231
  5. default-storage-engine = innodb
  6. innodb_file_per_table = on
  7. max_connections = 4096
  8. collation-server = utf8_general_ci
  9. character-set-server = utf8
  10. [root@controller ~]# systemctl enable mariadb.service
  11. [root@controller ~]# systemctl start mariadb.service
  12. [root@controller ~]# systemctl status mariadb.service
  13. # 初始化 MySQL 数据库密码
  14. [root@controller ~]# mysql_secure_installation
复制代码
问题:OpenStack 服务的接口响应都很慢,而且会出现 Too many connections 的异常。
TS:OpenStack 众多服务都会访问 MySQL 数据库,所以要对 MySQL 进行一些参数的设置,例如:增加最大连接数量、减少连接等待时间、自动清楚连接数间隔等等。e.g.
  1. [root@controller ~]# cat /etc/my.cnf | grep -v ^$ | grep -v ^#
  2. [client-server]
  3. [mysqld]
  4. symbolic-links=0
  5. max_connections=1000
  6. wait_timeout=5
  7. # interactive_timeout = 600
  8. !includedir /etc/my.cnf.d
复制代码
RabbitMQ 消息队列


  • Controller
  1. $ yum install rabbitmq-server -y
  2. [root@controller ~]#  systemctl enable rabbitmq-server.service
  3. [root@controller ~]#  systemctl start rabbitmq-server.service
  4. [root@controller ~]#  systemctl status rabbitmq-server.service
  5. # 初始化 RabbitMQ 用户密码及权限
  6. [root@controller ~]#  rabbitmqctl add_user openstack fanguiju
  7. [root@controller ~]#  rabbitmqctl set_permissions openstack ".*" ".*" ".*"
复制代码
问题
  1. Error: unable to connect to node rabbit@localhost: nodedown
  2. DIAGNOSTICS
  3. ===========
  4. attempted to contact: [rabbit@localhost]
  5. rabbit@localhost:
  6.   * connected to epmd (port 4369) on localhost
  7.   * epmd reports node 'rabbit' running on port 25672
  8.   * TCP connection succeeded but Erlang distribution failed
  9.   * Hostname mismatch: node "rabbit@controller" believes its host is different. Please ensure that hostnames resolve the same way locally and on "rabbit@controller"
  10. current node details:
  11. - node name: 'rabbitmq-cli-50@controller'
  12. - home dir: /var/lib/rabbitmq
  13. - cookie hash: J6O4pu2pK+BQLf1TTaZSwQ==
复制代码
TS:Hostname mismatch(主机名不匹配),hostname 的修改对于 RabbitMQ 而言还存在滞后的 Cookie,重启操作系统即可解决。
Memcached
The Identity service authentication mechanism for services uses Memcached to cache tokens. The memcached service typically runs on the controller node. For production deployments, we recommend enabling a combination of firewalling, authentication, and encryption to secure it.

  • Controller
  1. $ yum install memcached python-memcached -y
  2. [root@controller ~]# cat /etc/sysconfig/memcached
  3. PORT="11211"
  4. USER="memcached"
  5. MAXCONN="1024"
  6. CACHESIZE="64"
  7. # OPTIONS="-l 127.0.0.1,::1"
  8. OPTIONS="-l 127.0.0.1,::1,controller"
  9. [root@controller ~]# systemctl enable memcached.service
  10. [root@controller ~]# systemctl start memcached.service
  11. [root@controller ~]# systemctl status memcached.service
复制代码
Etcd
OpenStack services may use Etcd, a distributed reliable key-value store for distributed key locking, storing configuration, keeping track of service live-ness and other scenarios.

  • Controller
  1. $ yum install etcd -y
  2. [root@controller ~]# cat  /etc/etcd/etcd.conf
  3. #[Member]
  4. ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
  5. ETCD_LISTEN_PEER_URLS="http://172.18.22.231:2380"
  6. ETCD_LISTEN_CLIENT_URLS="http://172.18.22.231:2379"
  7. ETCD_NAME="controller"
  8. #[Clustering]
  9. ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.18.22.231:2380"
  10. ETCD_ADVERTISE_CLIENT_URLS="http://172.18.22.231:2379"
  11. ETCD_INITIAL_CLUSTER="controller=http://172.18.22.231:2380"
  12. ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
  13. ETCD_INITIAL_CLUSTER_STATE="new"
  14. [root@controller ~]#  systemctl enable etcd
  15. [root@controller ~]#  systemctl start etcd
  16. [root@controller ~]# systemctl status etcd
复制代码
OpenStack Projects

Keystone(Controller)


  • 软件包
  1. $ yum install openstack-keystone httpd mod_wsgi -y
复制代码

  • 配置
  1. # /etc/keystone/keystone.conf
  2. [database]
  3. connection = mysql+pymysql://keystone:fanguiju@controller/keystone
  4. [token]
  5. provider = fernet
复制代码

  • 创建 keystone 数据库
  1. $ CREATE DATABASE keystone;
  2. $ GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'fanguiju';
  3. $ GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'fanguiju';
复制代码

  • 初始化 keystone 数据库
  1. $ su -s /bin/sh -c "keystone-manage db_sync" keystone
复制代码

  • 启用 Fernet key
  1. $ keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
  2. $ keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
复制代码

  • Bootstrap Keystone Services,自动创建 default domain、admin project、admin user (password)、admin role、member role、reader role 以及 keystone service 和 identity endpoint。
  1. $ keystone-manage bootstrap --bootstrap-password fanguiju \
  2.   --bootstrap-admin-url http://controller:5000/v3/ \
  3.   --bootstrap-internal-url http://controller:5000/v3/ \
  4.   --bootstrap-public-url http://controller:5000/v3/ \
  5.   --bootstrap-region-id RegionOne
复制代码

  • 配置及启动 Apache HTTP server:Keystone 的 Web Server 依托于 Apache HTTP server,是 httpd 的虚拟主机。
  1. $ ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
  2. # /usr/share/keystone/wsgi-keystone.conf
  3. # keystone 虚拟主机机配置文件
  4. Listen 5000
  5. <VirtualHost *:5000>
  6.     WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
  7.     WSGIProcessGroup keystone-public
  8.     WSGIScriptAlias / /usr/bin/keystone-wsgi-public
  9.     WSGIApplicationGroup %{GLOBAL}
  10.     WSGIPassAuthorization On
  11.     LimitRequestBody 114688
  12.     <IfVersion >= 2.4>
  13.       ErrorLogFormat "%{cu}t %M"
  14.     </IfVersion>
  15.     ErrorLog /var/log/httpd/keystone.log
  16.     CustomLog /var/log/httpd/keystone_access.log combined
  17.     <Directory /usr/bin>
  18.         <IfVersion >= 2.4>
  19.             Require all granted
  20.         </IfVersion>
  21.         <IfVersion < 2.4>
  22.             Order allow,deny
  23.             Allow from all
  24.         </IfVersion>
  25.     </Directory>
  26. </VirtualHost>
  27. Alias /identity /usr/bin/keystone-wsgi-public
  28. <Location /identity>
  29.     SetHandler wsgi-script
  30.     Options +ExecCGI
  31.     WSGIProcessGroup keystone-public
  32.     WSGIApplicationGroup %{GLOBAL}
  33.     WSGIPassAuthorization On
  34. </Location>
  35. # /etc/httpd/conf/httpd.conf
  36. ServerName controller
  37. $ systemctl enable httpd.service
  38. $ systemctl start httpd.service
  39. $ systemctl status httpd.service
复制代码

  • 创建租户



注入临时身份鉴权变量:
  1. export OS_USERNAME=admin
  2. export OS_PASSWORD=fanguiju
  3. export OS_PROJECT_NAME=admin
  4. export OS_USER_DOMAIN_NAME=Default
  5. export OS_PROJECT_DOMAIN_NAME=Default
  6. export OS_AUTH_URL=http://controller:5000/v3
  7. export OS_IDENTITY_API_VERSION=3
复制代码
NOTE:keystone-manage bootstrap 后就已经完成了 admin 租户及用户的初始化了,现在只需要再创建一个 service project 用于包含 OpenStack Projects(e.g. Nova、Cinder、Neutron)。如果有必要也可以同时创建一个普通租户 Demo 以及该租户下的用户 myuser。e.g.
  1. $ openstack project create --domain default --description "Service Project" service
  2. $ openstack project create --domain default --description "Demo Project" myproject
  3. $ openstack user create --domain default --password-prompt myuser
  4. $ openstack role create myrole
  5. $ openstack role add --project myproject --user myuser myrole
  6. [root@controller ~]# openstack domain list
  7. +---------+---------+---------+--------------------+
  8. | ID      | Name    | Enabled | Description        |
  9. +---------+---------+---------+--------------------+
  10. | default | Default | True    | The default domain |
  11. +---------+---------+---------+--------------------+
  12. [root@controller ~]# openstack project list
  13. +----------------------------------+-----------+
  14. | ID                               | Name      |
  15. +----------------------------------+-----------+
  16. | 64e45ce71e4843f3af4715d165f417b6 | service   |
  17. | a2b55e37121042a1862275a9bc9b0223 | admin     |
  18. | a50bbb6cd831484d934eb03f989b988b | myproject |
  19. +----------------------------------+-----------+
  20. [root@controller ~]# openstack group list
  21. [root@controller ~]# openstack user list
  22. +----------------------------------+--------+
  23. | ID                               | Name   |
  24. +----------------------------------+--------+
  25. | 2cd4bbe862e54afe9292107928338f3f | myuser |
  26. | 92602c24daa24f019f05ecb95f1ce68e | admin  |
  27. +----------------------------------+--------+
  28. [root@controller ~]# openstack role list
  29. +----------------------------------+--------+
  30. | ID                               | Name   |
  31. +----------------------------------+--------+
  32. | 3bc0396aae414b5d96488d974a301405 | reader |
  33. | 811f5caa2ac747a5b61fe91ab93f2f2f | myrole |
  34. | 9366e60815bc4f1d80b1e57d51f7c228 | admin  |
  35. | d9e0d3e5d1954feeb81e353117c15340 | member |
  36. +----------------------------------+--------+
复制代码

  • Verify
  1. [root@controller ~]# unset OS_AUTH_URL OS_PASSWORD
  2. [root@controller ~]# openstack --os-auth-url http://controller:5000/v3 \
  3. >   --os-project-domain-name Default --os-user-domain-name Default \
  4. >   --os-project-name admin --os-username admin token issue
  5. Password:
  6. +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  7. | Field      | Value                                                                                                                                                                                   |
  8. +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  9. | expires    | 2019-03-29T12:36:47+0000                                                                                                                                                                |
  10. | id         | gAAAAABcngNPjXntVhVAmLbek0MH7ZSzeYGC4cfipy4E3aiy_dRjEyJiPehNH2dkDVI94vHHHdni1h27BJvLp6gqIqglGVDHallPn3PqgZt3-JMq_dyxx2euQL1bhSNX9rAUbBvzL9_0LBPKw2glQmmRli9Qhu8QUz5tRkbxAb6iP7R2o-mU30Y |
  11. | project_id | a2b55e37121042a1862275a9bc9b0223                                                                                                                                                        |
  12. | user_id    | 92602c24daa24f019f05ecb95f1ce68e                                                                                                                                                        |
  13. +------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
复制代码

  • 创建 OpenStack client environment scripts
  1. [root@controller ~]# cat adminrc
  2. export OS_PROJECT_DOMAIN_NAME=Default
  3. export OS_USER_DOMAIN_NAME=Default
  4. export OS_PROJECT_NAME=admin
  5. export OS_USERNAME=admin
  6. export OS_PASSWORD=fanguiju
  7. export OS_AUTH_URL=http://controller:5000/v3
  8. export OS_IDENTITY_API_VERSION=3
  9. export OS_IMAGE_API_VERSION=2
  10. [root@controller ~]# source adminrc
  11. [root@controller ~]# openstack catalog list
  12. +----------+----------+----------------------------------------+
  13. | Name     | Type     | Endpoints                              |
  14. +----------+----------+----------------------------------------+
  15. | keystone | identity | RegionOne                              |
  16. |          |          |   admin: http://controller:5000/v3/    |
  17. |          |          | RegionOne                              |
  18. |          |          |   public: http://controller:5000/v3/   |
  19. |          |          | RegionOne                              |
  20. |          |          |   internal: http://controller:5000/v3/ |
  21. |          |          |                                        |
  22. +----------+----------+----------------------------------------+
复制代码
Glance(Controller)


  • 添加 Glance 用户及其鉴权信息
  1. $ openstack service create --name glance --description "OpenStack Image" image
  2. $ openstack user create --domain default --password-prompt glance
  3. $ openstack role add --project service --user glance admin
  4. $ openstack endpoint create --region RegionOne image public http://controller:9292
  5. $ openstack endpoint create --region RegionOne image internal http://controller:9292
  6. $ openstack endpoint create --region RegionOne image admin http://controller:9292
  7. [root@controller ~]# openstack catalog list
  8. +-----------+-----------+-----------------------------------------+
  9. | Name      | Type      | Endpoints                               |
  10. +-----------+-----------+-----------------------------------------+
  11. | glance    | image     | RegionOne                               |
  12. |           |           |   admin: http://controller:9292         |
  13. |           |           | RegionOne                               |
  14. |           |           |   public: http://controller:9292        |
  15. |           |           | RegionOne                               |
  16. |           |           |   internal: http://controller:9292      |
  17. |           |           |                                         |
  18. | keystone  | identity  | RegionOne                               |
  19. |           |           |   admin: http://controller:5000/v3/     |
  20. |           |           | RegionOne                               |
  21. |           |           |   public: http://controller:5000/v3/    |
  22. |           |           | RegionOne                               |
  23. |           |           |   internal: http://controller:5000/v3/  |
  24. |           |           |                                         |
  25. +-----------+-----------+-----------------------------------------+
复制代码

  • 软件包
  1. $ yum install openstack-glance -y
复制代码

  • 配置
  1. # /etc/glance/glance-api.conf
  2. [glance_store]
  3. stores = file,http
  4. default_store = file
  5. # 本地的镜像文件存放目录
  6. filesystem_store_datadir = /var/lib/glance/images/
  7. [database]
  8. connection = mysql+pymysql://glance:fanguiju@controller/glance
  9. [keystone_authtoken]
  10. auth_uri = http://controller:5000
  11. auth_url = http://controller:5000
  12. memcached_servers = controller:11211
  13. auth_type = password
  14. project_domain_name = Default
  15. user_domain_name = Default
  16. project_name = service
  17. username = glance
  18. password = fanguiju
  19. [paste_deploy]
  20. flavor = keystone
  21. # /etc/glance/glance-registry.conf
  22. [database]
  23. connection = mysql+pymysql://glance:fanguiju@controller/glance
  24. [keystone_authtoken]
  25. auth_uri = http://controller:5000
  26. auth_url = http://controller:5000
  27. memcached_servers = controller:11211
  28. auth_type = password
  29. project_domain_name = Default
  30. user_domain_name = Default
  31. project_name = service
  32. username = glance
  33. password = fanguiju
  34. [paste_deploy]
  35. flavor = keystone
复制代码

  • 创建 Glance 数据库
  1. $ CREATE DATABASE glance;
  2. $ GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'fanguiju';
  3. $ GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'fanguiju';
复制代码

  • 初始化 Glance 数据库
  1. $ su -s /bin/sh -c "glance-manage db_sync" glance
复制代码

  • 启动服务
  1. $ systemctl enable openstack-glance-api.service openstack-glance-registry.service
  2. $ systemctl start openstack-glance-api.service openstack-glance-registry.service
  3. $ systemctl status openstack-glance-api.service openstack-glance-registry.service
复制代码

  • Verify
  1. $ wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
  2. $ openstack image create "cirros" \
  3.   --file cirros-0.4.0-x86_64-disk.img \
  4.   --disk-format qcow2 --container-format bare \
  5.   --public
  6. [root@controller ~]# openstack image list
  7. +--------------------------------------+--------+--------+
  8. | ID                                   | Name   | Status |
  9. +--------------------------------------+--------+--------+
  10. | 59355e1b-2342-497b-9863-5c8b9969adf5 | cirros | active |
  11. +--------------------------------------+--------+--------+
  12. [root@controller ~]# ll /var/lib/glance/images/
  13. total 12980
  14. -rw-r-----. 1 glance glance 13287936 Mar 29 10:33 59355e1b-2342-497b-9863-5c8b9969adf5
复制代码
Nova(Controller)


  • 添加 Nova 用户及其鉴权信息
  1. $ openstack service create --name nova --description "OpenStack Compute" compute
  2. $ openstack user create --domain default --password-prompt nova
  3. $ openstack role add --project service --user nova admin
  4. $ openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
  5. $ openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
  6. $ openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
  7. $ openstack service create --name placement --description "Placement API" placement
  8. $ openstack user create --domain default --password-prompt placement
  9. $ openstack role add --project service --user placement admin
  10. $ openstack endpoint create --region RegionOne placement public http://controller:8778
  11. $ openstack endpoint create --region RegionOne placement internal http://controller:8778
  12. $ openstack endpoint create --region RegionOne placement admin http://controller:8778
  13. [root@controller ~]# openstack catalog list
  14. +-----------+-----------+-----------------------------------------+
  15. | Name      | Type      | Endpoints                               |
  16. +-----------+-----------+-----------------------------------------+
  17. | nova      | compute   | RegionOne                               |
  18. |           |           |   internal: http://controller:8774/v2.1 |
  19. |           |           | RegionOne                               |
  20. |           |           |   admin: http://controller:8774/v2.1    |
  21. |           |           | RegionOne                               |
  22. |           |           |   public: http://controller:8774/v2.1   |
  23. |           |           |                                         |
  24. | glance    | image     | RegionOne                               |
  25. |           |           |   admin: http://controller:9292         |
  26. |           |           | RegionOne                               |
  27. |           |           |   public: http://controller:9292        |
  28. |           |           | RegionOne                               |
  29. |           |           |   internal: http://controller:9292      |
  30. |           |           |                                         |
  31. | keystone  | identity  | RegionOne                               |
  32. |           |           |   admin: http://controller:5000/v3/     |
  33. |           |           | RegionOne                               |
  34. |           |           |   public: http://controller:5000/v3/    |
  35. |           |           | RegionOne                               |
  36. |           |           |   internal: http://controller:5000/v3/  |
  37. |           |           |                                         |
  38. | placement | placement | RegionOne                               |
  39. |           |           |   internal: http://controller:8778      |
  40. |           |           | RegionOne                               |
  41. |           |           |   public: http://controller:8778        |
  42. |           |           | RegionOne                               |
  43. |           |           |   admin: http://controller:8778         |
  44. |           |           |                                         |
  45. +-----------+-----------+-----------------------------------------+
复制代码

  • 软件包
  1. $ yum install openstack-nova-api openstack-nova-conductor \
  2.   openstack-nova-console openstack-nova-novncproxy \
  3.   openstack-nova-scheduler openstack-nova-placement-api -y
复制代码

  • 配置
  1. # /etc/nova/nova.conf
  2. [DEFAULT]
  3. my_ip = 172.18.22.231
  4. enabled_apis = osapi_compute,metadata
  5. transport_url = rabbit://openstack:fanguiju@controller
  6. use_neutron = true
  7. firewall_driver = nova.virt.firewall.NoopFirewallDriver
  8. [api_database]
  9. connection = mysql+pymysql://nova:fanguiju@controller/nova_api
  10. [database]
  11. connection = mysql+pymysql://nova:fanguiju@controller/nova
  12. [placement_database]
  13. connection = mysql+pymysql://placement:fanguiju@controller/placement
  14. [api]
  15. auth_strategy = keystone
  16. [keystone_authtoken]
  17. auth_url = http://controller:5000/v3
  18. memcached_servers = controller:11211
  19. auth_type = password
  20. project_domain_name = default
  21. user_domain_name = default
  22. project_name = service
  23. username = nova
  24. password = fanguiju
  25. [vnc]
  26. enabled = true
  27. server_listen = $my_ip
  28. server_proxyclient_address = $my_ip
  29. [glance]
  30. api_servers = http://controller:9292
  31. [oslo_concurrency]
  32. lock_path = /var/lib/nova/tmp
  33. [placement]
  34. region_name = RegionOne
  35. project_domain_name = Default
  36. project_name = service
  37. auth_type = password
  38. user_domain_name = Default
  39. auth_url = http://controller:5000/v3
  40. username = placement
  41. password = fanguiju
复制代码

  • 创建 Nova 相关数据库
  1. $ CREATE DATABASE nova_api;
  2. $ CREATE DATABASE nova;
  3. $ CREATE DATABASE nova_cell0;
  4. $ CREATE DATABASE placement;
  5. $ GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'fanguiju';
  6. $ GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'fanguiju';
  7. $ GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'fanguiju';
  8. $ GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'fanguiju';
  9. $ GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'fanguiju';
  10. $ GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'fanguiju';
  11. $ GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'fanguiju';
  12. $ GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'fanguiju';
复制代码

  • 初始化 Nova API 和 Placement 数据库
  1. $ su -s /bin/sh -c "nova-manage api_db sync" nova
复制代码

  • 初始化 Nova 数据库
  1. $ su -s /bin/sh -c "nova-manage db sync" nova
复制代码

  • 注册 cell0 数据库
  1. $ su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
复制代码

  • 创建 cell1
  1. $ su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
复制代码

  • 验证 cell0、cell1
  1. $ su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
复制代码


  • 注册 Placement Web Server 到 httpd
  1. # /etc/httpd/conf.d/00-nova-placement-api.conf
  2. Listen 8778
  3. <VirtualHost *:8778>
  4.   WSGIProcessGroup nova-placement-api
  5.   WSGIApplicationGroup %{GLOBAL}
  6.   WSGIPassAuthorization On
  7.   WSGIDaemonProcess nova-placement-api processes=3 threads=1 user=nova group=nova
  8.   WSGIScriptAlias / /usr/bin/nova-placement-api
  9.   <IfVersion >= 2.4>
  10.     ErrorLogFormat "%M"
  11.   </IfVersion>
  12.   ErrorLog /var/log/nova/nova-placement-api.log
  13.   #SSLEngine On
  14.   #SSLCertificateFile ...
  15.   #SSLCertificateKeyFile ...
  16.   <Directory /usr/bin>
  17.      <IfVersion >= 2.4>
  18.         Require all granted
  19.      </IfVersion>
  20.      <IfVersion < 2.4>
  21.         Order allow,deny
  22.         Allow from all
  23.      </IfVersion>
  24.   </Directory>
  25. </VirtualHost>
  26. Alias /nova-placement-api /usr/bin/nova-placement-api
  27. <Location /nova-placement-api>
  28.   SetHandler wsgi-script
  29.   Options +ExecCGI
  30.   WSGIProcessGroup nova-placement-api
  31.   WSGIApplicationGroup %{GLOBAL}
  32.   WSGIPassAuthorization On
  33. </Location>
  34. $ systemctl restart httpd
  35. $ systemctl status httpd
复制代码

  • 启动服务
  1. $ systemctl enable openstack-nova-api.service \
  2.   openstack-nova-consoleauth openstack-nova-scheduler.service \
  3.   openstack-nova-conductor.service openstack-nova-novncproxy.service
  4. $ systemctl start openstack-nova-api.service \
  5.   openstack-nova-consoleauth openstack-nova-scheduler.service \
  6.   openstack-nova-conductor.service openstack-nova-novncproxy.service
  7. $ systemctl status openstack-nova-api.service \
  8.   openstack-nova-consoleauth openstack-nova-scheduler.service \
  9.   openstack-nova-conductor.service openstack-nova-novncproxy.service
复制代码

  • Verify
  1. [root@controller ~]# openstack compute service list
  2. +----+------------------+------------+----------+---------+-------+----------------------------+
  3. | ID | Binary           | Host       | Zone     | Status  | State | Updated At                 |
  4. +----+------------------+------------+----------+---------+-------+----------------------------+
  5. |  1 | nova-scheduler   | controller | internal | enabled | up    | 2019-03-29T15:22:51.000000 |
  6. |  2 | nova-consoleauth | controller | internal | enabled | up    | 2019-03-29T15:22:52.000000 |
  7. |  3 | nova-conductor   | controller | internal | enabled | up    | 2019-03-29T15:22:51.000000 |
  8. +----+------------------+------------+----------+---------+-------+----------------------------+
复制代码
Nova(Compute)

NOTE:在我们的规划中,Controller 同时身兼 Compute,所以在 Controller 上依旧要执行下列部署。NOTE:如果是在虚拟化实验环境,首先要检查虚拟机是否开启了嵌套虚拟化。e.g.
  1. [root@controller ~]# egrep -c '(vmx|svm)' /proc/cpuinfo
  2. 16
  3. [root@compute ~]# egrep -c '(vmx|svm)' /proc/cpuinfo
  4. 16
复制代码

  • 软件包
  1. $ yum install openstack-nova-compute -y
复制代码

  • 配置
  1. # /etc/nova/nova.conf
  2. [DEFAULT]
  3. my_ip = 172.18.22.232
  4. enabled_apis = osapi_compute,metadata
  5. transport_url = rabbit://openstack:fanguiju@controller
  6. use_neutron = true
  7. firewall_driver = nova.virt.firewall.NoopFirewallDriver
  8. compute_driver = libvirt.LibvirtDriver
  9. instances_path = /var/lib/nova/instances
  10. [api_database]
  11. connection = mysql+pymysql://nova:fanguiju@controller/nova_api
  12. [database]
  13. connection = mysql+pymysql://nova:fanguiju@controller/nova
  14. [placement_database]
  15. connection = mysql+pymysql://placement:fanguiju@controller/placement
  16. [api]
  17. auth_strategy = keystone
  18. [keystone_authtoken]
  19. auth_url = http://controller:5000/v3
  20. memcached_servers = controller:11211
  21. auth_type = password
  22. project_domain_name = default
  23. user_domain_name = default
  24. project_name = service
  25. username = nova
  26. password = fanguiju
  27. [vnc]
  28. enabled = true
  29. server_listen = 0.0.0.0
  30. server_proxyclient_address = $my_ip
  31. novncproxy_base_url = http://controller:6080/vnc_auto.html
  32. [glance]
  33. api_servers = http://controller:9292
  34. [oslo_concurrency]
  35. lock_path = /var/lib/nova/tmp
  36. [placement]
  37. region_name = RegionOne
  38. project_domain_name = Default
  39. project_name = service
  40. auth_type = password
  41. user_domain_name = Default
  42. auth_url = http://controller:5000/v3
  43. username = placement
  44. password = fanguiju
  45. [libvirt]
  46. virt_type = qemu
复制代码

  • 启动服务
  1. $ systemctl enable libvirtd.service openstack-nova-compute.service
  2. $ systemctl start libvirtd.service openstack-nova-compute.service
  3. $ systemctl status libvirtd.service openstack-nova-compute.service
复制代码

  • 将 Compute Node 注册到 Cell
  1. $ su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
复制代码
问题:在 compute 上启动 nova-compute.service 服务时会被卡在,从异常栈看出卡在 nova-compute 与 nova-conductor 的 MQ 通信上,怀疑 compute 上的 nova-compute 与 controller 上的 rabbitmq 通讯出错。用 telnet 测试,果然不通。
  1. [root@compute ~]# telnet 172.18.22.231 5672
  2. Trying 172.18.22.231...
  3. telnet: connect to address 172.18.22.231: No route to host
复制代码
是防火墙的问题,在 controller 开通 RabbitMQ 的相关端口:
  1. firewall-cmd --zone=public --permanent --add-port=4369/tcp &&
  2. firewall-cmd --zone=public --permanent --add-port=25672/tcp &&
  3. firewall-cmd --zone=public --permanent --add-port=5671-5672/tcp &&
  4. firewall-cmd --zone=public --permanent --add-port=15672/tcp &&
  5. firewall-cmd --zone=public --permanent --add-port=61613-61614/tcp &&
  6. firewall-cmd --zone=public --permanent --add-port=1883/tcp &&
  7. firewall-cmd --zone=public --permanent --add-port=8883/tcp
  8. firewall-cmd --reload
复制代码
为了方便后面的试验,建议关闭所有防火墙规则:
  1. $ systemctl stop firewalld
  2. $ systemctl disable firewalld
复制代码

  • Verify在 controller 和 compute 都启动了 nova-compute.service 之后,我们拥有了两个计算节点:
  1. [root@controller ~]# openstack compute service list
  2. +----+------------------+------------+----------+---------+-------+----------------------------+
  3. | ID | Binary           | Host       | Zone     | Status  | State | Updated At                 |
  4. +----+------------------+------------+----------+---------+-------+----------------------------+
  5. |  1 | nova-scheduler   | controller | internal | enabled | up    | 2019-03-29T16:15:42.000000 |
  6. |  2 | nova-consoleauth | controller | internal | enabled | up    | 2019-03-29T16:15:44.000000 |
  7. |  3 | nova-conductor   | controller | internal | enabled | up    | 2019-03-29T16:15:42.000000 |
  8. |  6 | nova-compute     | controller | nova     | enabled | up    | 2019-03-29T16:15:41.000000 |
  9. |  7 | nova-compute     | compute    | nova     | enabled | up    | 2019-03-29T16:15:47.000000 |
  10. +----+------------------+------------+----------+---------+-------+----------------------------+
  11. # Check the cells and placement API are working successfully:
  12. [root@controller ~]# nova-status upgrade check
  13. +--------------------------------+
  14. | Upgrade Check Results          |
  15. +--------------------------------+
  16. | Check: Cells v2                |
  17. | Result: Success                |
  18. | Details: None                  |
  19. +--------------------------------+
  20. | Check: Placement API           |
  21. | Result: Success                |
  22. | Details: None                  |
  23. +--------------------------------+
  24. | Check: Resource Providers      |
  25. | Result: Success                |
  26. | Details: None                  |
  27. +--------------------------------+
  28. | Check: Ironic Flavor Migration |
  29. | Result: Success                |
  30. | Details: None                  |
  31. +--------------------------------+
  32. | Check: API Service Version     |
  33. | Result: Success                |
  34. | Details: None                  |
  35. +--------------------------------+
  36. | Check: Request Spec Migration  |
  37. | Result: Success                |
  38. | Details: None                  |
  39. +--------------------------------+
  40. | Check: Console Auths           |
  41. | Result: Success                |
  42. | Details: None                  |
  43. +--------------------------------+
复制代码
Neutron Open vSwitch mechanism driver(Controller)








  • 添加 Neutron 用户及其鉴权信息
  1. $ openstack service create --name neutron --description "OpenStack Networking" network
  2. $ openstack user create --domain default --password-prompt neutron
  3. $ openstack role add --project service --user neutron admin
  4. $ openstack endpoint create --region RegionOne network public http://controller:9696
  5. $ openstack endpoint create --region RegionOne network internal http://controller:9696
  6. $ openstack endpoint create --region RegionOne network admin http://controller:9696
复制代码

  • 软件包
  1. $ yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch -y
复制代码

  • 配置
  1. # /etc/neutron/neutron.conf
  2. [DEFAULT]
  3. core_plugin = ml2
  4. service_plugins = router
  5. allow_overlapping_ips = true
  6. transport_url = rabbit://openstack:fanguiju@controller
  7. auth_strategy = keystone
  8. notify_nova_on_port_status_changes = true
  9. notify_nova_on_port_data_changes = true
  10. [database]
  11. connection = mysql+pymysql://neutron:fanguiju@controller/neutron
  12. [keystone_authtoken]
  13. www_authenticate_uri = http://controller:5000
  14. auth_url = http://controller:5000
  15. memcached_servers = controller:11211
  16. auth_type = password
  17. project_domain_name = default
  18. user_domain_name = default
  19. project_name = service
  20. username = neutron
  21. password = fanguiju
  22. [nova]
  23. auth_url = http://controller:5000
  24. auth_type = password
  25. project_domain_name = default
  26. user_domain_name = default
  27. region_name = RegionOne
  28. project_name = service
  29. username = nova
  30. password = fanguiju
  31. [oslo_concurrency]
  32. lock_path = /var/lib/neutron/tmp
  33. # /etc/neutron/plugins/ml2/ml2_conf.ini
  34. [ml2]
  35. type_drivers = flat,vlan,vxlan
  36. # 因为实验环境 IP 地址不多,所以启动 VxLAN 网络类型
  37. tenant_network_types = vxlan
  38. extension_drivers = port_security
  39. mechanism_drivers = openvswitch,l2population
  40. [securitygroup]
  41. enable_ipset = true
  42. [ml2_type_vxlan]
  43. vni_ranges = 1:1000
  44. # /etc/neutron/plugins/ml2/openvswitch_agent.ini
  45. [ovs]
  46. # 物理网络隐射,OvS Bridge br-provider 需要手动创建
  47. bridge_mappings = provider:br-provider
  48. # OVERLAY_INTERFACE_IP_ADDRESS
  49. local_ip = 10.0.0.1
  50. [agent]
  51. tunnel_types = vxlan
  52. l2_population = True
  53. [securitygroup]
  54. firewall_driver = iptables_hybrid
  55. # /etc/neutron/l3_agent.ini
  56. [DEFAULT]
  57. interface_driver = openvswitch
  58. # The external_network_bridge option intentionally contains no value.
  59. external_network_bridge =
  60. # /etc/neutron/dhcp_agent.ini
  61. [DEFAULT]
  62. interface_driver = openvswitch
  63. dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
  64. enable_isolated_metadata = true
  65. # /etc/neutron/metadata_agent.ini
  66. [DEFAULT]
  67. nova_metadata_host = controller
  68. metadata_proxy_shared_secret = fanguiju
  69. # /etc/nova/nova.conf
  70. ...
  71. [neutron]
  72. url = http://controller:9696
  73. auth_url = http://controller:5000
  74. auth_type = password
  75. project_domain_name = default
  76. user_domain_name = default
  77. region_name = RegionOne
  78. project_name = service
  79. username = neutron
  80. password = fanguiju
  81. service_metadata_proxy = true
  82. metadata_proxy_shared_secret = fanguiju
  83. $ ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
复制代码

  • Open vSwitch
  1. $ systemctl enable openvswitch
  2. $ systemctl start openvswitch
  3. $ systemctl status openvswitch
  4. $ ovs-vsctl add-br br-provider
  5. $ ovs-vsctl add-port br-provider ens224
  6. [root@controller ~]# ovs-vsctl show
  7. 8ef8d299-fc4c-407a-a937-5a1058ea3355
  8.     Bridge br-provider
  9.         Port "ens224"
  10.             Interface "ens224"
  11.         Port br-provider
  12.             Interface br-provider
  13.                 type: internal
  14.     ovs_version: "2.10.1"
复制代码

  • 创建 Neutron 数据库
  1. $ CREATE DATABASE neutron;
  2. $ GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'fanguiju';
  3. $ GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'fanguiju';
复制代码

  • 初始化 Neutron 数据库
  1. $ su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \
  2.   --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
复制代码

  • 启动服务
  1. $ systemctl restart openstack-nova-api.service
  2. $ systemctl enable neutron-server.service \
  3.   neutron-openvswitch-agent.service neutron-dhcp-agent.service \
  4.   neutron-metadata-agent.service
  5. $ systemctl start neutron-server.service \
  6.   neutron-openvswitch-agent.service neutron-dhcp-agent.service \
  7.   neutron-metadata-agent.service
  8. $ systemctl status neutron-server.service \
  9.   neutron-openvswitch-agent.service neutron-dhcp-agent.service \
  10.   neutron-metadata-agent.service
  11. $ systemctl enable neutron-l3-agent.service
  12. $ systemctl start neutron-l3-agent.service
  13. $ systemctl status neutron-l3-agent.service
复制代码
NOTE:启动 OvS Agent 的时候会自动创建综合网桥 br-int、隧道网桥 br-tun。手动创建的 br-provider 用于 Flat、VLAN 非隧道类型网络。
  1. [root@controller ~]# ovs-vsctl show
  2. 8ef8d299-fc4c-407a-a937-5a1058ea3355
  3.     Manager "ptcp:6640:127.0.0.1"
  4.         is_connected: true
  5.     Bridge br-tun
  6.         Controller "tcp:127.0.0.1:6633"
  7.             is_connected: true
  8.         fail_mode: secure
  9.         Port br-tun
  10.             Interface br-tun
  11.                 type: internal
  12.         Port patch-int
  13.             Interface patch-int
  14.                 type: patch
  15.                 options: {peer=patch-tun}
  16.     Bridge br-int
  17.         Controller "tcp:127.0.0.1:6633"
  18.             is_connected: true
  19.         fail_mode: secure
  20.         Port int-br-provider
  21.             Interface int-br-provider
  22.                 type: patch
  23.                 options: {peer=phy-br-provider}
  24.         Port br-int
  25.             Interface br-int
  26.                 type: internal
  27.         Port patch-tun
  28.             Interface patch-tun
  29.                 type: patch
  30.                 options: {peer=patch-int}
  31.     Bridge br-provider
  32.         Controller "tcp:127.0.0.1:6633"
  33.             is_connected: true
  34.         fail_mode: secure
  35.         Port phy-br-provider
  36.             Interface phy-br-provider
  37.                 type: patch
  38.                 options: {peer=int-br-provider}
  39.         Port "ens224"
  40.             Interface "ens224"
  41.         Port br-provider
  42.             Interface br-provider
  43.                 type: internal
  44.     ovs_version: "2.10.1"
复制代码
Neutron Open vSwitch mechanism driver(Compute)


  • 软件包
  1. $ yum install openstack-neutron-openvswitch ipset -y
复制代码

  • 配置
  1. # /etc/neutron/neutron.conf
  2. [DEFAULT]
  3. transport_url = rabbit://openstack:fanguiju@controller
  4. auth_strategy = keystone
  5. [keystone_authtoken]
  6. www_authenticate_uri = http://controller:5000
  7. auth_url = http://controller:5000
  8. memcached_servers = controller:11211
  9. auth_type = password
  10. project_domain_name = default
  11. user_domain_name = default
  12. project_name = service
  13. username = neutron
  14. password = fanguiju
  15. [oslo_concurrency]
  16. lock_path = /var/lib/neutron/tmp
  17. # /etc/neutron/plugins/ml2/openvswitch_agent.ini
  18. [ovs]
  19. local_ip = 10.0.0.2
  20. [agent]
  21. tunnel_types = vxlan
  22. l2_population = True
  23. # /etc/nova/nova.conf
  24. ...
  25. [neutron]
  26. url = http://controller:9696
  27. auth_url = http://controller:5000
  28. auth_type = password
  29. project_domain_name = default
  30. user_domain_name = default
  31. region_name = RegionOne
  32. project_name = service
  33. username = neutron
  34. password = fanguiju
复制代码

  • Open vSwitch
  1. $ systemctl enable openvswitch
  2. $ systemctl start openvswitch
  3. $ systemctl status openvswitch
复制代码

  • 启动服务
  1. $ systemctl restart openstack-nova-compute.service
  2. $ systemctl enable neutron-openvswitch-agent.service
  3. $ systemctl start neutron-openvswitch-agent.service
  4. $ systemctl status neutron-openvswitch-agent.service
  5. [root@compute ~]# ovs-vsctl show
  6. 80d8929a-9dc8-411c-8d20-8f1d0d6e2056
  7.     Manager "ptcp:6640:127.0.0.1"
  8.         is_connected: true
  9.     Bridge br-tun
  10.         Controller "tcp:127.0.0.1:6633"
  11.             is_connected: true
  12.         fail_mode: secure
  13.         Port br-tun
  14.             Interface br-tun
  15.                 type: internal
  16.         Port patch-int
  17.             Interface patch-int
  18.                 type: patch
  19.                 options: {peer=patch-tun}
  20.     Bridge br-int
  21.         Controller "tcp:127.0.0.1:6633"
  22.             is_connected: true
  23.         fail_mode: secure
  24.         Port br-int
  25.             Interface br-int
  26.                 type: internal
  27.         Port patch-tun
  28.             Interface patch-tun
  29.                 type: patch
  30.                 options: {peer=patch-int}
  31.     ovs_version: "2.10.1"
复制代码
NOTE:因为现在我们只是启用了 VxLAN 类型网络,所以只需要 OvS br-tun、br-int,而无需 br-provider。

  • Verify
  1. [root@controller ~]# openstack network agent list
  2. +--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
  3. | ID                                   | Agent Type         | Host       | Availability Zone | Alive | State | Binary                    |
  4. +--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
  5. | 41925586-9119-4709-bc23-4668433bd413 | Metadata agent     | controller | None              | :-)   | UP    | neutron-metadata-agent    |
  6. | 43281ac1-7699-4a81-a5b6-d4818f8cf8f9 | Open vSwitch agent | controller | None              | :-)   | UP    | neutron-openvswitch-agent |
  7. | b815e569-c85d-4a37-84ea-7bdc5fe5653c | DHCP agent         | controller | nova              | :-)   | UP    | neutron-dhcp-agent        |
  8. | d1ef7214-d26c-42c8-ba0b-2a1580a44446 | L3 agent           | controller | nova              | :-)   | UP    | neutron-l3-agent          |
  9. | f55311fc-635c-4985-ae6b-162f3fa8f886 | Open vSwitch agent | compute    | None              | :-)   | UP    | neutron-openvswitch-agent |
  10. +--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
复制代码
Horizon(Controller)


  • 软件包
  1. $ yum install openstack-dashboard -y
复制代码

  • 配置
  1. # /etc/openstack-dashboard/local_settings
  2. ...
  3. OPENSTACK_HOST = "controller"
  4. ...
  5. # Allow all hosts to access the dashboard
  6. ALLOWED_HOSTS = ['*', ]
  7. ...
  8. # Configure the memcached session storage service
  9. SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
  10. CACHES = {
  11.     'default': {
  12.          'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
  13.          'LOCATION': 'controller:11211',
  14.     }
  15. }
  16. ...
  17. # Enable the Identity API version 3
  18. OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
  19. ...
  20. # Enable support for domains
  21. OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
  22. ...
  23. # Configure API versions
  24. OPENSTACK_API_VERSIONS = {
  25.     "identity": 3,
  26.     "image": 2,
  27.     "volume": 2,
  28. }
  29. ...
  30. OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'
  31. ...
  32. OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
  33. ...
  34. OPENSTACK_NEUTRON_NETWORK = {
  35.     'enable_router': True,
  36.     'enable_quotas': True,
  37.     'enable_ipv6': True,
  38.     'enable_distributed_router': False,
  39.     'enable_lb': False,
  40.     'enable_firewall': False,
  41.     'enable_vpn': False,
  42.     'enable_ha_router': False,
  43.     'enable_fip_topology_check': True,
  44.     'supported_vnic_types': ['*'],
  45.     'physical_networks': [],
  46. }
  47. # /etc/httpd/conf.d/openstack-dashboard.conf
  48. WSGIDaemonProcess dashboard
  49. WSGIProcessGroup dashboard
  50. WSGISocketPrefix run/wsgi
  51. WSGIApplicationGroup %{GLOBAL}
  52. WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi
  53. Alias /dashboard/static /usr/share/openstack-dashboard/static
  54. <Directory /usr/share/openstack-dashboard/openstack_dashboard/wsgi>
  55.   Options All
  56.   AllowOverride All
  57.   Require all granted
  58. </Directory>
  59. <Directory /usr/share/openstack-dashboard/static>
  60.   Options All
  61.   AllowOverride All
  62.   Require all granted
  63. </Directory>
复制代码

  • 启动服务
  1. $ systemctl restart httpd.service memcached.service
  2. $ systemctl status httpd.service memcached.service
复制代码

  • Verify:访问 http://controller/dashboard 登录页面。



Cinder(Controller)


  • 准备 LVM 后端存储
  1. $ yum install lvm2 device-mapper-persistent-data -y
  2. $ cat /etc/lvm/lvm.conf
  3. devices {
  4. ...
  5. filter = [ "a/sdb/", "r/.*/"]
  6. $ systemctl enable lvm2-lvmetad.service
  7. $ systemctl start lvm2-lvmetad.service
  8. $ systemctl status lvm2-lvmetad.service
  9. $ pvcreate /dev/sdb
  10. $ vgcreate cinder-volumes /dev/sdb
复制代码

  • 添加 Cinder 用户及其鉴权信息
  1. $ openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
  2. $ openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3
  3. $ openstack user create --domain default --password-prompt cinder
  4. $ openstack role add --project service --user cinder admin
  5. $ openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(project_id\)s
  6. $ openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(project_id\)s
  7. $ openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(project_id\)s
  8. $ openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s
  9. $ openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s
  10. $ openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s
  11. [root@controller ~]# openstack catalog list
  12. +-----------+-----------+------------------------------------------------------------------------+
  13. | Name      | Type      | Endpoints                                                              |
  14. +-----------+-----------+------------------------------------------------------------------------+
  15. | nova      | compute   | RegionOne                                                              |
  16. |           |           |   internal: http://controller:8774/v2.1                                |
  17. |           |           | RegionOne                                                              |
  18. |           |           |   admin: http://controller:8774/v2.1                                   |
  19. |           |           | RegionOne                                                              |
  20. |           |           |   public: http://controller:8774/v2.1                                  |
  21. |           |           |                                                                        |
  22. | cinderv2  | volumev2  | RegionOne                                                              |
  23. |           |           |   admin: http://controller:8776/v2/a2b55e37121042a1862275a9bc9b0223    |
  24. |           |           | RegionOne                                                              |
  25. |           |           |   public: http://controller:8776/v2/a2b55e37121042a1862275a9bc9b0223   |
  26. |           |           | RegionOne                                                              |
  27. |           |           |   internal: http://controller:8776/v2/a2b55e37121042a1862275a9bc9b0223 |
  28. |           |           |                                                                        |
  29. | neutron   | network   | RegionOne                                                              |
  30. |           |           |   internal: http://controller:9696                                     |
  31. |           |           | RegionOne                                                              |
  32. |           |           |   admin: http://controller:9696                                        |
  33. |           |           | RegionOne                                                              |
  34. |           |           |   public: http://controller:9696                                       |
  35. |           |           |                                                                        |
  36. | glance    | image     | RegionOne                                                              |
  37. |           |           |   admin: http://controller:9292                                        |
  38. |           |           | RegionOne                                                              |
  39. |           |           |   public: http://controller:9292                                       |
  40. |           |           | RegionOne                                                              |
  41. |           |           |   internal: http://controller:9292                                     |
  42. |           |           |                                                                        |
  43. | keystone  | identity  | RegionOne                                                              |
  44. |           |           |   admin: http://controller:5000/v3/                                    |
  45. |           |           | RegionOne                                                              |
  46. |           |           |   public: http://controller:5000/v3/                                   |
  47. |           |           | RegionOne                                                              |
  48. |           |           |   internal: http://controller:5000/v3/                                 |
  49. |           |           |                                                                        |
  50. | placement | placement | RegionOne                                                              |
  51. |           |           |   internal: http://controller:8778                                     |
  52. |           |           | RegionOne                                                              |
  53. |           |           |   public: http://controller:8778                                       |
  54. |           |           | RegionOne                                                              |
  55. |           |           |   admin: http://controller:8778                                        |
  56. |           |           |                                                                        |
  57. | cinderv3  | volumev3  | RegionOne                                                              |
  58. |           |           |   internal: http://controller:8776/v3/a2b55e37121042a1862275a9bc9b0223 |
  59. |           |           | RegionOne                                                              |
  60. |           |           |   admin: http://controller:8776/v3/a2b55e37121042a1862275a9bc9b0223    |
  61. |           |           | RegionOne                                                              |
  62. |           |           |   public: http://controller:8776/v3/a2b55e37121042a1862275a9bc9b0223   |
  63. |           |           |                                                                        |
  64. +-----------+-----------+------------------------------------------------------------------------+
复制代码

  • 软件包
  1. $ yum install openstack-cinder targetcli python-keystone -y
复制代码

  • 配置
  1. # /etc/cinder/cinder.conf
  2. [DEFAULT]
  3. my_ip = 172.18.22.231
  4. enabled_backends = lvm
  5. auth_strategy = keystone
  6. transport_url = rabbit://openstack:fanguiju@controller
  7. glance_api_servers = http://controller:9292
  8. [database]
  9. connection = mysql+pymysql://cinder:fanguiju@controller/cinder
  10. [keystone_authtoken]
  11. auth_uri = http://controller:5000
  12. auth_url = http://controller:5000
  13. memcached_servers = controller:11211
  14. auth_type = password
  15. project_domain_id = default
  16. user_domain_id = default
  17. project_name = service
  18. username = cinder
  19. password = fanguiju
  20. [oslo_concurrency]
  21. lock_path = /var/lib/cinder/tmp
  22. [lvm]
  23. volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
  24. volume_group = cinder-volumes
  25. iscsi_protocol = iscsi
  26. iscsi_helper = lioadm
  27. # /etc/nova/nova.conf
  28. [cinder]
  29. os_region_name = RegionOne
复制代码

  • 创建 Cinder 数据库
  1. $ CREATE DATABASE cinder;
  2. $ GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'fanguiju';
  3. $ GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'fanguiju';
复制代码

  • 初始化 Cinder 数据库
  1. $ su -s /bin/sh -c "cinder-manage db sync" cinder
复制代码

  • 启动服务
  1. $ systemctl restart openstack-nova-api.service
  2. $ systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
  3. $ systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
  4. $ systemctl status openstack-cinder-api.service openstack-cinder-scheduler.service
  5. $ systemctl enable openstack-cinder-volume.service target.service
  6. $ systemctl start openstack-cinder-volume.service target.service
  7. $ systemctl status openstack-cinder-volume.service target.service
复制代码

  • Verify
  1. [root@controller ~]# openstack volume service list
  2. +------------------+----------------+------+---------+-------+----------------------------+
  3. | Binary           | Host           | Zone | Status  | State | Updated At                 |
  4. +------------------+----------------+------+---------+-------+----------------------------+
  5. | cinder-scheduler | controller     | nova | enabled | up    | 2019-04-25T09:26:49.000000 |
  6. | cinder-volume    | controller@lvm | nova | enabled | up    | 2019-04-25T09:26:49.000000 |
  7. +------------------+----------------+------+---------+-------+----------------------------+
复制代码
至此,最精简的 OpenStack 手动部署就完成了,后面可以自己尝试启动一台 Boot from Image 的虚拟机。

- END -

关于 “云物互联” 微信公众号:
欢迎关注 “云物互联” 微信公众号,我们专注于云计算、云原生、SDN/NFV、边缘计算及 5G 网络技术的发展及应用。热爱开源,拥抱开源!


技术即沟通
化云为雨,落地成林
之海 发表于 2023-10-18 04:06:08|来自:北京 | 显示全部楼层
该篇文章主要是在实际工作中提炼并总结出来,在此作为记录,可以作为企业通用私有云指南来阅读,当然具体情况还是要根据实际情况规划并实施。下面阅读需要有VMWare基础,并了解路由交换的基础知识。
下面我将按照下面模块展开:

  • 背景介绍
  • 网络改造
  • 版本升级
  • 线路割接
  • 注意事项
背景介绍

某公司线下自建机房,杭州和北京各一套,物理服务器杭州100台左右,北京50台内,线下承载的业务都是测试和开发环境,以及一些内部信息化相关系统和业务,线上正式环境都在公有云上,在下面介绍中北京忽略,主要以杭州线下环境展开。
杭州机房服务器主要是以部署VMWare为主,其他都是一些单纯物理服务器和税务相关。
杭州服务器VMWare有两套,主要是以存储方式的不同区分。一套是比较传统的共享存储模式,一套是VMWare vSAN模式,可看一下官方架构图:


网络改造

因历史遗留问题或是当初的预算问题,导致机房Underlay(物理)层网络都存在单点故障。
一是机房核心层(Core Switch)单设备,上联单链路,连接总核心(Total Core Switch)
二是机房接入层(TOR Switch)单设备,下联单链路,连接戴尔服务器(Dell Server Machine)
来看下网络拓扑:


上图中可以看出Core Switch是单台,作为机房的核心,存在单点故障,高可靠性完全谈不上;同时机房核心到总核心是单链路(图中未画出),故链路也存在链路单点故障,也是隐患;物理服务器(这里主要是x86_64架构的服务器)除了iDrac(带外)单网口,其他管理网,业务网,存储网都是单网口,业务层面也是存在安全隐患。
网络改造如下:

  • Core Switch新增一台,同型号交换机组建堆叠,刚好存留下的交换机带堆叠口,只需采购堆叠线即可,1000元(堆叠线费用)以内完成核心层高可用改造。
  • 接入层两两台交换机组建堆叠(业务口组建堆叠,利旧设备),这个后面说到VMWare在展开具体说明原因。
  • 服务器管理网口两个,业务口两个,存储两个。
如下拓扑图:


网络改造遵循高可用原则和成本并行,考虑SLA的时候结合SLI和SLO并行。
上面的完成了基本的机房网络高可用改造,需要注意几点:

  • 能用技术解决的问题不要增加额外成本。
  • 网络设备利旧的情况下,网络设备固件和补丁安排到最新稳定版本。
  • 堆叠设备固件和补丁版本必须保持一致。
  • 堆叠配置优先级,主从不要抢占,堆叠脑裂检测需要配置。
  • 如果是相邻的楼宇之间,室外线路尽量用裸光缆。
  • 网络布线必须打标签,并且标签需要规范化和标准化。
  • 路由设计看网络规模大小,大部分企业网内部可静态结合OSPF。
  • 网段规划要有规律并有扩容空间。
版本升级

VMWare现状在背景一栏有说明,目前VMWare有两套,一套是共享存储,一套是vSAN,为啥要用两套,这是历史遗留和技术债的问题。

因共享存储IO性能好,目前已经趋向给测试环境使用,主要是承载内部测试环境(k8s),vSAN环境因服务器型号偏老,磁盘是HDD+SSD混合部署,而且SSD缓存盘还不大,SSD和HDD比例达到1:10几,IO性能不满足测试环境需求,更多给到开发使用或者不是很重要的环境使用。

VMWare和vSAN如何部署和使用,在此不表,感兴趣还是去看全套教程或者官网。在这里主要分享下VMWare版本升级和服务器固件版本基线的处理和工具分享。
主要动力是VMWare爆出安全漏洞问题,为了配合安全部门的需求,以及历史积累的因固件导致的故障,决定在此升级物理服务器固件和ESXI的版本,下表是我目前版本情况:


主要升级的是共享存储那一套的ESXI版本,vCenter版本不升级,而vCenter 7.0的版本可纳管和配置互导入的版本依赖如下:


vCenter之间机器相互导入,vCenter 6.5可直接导入到vCenter 6.7和vCenter 7.0,但是vCenter 6.0不可以导入vCenter 7.0。可以发现规律,版本之间相差2个版本以上就无法向下兼容,需要过度中间版本进行。
共享存储环境的ESXI 6.0 u3a版本升级到ESXI 6.7 u3版本,升级ESXI,把需要升级的机器中的虚拟机进行迁移到其他宿主机中,vMotion的强大可以不断网迁移,就是虚拟机丢几个包,不影响;就这样循环下去,一台一台升级就可以,但是在此升级ESXI之前需要升级物理服务器固件和BIOS固件,我在这里推荐Dell的OpenManage,可以对Dell品牌的设备进行iDrac管理,有了它就不用天天跑机房,蹲机房用U盘升级或者其他方式升级了。

OpenManage基本情况:

  • 批量发现设定的网段,自动寻找iDrac信息,并纳管到OpenManage
  • 收集硬件信息,主要对硬件设备信息监控和报警
  • 设置服务器硬件固件和驱动基线,并自动更新



OpenManage强力推荐,上手很快,固件和驱动升级很快就完成了,接下来升级ESXI版本到ESXI 6.7u3版本,后续看情况是否升级到7.0版本,目前ESXI已经到了8.0版本,不过我不建议用太新的版本。
升级方式:

  • OpenManage调用虚拟控制台,远程挂载安装包,进行升级,具体步骤就不展示,很简单的,安装提示升级即可。
  • 针对老旧服务器,iDrac没有带企业版,虚拟控制台不可用,只能去机房升级ESXI了,当然固件和驱动还是可以用OpenManage啊,还是很方便。
踩过的坑:

  • iDrac和BIOS版本升级,如果版本差距过大,需要先升级到中间版本过度
改造后虚拟机网络情况:


如果看不明白上面的图,就看下面的官方图:


注意事项:

  • vSAN下的分布式交换机,交换机不需要分开,不需要创建多个交换机,如果需要做和物理交换机做LACP动态绑定,可根据不同业务分开交换机。
  • 可以在单个分布式交换机下创建多个上行链路端口组和分布式端口组,不同的端口组做不同的功能,比如业务端口组、管理端口组、存储端口组(vSAN流量)。
  • vMotion流量可以设置在某个空闲并且带宽大的端口组上。
  • EVC最好开启。
  • 分布式交换机,可以理解为实际物理机交换机和一个虚拟交换机互联,故端口需要配置为vlan trunk。
  • 共享存储环境都是使用标准交换机,没有使用分布式交换机。
  • 历史遗留的技术债很多,后续持续改进吧。
线路割接

为保障业务不停机,在线路割接的过程,都是提前配置好交换机和做好堆叠和业务配置。
服务器线路新增,由于是老的交换机和切换的堆叠交换机是并行运行,故业务不中断。
注意事项


  • 升级之前多看官方文档,特别是新版本不了解的情况下。
  • 需要对VMWare vSphere、vCenter、vSAN架构和内部功能有全面细致的了解。
  • 做共享存储服务器做存储的时候,需要注意iSCSI适配器的识别情况,以及共享存储服务器的IO性能是否满足你的业务。
  • vSAN做分布式存储的时候就需要确定服务器规格,特别是HDD和SSD的组合比例,实际业务需要的性能,要做实际测试。
  • HA和DRS开启需要确定你实际物理服务器的容量,需要评估业务可靠性要求,然后定义合适的策略,以满足业务需求。
  • 其他情况具体情况具体考虑,太细节的问题需要去查看官方文档,如果不放心,最好做实际测试。
VMWare不适合分享零散的文章,建议去看官方文档比较好,这里这是提供一些注意事项和经验,欢迎有兴趣的朋友一起交流。
csyxd 发表于 2023-10-18 04:06:18|来自:北京 | 显示全部楼层
毫无疑问,今天上云不仅是企业的“必选项”,更是一个“多选项”,特别是随着企业混合云的加速使用或是展开多云战略的探索和实践,都让企业面向云端的管理变得越来越复杂化。
这种“复杂化”主要体现在两个方面:一方面是过去企业上云,是以基础设施资源为中心,以传统“烟囱式”应用迁移上云为主要方式,但带来的问题是业务应用本身并不是原生于云,这就导致企业应用与云之间,需要不断的适配和优化,同时也不符合应用原生于云,长于云的大趋势;另一方面是随着分布式云的兴起、企业工作负载的不断增加,也让企业的业务应用部署从过去相对静态的架构升级到动态的架构,从传统的、单一的云环境开始转向混合云、边缘云乃至多云的环境,这就给企业带来了更多的挑战。




也正是洞察到这种前所未有的变化,VMware在去年10月正式发布了“跨云”战略(VMware Cross-Cloud Services),依托全栈式、集成化的跨云服务方案,VMware希望能够为企业提供更快、更智能的上云新路径,让企业在任意云上自由灵活地构建、运行和保护应用,真正地让企业上云从“天堑”变“通途”。
那么,VMware的“跨云”战略究竟包含了哪些关键内容,它能够为企业带来哪些与众不同的价值?同时VMware全新的“跨云”战略,又将如何落地中国市场呢?在日前举办的VMworld 2021中国线上大会上,VMware的领导团队、各业务部门的技术负责人、客户和合作伙伴就为大家带来了VMware最新技术和解决方案的全面介绍。




正如VMware全球副总裁、大中华区总裁原欣所言:“在中国,我们的许多客户都希望能够希望利用云技术实现快速扩展,从而为自己的客户提供强有力的支持。今年的VMworld大会,我们将发布多项创新的产品组合,包括现代化应用系列工具和平台,多云基础架构和解决方案,随处可用的数字化空间和边缘计算,以及简单易用的管控平面,无论客户处于数字化转型的哪一阶段,我们都有相应的解决方案来帮助客户,为客户的数字化转型之旅提供帮助。”
助企业全面驾驭多云架构
事实上,对大部分企业而言,过去通常都会认为稳定的生产环境至关重要,而单一的云基础设施或许更加稳定和安全,大多数企业开始也没有将多云作为公司的业务重点,但随着企业上云步伐的加快,却发现无论是单纯的私有云或公有云都已经很难满足企业现有业务应用和工工作负的需求,多云场景正变得越来越普遍。统计数据也显示,在全球超过90%的企业和组织有多云战略的需求,仅有6%的企业选择单一公有云,而继续坚持单一私有云的企业更是仅有1%。
那么,是什么原因导致了这种变化呢?对此,VMware资深总监兼中国区云平台部门总经理宋向军表示,这是多云的潜力以及新工作负载助推的必然,尤其是多云提供的众多云服务,良好的应用性能、可迁移性是赋能企业快速业务创新的重要技术手段,但与此同时选择多云架构必然也伴随着一系列新挑战的出现。




具体来说,选择众多的云服务就意味着企业需要在多个云服务商提供的每一个云上构建一套独立的管理流程和体系,因此如何对多云服务进行统一的低成本管理变得非常重要。同时,多云环境也给企业的开发和应用团队带来了难以单独监控和识别的难题。此外,在跨云迁移方面,多个数据中心和云之间也带来了新的“阻碍”,那就是企业很难灵活和实时的实现跨云的迁移工作。
值得注意的是,多云环境下,不同云服务商的不同的审批流程也会导致企业合规性问题的增加,加上没有统一的策略保障,更让多云之间的数据交互变得难上加难。从这个角度来说,企业选择多云策略,一定要尽量较少艰难的取舍,最大限度地提高灵活性,并能够确保对工作负载提供一致的企业级保护。
为此,VMware将成熟可靠的云技术和云原生产品、沉淀了VMware十多年全球大型客户云平台建设与运维,以及与全球众多伙伴合作积累的丰富经验打造出了全新的多云架构平台——VMware Cloud,该多云架构平台立足于VMware强大的SDDC产品(vSphere、vSAN、NSX和云管理产品的最新版本和功能),能够将管理体验一致地延伸到公有云,其产品组合统一解决了企业所面临的成本、合规、迁移、监控和安全等方面的挑战,能够让不同的云服务可以更好地发挥各自的特长,其最大的价值和优势就在于“一致性”。




所谓“一致性”指的是,借助VMware Cloud企业不仅可以让业务和应用在虚拟机或者容器中运行,同时还能实现一致的基础设施、一致的运维平台、一致的网络管理、一致的开发体验和一致的安全,这就让企业在多云环境中具备了多层管理的“可见性”。
在这背后,可以说正是在VMware跨多个技术层面的解决方案上实现的,加上VMware这套多云架构管理方案还是唯一可以在任何云环境中自由灵活运行的方案,因此这也让企业有能力根据自身的发展节奏灵活地实现多云的价值,让多云的价值被发现和被释放。
向多云Kubernetes迁移
众所周知,目前Kubernetes已成为当前最流行的新一代分布式应用平台进行时,因此业界也把Kubernetes称之为新一代的“IaaS”,借助Kubernetes企业在提高资源利用率、简化应用升级和维护、缩短软件开发周期以及对庞大的单一应用实现“容器化”方面都产生了巨大的价值,因此Kubernetes在企业生产环境中的占比情况也越来越高,这也意味着未来应用现代化将成为每一家企业发展的“必由之路”。
在此过程中,企业往往缺乏Kubernetes经验和专业知识,这也让不少企业的应用现代化转型变得“道阻且长”。基于此,VMware早在三年前就为企业构建和部署云原生应用推出了VMware Tanzu,能够在企业构建(Build)、运行(Run)、管理(Manage)现代化应用时起到更多的支撑作用。




但随着企业向多云和跨云迁移,如何基于跨云的Kubernetes平台来大规模运行、管理和监控应用又成为全新的难题,因此VMware Tanzu进一步迭代和演进,让更多的企业利用VMware Tanzu向多云Kubernetes迁移(Tanzu for Kubernetes)变得更加的从容和简单。
在VMware中国研发中心技术总监张海宁看来,Tanzu for Kubernetes既能够满足企业应用现代化转型的当前需要,又能帮助企业实现未来需求的标准化,其具有四大核心能力:
一是,具有一致性的Kubernetes的运行时,能够提供容器即服务并一致地管理应用生命周期;二是,通过VMware Tanzu中的Kubernetes多云管理平面,可以保持对平台的控制力和可见性;三是,具备对大规模的集群进行实时的观察和报警的能力,能够让企业在一个位置监控平台并更快地进行故障排除;最后,是具有强大的数据安全性,能够确保用户的数据无论在集群里面存储、或者是在集群之间进行传输都能受到保护,由此不仅能够帮助企业实现对应用进行平台的转换和技能的构建,同时也能建立标准化的多云平台。
与此同时,针对许多企业在私有云的环境中开始自身的云原生之旅,为了让更多的企业能够更好地实现过渡,VMware也把Kubernetes的运行时嵌入到vSphere中(vSphere with Tanzu),这样企业就无需学习新的工具,或者更改现有的工作流程,就能够开始使用Kubernetes。而在vSphere中嵌入的Kubernetes,也完全与上游开源项目的代码对齐,符合标准的发行版,即使企业未来需要迁移到混合云和多云时,也能使用相同的Kubernetes运行时,进行应用的配置和应用的生命周期管理,由此实现“由始到终”的一致性。




在此基础上,VMware近期还发布了“Tanzu Application Platform”(TAP),这是一款应用感知型平台,以集成化和模块化解决方案的方式,帮助企业在任何版本的Kubernetes上,无缝和平滑地运行企业的应用,可以既为开发人员提供了一条经过编排的生产路径,以实现对应用的大规模管理和操作,由此大大提高了开发人员的工作效率。
除此之外,VMware Marketplace近期还推出了一个全新的功能,那就是增加了业内首个面向开源和ISV组建的多云市场,提供了2000多款经过验证和测试的软件,供开发人员选择和使用,当开发人员把代码写好之后,应用即可在公有云、私有云或者边缘环境中运行起来。重要的是,为了更好的监控和管理这些应用,VMware也提供了Tanzu Mission Control(TMC),以方便开发人员管理不断增长的Kubernetes平台和现代化应用。
不难看出,无论是企业希望实现应用现代化转型,还是希望向多云Kubernetes迁移,VMware Tanzu所提供的端到端和集成式的解决方案,都能帮助企业顺利地实现这一过程,这也是VMware能够在企业应用现代化和多云转型中扮演“护航者”的底气和关键所在。
云网融合与原生安全背后
随着企业向多云架构演进,未来分布式的云原生应用将会逐渐变为主流,微服务等技术迅猛发展,不仅让应用分布在多云上,同时也让数据日益多云化。而这些也对现代网络提出了新的要求,传统的基于工单的手工模式已经无法适应新的变化。
VMware 网络产品研发高级总监韩东海认为,面对这种变化,未来现代网络的运维和使用也必须是自动化的,其核心价值在于无论底层基础设施如何变化,底层的连通性如何变化,用户体验也应该是保持“一致性”,即快速、可靠、安全地从任何地方访问应用。




而VMware云网解决方案则很好的解决了这一难题,该方案具有公有云体验的自动化功能、现代化应用连接和安全服务,以及重构网络安全的解决方案,实现了工作负载全自动化,并能够在虚拟机、容器以及任意云上运行,彻底改变了将网络视为企业网络硬件设备、交换机和路由器的旧思维,以自上而下的视角将用户和应用放在首位。
VMware云网融合方案还融入了云安全和零信任网络,能够支持企业在任意地点实现移动办公,具有灵活性、敏捷性和可扩展性等特点,因此在零信任安全接入、现代化应用连接和多云网络中也能提供很好的支撑作用。




以VMware零信任安全接入为例,其就具有三个方面的优势,包括以“一套Fabric,实现了一致性的接入策略”,背后是因为VMware将VMware UAG安全接入组建融入了SASE和SD-W安,替换掉了企业传统的VPN网关,由此实现了一体化的统一管理;在“零信任接入”能力方面,VMware也能够通过用户身份、设备类型、操作系统、补丁、APP、越狱状态、风险概况等属性提供持续认证,建立丰富的零信任条件访问;此外,还“支持所有云端应用访问”,在保护用户、设备和企业数据的同时,VMware也为数据中心、SaaS和互联网应用提供自由的访问,可以说真正为企业基于环境感知搭建无边界网络访问能力提供了强大的支撑能力。
其实,云网融合中的安全能力其实仅仅只是VMware原生安全策略中的一部分内容,目前VMware原生安全正在全面通过扩充安全产品的组合,并面向端点、工作负载、网络、用户访问点和应用的原生遥测和控制提供安全能力,相比市场上其他解决方案,VMware原生安全有三个重要的特征:
首先,内建而非外挂,相对于外挂式的安全解决方案,VMware原生安全倡导安全内建。内建安全的好处有很多,包括“即时就绪,无需安装”,简单配置一下就可以发挥作用;同时安全性好,外挂式安全产品通常需要部署代理以实现信息收集和管理控制,而这些代理通常也是攻击目标,代理一旦被破坏,安全防护能力也会受损;易用性强,内建式安全防护的管理功能可以很好地与平台相集成,简单易用;此外,资源占用少且性能高,内建安全可以充分利用平台的功能来实现服务,可以采用更精简的设计并针对平台进行深度优化。
其次,主动而非被动,VMware原生安全策略和方案的目的是平台的安全防护,主要是基于平台自身的脆弱性来提供更有针对性的服务。如容器、虚拟化和云平台都是为了实现资源共享,共享的模式可以非常明显地提升资源利用率,但同时也增加了安全风险。因此,VMware原生安全本质上是希望进一步有提升负载和租户之间的隔离性,这种防御性手段是基本的、必需的,通过强化系统自身实现威胁免疫,有效抵抗已知和未知的安全风险。
最后,整合而非孤立,相对于其他IT服务,安全的独立性更强,往往自成体系。这在IT系统相对固化的时代并不是什么大问题,但是随着应用与基础架构的转型,安全服务的低效越来越成为一个拖累。因此,VMware原生安全通过与平台整合,实现了更好的洞察力和控制力。可以针对负载的需求来提供服务,能够根据负载的变化动态调整,而不是通过限制负载的灵活性来保障安全。




由此可见,借助VMware云网融合和原生安全能力的“加持”,企业无疑可以在未来的多云环境下,实现安全、可靠、高效的网络体验,同时也能在安全、可靠的环境中加速上云的步伐。
值得一提的是,除了多云架构、现代化应用、云网络和原生安全之外,在VMworld 2021中国线上大会上,VMware还带来了VMware Workspace ONE 和 Horizon 的产品发展愿景和最新的产品的发布,涵盖员工体验与零信任安全之间的关键关系,以及自动化的作用。与此同时,针对VMware SASE、VMware Secure Access,以及它们对于分布式工作模式的意义也有更加深度的解读。




不仅如此,本次VMworld 2021中国线上大会还特别开设了15个“分会场”,提供包括混合云基础架构、云计算管理、人工智能和机器学习、应用现代化、Tanzu解决方案、阿里云VMware解决方案、数据中心网络、现代应用交付控制、现代应用中的网络、软件定义广域网、统一端点管理、桌面和应用虚拟化、随处可用的工作空间等内容,而这些丰富精彩的内容相信也能为企业更好的实现数字化转型和为通往多云时代的旅程夯实基础和提供准备。
总的来说,今天很多企业已经将云战略逐渐实现落地,并朝着多云架构演进,但其架构、应用和服务的复杂性和多样性也会快速上升,由此也就带来了一系列巨大的挑战,这就必须要求供应商提供更有创造力的产品和方案,同时必须紧紧围绕用户最迫切的需求不断创新求变,而VMware如今正通过全新的“跨云”战略和全面、丰富的技术创新方案助力企业化解这一挑战,可以说这是VMware引领多云时代上云新范式的具体印证,也是其始终领先于时代,更创造时代的真实写照。
truckrong 发表于 2023-10-18 04:06:54|来自:北京 | 显示全部楼层
Vmware在虚拟化的地位类似于大型存储中的EMC、小型机中的IBM、网络中的思科、虚拟桌面中的Citrix、数据库中的Oracle,长期以来一直处于商业垄断地位,具有绝对性的优势,这不仅仅是由于其体量大、历史悠久、有底蕴,而是其真的长期以来处于技术的领先地位,其产品经历了千锤百炼。不仅其虚拟化具有稳定性、性能高等优势,其涵盖的生态工具(虚拟机迁移、虚拟高可用、资源监控、分布式交换机...)的功能特性也是遥遥领先。即使现在已经存在很多的虚拟机实现方案,诸如Citrix开源的Xen、Rethat贡献的KVM以及微软的Hyper-v等等,Vmware的私有云方案在政府机构、国企、银行等领域长期处于绝对优势。在最新的云计算趋势RightScale 2018年云状况调查报告中统计,Vmware vSphere继续领先,采用率为50%,OpenStack约24%(仅供参考)。
因此,我个人认为要想学习OpenStack、云计算、虚拟化技术,对Vmware了解是很必要的,就像学数据库就必须了解Oracle一样。但是毕竟Vmware是商业产品,其代码和技术是不开放的,对于非Vmware员工的大多数人来说,学习Vmware也就仅仅能够停留在了解其原理、部署vsphere以及运维等操作。不过熟悉Vmware的人再去学习其它IaaS产品(如OpenStack)必能举一反三、事半功倍,学习相关概念如似曾相识。
近年来一直在提去IOE,秉承自主可控的理念,主推自研+开源产品替代IBM的小型机、Oracle数据库、EMC存储设备,这里虽然并未明着包含Vmware产品,但从近年来的发展趋势看,服务器趋向于X86,虚拟化方案趋向于KVM,私有云IaaS解决方案趋向于OpenStack。OpenStack可能会像Linux发展趋势一样,越来越稳定、越来越普及,成为开源IaaS实现的标准。从我目前了解的情况看,互联网已经很少再采购Vmware License了,政府机构、金融机构等也正在努力转型加强云化建设上OpenStack逐步取代Vmware。这是未来的发展趋势,但短期内必然不可能彻底取代Vmware,未来很长一段时间仍将占据很大市场份额,毕竟对于很多有钱又图省事的公司或机构来说,维稳是第一要素,仍然会选择稳定的商业虚拟化产品,毕竟Vmware是龙头老大,使用其产品还是很有安全感的,就算其产品出了问题,也很好甩锅(毕竟最牛逼的出问题了,没有什么好骂的),但是如果使用OpenStack出了问题,估计就有一群人开始喷OpenStack有多烂、多不稳定了、为什么当初不选择Vmware。
个人认为学习OpenStack是学习和理解云计算技术生态的最佳途径,这是因为:

  • OpenStack是一个非常庞大的技术生态,涵盖了分布式技术、虚拟化技术、SDN技术、DevOps、高可用技术、备份容灾技术等等,有利于自身知识体系的建立,至少广度上没有问题。
  • OpenStack是目前最流行的IaaS开源实现方案,并且具有非常不错的社区支持(邮件列表、文档、IRC等)以及丰富的互联网资源,这为学习OpenStack提供了非常不错的资源。
  • OpenStack的设计理念具有开放、灵活、可扩展的特点,各个项目组件架构清晰、骨骼脉络清晰,参考如何阅读OpenStack源码,不仅有助于快速学习OpenStack源码,还能从中学习大型开源项目的设计理念和模式。学习OpenStack,可以提升自己的工程能力以及代码功底。
  • 学习OpenStack对其他公有云如腾讯云、阿里云等实现原理也大概有个谱,不用担心学习OpenStack没有用武之地,即使以后不搞OpenStack,去了AWS、阿里也必能轻车熟路、游刃有余。
  • ...
虽然目前主流的OpenStack部署都会采用Libvirt+KVM技术栈,但OpenStack是非常开放的,对于Vmware、PowerVM、X86裸机,OpenStack也能很好的统一纳管起来,作为OpenStack的计算资源池统一管理。OpenStack不仅仅是作为私有云解决方案,还能作为公有云解决方案,目前如京东云、深信服、华为等公有云据传都是基于OpenStack。
前面说了那么多,总结一个点就是以学习Vmware为辅,学习OpenStack为主,注意这是从学习的角度,并不涉及企业的技术选型。如果对OpenStack实现原理感兴趣,可以参考我的专栏OpenStack(虽然已经超过两个月没有更新了==)。
阿强123 发表于 2023-10-18 04:07:29|来自:北京 | 显示全部楼层
题主说的VMware软件应该是VMware的vSphere ESXi和vCenter Server.
Openstack是由很多组件构成的,对外提供统一API而底层实现可以选择各种方式。其中计算组件nova可以使用vSphere作为hypervisor,存储组件cinder可以使用vmdk作为后端存储。
也就是说VMware虚拟化技术和openstack并不矛盾。对于企业应用,目前还没看到有超过vSphere的虚拟化技术,尤其是考虑动态迁移,自动负载均衡等高级虚拟化技术。

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则