hello,大家好,这里是费冰。在使用OpenStack的过程中,固然我们可以通过 web 页面完成绝大多数的操作,但作为管理人员,不能不知晓 OpenStack 命令行的有关知识。
OpenStack 是一个开源的公有云和私有云的云计算平台,一系列的相关项目提供了一套云基础设施的解决方案。当我们提及OpenStack命令时,一般指两种命令。
其一,OpenStackClient 项目提供了一个统一的命令行客户端,它使我们能够通过易于使用的命令访问项目API,创建和管理OpenStack中的资源。
其二,大多数的OpenStack项目为每个服务提供了一个命令行客户端,我们可以通过项目命令来创建和管理项目中的有关资源。
在命令行或脚本中执行命令之前,我们必须提供 OpenStack 凭据,这些命令才能够成功运行。
在使用 OpenStack API 前,我假设你熟悉 HTTP, RESTful Web服务,OpenStack服务和JSON或XML数据序列化格式。
本文档使用多种排版约定。
其实是我用这个语雀还不太熟,这和markdown还不太一样,很多语法不是共通的,而且显示代码块也不是我常用的格式,那么为了阅读不烧cpu。作以下约定。
这里是代码,比如说 openstack --version
为了方便理解和阅读,在介绍每个命令时,会在其后给出示例。
[root@controller ~]# openstack --version # 这里是演示的代码 openstack 5.4.0 #这里是代码的输出
并且,在命令中的大写字段为需要替换的在实际环境中的具体字段。
本文档参考了无名小歌的博客,以下是博客原文。
【收藏级】88条关于OpenStack命令的手册(常看常新)
https://blog.csdn.net/qq_48450494/article/details/125557500
为了查看 openstack 客户端版本号,运行以下命令:
openstack --version
示例
[root@controller ~]# openstack --version openstack 5.4.0
openstack user list
示例
openstack catalog list
openstack service list
openstack user create --domain Default --password PASSWORD USERNAME
openstack role add --project PROJECTNAME --user USERNAME ROLE
openstack service create --name NAME --description “DESCTIPTION” SERVICE
OpenStack使用三个API端点来代表每种服务:admin, internal 和 public。默认情况下,管理API端点允许修改用户和租户而公共和内部API不允许这些操作。
openstack endpoint create --region RegionOne identity public http://controller:5000/v3 openstack endpoint create --region RegionOne identity internal http://controller:5000/v3 openstack endpoint create --region RegionOne identity admin http://controller:5000/v3
public代表公共地址,internal表示组件内部地址,admin则是管理员地址
openstack user show USERNAME
openstack endpoint list
openstack token issue
在openstack中,运行命令行前都必须通过身份验证,否则命令将无法正常运行。
一般想要通过身份验证,我们需要提供以下信息
username 用户的名称
user_domain_name 用户域的名称
password 用户的密码
project_name 项目名称
project_domain_name 项目域的名称
auth_url Keystone认证服务的API地址
identity_api_version 应始终设置为3
我们一方面可以将这些值作为变量传递给openstack命令行,另一方面可以在环境中设置这些变量,显然在环境中设置更为简便,无需每次使用命令行都声明这些变量。
我们可以编写如下所示的环境变量文件,在系统中加载以便快速通过认证。
export OS_USERNAME=my_username export OS_USER_DOMAIN_NAME=my_user_domain export OS_PASSWORD=my_password export OS_PROJECT_NAME=my_project export OS_PROJECT_DOMAIN_NAME=my_project_domain export OS_AUTH_URL=http://localhost:5000/v3 export OS_IDENTITY_API_VERSION=3
glance在openstack中提供镜像服务,glance中的镜像可以处于以下几种状态之一:
queued glance服务已经创建了镜像的注册表,但是并没有上传实体镜像,这时候镜像大小为0。
saving 表示镜像的原始数据正在上传至glance,需要注意的是,当镜像通过调用 post/images注册并且提供了“x-image-meta-location”信息头,则该镜像不会处于saving状态,因为镜像数据已经在其他的可用位置。
uploading 表示已经进行导入镜像的过程中
importing 表示已经进行导入调用,但是镜像尚未准备就绪供使用
active 表示在glance中完全可用的镜像
deactivated 表示不允许任何非管理员访问镜像。
killed 表示上传镜像数据时发生错误,并且镜像不可读。
deleted glance保留了镜像的信息,但是不再可供使用,该镜像将会在指定的日期自动删除。
pending_delete 类似于删除,但是glance尚未删除镜像数据,该状态下镜像不可恢复。
openstack image list
openstack image show 镜像id/name
openstack image create cirros --disk-format qcow2 --container-format bare --public --file cirros-0.6.1-x86_64-disk.img
参数说明:
disk-format: 磁盘格式,可选项有 raw, vhd, vhdx, vmdk, vdi, iso, ploop qcow2
container-format: 容器格式,可选项有bare, ovf, aki, ari, ami, ova, docker, compressed
--file 指定上传的镜像文件
--public 指定镜像的访问权限,public表示公开可用,也可以设置为--private | --community | --shared
openstack image set 镜像id/name 镜像属性
示例,修改镜像cirrors的最小启动ram和最小启动磁盘
openstack image set cirrors --min-ram 1 --min-disk 2
openstack image delete 镜像id/name
openstack image save 镜像id/name --file 镜像保存文件
网络服务管理一般需要管理员对网络知识作相应了解,例如BGP动态录有,DHCP分发服务,浮动IP端口转发等等,这里我列举几个常用的命令。
网络创建有太多的参数可用,就留给各位补充吧。
openstack network create NETWORK --internal
openstack network create NETWORK --external
可选参数补充:
provider-network-type:虚拟网络类型,例如flat,geneve,gre,vlan,vxlan
privider-physical-network 物理网络名称
project 所属的项目
openstack subnet create SUBNETNAME --subnet-range 192.168.10.0/24 --gateway 192.168.10.2 --network NETWORK
参数说明:
subnet-range:子网范围
gateway: 指定子网的网关
network:指定子网所属的网络
openstack network list
openstack network show NETWORK
openstack network delete NETWORK
如果删除网络前,删除的网络被占用,则删除失败。
openstack router create ROUTER
openstack router set ROUTER --external-gateway NETWORK --fixed-ip subnet=SUBNET,ip-address=192.168.10.10
其中,
external-gateway 用作路由器的外部网络
fixed-ip 路由器的外部网络ip地址
openstack router add subnet ROUTER SUBNET
openstack router list
openstack router show ROUTER
openstack router delete ROUTER
openstack flavor list
openstack flvaor create FLAVOR --ram 1024 --disk 10 --vcpu 2
参数说明:
id 指云主机类型的id,默认创建uuid
ram 指内存大小,单位为MB ,不指定时默认值为256M
disk 磁盘大小,单位为GB,默认值为0
vcpu cpu数量,默认为1
ephemeral 指临时磁盘,单位为GB,默认为0
swap 指swap磁盘,单位为MB
rxtx-factor 指rx/tx因子,默认为1.0
public 云主机类型的权限,public为公开可用,private则为不共享
project 指定一个项目共享云主机类型,必须和private参数同时使用
openstack flavor show FLAVOR
openstack security group list
openstack security group rule list 安全组id/name
openstack security group rule show 规则id
openstack security group create 安全组name
openstack security group delete 安全组id/name
openstack security group rule delete 规则id
安全组规则非常多,常见的有icmp,tcp,udp,dns等等。
安全组规则在添加时需要指定方向,分为入口(ingress)和出口(egress)。
添加安全组规则时还需要选择策略类型,指定如icmp,igmp,tcp,udp的一种。
安全组规则当然还可以指定端口范围或ip,当你需要指定端口范围时,使用dst-port参数,当你需要指定ip时,使用remote-ip参数。需要说明的是,如果你希望指定一个端口,那么dst-port的参数可用是这样 22:22,这就指定22端口。
以下演示从入口方向放行所有icmp,tcp,udp规则
openstack security group rule create --protocol icmp --ingress 安全组name/id openstack security group rule create --protocol tcp --ingress 安全组name/id openstack security group rule create --protocol udp --ingress 安全组name/id
openstack server create --image 镜像id/name --flavor 云主机类型name/id --network 网络name/id 云主机name
参数说明:
image 使用的镜像
flavor 创建云主机应用的云主机类型
network 将创建的云主机连接到的网络
更多可用参数不一一列举。
openstack server list
openstack console log show 云主机name/id
openstack console url show 云主机name/id
说实话我很难区分暂停,挂起,释放。我相信你也是一样,所以让我来解释一下。
暂停,是指将虚拟机的状态保存到内存,暂停中的虚拟机仍然以冻结状态运行。
挂起,这是虚拟机管理器级别的操作,是指将虚拟机的内存保存到磁盘中,会释放虚拟机在宿主机中的资源,由libvirt完成该操作。内存信息会被保存到 /var/lib/libvirt/qemu/save/ 下。当再次启动该虚拟机时,会从该目录下使用内存文件启动,启动完成后,该文件会自动消失。
释放,也叫搁置,目的时将长时间不使用的虚拟机从底层释放从而节约服务器资源。一些长时间不使用的虚拟机,即使处于关机状态,仍然会占用集群资源,因此可用释放来释放资源。
如果虚拟机使用glance镜像创建,则创建一个快照并存储至glance,然后将虚拟机占用的资源从集群中删除;如果虚拟机从cinder存储中创建,则删除虚拟机占用的物理资源但保留磁盘,磁盘状态为保留。
openstack server reboot 云主机name/id openstack server stop 云主机name/id openstack server start 云主机name/id openstack server pause 云主机name/id openstack server unpause 云主机name/id
openstack server suspend 云主机name/id openstack server resume 云主机name/id
openstack server shelve 云主机name/id openstack server unshelve 云主机name/id
在创建云主机快照时,云主机状态应为关机。
openstack server image create 云主机name/id --name 快照name
如果不指定--name,则默认使用云主机name作为快照name
你需要确定nova中配置了scheduler_default_filters参数。
openstack server resize 云主机name/id --flavor 云主机类型name/id openstack server resize --confirm 云主机名称
openstack server add volume 云主机name/id 磁盘id/name
openstack keypair create test
可用重定向将输出结果导入到文件中。
openstack server create --image cirros --flavor os --key-name test 云主机name
这里的key-name参数指定的就是密钥对。
ssh -i test.pem cirros@172.17.0.1
这里的test.pem就是创建密钥对时,将输出重定向保存的文件。
openstack floating ip create 网络name/id --floating-ip-address 172.17.0.1
如果不指定floating-ip-address,则由dhcp服务自动分发ip。
openstack server add floating ip 云主机name/id 浮动ip地址
例如:
openstack server add floating ip cirros 172.17.0.2
openstack volume list
openstack volume create 卷name --size 1 --type __DEFAULT__
参数说明:
size 指定卷大小,单位为GB,此为必须参数
type 指定卷类型
read-only 指定卷为只读,默认情况下为可读写
image 将镜像作为卷资源添加至卷中
openstack volume type create 卷类型name
openstack server add volume 云主机name/id 卷name/id
可选参数:
device 指定卷内部名称
enable-delete-on-termination 意思是云主机被清除后删除卷
disable-delete-on-termination 云主机被清除后保留卷
在卷状态为 available的前提下。
openstack volume set 卷name/id --size 调整的大小
实际上set可以更新很多volume的属性,以下是部分可选参数。
name 设置卷name
size 以GB为单位设置卷大小
type 设置卷类型
在开始之前,你需要自行了解什么是对象存储,以及对象存储是如何存储数据的。
openstack container create 容器name
openstack container list
openstack container show 容器name/id
openstack object create create 容器name/id 文件name/id
openstack object list 容器name/id
openstack object show 容器name/id 对象name/id
openstack object save 容器name/id 对象name/id
openstack object delete 容器name/id 对象name/id
openstack container delete 容器name/id
只能删除空容器
openstack container delete 容器name/id -r
参数说明:
r 是recursive的简写,指先删除容器内存储的对象,再删除容器本身
orchestration服务可以实现对多个组合云应用的编排,这个服务支持通过REST API 使用原生HOT模板。
这些灵活的模板语言使应用程序开发人员能够借以描述openstack的资源类型,如实例,浮动ip地址,卷,安全组,用户等等。这些资源一旦创建,将被称为stacks,可以通过heat服务加以管理。
$ cat cinder.yaml heat_template_version: "2018-08-31" resources: Volume_1: type: "OS::Cinder::Volume" properties: name: heat_cinder1 size: 2 volume_type: "__DEFAULT__" #创建堆栈,并创建volume openstack stack create -t cinder.yaml cinder-1
$ cat swift.yaml heat_template_version: "2018-08-31" resources: Container_1: type: "OS::Swift::Container" properties: name: heat_swift "X-Container-Write": true #创建堆栈,并创建swift $ openstack stack create -t swift.yaml swift-1(栈名称)
heat_template_version: "2018-08-31" resources: Network_1: type: "OS::Neutron::Net" properties: admin_state_up: true name: Heat_Network shared: true Subnet_1: type: "OS::Neutron::Subnet" properties: name: "Heat-Subnet" ip_version: 4 cidr: "172.17.0.0/24" network_id: get_resource: Network_1 # #创建堆栈,并创建网络 $ openstack stack create -t network.yaml network(栈名称)
$ cat falvor.yaml heat_template_version: "2018-08-31" resources: Nova_flavor: type: OS::Nova::Flavor properties: name: os.flavor disk: 20 is_public: True ram: 1024 vcpus: 2 # 创建堆栈,并创建falvor $ openstack stack create -t falvor.yaml flavor
$ cat server.yaml heat_template_version: "2018-08-31" resources: Server_1: type: "OS::Nova::Server" properties: networks: - network: "Heat_Network" flavor: "os.flavor" name: Heat_Server image: "cirros-0.6.1-x86_64-disk.img" # #创建堆栈,并创建server $ openstack stack create -t server.yaml server(栈名称)
$ cat user.yaml
heat_template_version: "2018-08-31"
resources:
user:
type: OS::Keystone::User
properties:
name: "Heat-User"
password: "123456"
domain: "default"
default_project: "admin"
roles: [{"role": admin, "project": admin}]
# 创建堆栈,并创建user
$ openstack stack create -t user.yaml user(栈名称)
openstack stack list
openstack stack show 堆栈name/id
openstack stack delete 堆栈name/id -y
openstack共享文件系统服务manila为虚拟机提供文件存储,简单点说,和云盘差不多,但是这是一个专用于虚拟机的云盘。
在开始之前,我浅浅的解释一下什么是DHSS。在部署manila时,有两个驱动模式可选,其一是不使用驱动程序来支持共享服务器的管理,在这种模式下,需要部署nfs服务器和一块manila卷组的附加磁盘,这种模式称为DHSS=False模式;其二,选择将manila与管理共享服务器的后端驱动程序一起运行,因此需要安装nova,glance,neutron一同管理的驱动程序,和块存储服务cinder来创建共享,
这种模式称为DHSS=True模式。
在官方示例中,为简单期间,配置使用DHSS=False模式。但是个人觉得DHSS=True的配置更为简单,仅仅只是配置项多了一部分,换来集中的管理和磁盘的节约,并且在某些发行版中,manila服务无法正确运行LVM驱动程序。
manila type-create default_share_type False
manila type-list
manila create NFS 1 --name 共享名称
参数说明:
share_protocol 共享协议(NFS,CIFS,CephFS,GlusterFS,HDFS,MAPRFS)
size 共享大小,单位为GB
--name 共享名称
manila list
manila show 共享名称
manila access-allow 共享name/id ip 172.17.0.0/24
参数说明:
share 共享的名称或者是id
access_type 访问规则类型,仅限于ip,user,支持cert或cephx
access_to 定义访问的网段ip
access-level 定义共享访问权限,rw,ro均受支持,不指定时,默认为rw。
manila access-list 共享name/id
manila show 共享name/id |grep path
计算节点挂载共享目录
mount -t nfs 172.17.0.1:/path /mnt/
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions
我有一个问题。我想从另一个ruby脚本运行一个ruby脚本并捕获它的输出信息,同时让它也输出到屏幕。亚军#!/usr/bin/envrubyprint"Enteryourpassword:"password=gets.chompputs"Hereisyourpassword:#{password}"我运行的脚本文件:开始.rboutput=`runner`putsoutput.match(/Hereisyour(password:.*)/).captures[0].to_s正如您在此处看到的那样,存在问题。在start.rb的第一行,屏幕是空的。我在运行程序中看不到“输入您的密
有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/
如何在Ruby的if语句中检查bash命令的返回值(true/false)。我想要这样的东西,if("/usr/bin/fswscell>/dev/null2>&1")has_afs="true"elsehas_afs="false"end它会提示以下错误含义,它总是返回true。(irb):5:warning:stringliteralincondition正确的语法是什么?更新:/usr/bin/fswscell寻找afs安装和运行状态。它会抛出这样的字符串,Thisworkstationbelongstocell如果afs没有运行,命令以状态1退出 最
在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa
关于SSHkit-Github它说:Allbackendssupporttheexecute(*args),test(*args)&capture(*args)来自SSHkit-Rubydoc,我明白execute实际上是test的别名?test之间有什么区别?,execute,capture在Capistrano/SSHKit中我应该什么时候使用? 最佳答案 执行只是执行命令。使用非0退出引发错误。测试方法的行为与execute完全相同,但是它返回bool值(true如果命令以0退出,而false否则)。它通常用于控制任务中的流程
我在目录“C:\DocumentsandSettings\test.exe”中有一个文件,但是当我用单引号编写命令时`C:\DocumentsandSettings\test.exe(我无法在此框中显示),用于在Ruby中执行命令,我无法这样做,我收到的错误是找不到文件或目录。我尝试用“//”和“\”替换“\”,但似乎没有任何效果。我也使用过系统、IO.popen和exec命令,但所有的努力都是徒劳的。exec命令还使程序退出,这是我不想发生的。提前致谢。 最佳答案 反引号环境就像双引号,所以反斜杠用于转义。此外,Ruby会将空格解
我正在尝试将cucumber项目的用户名和密码置于版本控制之外。有没有办法在命令行上手动将用户名和密码等变量传递给Cucumber脚本?我的备份计划是将它们放在一个YML文件中,然后将该文件添加到gitignore,这样它们就不会被置于版本控制中。 最佳答案 所以,我看到了您对铁皮人的评论,答案是肯定的。cucumberPASSWORD=my_passwordPASSWORD被设置为环境变量,您可以通过将其引用为ENV['PASSWORD']来使用它的值。例如,browser.text_field(:id=>'pwd').setEN
我想在Windows7上安装带有ruby1.9.3的rspec-railsgem。我收到一些错误消息,提示无法安装某些json库。所以,我使用下面的说明来解决它。来源=The'json'nativegemrequiresinstalledbuildtools从[rubyinstaller.org][3]下载[Ruby1.9.3][2]从[rubyinstaller.org][3]下载DevKit文件对于Ruby1.9.3,使用[DevKit-tdm-32-4.5.2-20110712-1620-sfx.exe][4]将DevKit解压到路径C:\Ruby193\DevKit运行cd