Openstack实践(1)部署使用实例及neutron网络
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 ,博主地址:http://www.cnblogs.com/SuperXJ/
如何快速部署使用openstack,使用kolla吧,openstack技术结合容器分分钟部署(单点或者多节点,任选),分分钟升级,kolla项目是为了容器化openstack,目标是做到开箱即用,所有的组件的HA都具备。kolla是一个革命性的项目,我们以前积累的安装部署经验,全部都报废。使用kolla可以快速部署可扩展,可靠的生产就绪的openstack环境。,OpenStack Kolla项目是一个支持Openstack服务以容器的方式部署,借助ansible部署工具可以简单的扩展到多个节点。同时,又借助于使用 heat 来编排 Kolla 集群。我们也可以把 Kolla 镜像注册到一个内部的 Hub,并通过 Kubernetes(k8s)等工具来管理。kolla最终目标是为OpenStack的每一个服务都创建一个对应的Docker Image,通过Docker Image将升级的粒度减小到Service级别,从而使升级时,对OpenStack影响能达到最小,并且一旦升级失败,也很容易回滚。升级只需要三步:Pull新版本的容器镜像,停止老版本的容器服务,然后启动新版本容器。回滚也不需要重新安装包了,直接启动老版本容器服务就行,非常方便,kolla是openstack成功结合微服务和容器的开始。
目前,Kolla提供的镜像支持部署如下OpenStack项目:
Aodh
Ceilometer
Cinder
Designate
Glance
Gnocchi
Heat
Horizon
Ironic
Keystone
Magnum
Mistral
Murano
Nova
Neutron
Swift
Tempest
Zaqar
以及这些基础设施组件:
• Ceph implementation for Cinder, Glance and Nova
• Openvswitch and Linuxbridge backends for Neutron
• MongoDB as a database backend for Ceilometer and Gnocchi
• RabbitMQ as a messaging backend for communication between services.
• HAProxy and Keepalived for high availability of services and their endpoints.
• MariaDB and Galera for highly available MySQL databases
1、准备工作:
The host machine must satisfy the following minimum requirements:
2 network interfaces(第一个是ens33,NAT网络 ,DHCP分配,IP:33192.168.226.137,Horizon访问就是通过这个IP地址 ; 第二个是 ens37,NAT网络 ,DHCP分配,IP:33192.168.226.138;,这个其实是让neutron的br-ex 绑定使用,虚拟机是通过这块网卡访问外网。 )
8GB main memory
40GB disk space
1.1、安装python pip最新版本
Yum install epel-release
说明:EPEL 是yum的一个软件源,里面包含了许多基本源里没有的软件。
Yum install python-pip
pip Install -U pip
说明:pip是 python可以跨平台的安装工具
1.2、安装依赖包
yum install python-devel libffi-devel gcc openssl-devel libselinux-python
pip install -U docker-py
#yum install -y python-docker-py
1.3、安装ansible,kolla通过ansible来部署openstack
Yum install ansible
1.4、安装docker
yum install docker-engine-1.12.5 docker-engine-selinux-1.12.5
Systemctl enable docker
说明:根据kolla安装要求,安装1.12.5版本的docker
1.5、配置(当使用Systemd 建立docker引擎,如果不设置MountFlags 选项, kolla-ansible的neutron-dhcp-agent会部署失败并抛出 APIError/HTTPError.)
Tee /etc/systemd/system/docker.service.d/kolla.conf <<-'EOF'
[Service]
MountFlags=shared
EOF
或者再/usr/lib/systemd/system/docker.service
[service]里加上
#MountFlags=shared
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.226.134:4000
说明:增加一个本地registry
Systemctl daemon-reload
Systemctl restart docker
说明:重新加载并启动
1.6、配置ntp 多机部署需要配置,否则会调度错误
Yum install ntp
Systemctl enable ntpd.service
Systemctl start ntpd.service
1.7、禁用libvirtd
Systemctl stop libvirtd.service
Systemctl disable libvirtd.service
1.8、关闭防火墙和selinux
systemctl stop firewalld && systemctl disable firewalld sed -i '7d;1a SELINUX=disabled' /etc/selinux/config
2、安装kolla
Kolla安装包有两种模式:
(1)evaluation是使用pip来安装kolla,先安装kolla-ansible,然后通过kolla-ansile将openstack的各项目镜像从互联网拉取下来。
(2)Development是使用源码来安装kolla,下载源码,本地编译构建安装,相对比第一种要复杂一些。
2.1、我们这里使用Development方式安装valla:
git clone http://git.trystack.cn/openstack/kolla-ansible –b stable/ocata
cd kolla-ansible pip install .
说明:kolla-ansible 是一个将openstack部署到docker的工具
Cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/kolla/
Vi /etc/kolla/globals.yml
kolla_base_distro: "centos"
kolla_install_type: "source"
openstack_release: "4.0.3"
kolla_internal_vip_address: "192.168.226.222"
docker_registry: "192.168.226.134:4000"
network_interface: "ens33"
neutron_external_interface: "ens37"
enable_haproxy: "no"
api_interface: "{{ network_interface }}"
docker_namespace: "lokolla"
说明:该配置文件配置了kolla源信息
cp /usr/local/share/kolla-ansible/ansible/inventory/* .
说明:这里存放了单节点和多节点部署的配置文件,我们采用单节点部署
默认docker的registry是使用5000端口,对于OpenStack来说,有端口冲突,所以改成4000
docker run -d -v /opt/registry:/var/lib/registry -p 4000:5000 --restart=always --name registry registry:2
下载kolla官方提供的镜像
http://tarballs.openstack.org/kolla/images/
这是kolla官方提供的镜像给CI使用,只保留最新版本和最新的stable版本。大家可以下载Ocata版本
wget http://tarballs.openstack.org/kolla/images/centos-source-registry-ocata.tar.gz tar zxvf centos-source-registry-ocata.tar.gz -C /opt/registry/
这样就把kolla的docker镜像文件放到Regisitry服务器上。
2.2 配置/etc/kolla/globals.yml
network_interface: "ens33"
说明:ens33属于NAT网络里,设置的IP是:192.168.226.134,Horizon访问就是通过这个IP地址
neutron_external_interface: "ens37"
说明:ens37桥接模式,ip其实是dhcp分配,这个其实是让neutron的br-ex 绑定使用,虚拟机是通过这块网卡访问外网。
2.3 配置登录Dashboard的密码
kolla-genpwd
说明:自动生产复杂密码,对应文件/etc/kolla/passwords.yml
Vi /etc/kolla/passwords.yml
修改keystone_admin_password: xiongjian
2.4测试一下kolla-ansible -i all-in-one bootstrap-servers
kolla-ansible prechecks -i ~/kolla/all-in-one -vvv
如果是在虚拟机里装kolla,希望可以启动虚机后再启动nova虚拟机,那么你需要把virt_type=qemu,默认是kvm
mkdir -p /etc/kolla/config/nova
cat << EOF > /etc/kolla/config/nova/nova-compute.conf [libvirt] virt_type=qemu
EOF
2.5 部署 (测试环境采用all-in-one部署,生产环境请采用多节点部署)
kolla-ansible pull -i ~/kolla/all-in-one
kolla-ansible deploy -i ~/kolla/all-in-one
2.6 安装openstack 客户端
pip install -U python-openstackclient python-neutronclient
2.7 kolla-ansible post-deploy运行以下命令可以生成一个openrc文件(运行openstack CLI所需的环境变量):
openrc文件生成之后,使用以下命令可以帮你做一下openstack的初始化工作,包括上传一个glance镜像以及创建几个虚拟网络:
source /etc/kolla/admin-openrc.sh
[root@localhost ~]# cat /etc/kolla/admin-openrc.sh
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=xiongjian
export OS_AUTH_URL=http://192.168.226.222:35357/v3
export OS_INTERFACE=internal
export OS_IDENTITY_API_VERSION=3
编辑 /usr/share/kolla-ansible/init-runonce,
网络需要根据实际情况修改
EXT_NET_CIDR='192.168.226.0/24'
EXT_NET_RANGE='start=192.168.226.180,end=192.168.226.199'
EXT_NET_GATEWAY='192.168.226.1'
说明一下,192.168.226.0的网络,就是上面ens34接的网络,这个网络是通过路由器访问互联网,配置好这个,装完虚拟机就可以直接ping通。
2.8 执行nova demo1
Sh init-runonce
To deploy a demo instance, run:
openstack server create \
--image cirros \
--flavor m1.tiny \
--key-name mykey \
--nic net-id=40f71353-665a-4885-9cd6-8fccea8c908a \
demo1
+-------------------------------------+-----------------------------------------------+
| Field | Value |
+-------------------------------------+-----------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-AZ:availability_zone | |
| OS-EXT-SRV-ATTR:host | None |
| OS-EXT-SRV-ATTR:hypervisor_hostname | None |
| OS-EXT-SRV-ATTR:instance_name | |
| OS-EXT-STS:power_state | NOSTATE |
| OS-EXT-STS:task_state | scheduling |
| OS-EXT-STS:vm_state | building |
| OS-SRV-USG:launched_at | None |
| OS-SRV-USG:terminated_at | None |
| accessIPv4 | |
| accessIPv6 | |
| addresses | |
| adminPass | 7RRu8kextShC |
| config_drive | |
| created | 2017-11-25T08:26:43Z |
| flavor | m1.tiny (1) |
| hostId | |
| id | 5cfdc7e2-25a8-4387-b462-2bf4100e2c37 |
| image | cirros (86705719-3402-4d9c-865a-f86646419905) |
| key_name | mykey |
| name | demo1 |
| progress | 0 |
| project_id | ffd2a5003e7f4cdb8cefa48fdb2bd767 |
| properties | |
| security_groups | name='default' |
| status | BUILD |
| updated | 2017-11-25T08:26:45Z |
| user_id | 4edc2043e5864941acd205f60838a744 |
| volumes_attached | |
+-------------------------------------+-----------------------------------------------+
通过openstack 控制台看一下,运行成功
查看是否支持kvm命令,我的显示不支持
egrep -c '(vmx|svm)' /proc/cpuinfo
0 表示不支持,1 表示支持。
[docker 构建镜像](https://docs.docker.com/engine/getstarted/step_four/)
[kolla-ansible 构建镜像](https://docs.openstack.org/developer/kolla/image-building.html)
[kolla 镜像仓库](https://hub.docker.com/u/kolla/)
[docker 服务配置](https://docs.docker.com/engine/admin/systemd/)
[问题debug](https://docs.openstack.org/developer/kolla-ansible/troubleshooting.html)
3、openstack Neutron
3.1先简单了解一下neutron
Neutron能提供虚拟的分布式(这样就可以实现跨物理机虚机在同一个vlan)二层vswitch(提供虚拟的network\subnet\port)、三层router、防火墙、负载均衡等抽象网络功能,能为每个租户提供独立的虚拟网络环境,neutron是用来创建虚拟网络的,所谓虚拟网络,就是虚拟机启动的时候会有一个虚拟网卡,虚拟网卡会连接到虚拟switch上,虚拟交换机连接到虚拟router上,虚拟路由器最终和物理网卡联通,从而虚拟网络和物理网络联通起来,可能用到的技术包括:
L2层:通过linux内核的bridge实现虚拟二层交换机,所有连接到linux bridge的设备(如tap)处于同一网段
L2层:Linux tap实现虚拟网卡,一个tap设备就是linux下一个进程,两个虚机通过tap通信实际上就是两个进程间通信,可以操作/dev/tap*,。
L2层:Linux veth实现虚拟网线,用于连接两个虚拟网络设备,如下面说的qbr和br-int)
L2层:在虚拟网桥中,如果希望虚机和外部通信,必须打开桥接到虚拟网桥中的物理网卡为混杂模式(ifconfig eth0 0.0.0.0 promisc up )。
L3层:通过ipv4 forward(将数据包从一块网卡路由到另一块网卡)和iptable的NAT实现静态路由及转发.(例如可以实现从物理机A的eth33发出的数据包像是从物理机B的eth34端口发出去一样)。
L3层:通过RIP OSPF BGP 自动学习建立路由表。
L2层:OVS,作用和linux bridge类似,也是实现二层vswitch,但是多了QOS\netflow流量监控能力。
L3层:GRE本职是在隧道的两端L4层建立UDP连接传输重新包装的L3层爆头,在目的地进行解包,因为是直接在隧道两端建立UDP连接,所以不需要像VLAN一样在物理交换机上配置TRUNK。GRE缺点是点点对的UDP连接占用端口资源和带宽资源。
L3层:Neutron中GRE,即使两台物理机上的两台虚机也不直接建立GRE,而是通过L3的网络节点进行中转,这样可以方便使用iptable做隔离网络流量。
L3 层:vxlan 的本职是重新定义L2层的数据帧再通过L4的UDP进行传输,对端对UDP拆包后查看L2数据帧可以看到和对端是在同一个2层。也是是通过L3L4层扩展L2层。VXLAN同样使用了GRE的隧道通过UDP传输重新封装的数据帧(其中的VNI类似于VLAN,但是为24Bit),通过VXLAN可以实现虚机跨中心迁移。
L4-7 LBAAS 为一个租户下的多台虚机提供负载均衡,根据负载均衡策略动态的将VIP绑定到具体提供服务的虚机固定IP上,注意这个VIP可以是内网IP也可以是外网IP,根据需要实现。底层技术是基于HAPROXY
L4-L7 FWAAS(基于iptables) 、vpnaas(基于 ipsec vpn or mpls vpn or ssl vpn)
3.2 neutron分成多个模块分布在三个节点上。
1.Controller节点:
运行neutron-server进程,用于接受RESTful API请求创建网络,子网,路由器等,然而创建的这些东西仅仅是一些数据结构在数据库里面。
2.Network节点:
neutron-l3-agent,用于创建和管理虚拟路由器,当neutron-server将路由器的数据结构创建好,neutron-l3-agent是做具体事情的,真正的调用命令行将虚拟路由器,路由表,namespace,iptables规则全部创建好。
neutron-dhcp-agent,用于创建和管理虚拟DHCP server,每个虚拟网络都会有一个DHCP server,这个DHCP server为这个虚拟网络里面的虚拟机提供IP。
neutron-openvswitch-plugin-agent,这个是用于创建L2的switch的,在Network节点上,Router和DHCP Server都会连接到二层的switch上。
3.Compute节点:
neutron-openstackvswitch-plugin-agent,这个是用于创建L2层switch的,在compute节点上,虚拟机的网卡也是连接到二层的switch上。
Neutron一般包括三种网络:
1、External Network/API Network,这个网络是链接外网的,无论是用户调用OpenStack的API,还是创建出来的虚拟机要访问外网,或者外网要ssh到虚拟机,都需要通过这个网络。
2、Data Network,数据网络,虚拟机之间的数据传输通过这个网络来进行,比如一个虚拟机要连接到另一个虚拟机,虚拟机要连接虚拟路由都是通过这个网络来进行
3、Management Network,管理网络,OpenStack各个模块之间的交互,连接数据库,连接Message Queue都是通过这个网络来进行。
3.3 看个例子:
假设虚拟机VM0网卡eth0(挂载在linux bridge上面,linux虚拟网卡,可以操作/dev/tap*向这个虚拟网卡写数)有网络数据包向外网发送,那么数据会依次经过qbr Linux Bridge设备,qvb(tap设备,通常叫qvb***,quantum veth bridge)和qvo(也是TAP,通常叫做qvo***,quantum veth ovs)虚拟网络设备,到达OVS网桥br-int(完成标记和去除内部即本地租户VLAN TAG,本机虚机2层流量的本地转发)上,br-int将数据包attach到OVS网桥br-tun上,数据包再从compute节点OVS网桥的br-tun(OVS虚拟出来的网桥,进行隧道封装,并完成VNI和VLAN映射,通过他将G于其他物理机联通起来,这样物理节点之间就可以形成一个GRE的点对点通信网络或者vxlan网络)和network节点OVS网桥br-tun构成的GRE隧道穿过,交付到Network节点的OVS网桥br-int上;网络节点的br-int通过qr设备借助Linux命名空间qrouter(就是上面介绍的网络节点上的neutron-l3-agent)连通到br-ex上的qg设备,将数据包交付到OVS网桥br-ex上,最后br-ex通过网络节点的外部物理端口eth1把数据包传送到外部路由器的网关。
注:
1、如果是VLAN模型则hr-tun会被替换成成 ovs br-eth*,完成流量送出送入,进行本地租户VLAN和物理网络租户VLAN的转换,例如将内部VLAN100转换为外部VLAN200
2、既然qbr和br-int都是网桥,为什么不直接连到br-int,还要通过qbr,qvb,qvo岂不是多余,为什么会有qbr呢?这是和security group的概念有关。简单说就是OVS网桥br-int没有设置iptables规则的功能,但openstack又要提供安全组服务,就借助了Linux bridge(qbr)的功能,虽然OVS的br-int和linux bridge (qbr)都是二层网桥,但是为了功能互补就同时出现了。具体了解,openstack中的security group开通哪些端口,屏蔽哪些端口是用iptables来实现的,然而br-int这些虚拟bridge都是openvswitch创建的,openstack的Kernel mode和netfilter的kernel mode不兼容。一个IP包进来要么走iptables规则进行处理,要么走openvswitch的规则进行处理,br-int上有很多openvswitch的规则,比如vlan tag等,所以iptables必须要另外建立一个linux bridge(qbr)来做,因而就有了qbr,在了解拓扑结构的时候,可以将qbr忽略,看到VM直接连接到br-int上就可以了
3、为什么会有namespace呢,java的namespace是为了在不同namespace下有相同类名,openstack也想做到这一点。不同Tenant都创建自己的router和private network,彼此不知道别人指定了哪些网段,很有可能两个tenant都指定了192.168.0.0/24,这样不同的private network的路由表,DHCP Server就需要隔离,不然就乱了,因而就有了namespace。
4、每个机器上都有了自己的br-int,但是对于虚拟机和虚拟router来说,它们仍然觉得自己连接到了一个大的L2的br-int上,通过这个br-int相互通信的,它们感受不到br-int下面的虚拟网卡br-tun。所以对于多节点结构,我们可以想象br-int是一个大的,横跨所有compute和network节点的二层switch。这是一种很重要的抽象思维,好像openstack环境中所有虚拟机都连接到了一个巨型的虚拟交换机上。然而br-int毕竟被物理的割开了,需要有一种方式将他们串联起来,openstack提供了多种方式,可以用GRE tunnel将不同机器的br-int连接起来,也可以通过VLAN将br-int连接起来,当然还可以使用vxlan。这就是为什么openstack有了br-int这个bridge,但是不把所有的openvswitch的规则都在它上面实现。就是为了提供这种灵活性,对于虚拟机来讲,看到的是一大整个br-int,不同机器的br-int可以有多种方式连接,这在br-int下面的网卡上面实现。
5\br-tun也是OVS创建的虚拟网桥,它是一个中间层,接收br-int的网络数据,然后在通过特定网络协议与各个节点的br-tun相连构成一个通道层。如果所有的br-int构成的抽象层定义为虚拟二层网络,那么所有的br-tun构成的抽象层边上虚拟三层网络了。
3.4 Horizon上创建一个neutron网络的过程:
1、为这个Tenant创建一个private network,不同的private network是需要通过VLAN tagging进行隔离的,互相之间广播(broadcast)不能到达,这里我们我们用的是GRE模式,也需要一个类似VLANID的东西,称为Segment ID(当然也可以是FLAT模式,不用vlan)
2、为private network创建一个subnet,subnet才是真正配置IP网段的地方,对于私网,我们常常用192.168.0.0/24这个网段
3、为这个Tenant创建一个Router,才能够访问外网
4、将private network连接到Router上
5、创建一个External Network((就是我们上面设置的192.168.226.138,ens37))
6、创建一个External Network的Subnet,这个外网逻辑上代表了我们数据中心的物理网络,通过这个物理网络,我们可以访问外网。因而PUBLIC_GATEWAY应该设为数据中心里面的Gateway,PUBLCI_RANGE也应该和数据中心的物理网络的CIDR一致,否则连不通。之所以设置PUBLIC_START和PUBLIC_END,是因为在数据中心中,不可能所有的IP地址都给OpenStack使用,另外的可能搭建了VMware Vcenter,可能有物理机,所以仅仅分配一个区间给OpenStack来用。
7、将Router连接到External Network
3.5下面我们看看kolla demo1都干了什么,打开horizon网络:
可看到有两个网络1、demo-net(采用vxlan网络)连接的子网 demo-subnet 10.0.0.0/24 ,这个是内网, 2、和 public1(采用flat网络)连接的子网public1-subnet 192.168.226.0/24,这个是外网
再看看路由,这里有一个demo-router ,是内网访问外网使用的。让demo-net连到这个路由上面。
看看网络拓扑
我们创建的demo1虚机连接到了demo-net上,demo-net连接到了demo-router后通过public1访问外网。
查看一下网络信息,只列出了第一行。
[root@localhost ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
qbr349ef9d5-c1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450 //linux bridge网桥
qvb349ef9d5-c1: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> mtu 1450 //qbr 连接qvo的网卡
qvo349ef9d5-c1: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> mtu 1450 //qbr 连接qvo的网卡
tap349ef9d5-c1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450 //直连虚机的网卡
veth51ddac5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 //虚拟网线
结语:
初入坑,网络部分理解了半天,一台电脑也不好搭建多虚机和跨三层的大二层打通环境,先到这,后面在继续。
Openstack实践(1)部署使用实例及neutron网络的更多相关文章
- OpenStack实践系列⑥构建虚拟机实例
OpenStack实践系列⑥构建虚拟机实例 四.创建一台虚拟机图解网络,并创建一个真实的桥接网络 创建一个单一扁平网络(名字:flat),网络类型为flat,网络适共享的(share),网络提供者:p ...
- OpenStack实践系列⑦深入理解neutron和虚拟机
OpenStack实践系列⑦深入理解neutron和虚拟机 五.深入理解Neutron 5.1 虚拟机网卡和网桥 [root@node1 ~]# ifconfig brq65c11cc3-8e: fl ...
- OpenStack实践系列⑤网络服务Neutron
OpenStack实践系列⑤网络服务Neutron 3.8 Neturn 服务部署 注册neutron服务 [root@node1 ~]# source admin-openrc.sh [root@n ...
- OpenStack实践系列①openstack简介及基础环境部署
OpenStack实践系列①openstack简介及基础环境部署 一.OpenStack初探1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运 ...
- Openstack入门篇(十一)之neutron服务(控制节点)的部署与测试
1.Neutron的介绍 Neutron 为整个 OpenStack 环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和 *** 等.Neutron 提供了一个灵活的框架,通过配置,无论是开 ...
- openstack (5)-- 部署 Neutron 网络服务
Neutron 概念: 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是在多租户场景里,用户随时都可能需要创建.修改和删除网络,网络的连 ...
- openstack Q版部署-----网络服务(neutron)安装部署(7)
一.数据库配置(控制节点) 控制节点创建数据库: CREATE DATABASE neutron; GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'lo ...
- OpenStack实践系列⑨云硬盘服务Cinder
OpenStack实践系列⑨云硬盘服务Cinder八.cinder8.1存储的三大分类 块存储:硬盘,磁盘阵列DAS,SAN存储 文件存储:nfs,GluserFS,Ceph(PB级分布式文件系统), ...
- openstack——neutron网络服务
一.neutron 介绍: Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是在多租户场景里,用户随时都可能需要 ...
随机推荐
- odoo 的一些orm 操作
1.基础文件及目录结构 在认识odoo ORM框架前,先介绍一下odoo中模块目录结构. data:存放模块预制数据 i18n:存放国际化文件 models:存放模型等py代码 securit ...
- mybatis中调用游标,存储过程,函数
在ibatis和Mybatis对存储过程和函数函数的调用的配置Xml是不一样的,以下是针对Mybatis 3.2的环境进行操作的. 第一步配置Mapper的xml内容 <mapper names ...
- vue-router学习
JS push goTo(){ , postId: ' }}) } router.js // 动态路径参数 以冒号开头 { path: '/user/:id', component: User } { ...
- egg
简介 阿里的 红色的是项目名字 egg-init --type simple First && cd First egg-init --type simple Second &a ...
- Unity中利用委托与监听解耦合的思路
这篇随笔是一篇记录性的随笔,记录了从http://www.sikiedu.com/my/course/304,这门课程中学到的内容,附带了一些自己的思考. 一.单例模式的应用 首先假想一种情况,现在需 ...
- 【curl】Linux下命令行curl详解
在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具. 语法:# c ...
- OutSystems学习笔记。
ew job and new software, new challenge as well. OutSystems这软件挺好上手的.虽然没有中文文档,但英文文档超级详细,堪称傻瓜版SOP 照着步骤写 ...
- linq中where与skipwhile区别
//字符串数组 string[] names = { "a1", "a2", "bcd","ab","bcde ...
- C#利用WinForm调用WebServices实现增删改查
实习导师要求做一个项目,用Winform调用WebServices实现增删改查的功能.写下这篇博客,当做是这个项目的总结.如果您有什么建议,可以给我留言.欢迎指正. 1.首先,我接到这个项目的时候,根 ...
- ASP.NET MVC4 新手入门教程之四 ---4.添加一个模型
在本节中,您将添加一些类,用于管理数据库中的电影.这些类将 ASP.NET MVC 应用程序的"模型"部分. 您将使用一种称为实体框架的.NET 框架数据接入技术来定义和使用这些模 ...