Openstack云平台使用入门
“The OpenStack project is an open source cloud computing platform that supports all types of cloud environments. The project aims for simple implementation, massive scalability, and a rich set of features. Cloud computing experts from around the world contribute to the project. ”
OpenStack是一个开源的云计算管理平台项目,是一系列软件开源项目的组合。由NASA(美国国家航空航天局)和Rackspace合作研发并发起,以Apache许可证(Apache软件基金会发布的一个自由软件许可证)授权的开源代码项目。OpenStack为私有云和公有云提供可扩展的弹性的云计算服务。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。
下面我们来看一下,在部署好的一个单机测试环境上如何启动一个实例?
1、创建镜像
(1) 生效管理员环境变量并创建镜像
这里我们使用官方的镜像CentOS-7-x86_64-GenericCloud.qcow2
[root@localhost ~]# ls
admin-openrc demo-openrc
CentOS-7-x86_64-GenericCloud.qcow2 cirros-0.3.4-x86_64-disk.img
[root@localhost ~]# source admin-openrc
#创建镜像命令语法
openstack image create “⾃定义镜像名” --file 镜像⽂件名称 --disk-format 格式化类型 --container-format bare --public
usage:
[root@localhost ~]# openstack image create --file ~/CentOS-7-x86_64-GenericCloud.qcow2 --disk-format qcow2 --container-format bare --public Centos7
[root@localhost ~]# openstack image list
(2)为后面修改root的默认密码做准备
1)给镜像添加一个元数据信息
glance image-update 镜像ID --property hw_qemu_guest_agent=yes
glance image-update 8b8b10b0-7684-44c7-ba7b-d729374eaaad --property hw_qemu_guest_agent=yes #注意修改为自己的实际镜像ID
2)修改controller节点的nova.conf配置文件
vi /etc/nova/nova.conf
在[libvirt]项找到并修改inject_password参数为true,我们直接添加即可
inject_password=true
同样,在计算节点也需要修改,因为我们是分步骤安装的all in one模式,同时修改了。
3)重启nova-api服务
systemctl restart openstack-nova-api.service
2、创建云主机类型
(1)名称:s_flavor、vcpu:1个、ram:1024M、磁盘:10G
usage:
[root@localhost ~]# openstack flavor create --ram 1024 --vcpus 1 --disk 10 --public s_flavor
[root@localhost ~]# openstack flavor list
3、创建项目
(1)项目名称:sangf
项⽬列表查询
# 命令语句 openstack project list
ID:项⽬的唯⼀ID; Name:项⽬名称。
项⽬详情查询
# 命令语句 openstack project show 项⽬名
样例 openstack project show service
查询某⼀项⽬下的所有⽤户
# 命令语句 openstack user list --project=项⽬名
样例 openstack user list --project=service
创建项⽬
#命令语法 openstack project create --domain 域名 --description”对创建项⽬的描述” 项⽬名
样例 openstack project create --domain default --description "Service Project" service
usage:
[root@localhost ~]# openstack project create --domain default --description "My Project" --enable sangf
[root@localhost ~]# openstack project list
4、创建租户并设置租户配额
(1)管理用户:sangfor 用户密码:123456
[root@localhost ~]# openstack user create --project sangf --domain default --password 123456 --enable sangfor
[root@localhost ~]# openstack user list | grep sangfor
[root@localhost ~]# openstack role add --project sangf --user sangfor admin
(2)项目配额:虚拟内核3个、内存4G、实例5个,其他配置默认。
[root@localhost ~]# openstack quota set --ram 1024 --instances 5 --cores 3 sangf
[root@localhost ~]# openstack quota show sangf | grep -E "ram|instances|cores"
(3)编写租户sangfor环境变量
[root@localhost ~]# cp -r admin-openrc sangfor-openrc
[root@localhost ~]# vi sangfor-openrc
unset OS_SERVICE_TOKEN
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USERNAME=sangfor
export OS_PASSWORD=123456
export OS_AUTH_URL=http://controller:35357/v3
export OS_PROJECT_NAME=sangf
export OS_IDENTITY_API_VERSION=3
#export OS_REGION_NAME=RegionOne
5、创建共享网络和私有网络
查看⽹络服务状态
#命令语句
systemctl status neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service
#服务解析:
1)neutron-server.service ⽤于接受apI请求创建⽹络,⼦⽹,路由器等。
2)neutron-linuxbridge-agent.service报告状态;处理RPC API;实现neutron中定义的⽹络拓扑。
3)neutron-dhcp-agent.service ⽤于创建和管理虚拟DHCP Server。
4)neutron-metadata-agent.service neutron-metadata-agent运⾏在⽹络节点上,作为中间⼈使instance可以访问请求nova-api-metadata。
(1)共享网络名:public-net,由admin用户创建,并设置共享
#查看物理网络类型"provider-network-type"
[root@localhost ~]# grep type_drivers /etc/neutron/plugin.ini
type_drivers = flat,vlan,gre,vxlan,geneve
#显示网络类型为flat
#查看物理网络名称"provider-physical-network"
[root@localhost ~]# grep ^flat /etc/neutron/plugin.ini
flat_networks = provider
[root@localhost ~]# grep ^flat /etc/neutron/plugins/ml2/ml2_conf.ini
flat_networks = provider
usage:
#命令语法
openstack network create --provider-physical-network 物理网络名称 --provider-network-type flat --share --external
#-share 允许所有项目都可以使用该网络 #-external 定义连通外部的虚拟网络 #物理网络名称,由ml2_conf.ini文件的flat_networks确定
#物理网络类型,映射到虚拟主机的网卡eth0,由linuxbridge_agent.ini文件中的physical_interface_mappings确定
[root@localhost ~]# openstack network create --project sangf --os-username admin --external --enable --share --provider-network-type flat --provider-physical-network provider public-net
[root@localhost ~]# openstack network list
(2)创建共享网络子网:subnet-pub,网段为本地eth0
[root@localhost ~]# hostname -I
192.168.17.222 192.168.122.1
[root@localhost ~]# openstack subnet create --subnet-range 10.0.10.0/24 --gateway 10.0.10.2 --network public-net --dns-nameserver 114.114.114.114 --allocation-pool start=10.0.10.151,end=10.0.10.200 --dhcp subnet-pub
[root@localhost ~]# openstack subnet list
(3)私有网络名:private-net,由sangfor用户创建
在openstack中,网络管理是比较复杂且难度较大的一个知识点,本实验租户网络使用linuxbridge,计算节点基于 Self-service networks,在 linuxbridge 环境中,一个数据包从 Instance 云主机实例发送到物理网卡会经过下面几个类型的设备:
· tap Interface : tapNxxx(N 为 0、1、2.....)
· Linux Bridge : brqxxx
· vlan Interface : ethX.Y(或ensX.Y;X 为 Interface 的序号,Y 为 vlan id。)
· vxlan Interface : vxlan-Z(Z 是 VNI)
· 物理 Interface: ethx(或ensx;x 为 Interface 的序号)
[root@localhost ~]# source sangfor-openrc
[root@localhost ~]# openstack network create --project sangf --os-username sangfor --enable private-net
[root@localhost ~]# openstack network list
(4)创建私有网络子网:subnet-private,网段为192.168.10网段
[root@localhost ~]# openstack subnet create --subnet-range 192.168.10.0/24 --gateway 192.168.10.254 --network private-net --dns-nameserver 8.8.8.8 --allocation-pool start=192.168.10.151,end=192.168.10.200 --dhcp subnet-private
[root@localhost ~]# openstack subnet list
6、创建路由,并关联内外网
(1)名称:s_router
[root@localhost ~]# source admin-openrc
[root@localhost ~]# openstack router create --enable s_router
[root@localhost ~]# openstack router list
(2)设置外部网关
选择外部网络public-net设置网关:
usage:
[root@localhost ~]# openstack router set --external-gateway public-net s_router
[root@localhost ~]# openstack router show s_router | grep external_gateway
(3)设置内部接口
usage:
[root@localhost ~]# openstack router add subnet s_router subnet-private
[root@localhost ~]# openstack router show s_router | grep interfaces_info
网络拓扑:
7、创建安全组
(1)名称:s_sec
[root@localhost ~]# openstack security group create s_sec
[root@localhost ~]# openstack security group list
(2)开放22号端口
[root@localhost ~]# openstack security group rule create --protocol tcp --dst-port 22 --ethertype IPv4 --ingress s_sec
[root@localhost ~]# openstack security group rule list s_sec
8、生成密钥对
(1)名称:s_key
[root@localhost ~]# openstack keypair create s_key > ~/s-key.pem
(2)密钥需保存在本地:cd /root/
[root@localhost ~]# ll
(3)设置密钥文件为仅可读
[root@localhost ~]# chmod 400 s-key.pem
[root@localhost ~]# ll
9、创建云主机实例,并分配浮动IP
(1)使用镜像:Centos7、使用云主机类型:s_flavor、使用网络:private-net、使用安全组:s_sec、使用密钥对:s_key,名称:s_cloud
[root@localhost ~]# source admin-openrc
[root@localhost ~]# openstack server create --image Centos7 --key-name s_key --security-group s_sec --flavor s_flavor --network private-net s_cloud
其他练习示例:
openstack server create --image cirros --flavor m1.nano --network private-net s_cloud02
openstack server create --image cirros --key-name s_key --security-group s_sec --flavor m1.nano --network private-net s_cloud03
[root@localhost ~]# openstack server list
重置镜像默认密码为自定义:
稍等片刻......待实例云主机创建完成能访问之后:
openstack server set --root-password 实例ID
[root@localhost ~]# openstack server set --root-password be70cf30-3b91-4d17-8917-9e94d5928899 #改为自己实际的实例id
根据提示设置输入自定义密码,即root登录密码。
(2)生成浮动IP
[root@localhost ~]# openstack floating ip create public-net
[root@localhost ~]# openstack floating ip list
(3)给云主机绑定浮动IP
[root@localhost ~]# openstack server add floating ip s_cloud 10.0.10.153 #改为自己实际的浮动IP地址
[root@localhost ~]# openstack server list
10、远程连接云主机,并查看网络信息
[root@localhost ~]# ssh -i s-key.pem root@10.0.10.153
[root@localhost ~]# ifconfig
文章作者傅先全:深信服云计算认证专家,产业教育中心资深讲师,曾任职于中国电信集团、华晟经世教育集团,分别担任云平台资深架构师、IT课程总监及名师团金牌讲师、多所高校特聘专家讲师;十余年云计算、大数据行业从业经验,在企业信息化建设、企业项目管理、云平台架构设计等方面有较强的实战经验;研究方向为云计算、大数据技术等,具有丰富的知识转换以及课程交付经验;同时,在院校学科建设、人才培养、项目科研、职业技能人才认证等方面具有丰富的产教融合体系建设与组织经验。



