<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>A Cloudy Blog</title>
		<description></description>
		<link>/</link>
		<atom:link href="/feed.xml" rel="self" type="application/rss+xml" />
		
			<item>
				<title>Configure OpenStack network on OVH</title>
				<description>&lt;p&gt;Configure OpenStack network on OVH servers was indeed a toughest mission that I&amp;#39;ve ever done. OVH has MAC-IP check on gateway, public IPs which has different CIDR from the host machine, public IPs may be fragmented, which OpenStack doesn&amp;#39;t support. I managed to solve (partial) problem by various tricks.&lt;/p&gt;

&lt;h2&gt;Constraints of OVH networks&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The OVH router only access defined MAC address, packets with strange MAC (same IP source) will be rejected. It can be tested by ping the gateway:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash language-bash&quot; data-lang=&quot;bash&quot;&gt;sudo nping --icmp --icmp-type 8 --source-mac fa:16:3e:e6:78:01 176.31.105.254
sudo nping --icmp --icmp-type 8 176.31.105.254
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;RIPE IPs with different CIDR is still managed by the same router, by mapping MAC address. So VMs with RIPE IP must config gateway = gateway of host. These are the RIPE IP block that I use:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;text language-text&quot; data-lang=&quot;text&quot;&gt;=================================
IP              MAC
46.105.252.216  02:00:00:c5:7a:13
46.105.252.217  02:00:00:51:23:e0
46.105.252.218  02:00:00:ee:60:a6
46.105.252.219  02:00:00:85:83:df
==================================
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;OpenStack uses NAT at gateway virtual router, so in this case, we need to change the MAC address of gateway virtual router interface.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;OpenStack use network namespace to separate networks. So to debug/configure OpenStack network, must run this commands with the namespace. For example, run &lt;code&gt;ipconfig&lt;/code&gt; command, must use this:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash language-bash&quot; data-lang=&quot;bash&quot;&gt;sudo ip netns
sudo ip netns &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;qrouter-d1ceaf19-4cf0-4334-9f96-7601c70cbf4a ifconfig
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;instead this:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash language-bash&quot; data-lang=&quot;bash&quot;&gt;sudo ifconfig
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;OVH ARP control: all traffic between local nodes must go through gateway (no two local nodes talking directly to each other):&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash language-bash&quot; data-lang=&quot;bash&quot;&gt;sudo arp -a
vss-gw-6k.fr.eu &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;176.31.105.254&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; at 00:07:b4:00:00:02 &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;ether&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; on eth0
controller &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;176.31.105.64&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; at 00:07:b4:00:00:02 &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;ether&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; on eth0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Overview&lt;/h2&gt;

&lt;p&gt;This is the output of my network config:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;text language-text&quot; data-lang=&quot;text&quot;&gt;                             |    br-ex: 176.31.255.64    |
                             |                            | 
                OVH          |                    46.105.252.216               192.168.100.1
Internet-----|gateway|-------||eth0|------------------|qg||                         |qr|--(Localnet)
                                                        |                            |
          176.31.255.254     176.31.255.64              |_____| neutron router |_____| 192.168.100/24                                                                       |      
                                                                   iptables NAT                                                                              46.105.252.217 &amp;lt;--&amp;gt; 192.168.100.40
                                                        46.105.252.218 &amp;lt;--&amp;gt; 192.168.100.41
                                                        46.105.252.219 &amp;lt;--&amp;gt; 192.168.100.41
                                                        46.105.252.216 &amp;lt;--- 192.168.100.0/24 
&amp;lt;-----------OVH network-----------------&amp;gt; &amp;lt;-----------------OpenStack network-----------------------&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;qg&lt;/code&gt;, &lt;code&gt;qr&lt;/code&gt;: two OpenStack virtual interfaces of neutron router.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;br-ex&lt;/code&gt;: bridge interfaces &lt;code&gt;eth0&lt;/code&gt; and &lt;code&gt;qg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;neutron router&lt;/code&gt;: use an iptables NAT to translate an floating IP to an OpenStack local network.&lt;/li&gt;
&lt;li&gt;VM without floating IP: general NAT: &lt;code&gt;192.168.100.0/24 --&amp;gt; 46.105.252.216&lt;/code&gt; (router interface)&lt;/li&gt;
&lt;li&gt;VM with floating IP:    two way NAT: &lt;code&gt;192.168.100.40  &amp;lt;--&amp;gt; 46.105.252.217&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Prepare host networking&lt;/h2&gt;

&lt;p&gt;Run this script to bridge OVH network to OpenStack network&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;c&quot;&gt;#! /bin/bash&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Begin network configuration&amp;quot;&lt;/span&gt;
sudo ifconfig br-ex hw ether MAC-OF-eth0
sudo ifconfig eth0 promisc up
sudo ovs-vsctl add-port br-ex eth0

sudo route add default gw 176.31.105.254 br-ex
sudo ifconfig br-ex 176.31.105.64
sudo ifconfig eth0 0.0.0.0

sudo service neutron-plugin-openvswitch-agent restart
sudo service neutron-l3-agent restart
sudo service neutron-dhcp-agent restart
sudo service neutron-metadata-agent restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Create external network&lt;/h2&gt;

&lt;p&gt;Full &lt;a href=&quot;http://docs.openstack.org/icehouse/install-guide/install/apt-debian/content/neutron-initial-networks.html&quot;&gt;guide&lt;/a&gt;
External network will stand between VMs internal network and the outside network (Internet). It must have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CIDR: the same with RIPE IP block (46.105.252.216 - 46.105.252.219)&lt;/li&gt;
&lt;li&gt;Gateway: the gateway IP of host&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash language-bash&quot; data-lang=&quot;bash&quot;&gt;neutron net-create ext-net --shared --router:external&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;True
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash language-bash&quot; data-lang=&quot;bash&quot;&gt;neutron subnet-create ext-net --name ext-subnet &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  --allocation-pool &lt;span class=&quot;nv&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;46.105.252.216,end&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;46.105.252.219&lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    --disable-dhcp --gateway 176.31.105.254 46.105.252.216/24
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Create tenant networks&lt;/h2&gt;

&lt;p&gt;Create a demo &lt;code&gt;192.168.100.1&lt;/code&gt; network, can use CLI or dashboard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Dashboard: &lt;code&gt;Project-&amp;gt;Network-&amp;gt;Networks-&amp;gt;Create Network&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Console:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash language-bash&quot; data-lang=&quot;bash&quot;&gt;neutron net-create demo-net
neutron subnet-create demo-net --name demo-subnet 192.168.100.0/24
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Create an internal router&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Dashboard: &lt;code&gt;Project-&amp;gt;Network-&amp;gt;Routers-&amp;gt;Create Router&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Console:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash language-bash&quot; data-lang=&quot;bash&quot;&gt;neutron router-create demo-router
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Connect external network to router&lt;/h2&gt;

&lt;p&gt;Set gateway for router is ext-net, then connect router to demo-net:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dashboard: &lt;code&gt;Project-&amp;gt;Network-&amp;gt;Routers&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Console:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash language-bash&quot; data-lang=&quot;bash&quot;&gt;neutron router-interface-add demo-router demo-subnet
neutron router-gateway-set demo-router ext-net
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;OVH MAC address solution&lt;/h2&gt;

&lt;p&gt;Now we come to the main trick: tackle OVH MAC-IP check on router. &lt;/p&gt;

&lt;h3&gt;Check OpenStack NAT table&lt;/h3&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash language-bash&quot; data-lang=&quot;bash&quot;&gt;sudo ip netns &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;qrouter-d1ceaf19-4cf0-4334-9f96-7601c70cbf4a iptables -t nat -S
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Set router gateway = default gateway of host &lt;code&gt;176.31.105.254&lt;/code&gt;. Add this route to Network node&lt;/h3&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash language-bash&quot; data-lang=&quot;bash&quot;&gt;sudo ip netns
sudo ip netns &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;qrouter-d1ceaf19-4cf0-4334-9f96-7601c70cbf4a route add 176.31.105.254/32 dev qg-1cc33b0c-7d
sudo ip netns &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;qrouter-d1ceaf19-4cf0-4334-9f96-7601c70cbf4a route add default gw 176.31.105.254 qg-1cc33b0c-7d
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Change MAC address for router gateway port, use the MAC address of the first IP in RIPE block (46.105.252.216)&lt;/h3&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash language-bash&quot; data-lang=&quot;bash&quot;&gt;sudo ip netns &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;qrouter-d1ceaf19-4cf0-4334-9f96-7601c70cbf4a ifconfig qg-1cc33b0c-7d hw ether 02:00:00:c5:7a:13
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Add MAC addresses of RIPE ip block to router gateway&lt;/h3&gt;

&lt;p&gt;OVH map each IP in RIPE with a MAC address. We must add all of these MAC addresses to OVH router.&lt;/p&gt;

&lt;p&gt;For example, if we have that RIPE:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;text language-text&quot; data-lang=&quot;text&quot;&gt;==================================================================================
IP              MAC                     Purpose
46.105.252.216  02:00:00:c5:7a:13       Router IP, do not change
46.105.252.217  02:00:00:51:23:e0       Floating IP, can assign to VM
46.105.252.218  02:00:00:ee:60:a6       Floating IP, can assign to VM
46.105.252.219  02:00:00:85:83:df       Floating IP, can assign to VM
===================================================================================
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We already add the first MAC address to router gateway. Then now add the second, third, fourth MAC to gateway interface:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash language-bash&quot; data-lang=&quot;bash&quot;&gt;sudo ip netns &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;qrouter-f918cbb7-dc0c-4713-a6f5-3c66b46e12cf ip link add link qg-0103d6fa-31 address 02:00:00:51:23:e0 eth0.1 &lt;span class=&quot;nb&quot;&gt;type &lt;/span&gt;macvlan
sudo ip netns &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;qrouter-f918cbb7-dc0c-4713-a6f5-3c66b46e12cf ip link add link qg-0103d6fa-31 address 02:00:00:ee:60:a6 eth0.2 &lt;span class=&quot;nb&quot;&gt;type &lt;/span&gt;macvlan
sudo ip netns &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;qrouter-f918cbb7-dc0c-4713-a6f5-3c66b46e12cf ip link add link qg-0103d6fa-31 address 02:00:00:85:83:df eth0.3 &lt;span class=&quot;nb&quot;&gt;type &lt;/span&gt;macvlan
sudo ip netns &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;qrouter-f918cbb7-dc0c-4713-a6f5-3c66b46e12cf ip link &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;up eth0.1
sudo ip netns &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;qrouter-f918cbb7-dc0c-4713-a6f5-3c66b46e12cf ip link &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;up eth0.2
sudo ip netns &lt;span class=&quot;nb&quot;&gt;exec &lt;/span&gt;qrouter-f918cbb7-dc0c-4713-a6f5-3c66b46e12cf ip link &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;up eth0.3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Modify the security group&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;On dash board&lt;/strong&gt;: &lt;code&gt;Project -&amp;gt; Compute -&amp;gt; Access &amp;amp; Security -&amp;gt; Securities Group -&amp;gt; Manage Rules&lt;/code&gt;: add ICMP, TCP port 22 rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Or on console&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;bash language-bash&quot; data-lang=&quot;bash&quot;&gt;neutron security-group-rule-create --protocol icmp &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
  --direction ingress --remote-ip-prefix 0.0.0.0/0 default

  neutron security-group-rule-create --protocol tcp &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
    --port-range-min 22 --port-range-max 22 &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      --direction ingress --remote-ip-prefix 0.0.0.0/0 default
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;At this point, the VMs with floating IP assigned can be connected from a remote host. However, this solution doesn&amp;#39;t tackle fragmented public IP block yet. As I remember correctly, someone has shared his solution to deal with multiple floating IP blocks by direct injecting to neutron floating ip database. I&amp;#39;ll come up after testing that approach.&lt;/p&gt;
</description>
				<pubDate>Mon, 07 Jul 2014 16:00:00 +0000</pubDate>
				<link>/openstack/ovh/neutron/2014/07/07/Configure-OpenStack-network-on-OVH.html</link>
				<guid isPermaLink="true">/openstack/ovh/neutron/2014/07/07/Configure-OpenStack-network-on-OVH.html</guid>
			</item>
		
			<item>
				<title>Introduction to OpenCloud</title>
				<description>&lt;p&gt;The &lt;strong&gt;Cloud&lt;/strong&gt; is one of the most popular term on Internet nowadays. Cloud computing is widely adopted by all scaled enterprises. By wikipedia definition, cloud computing is computing that involves a large number of computers connected through a communication network such as the Internet, similar to utility computing. In science, cloud computing is a synonym for distributed computing over a network, and means the ability to run a program or application on many connected computers at the same time.  &lt;/p&gt;

&lt;p&gt;Infrastructure as a Service (IaaS) is one of the three fundamental services of cloud computing. It aims for providing a hardware infrastructure, including the virtual servers, network connections, IP address, storage hardwares, etc. or a pool of resources. This resource pool can be scale easily later. &lt;/p&gt;

&lt;p&gt;One well-known example of IaaS provider is Amazon Web Service (AWS). They provide users scalable clusters with unlimited VMs. Users don&amp;#39;t care about networking or hardwares below. Users can add more storage space, CPU, RAM for their VMs anytime. &lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/media/CloudStack.gif&quot; alt=&quot;CloudStack&quot; title=&quot;Stack of three fundamental services&quot;&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/media/CloudStackDetail.png&quot; alt=&quot;CloudStackDetail&quot; title=&quot;Detail of three services&quot;&gt;&lt;/p&gt;

&lt;p&gt;AWS is considered public cloud. Amazon controls the hardware, and all users share that resource pool. All users&amp;#39; data is stored on Amazon&amp;#39;s hardware property. That create the fear of vendor lock-in - a day when the IaaS refuse to serve and claim all data on their servers. That gives birth for the &lt;strong&gt;Private Cloud&lt;/strong&gt; trend - the cloud that runs on enterprise&amp;#39;s own hardware. On the market, there are plenty of Open Source and commercial product that help building private cloud:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenStack&lt;/li&gt;
&lt;li&gt;CloudStack&lt;/li&gt;
&lt;li&gt;Eucalyptus&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They are all open source. Among them, OpenStack is having the momentum. They have largest community, as well as supported by many companies: HP, IBM, Rackspace, NASA, Mirantis, etc.    &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Cloud-computing&quot;&gt;http://en.wikipedia.org/wiki/Cloud-computing&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Tue, 22 Apr 2014 16:00:00 +0000</pubDate>
				<link>/opencloud/cloud/openstack/cloudstack/iaas/2014/04/22/OpenCloud.html</link>
				<guid isPermaLink="true">/opencloud/cloud/openstack/cloudstack/iaas/2014/04/22/OpenCloud.html</guid>
			</item>
		
			<item>
				<title>What is DevOps.</title>
				<description>&lt;p&gt;I&amp;#39;m not an expert in DevOps myself. This blog is merely a digest note from my reading and very little experience. I&amp;#39;m intending to update it when I gain more experience or from your help. &lt;/p&gt;

&lt;h1&gt;What is DevOps&lt;/h1&gt;

&lt;p&gt;DevOps stands for Development and Operations. First of all, it&amp;#39;s an &amp;quot;another&amp;quot; software development methodology. Of course, as other siblings, this methodology is created to solve some problem in software world. &lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/commons/b/b5/Devops.svg&quot; alt=&quot;Wiki&quot;&gt;&lt;/p&gt;

&lt;h2&gt;The problem&lt;/h2&gt;

&lt;p&gt;Simply speaking, development guys and operations guys are enemy of each other. Development means to change and evolve. While operations need stability. Some statistic numbers: 80% downtime is due to changes. 47% of total time dedicated to deployment.&lt;/p&gt;

&lt;p&gt;But of course we need development. The problem is the misunderstanding between Dev and Ops, that we call &lt;strong&gt;The wall of Confusion&lt;/strong&gt;. To add fuel into the fire, many global companies have Dev team in Vietnam and Ops team in Europe. Geometry distance will enlarge the wall. &lt;/p&gt;

&lt;p&gt;The worst day is &lt;strong&gt;release/deployment&lt;/strong&gt; day, when changes are pushed from Dev team to Ops team. The most typical problem is the differences in environment between Dev and Ops. The Ops team has to hack the product, modify all configuration files. And when they give up, changes will be rolled back in Ops, bugs are reported to Devs, and Dev guys will say f**k  &lt;/p&gt;

&lt;h2&gt;The solution&lt;/h2&gt;

&lt;p&gt;DevOps focuses on communication. Cooperation between Dev and Ops must start before and continues long after release/deployment. &lt;/p&gt;

&lt;p&gt;We should also considering the voices again DevOps. I read &lt;a href=&quot;http://jeffknupp.com/blog/2014/04/15/how-devops-is-killing-the-developer/&quot;&gt;an article&lt;/a&gt; of Jeff Knupp, and I think his point of view is interesting (not that I agree). He complained force a developer to handle tasks of QA, sysadmin, analyst. That&amp;#39;s the birth of &amp;quot;full-stack&amp;quot; developer, and some traditional dev who only love programming will feel annoyed (not in my case definitely). &lt;/p&gt;

&lt;p&gt;Not so convinced?&lt;/p&gt;

&lt;h2&gt;Which companies used DevOps&lt;/h2&gt;

&lt;p&gt;All of software companies can use it, of course. 
But the one who need it the most is the companies with very frequent releases. For example, Flickr with 10 deployments per day. Facebook with 1 deployment each day. Amazon with a deployment per 11 seconds.   &lt;/p&gt;

&lt;h2&gt;Ok I&amp;#39;ll use DevOps, but how to use?&lt;/h2&gt;

&lt;p&gt;As mentioned above, DevOps is a methodology. That means you need tools, training, changes in approach, changes in culture, etc. to adopt it. The following is just some tips based on my experience to help. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Chef&lt;/strong&gt;: with chef, you write the code to configure the infrastructure (infrastructure as a code). The good point is you don&amp;#39;t have to worry about the different in env between Dev and Ops. You can check this &lt;a href=&quot;http://www.slideshare.net/JulianDunn/chef-introduction-princeton-meetup&quot;&gt;slide&lt;/a&gt; for more info.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Docker&lt;/strong&gt;: provide a unique sandbox environment for apps. It&amp;#39;s quite popular now, and is a competitor of Chef.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The culture&lt;/strong&gt;: train dev with QA, sysadmin roles. Train sysadmin how to program. Build a team with both of them.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deploying&lt;/strong&gt;: deploy frequently. A deploy with smaller code changes is better than an upgrade with hundred files changes. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This &lt;a href=&quot;http://www.slideshare.net/OCTOTechnology/introduction-to-devops-28779951&quot;&gt;slides&lt;/a&gt; provides plenty good examples. &lt;/p&gt;

&lt;p&gt;Now it&amp;#39;s your turn to help. Please sharing your own experience using DevOps. &lt;/p&gt;
</description>
				<pubDate>Tue, 22 Apr 2014 14:00:00 +0000</pubDate>
				<link>/devops/2014/04/22/What-is-DevOpswq.html</link>
				<guid isPermaLink="true">/devops/2014/04/22/What-is-DevOpswq.html</guid>
			</item>
		
			<item>
				<title>Which OpenCloud I choose? OpenStack, CloudStack or VMware</title>
				<description>&lt;p&gt;In recent years, we can observer a rapid advance of cloud IaaS technology. In the past, only VMware made its name and widely used in DC management. Then the rise of AWS make a huge impact on the industry. To fight again the Godzilla EC2, and with the needs of private cloud, latecomers enterprises and communities join force to create different OpenSource IaaS platform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eucalyptus: a second broadest community and an official partner with AWS.&lt;/li&gt;
&lt;li&gt;CloudStack: a most completed product, used to be an closed software belong to Citrix. They decide to contribute source code to Apache to join the race. Small but well-tested. &lt;/li&gt;
&lt;li&gt;OpenNebula: with smallest community. &lt;/li&gt;
&lt;li&gt;OpenStack: with broadest community, back by giants, and illimited pocket of money. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of them joined a fierce stack war. I can&amp;#39;t say which of them will win, but we will focus on the leading group: CloudStack - a number one in term of industry deploying, OpenStack - a number one in term of community and supports, and VMware - an ancient giant. &lt;/p&gt;

&lt;h1&gt;OpenCloud vs VMware&lt;/h1&gt;

&lt;p&gt;The most traditional technology for DC virtualization is VMware vCenter. Why I called it &lt;em&gt;traditional&lt;/em&gt;. Because this tool has been developed for a long time, and was adopted by many legacy systems. However, we hardly called it Cloud technology. I have a honor to consult Mr. Thierry Carrez - OpenStack release manager. He gave me an answer that I found the most correct:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Traditional workloads run on servers that are like pets. They are
unique, you care for them, heal them when they are hurt, have HA in
place to make sure they survive etc.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cloud servers are like cattle. They are generic, are set up
automatically using automation, and when they exhibit signs of failure
you shoot them.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;If your goal is to virtualize traditional workloads, you may find VMWare
offering more attractive, with nice HA / live migration features to
ensure the survival of your hand-crafted servers.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;If your goal is more to heavily use automation, develops style deployments
and Amazon AWS like services, then OpenStack is the way to go.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/randybias/pets-vs-cattle-the-elastic-cloud-story&quot;&gt;Pet and cattle analogy&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;Why not CloudStack?&lt;/h1&gt;

&lt;p&gt;CloudStack is the top competitor of OpenStack in OpenCloud market now.&lt;/p&gt;

&lt;p&gt;CloudStack is obvious much product oriented. I think &lt;strong&gt;OpenStack and CloudStack&lt;/strong&gt; is similar to &lt;strong&gt;Windows vs Linux kernel&lt;/strong&gt;. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Although CloudStack is open-source, but recently report, Citrix contributes more than 50% to the project. &lt;/li&gt;
&lt;li&gt;While OpenStack has Rackspace, IBM, HP, Redhat, Mirantis are top contributors, and dozen of companies contributes tiny parts. In addition, each platinum contributer has their own product-tested version based on core OpenStack.&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;OpenStack&lt;/h1&gt;

&lt;p&gt;The concept is similar to Linux kernel and Linux distro: OpenStack is a framework (Linux kernel). Some of the companies in that ecosystem package the solution so that it&amp;#39;s ready to use (Linux distro):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rackspace Private Cloud (Rackspace)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Linux distributions like Red Hat or Ubuntu (Canonical) have offerings OpenStack package.&lt;/li&gt;
&lt;li&gt;ENovance (France/Canada) &lt;/li&gt;
&lt;li&gt;Cloudscaling (US) &lt;/li&gt;
&lt;li&gt;Mirantis (US/Russia)&lt;/li&gt;
&lt;li&gt;IBM (commercial version)&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;Rackspace Private Cloud&lt;/h1&gt;

&lt;p&gt;Rackspace Private Cloud is an OpenStack configuration that has been developed, tested, and packaged by Rackspace OpenStack specialists. Offering that is easy to install, with a configuration that comes from our expertise in developing OpenStack clouds for our customers.&lt;/p&gt;

&lt;h4&gt;Strength&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Easy to install.&lt;/li&gt;
&lt;li&gt;Well documented.&lt;/li&gt;
&lt;li&gt;One deployment design (designed HA, networking, etc).&lt;/li&gt;
&lt;li&gt;Based on latest release version of OpenStack (Havana)&lt;/li&gt;
&lt;li&gt;Using Chef cookbook.&lt;/li&gt;
&lt;li&gt;Central forum for discussion. Fast (free) support. &lt;/li&gt;
&lt;li&gt;Rackspace is the company contributed the most for OpenStack recently.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Weakness&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Not flexible (must follow Rackspace deployment design).&lt;/li&gt;
&lt;li&gt;Use latest OpenStack release version, not development version.&lt;/li&gt;
&lt;li&gt;Lack of OpenStack new features (incubating projects). Not sure can we add them manually. &lt;/li&gt;
&lt;li&gt;Not sure OpenStack third parties extension can work.&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Tue, 15 Apr 2014 15:52:47 +0000</pubDate>
				<link>/opencloud/openstack/cloudstack/vmware/2014/04/15/Which-OpenCloud-I-choose.html</link>
				<guid isPermaLink="true">/opencloud/openstack/cloudstack/vmware/2014/04/15/Which-OpenCloud-I-choose.html</guid>
			</item>
		
			<item>
				<title>My Rackspace chef environment</title>
				<description>&lt;p&gt;This is a note of how I change Rackspace Private Cloud (RPC) chef&amp;#39;s environment before bootstrap own nodes.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;json&quot;&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;MDI-private-cloud&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;&amp;quot;description&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Mobile Device - Rackspace Private Cloud v4.2.2&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;&amp;quot;cookbook_versions&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
   &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;&amp;quot;json_class&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Chef::Environment&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;&amp;quot;chef_type&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;environment&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;&amp;quot;default_attributes&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
   &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;&amp;quot;override_attributes&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
     &lt;span class=&quot;nt&quot;&gt;&amp;quot;custom_template_banner&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Mobile Devices Ingenierie Cloud&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
     &lt;span class=&quot;nt&quot;&gt;&amp;quot;developer_mode&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
     &lt;span class=&quot;nt&quot;&gt;&amp;quot;enable_testing_repos&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
         &lt;span class=&quot;nt&quot;&gt;&amp;quot;nova&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;quot;network&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;quot;provider&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;neutron&amp;quot;&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
         &lt;span class=&quot;nt&quot;&gt;&amp;quot;neutron&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;quot;ovs&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;quot;external_bridge&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;quot;provider_networks&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
                  &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;&amp;quot;label&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;ph-eth0&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;&amp;quot;bridge&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;br-eth0&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                     &lt;span class=&quot;nt&quot;&gt;&amp;quot;vlans&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;1:1&amp;quot;&lt;/span&gt;
                   &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
             &lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
             &lt;span class=&quot;nt&quot;&gt;&amp;quot;network_type&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;gre&amp;quot;&lt;/span&gt;
         &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;quot;mysql&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
         &lt;span class=&quot;nt&quot;&gt;&amp;quot;allow_remote_root&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
         &lt;span class=&quot;nt&quot;&gt;&amp;quot;root_network_acl&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;%&amp;quot;&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;quot;osops_networks&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
         &lt;span class=&quot;nt&quot;&gt;&amp;quot;nova&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;192.168.1.0/24&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
         &lt;span class=&quot;nt&quot;&gt;&amp;quot;public&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;192.168.1.0/24&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
         &lt;span class=&quot;nt&quot;&gt;&amp;quot;management&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;192.168.1.0/24&amp;quot;&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
   &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
</description>
				<pubDate>Tue, 15 Apr 2014 13:52:47 +0000</pubDate>
				<link>/openstack/chef/rackspace/2014/04/15/Rackspace-chef-environment.html</link>
				<guid isPermaLink="true">/openstack/chef/rackspace/2014/04/15/Rackspace-chef-environment.html</guid>
			</item>
		
	</channel>
</rss>
