Add a blog post on Azure Container Instances

This commit is contained in:
R. Tyler Croy 2017-07-31 11:18:40 -07:00
parent f59d82cfcd
commit 0741b217b5
No known key found for this signature in database
GPG Key ID: 1426C7DC3F51E16F
3 changed files with 125 additions and 0 deletions

View File

@ -0,0 +1,125 @@
---
layout: post
title: "Jenkins in seconds with Azure Container Instances"
tags:
- azure
- opensource
- jenkins
---
Recently Microsoft announced an interesting new addition to their public cloud
offering: [Azure Container Instances](https://azure.microsoft.com/en-us/blog/announcing-azure-container-instances/).
Azure Container Instances are fast and billed by the second, which is quite
compelling on its own. They are interesting in that they provide two novel
levels of container orchestration, the first is rather basic:"take this
container and run it." The second is an integration with Kubernetes which
allows the Kubernetes cluster, most likely one an Azure Container Service, to
schedule container workloads through Azure Container Instances rather than on
the existing Kubernetes agents )VMs) via the "ACI connector." As this service
matures, this could enable some very novel load-based bursting, or cost-saving,
deployment patterns on top of Kubernetes in Azure.
![Jenkins on Azure Container Instances](/images/post-images/jenkins-aci/jenkins-home.png)_
The Jenkins project has been publishing official releases [as Docker
containers](https://hub.docker.com/r/jenkins/jenkins) for some time, so last
Friday I decided it would be interesting to experiment with launching Jenkins
as an Azure Container Instance. I'll first launch Jenkins "the easy way," then
review some of the challenges and more advanced approaches.
### The Easy Way
1. Create a Resource Group into which the Azure Container Instance will be deployed:
`az group create --name jenkins --location eastus`
1. Deploy the container:
`az container create --image jenkins/jenkins:lts-alpine --name jenkins --resource-group jenkins --ip-address public --port 8080`
In a matter of seconds Jenkins will be up and running. In fact, it seems that
it takes longer for the JVM to boot than it does for Azure to provision the
container instance, which is pretty slick.
I can inspect my containers with: `az container list`
➜ ~ az container list
Name ResourceGroup ProvisioningState Image IP:ports CPU/Memory OsType Location
------- --------------- ------------------- -------------------------- ------------------- --------------- -------- ----------
jenkins jenkins Creating jenkins/jenkins:lts-alpine 52.179.126.248:8080 1.0 core/1.5 gb Linux eastus
➜ ~
When I navigate to the IP address listed, I'm presented with the familiar
[Jenkins Post-install Setup
Wizard](https://jenkins.io/doc/book/getting-started/installing/#setupwizard),
which prompts me for the administrator token to configure the instance. Again
using the Azure command line, I can fetch the recent log output with: `az
container logs --name jenkins --resource-group jenkins`, which dumps something
like this to my console:
Jul 31, 2017 5:48:33 PM jenkins.install.SetupWizard init
INFO:
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
e06025745e4d4c559e9ead0819d0dd1a
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************
Jul 31, 2017 5:48:34 PM hudson.model.UpdateSite updateData
INFO: Obtained the latest update center data file for UpdateSource default
With this generated password I can complete the set up of Jenkins and get
started! **Hurrah!**
### Caveats and Outstanding Questions
Of course, this is really helpful for testing with Jenkins but the example above
is **stateless**. When I delete the instance (`az container delete --name
jenkins --resource-group jenkins`) all my configured
[Pipelines](https://jenkins.io/doc/book/pipeline) and settings are lost. Azure
Container Instances [do support stateful
containers](https://docs.microsoft.com/en-us/azure/container-instances/container-instances-mounting-azure-files-volume)
but it's a bit more tedious to set up than I wanted to cover in this blog post.
Another interesting behavior I noticed while working with my Jenkins Azure
Container Instances was "No valid crumb issued" errors when saving
configuration. These errors
typically indicate an aggressive reverse proxy between the end-user and
Jenkins. This can be easily remedied with the "Enable proxy compatibility"
setting in the "Configure Global Security" page in Jenkins:
![Crumb compatibility](/images/post-images/jenkins-aci/crumb-proxy.png)
Finally, it's not clear how to properly utilize the public IP address assigned
to the Azure Container Instance. Whether it's something that could be linked
with Azure DNS, or put behind an Azure Load Balancer.
Azure Container Instances are **very** new to the Azure ecosystem, and as such
I wouldn't recommend using them for production-level workloads just yet, but
they do look like a very handy tool for development, testing, and demonstration
of container-based applications. In the case of Jenkins, if you start
[automating Jenkins with Groovy](/2017/07/24/groovy-automation-for-jenkins.html) you could readily
create your own custom Jenkins container which, out of the box, has everything
configured for testing in seconds via an Azure Container Instance.
You can learn more about Azure Container Instances
[here](https://docs.microsoft.com/en-us/azure/container-instances/), which
support Linux containers first; Windows support is on the way. The adoption of
open source tools and technology by Microsoft in Azure is rapidly becoming a
competitive advantage compared to Amazon Web Services which, as a consumer and
open source advocate, is very exciting to watch. If you haven't taken a look at
Azure recently, I recommend it!

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB