One of the exciting announcements that was made last week at VMworld was the joint partnership between Docker, Google, Pivotal and VMware. Paul Strong (Office of the CTO) wrote a great blog post Better Together – Containers are a Natural Part of the Software-Defined Data Center where he goes into more details about the partnership. The really neat part of the announcement which I think some people may have missed is that this was more than just an announcement. There are actually active projects currently being worked on, most notably a working prototype for a Kubernetes vSphere Provider.
For those of you who are not familiar with Kubernetes, it is an open-source project that was started by Google which provides Container Cluster Management. You can think of Kubernetes as a placement engine/scheduler for Containers, similar to how vSphere DRS is responsible for scheduling Virtual Machines. The Kubernetes vSphere Provider allows you to run a Kubernetes Cluster on top of a vSphere based infrastructure and provides a platform for scheduling Docker Containers running on top of vSphere.
Kubernetes is completely written in Go (short for Golang), a programming language developed by Google. To be able to easily integrate with Kubernetes, a Go library needed to be written for the vSphere API and hence govmomi was born! Similar to pyvmomi and rbvmomi which are vSphere SDKs for Python and Ruby respectively, govomimi is the vSphere SDK equivalent for Go. The govmomi project is an open source project lead by VMware and you can find the Github repository at https://github.com/vmware/govmomi.
In addition to govmomi, I also learned about a neat little CLI that was built on top of the SDK called govc (currently an Alpha release) which provides a simplified command-line interface to a vSphere environment leveraging govmomi. You can find the source code under the govmomi Github repository https://github.com/vmware/govmomi/tree/master/govc. The Kubernetes vSphere Providers leverages govc to be able to orchestrate the deployment of a Kubernetes Cluster on top of vSphere leveraging the vSphere API.
To use govc, you will need to ensure you have Go 1.2+ installed on your system. Here are the steps on installing Go and govc
Step 1 - Download the latest Go package installer for your OS here and once you have Go installed, you can verify that everything is working by running the following command:
go version
Step 2 - Setup your build environment by running the following commands:
export GOPATH=$HOME/src/go
mkdir -p $GOPATH
export PATH=$PATH:$GOPATH/bin
Step 3 - Check out govc source code by running the following command:
go get github.com/vmware/govmomi/govc
At this point, govc has been installed. You can now connect to either a vCenter Server or ESXi host. The easiest way is to specify the vSphere API endpoint and credentials is by setting a couple of environmental variables, so you do not have to specify it on the command-line.
Step 4 - Run the following command and specify the username, password and either the hostname or IP Address of your vCenter Server or ESXi host:
export GOVC_URL='https://[USERNAME]:[PASSWORD]@[ESXI-OR-VCENTER-HOSTNAME-OR-IP]/sdk'
Step 5 - To verify that everything is working, you can run the following command to query the endpoint you have connected to:
govc about
If everything was successful, you should see some basic information about the vSphere API endpoint you have connected to. In the example above, I am connected to a VCSA (vCenter Server Appliance). The govc CLI is quite similar to RVC with commands broken up into various namespaces. However, one feature that is not there today is the ability to tab complete the commands which is something I just love about RVC!
You can also just run "govc" and it will provide a list of available commands:
You can get more details about each command by specifying --help command, here is an example of the host.info
To get information about one of my ESXi hosts, I need to specify --host.ip option along with the IP:
As you can see from the screenshot above, some basic information is displayed about my ESXi host which is running on a Mac Mini. If you would like to learn more about govc, I highly recommend you check out the govc repository on Github which has additional documentation. You can also file any bugs or feature requests you would like to see on the project page.
At this point you are now ready to proceed to the next steps which is to setup Kuberentes and deploy a Kubernetes Cluster onto your vSphere environment. Unfortunately I ran into a problem while going through the Kubernetes deployment and I did not know where to go next and decided to file a Github issue here. To my surprise, I immediately got a response back from the VMware Engineers who are working on the project. I had a couple of email exchanges with the team to debug the problem. It looks like we found the culprit and I was able to get Kubernetes up and running. There are a couple of minor caveats which I will explain in more detail in Part 2 of this post and walk you through the steps of deploying a Kubernetes Cluster running on top of vSphere.
Ian Logan says
This is awesome, I've been hoping for a Go version of the vsphere API for a long time. Kubernetes sounds really interesting as well.
Andy Kosela says
This is beautiful... Go is the future!
Nilton OS says
Features Request, govc CLI to XenServer ?
Kassie Mclean says
"Go" is not "short for Golang". The official name of the language is "Go".
Unfortunately, the term "Golang" has become a popular term used to refer to "Go", perhaps in some part due to the URL of the project's website being http://golang.org. Admittedly, using "Golang" in articles that refer to "Go" do make it easier to find such articles when searching the Internet.
Rosh says
This is great!!
Any thoughts on how storage and networking is provisioned/managed for my applications now inside containers? What if I don't want to create too many VMs? How do I manage my storage and networking? What about vmotion? Is it even needed for containers? Lots of questions and perhaps a little confusing. Appreciate if anyone has any thoughts about the above.
Pavan Karkun says
In case you come across this error in step 5:
>govc ls
Error: Post https://XX.XX.XX.XX/sdk: x509: cannot validate certificate for 10.160.118.125 because it doesn't contain any IP SANs
do:
export GOVC_INSECURE=1
**Note: "Use this option when the host you're connecting is using self-signed certificates, or is otherwise trusted"
I had to spend lot of time trying to find this solution. Might save you few hours if you come across this error.
jithinjk says
Thanks a bunch! Was searching for this solution everywhere.
mrjcleaver says
Thanks also!
dncmn says
Thank you very mucn.Today I came across this problem .Now I am very happy
bhuvaneshwari says
Hai ,
I am using govmomi for a while.I was trying to use QueryChangedBlockAreas method and I have some doubts regardiing it.Can anyone in here please help me with that?
findneville says
I am new to govc and I find it extremely simple to use. However, I don't see any commands to list datacenters. I am no go language expert but I am assuming it would be relatively simple to list something if you can create and destroy it.
I am working on a project to perform some "Chaos Monkey" in my environment by randomly shutting down ESXi Hosts. I don't see any options to do that and there doesnt seem to be many examples floating around for govc. Any help appreciated before I go back to PowerCLI.
farid says
Hi
I have been using govmomi - govc to deploy VMs . It works great. The only glitch I have is I cannot (do not know) inflate a vmdk image using govc . For this I need to basically use ssh and vmkfstools to do that. Is there a way t do it using govc?
Thanks in advance.
William Lam says
govc (CLI Client) is OSS (https://github.com/vmware/govmomi), so you can definitely extend it to add this functionality. You'll want to use the InflateVirtualDisk_Task() http://pubs.vmware.com/vsphere-65/index.jsp?topic=%2Fcom.vmware.wssdk.apiref.doc%2Fvim.VirtualDiskManager.html method which will perform the exact same operation using the vSphere API so you don't need to do all the ugliness with SSH/vmkfstools 🙂
If you're having trouble adding this or would like to make a request, submit a Github issue here https://github.com/vmware/govmomi/issues
alex says
I have virtual machine with several resals card
I would like to display all ip address of virtual machine
I would also like to display all the snaphhot I have with detail on it
Thank you for your help
tegger says
how to qos or flow speed limit