نصب و راه اندازی EMC ScaleIO بر روی vSphere
Since EMC’s purchase of ScaleIO in 2013, I have become very familiar with the product.
I was fortunate enough to go to deep dive training in November to become even more familiar with what it offers and where it may be going. While I was there, several of us had the opportunity to talk with product management about some things we’d like to see added/changed/etc.
Default Installation
From a high level, ScaleIO (formerly Elastic Converged Storage), runs natively in many Operating Systems and Hypervisors. Unfortunately ScaleIO doesn’t natively run in VMware vSphere. Because of this, a virtual storage appliance (VSA) must be used to present local storage to the ScaleIO cluster.
To install ScaleIO in vSphere, the process is (basically):
- Import an OVA (1st node) This is called the SVM or StorageVM
- Add storage to the 1st SVM
- Import the same OVA again, or clone it (2nd node)
- Add storage to the 2nd SVM
- Import the same OVA again, or clone it (3rd node)
- Add storage to the 3rd SVM
- Import/Clone any subsequent SVM/StorageVM
- Add storage to any subsequent SVM
- Power on each node & log into the console to assign one or more IP addresses
- Upload the ScaleIO binaries to the 1st node
- Either create a config file & let a python script deploy/configure each node’s role or load the binaries on each node and manually configure them
- Present storage to vSphere
- Use storage for VMs
That’s quite a few steps.
Jonas Rosland has this install process documented:
How to install ScaleIO in a VMware environment Part 1 – Part 2
I’ll add that I understand the folks at ScaleIO are in the process of automating this. I really like what I have seen.
In my lab
I stand up/tear down environments all the time (when I have time) in the lab. To be honest, most of the above steps are easy, provided I use the same IP addresses over and over, and I reuse my site.cfg over and over. So the process isn’t that long. But I like to automate.
After my first 100 or so installations, the installation process wasn’t so appealing to me. My biggest complaint? Entering IP addresses into each node before I get started. Take snapshots you say? Well, a best practice is to turn snapshots off on the StorageVM. Data is constantly changing and I have the vmx paramater snapshot.maxSnapshots=”0″ to ensure I cannot take snapshots of my StorageVM.
I then looked at what I could do to pass information from the import process to the VM before it was powered on. I am using vSphere with vCenter (Windows or Appliance Edition), so I can use OVF properties… Hmmm.
OVA Properties – Round 1
I imported the SVM that comes with ScaleIO 1.21 (latest shipping as of this post) but did not power it on. I increased my max snapshot count from 0 to 10, so I could play with some changes.
I edited the VM’s configuration from the legacy client and enabled the vApp options.
Then I enabled VMware Tools under the OVF Environment Transport section (This allows for information to be passed to the VM & access by VMware tools)
In the Advanced vApp Options, I added some ScaleIO specific information…
And added some additional properties, by selecting the Properties button in the Properties section
Selecting OK and closing the properties of the VM, I exported an OVF of the VM.
Some of the resulting XML included (formatted for clarity):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
< VirtualSystem ovf:id = "NODE1" > < Info >A virtual machine</ Info > < Name >NODE1</ Name ></ pre > ... < ProductSection ovf:class = "vsa" > < Info >Information about the installed software</ Info > < Product >ScaleIO</ Product > < Vendor >EMC Corporation</ Vendor > < Version >1.20</ Version > < FullVersion >1.20-1.00</ FullVersion > < Category >ScaleIO Node Properties</ Category > < Property ovf:key = "hostname" ovf:qualifiers = "MinLen(1), MaxLen(80)" ovf:type = "string" ovf:userConfigurable = "true" > < Label >Host Name</ Label > < Description >Specify the hostname for the SVM.</ Description > </ Property > < Property ovf:key = "ipaddr" ovf:type = "string" ovf:userConfigurable = "true" vmw:qualifiers = "Ip" > < Label >IP Address</ Label > < Description >Specify the IP address for the SVM.</ Description > </ Property > < Property ovf:key = "netmask" ovf:type = "string" ovf:userConfigurable = "true" vmw:qualifiers = "Ip" > < Label >Netmask</ Label > < Description >Specify the subnet to use on the deployed network.</ Description > </ Property > < Property ovf:key = "gateway" ovf:type = "string" ovf:userConfigurable = "true" vmw:qualifiers = "Ip" > < Label >Gateway</ Label > < Description >Specify the gateway on the deployed network.</ Description > </ Property > < Property ovf:key = "dns1" ovf:type = "string" ovf:userConfigurable = "true" vmw:qualifiers = "Ip" > < Label >Primary DNS</ Label > < Description >Specify the Primary DNS on the deployed network.</ Description > </ Property > < Property ovf:key = "dns2" ovf:type = "string" ovf:userConfigurable = "true" vmw:qualifiers = "Ip" > < Label >Secondary DNS</ Label > < Description >Specify the Secondary DNS on the deployed network.</ Description > </ Property > < Property ovf:key = "ntp" ovf:type = "string" ovf:userConfigurable = "true" vmw:qualifiers = "Ip" > < Label >NTP Server</ Label > < Description >Specify the NTP Server on the deployed network.</ Description > </ Property > </ ProductSection > ... </ VirtualSystem > |
I deleted the virtual disk (NODE1-disk1.vmdk) and pointed the OVF to the original vmdk (StorageVM_1.20-1.00-disk1.vmdk) and reimported my SVM.
Going through all of the normal options, I was now presented with some prompts…
Cool. Maybe I’ll put a few values in…
Upon powering on the VM… I find I’m where I was before.
No change. What do I need to do to pass these parameters to my VM, so I can configure my networking?
My VM isn’t using the standard VMware Tools package, but rather open-vm-tools. That’s threw me off.
Executing the following command provided the information I was looking for:
/usr/bin/vmware-rpctool ‘info-get guestinfo.ovfEnv’