<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

 <title>CoreOS Blog</title>
 <link href="https://coreos.com/atom.xml" rel="self"/>
 <link href="https://coreos.com"/>
 <updated>2015-08-11T18:56:18+00:00</updated>
 <id>https://coreos.com</id>
 <author>
   <name>CoreOS</name>
 </author>

 
 <entry>
   <title>Meet the CoreOS team around the world in August</title>
   <link href="https://coreos.com/blog/events-in-august/"/>
   <updated>2015-08-04T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/events-in-august</id>
   <content type="html">&lt;p&gt;This month the CoreOS team will be speaking from locations along the Pacific Northwest in the US, to Austria, to Japan and China. August also begins our &lt;a href=&quot;https://tectonic.com/training/&quot;&gt;Kubernetes workshop series&lt;/a&gt;, brought to you by Google and Intel. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, August 5, 2015 at 10:00 a.m. PST – Portland, OR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We kick off our Kubernetes training series in Portland with Kelsey Hightower (&lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;@kelseyhightower&lt;/a&gt;), product manager, developer and chief advocate at CoreOS. This hands-on workshop will teach you everything you need to know about Kubernetes, CoreOS and Docker. We are offering the workshop for only the cost of materials ($75) for a limited time so we encourage you to send any members of your team for this date. &lt;a href=&quot;https://www.eventbrite.com/e/kubernetes-workshop-portland-tickets-17800526855&quot;&gt;Register in advance to attend&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Friday, August 7, 2015 at 10:00 a.m. PST – Seattle, WA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kelsey will provide the next Kubernetes training in Seattle, guiding your team through Kubernetes, CoreOS and Docker for only the cost of materials ($75) for a limited time. This event is sold out but we have &lt;a href=&quot;https://tectonic.com/training/&quot;&gt;several other trainings in other cities&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Friday, August 7, 2015 at 4:00 p.m. PST – Las Vegas, NV&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Going to &lt;a href=&quot;https://www.defcon.org/&quot;&gt;DEF CON 23&lt;/a&gt; this year? Meet Brian “Redbeard” Harrington (&lt;a href=&quot;https://twitter.com/brianredbeard&quot;&gt;@brianredbeard&lt;/a&gt;), who will speak in a &lt;a href=&quot;https://skytalks.info/&quot;&gt;Skytalk&lt;/a&gt; on container security and kernel namespaces on Friday, August 7. &lt;/p&gt;

&lt;p&gt;In case you missed it, see Redbeard’s presentation on minimal containers from the &lt;a href=&quot;https://youtu.be/gMpldbcMHuI&quot;&gt;CoreOS + Sysdig San Francisco July meetup&lt;/a&gt;.&lt;/p&gt;

&lt;div style=&quot;display: block; width: 500px; margin:0 auto;&quot;&gt;
    &lt;iframe width=&quot;500&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/gMpldbcMHuI&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monday, August 10, 2015 at 10:00 a.m. PST – San Francisco, CA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join us for a daylong Kubernetes training in San Francisco. Kelsey will walk you through Kubernetes, CoreOS and Docker. Seats are filling up quickly so &lt;a href=&quot;https://www.eventbrite.com/e/kubernetes-workshop-san-francisco-tickets-17813132559&quot;&gt;register early&lt;/a&gt; to secure your spot. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, August 11, 2015 at 6:30 p.m. BST – London, UK&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join Iago López (&lt;a href=&quot;https://twitter.com/iaguis&quot;&gt;@iaguis&lt;/a&gt;), senior developer, for the &lt;a href=&quot;http://www.meetup.com/Contain/events/223782347/&quot;&gt;Container Infrastructure Meetup&lt;/a&gt; at uSwitch in London. He’ll provide an overview and update on &lt;a href=&quot;https://github.com/coreos/rkt&quot;&gt;rkt&lt;/a&gt;, a container runtime designed to be composable, secure and fast.  &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monday, August 17, 2015 at 2:20 p.m. PST – Seattle, WA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CoreOS will be at &lt;a href=&quot;http://events.linuxfoundation.org/events/linuxcon-north-america&quot;&gt;LinuxCon&lt;/a&gt; and &lt;a href=&quot;http://events.linuxfoundation.org/events/containercon&quot;&gt;ContainerCon&lt;/a&gt; for the week! Join us for a variety of talks in Seattle.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First, at 2:20 p.m. PT see Jonathan Boulle (&lt;a href=&quot;https://twitter.com/baronboulle&quot;&gt;@baronboulle&lt;/a&gt;), product technical lead at CoreOS, speak at &lt;a href=&quot;http://sched.co/3YK5&quot;&gt;ContainerCon&lt;/a&gt; to discuss the importance of creating a common, interoperable and well-defined specification standardizing what “application containers” are.&lt;/li&gt;
&lt;li&gt;Immediately following, see Brandon Philips (&lt;a href=&quot;https://twitter.com/brandonphilips&quot;&gt;@brandonphilips&lt;/a&gt;), CTO at CoreOS, speak at 3:20 p.m. PT about the &lt;a href=&quot;http://sched.co/3XoH&quot;&gt;Application Containers Stack, rkt to Kubernetes&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Later at 6:20 p.m. PT, Brandon Philips will join the &lt;a href=&quot;http://sched.co/3XdI&quot;&gt;day one closing container keynote panel&lt;/a&gt; with Tim Hockin (&lt;a href=&quot;https://twitter.com/thockin&quot;&gt;@thockin&lt;/a&gt;), technical lead, cluster management at Google, Matt Trifiro (&lt;a href=&quot;https://twitter.com/mtrifiro&quot;&gt;@mtrifiro&lt;/a&gt;), SVP at Mesosphere, Jérôme Petazzoni (&lt;a href=&quot;https://twitter.com/jpetazzo&quot;&gt;@jpetazzo&lt;/a&gt;) of Docker, and moderator Joe Brockmeier (&lt;a href=&quot;https://twitter.com/jzb&quot;&gt;@jzb&lt;/a&gt;), who works on open source and standards at Red Hat.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, August 19, 2015 at 7:00 p.m. JST – Tokyo, Japan&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Save the date! Kelsey Hightower will be speaking at a meetup in Tokyo. More details will be added – stay tuned on our &lt;a href=&quot;https://coreos.com/community/&quot;&gt;community page&lt;/a&gt; for updates. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, August 19, 2015 at 10:25 a.m. PST – Seattle, WA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;More CoreOS talks at LinuxCon and ContainerCon include two speakers with expertise in security and networking.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First at 10:25 a.m. PT, Matthew Garrett (&lt;a href=&quot;https://twitter.com/mjg59&quot;&gt;@mjg59&lt;/a&gt;), principal security software engineer at CoreOS, will present &lt;a href=&quot;http://sched.co/3Yxt&quot;&gt;Tying TPMs Throughout The Stack&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Later at 4:00 p.m. PT, Eugene Yakubovich (&lt;a href=&quot;https://twitter.com/eyakubovich&quot;&gt;@eyakubovich&lt;/a&gt;), senior software engineer and maintainer of flannel at CoreOS, will present &lt;a href=&quot;http://sched.co/3XoI&quot;&gt;From Network Namespace to Fabric Overlays&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thursday, August 20, 2015 at 9:30 a.m. PST – Seattle, WA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From LinuxCon and ContainerCon, our team will also be speaking at &lt;a href=&quot;https://linuxplumbersconf.org/2015/&quot;&gt;Linux Plumber’s Conference&lt;/a&gt; in Seattle. Brandon Philips will kick off the event with a talk on &lt;a href=&quot;http://www.linuxplumbersconf.org/2015/ocw/proposals/3315&quot;&gt;Open Containers&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Friday, August 21, 2015 at 11:10 a.m. JST – Tokyo, Japan&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Meet Kelsey Hightower in Tokyo at &lt;a href=&quot;http://yapcasia.org/2015/&quot;&gt;YAPC Asia&lt;/a&gt;. He’ll discuss &lt;a href=&quot;http://yapcasia.org/2015/talk/show/e19fe827-13c1-11e5-aca1-525412004261&quot;&gt;managing containers at scale with CoreOS and Kubernetes&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Friday, August 21, 2015 at 9:00 a.m. PST – Seattle, WA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Linux Plumbers Conference attendees are welcome to join Matthew Garrett to learn about &lt;a href=&quot;http://www.linuxplumbersconf.org/2015/ocw/proposals/3363&quot;&gt;securing the entire boot chain&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://events.linuxfoundation.org/events/mesoscon&quot;&gt;MesosCon&lt;/a&gt; attendees should not miss Brandon Philips &lt;a href=&quot;http://sched.co/35D3&quot;&gt;discussing rkt and more&lt;/a&gt; at 11:30 a.m. PT. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, August 25, 2015 – Vienna, Austria&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Jonathan Boulle will be giving a keynote at &lt;a href=&quot;http://vhpc.org/&quot;&gt;Virtualization in High-Performance Cloud Computing (VHPC ’15)&lt;/a&gt;, held in conjunction with &lt;a href=&quot;http://www.europar2015.org/&quot;&gt;Euro-Par 2015&lt;/a&gt;, in Vienna, Austria. Jon will discuss the work behind designing an open standard for running applications in containers. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, August 26, 2015 at 11:35 a.m. PST – Mountain View, CA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.openstacksv.com/&quot;&gt;OpenStack Silicon Valley&lt;/a&gt;, hosted at the Computer History Museum, will feature Alex Polvi (&lt;a href=&quot;https://twitter.com/polvi&quot;&gt;@polvi&lt;/a&gt;), CEO of CoreOS. He’ll present &lt;a href=&quot;http://sched.co/3pDA&quot;&gt;Containers for the Enterprise: It&amp;#39;s Not That Simple&lt;/a&gt; on August 26 at 11:35 a.m. PT. &lt;/p&gt;

&lt;p&gt;Immediately following is a &lt;a href=&quot;http://sched.co/3nr9&quot;&gt;deep-dive session&lt;/a&gt; with Wall Street Journal technology reporter Shira Ovide (&lt;a href=&quot;https://twitter.com/ShiraOvide&quot;&gt;@ShiraOvide&lt;/a&gt;), joined by Alex, James Staten, chief strategist of the cloud and enterprise division at Microsoft, as well as Craig McLuckie (&lt;a href=&quot;https://twitter.com/cmcluck&quot;&gt;@cmcluck&lt;/a&gt;), senior product manager at Google. They will discuss practical choices facing enterprises moving to an IT resource equipped to support software developers in their work to help their companies compete. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Friday, August 28, 2015 – Beijing, China&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At &lt;a href=&quot;http://cnutcon.com/&quot;&gt;CNUT Con&lt;/a&gt;, presented by InfoQ in Beijing, Kelsey Hightower will give a keynote: From Theory to Production: Managing Applications at Scale.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;To invite CoreOS to a meetup, training or conference in your area &lt;a href=&quot;mailto:community@coreos.com&quot;&gt;email us&lt;/a&gt; or tweet to us &lt;a href=&quot;https://twitter.com/coreoslinux&quot;&gt;@CoreOSLinux&lt;/a&gt;!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Introducing etcd 2.1</title>
   <link href="https://coreos.com/blog/introducing-etcd-2.1/"/>
   <updated>2015-07-24T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/introducing-etcd-2.1</id>
   <content type="html">&lt;p&gt;After months of focused work, etcd 2.1 has been released. Since the etcd 2.0
release in January, the team has gathered a ton of valuable feedback from
real-world environments. And based on that feedback, this release introduces:
authentication/authorization APIs, new metric endpoints, improved
transportation stability, increased performance between etcd servers, and
enhanced cluster stability.&lt;/p&gt;

&lt;p&gt;For a quick overview, etcd is an open source, distributed, consistent key
value store for shared configuration, service discovery, and scheduler
coordination. By using etcd, applications can ensure that even in the face of
individual servers failing, the application will continue to work. etcd is a
core component of CoreOS software that facilitates safe automatic updates,
coordinating work being scheduled to hosts, and setting up overlay networking
for containers.&lt;/p&gt;

&lt;p&gt;If you want to skip the talk and get right to the code, you can find new
binaries on &lt;a href=&quot;https://github.com/coreos/etcd/releases/tag/v2.1.1&quot;&gt;GitHub&lt;/a&gt;. etcd
2.1.1 is available in CoreOS 752.1.0 (currently in the alpha channel), so feel
free to take it for a spin.&lt;/p&gt;

&lt;h2 id=&quot;zero-downtime-rolling-upgrade-from-2.0&quot;&gt;Zero-Downtime Rolling Upgrade from 2.0&lt;/h2&gt;

&lt;p&gt;Upgrading from etcd 2.0 to etcd 2.1 is a zero-downtime rolling upgrade. The
basic approach is that you can upgrade a cluster running etcd 2.0 one-by one to
etcd 2.1. For more details, please read the &lt;a href=&quot;https://github.com/coreos/etcd/blob/master/Documentation/upgrade_2_1.md&quot;&gt;upgrade documentation&lt;/a&gt;.
If you are running your cluster under etcd 0.4.x, please
&lt;a href=&quot;https://github.com/coreos/etcd/blob/815fe327dd9890d430ca7a550247872ec896ac97/Documentation/backward_compatibility.md#snapshot-migration&quot;&gt;upgrade to etcd 2.0&lt;/a&gt; first and then follow the rolling upgrade
steps.&lt;/p&gt;

&lt;p&gt;Also, with this release, etcd 2.1 is now the current stable etcd release; as
such, all bug fixes will go into new etcd 2.1.x releases and won&amp;#39;t be
backported to etcd 2.0.x.&lt;/p&gt;

&lt;h2 id=&quot;auth-api-for-authentication-and-authorization&quot;&gt;Auth API for Authentication and Authorization&lt;/h2&gt;

&lt;p&gt;A major feature in this release is the &lt;code&gt;/v2/auth&lt;/code&gt; endpoint, which adds auth to
the etcd key/value API. This API lets you manage authorization of key prefixes
with users and roles and authenticate those users using HTTP basic
authentication, enabling users to have more control within teams. This
includes support in the etcd HTTP server, the command-line etcdctl client, and
the Go &lt;a href=&quot;https://godoc.org/github.com/coreos/etcd/client&quot;&gt;etcd/client&lt;/a&gt; package. You can find full details in the
&lt;a href=&quot;https://github.com/coreos/etcd/blob/master/Documentation/authentication.md&quot;&gt;authentication documentation&lt;/a&gt;. Please note that this is an experimental
feature and will be improved based on user feedback. We think we got the
details right but may adjust the API in a subsequent release.&lt;/p&gt;

&lt;h2 id=&quot;improved-transport-stability&quot;&gt;Improved Transport Stability&lt;/h2&gt;

&lt;p&gt;Many users of etcd have networks with inconsistent performance and latency.
We can&amp;#39;t make etcd work perfectly in all of these difficult environments but
what we have done in this release is optimize the way etcd uses the network in
a variety of ways to make it perform in an optimal manner.&lt;/p&gt;

&lt;p&gt;First, to reduce the connection creation overhead and to make the consensus
protocol (raft) communication more efficient and stable, etcd now maintains
long running connections with other peers. Next, to reduce the raft command
commit latency, each raft append message is now attached to a commit index. The
commit latency is reduced from 100ms to 1ms under light load
(&amp;lt;100 writes/second). And finally, &lt;a href=&quot;https://godoc.org/github.com/coreos/etcd/raft&quot;&gt;etcd&amp;#39;s raft implementation&lt;/a&gt; now
provides better internal flow control, significantly reducing the possibility
of raft message loss, and improving CPU and memory efficiency.&lt;/p&gt;

&lt;h2 id=&quot;functional-testing&quot;&gt;Functional Testing&lt;/h2&gt;

&lt;p&gt;For four months we have been running etcd &lt;a href=&quot;https://coreos.com/blog/new-functional-testing-in-etcd/&quot;&gt;against a fault-injecting&lt;/a&gt;
and functional testing framework we built. Our goal is to ensure etcd is
failure-resistant while under heavy usage; and in these months of testing, etcd
has shown to be robust under many kinds of harsh failure scenarios. We will
continue to run these tests as we iterate on the 2.1 releases.&lt;/p&gt;

&lt;h2 id=&quot;improved-logging&quot;&gt;Improved Logging&lt;/h2&gt;

&lt;p&gt;Leveled logging is supported now. Users can set an expected log level for etcd
and its subpackages. In the meantime, we have moved verbose, repeated logging
to DEBUG log level, so etcd&amp;#39;s default log will be significantly more readable.
You can control leveled logging using flags listed &lt;a href=&quot;https://github.com/coreos/etcd/blob/master/Documentation/configuration.md#logging-flags&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;new-metrics-api&quot;&gt;New Metrics API&lt;/h2&gt;

&lt;p&gt;etcd 2.1 introduces a new &lt;a href=&quot;https://github.com/coreos/etcd/blob/master/Documentation/metrics.md&quot;&gt;metrics API endpoint&lt;/a&gt; that can be used for
real-time monitoring and debugging. It exposes statistics about both client
behaviors and resource usage. Like the auth API endpoint, this is an
experimental feature which may be improved and changed based on user feedback.&lt;/p&gt;

&lt;h2 id=&quot;get-involved-and-get-started&quot;&gt;Get Involved and Get Started&lt;/h2&gt;

&lt;p&gt;We will continue to work to make etcd a fundamental building block for
Google-like infrastructure that users can take off the shelf, build upon, and
rely on. &lt;a href=&quot;https://coreos.com/docs/distributed-configuration/getting-started-with-etcd/&quot;&gt;Get started with etcd&lt;/a&gt;, continue to share your feedback, and
even help by &lt;a href=&quot;https://github.com/coreos/etcd/labels/help%20wanted&quot;&gt;contributing directly to the code&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS and Kubernetes 1.0</title>
   <link href="https://coreos.com/blog/kubernetes-1.0-and-cloud-native-computing-foundation/"/>
   <updated>2015-07-21T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/kubernetes-1.0-and-cloud-native-computing-foundation</id>
   <content type="html">&lt;p&gt;Today is a big day for Kubernetes, as it hits its &lt;a href=&quot;http://googlecloudplatform.blogspot.com/2015/07/Kubernetes-V1-Released.html&quot;&gt;1.0 release milestone&lt;/a&gt;. Kubernetes provides a solid foundation for running container-based infrastructure providing API driven deployment, service discovery, monitoring and load balancing. It is exciting progress towards bringing industry-wide Google-like infrastructure for everyone else (GIFEE) through community-built open source software.&lt;/p&gt;

&lt;h2 id=&quot;kubernetes-1.0-on-coreos-open-source-guides&quot;&gt;Kubernetes 1.0 on CoreOS Open Source Guides&lt;/h2&gt;

&lt;p&gt;The Kubernetes project has come a long way in just over a year, with many API improvements and more recently a focus on stability and scalability. If you haven&amp;#39;t tried Kubernetes recently it is a worthwhile experience and can get you thinking how containers can be more easily used in real-world deployments: whether it is doing your first rolling upgrade of your containerized app or using DNS service discovery between components.&lt;/p&gt;

&lt;p&gt;For those that want to try Kubernetes 1.0 on CoreOS, we have put together some &lt;a href=&quot;/kubernetes/docs/latest/getting-started.html&quot;&gt;easy-to-read  open source guides&lt;/a&gt; to run Kubernetes 1.0 on CoreOS. And as always if you need help try us on the &lt;a href=&quot;https://coreos.com/community&quot;&gt;#coreos irc channel or coreos-user mailing list&lt;/a&gt;. &lt;/p&gt;

&lt;h2 id=&quot;coreos-joins-cloud-native-foundation&quot;&gt;CoreOS Joins Cloud Native Foundation&lt;/h2&gt;

&lt;p&gt;When we started building CoreOS Linux two years ago we wanted to encourage people to run infrastructure in a secure,  distributed and consistent manner. This required many components along the way, including new datastores like etcd, container runtimes like Docker &amp;amp; rkt, and cluster wide application deployment, orchestration, and service discovery like Kubernetes. Today, CoreOS is joining a new foundation along with Google, Twitter, Huawei and other industry partners to collaborate and build the technologies that are changing how people are thinking about infrastructure software. This new foundation, the &lt;a href=&quot;https://cncf.io&quot;&gt;Cloud Native Foundation&lt;/a&gt;, is being launched in partnership with the Linux Foundation and will shepherd the industry collaboration around Kubernetes and other projects moving forward.&lt;/p&gt;

&lt;h2 id=&quot;tectonic-preview&quot;&gt;Tectonic Preview&lt;/h2&gt;

&lt;p&gt;For companies who want help building their infrastructure in this this manner we are also announcing that &lt;a href=&quot;https://tectonic.com/&quot;&gt;Tectonic&lt;/a&gt; is now in Preview, this includes: 24x7 support, a friendly web-based console, and deployment guides for AWS and on your own hardware.  We invite you to read more about Tectonic Preview on our Tectonic &lt;a href=&quot;https://tectonic.com/blog/announcing-the-tectonic-preview&quot;&gt;blog&lt;/a&gt;.  &lt;/p&gt;

&lt;h2 id=&quot;kubernetes-training&quot;&gt;Kubernetes Training&lt;/h2&gt;

&lt;p&gt;Also today, we are launching &lt;a href=&quot;https://tectonic.com/training&quot;&gt;Kubernetes Training&lt;/a&gt;. The first workshops will be delivered by &lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;Kelsey Hightower&lt;/a&gt;, product manager, developer and chief advocate at CoreOS, and will take place on August 5 in Portland, August 7 in Seattle and August 10 in San Francisco.&lt;/p&gt;

&lt;p&gt;By joining these workshops, you will learn more about Kubernetes, CoreOS, Docker and rkt and leave knowing Kubernetes Core Concepts, how to enable and manage key cluster add-ons such as DNS, monitoring, and the UI, how to configure nodes for the Kubernetes networking model and how to manage applications with Kubernetes deployment patterns.&lt;/p&gt;

&lt;p&gt;For a limited time, the workshops will be available at a special rate for only the cost materials. Sign-up for a workshop in your area early they will fill-up fast.&lt;/p&gt;

&lt;h2 id=&quot;coreos-at-oscon&quot;&gt;CoreOS at OSCON&lt;/h2&gt;

&lt;p&gt;The CoreOS team is at OSCON this week and you have three ways to find us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attend Kelsey Hightower&amp;#39;s tutorial titled &amp;quot;&lt;a href=&quot;http://www.oscon.com/open-source-2015/public/schedule/detail/42529&quot;&gt;Taming microservices with CoreOS and Kubernetes&lt;/a&gt;&amp;quot; Tuesday at 1:30pm&lt;/li&gt;
&lt;li&gt;Join us on Wednesday for our free &lt;a href=&quot;http://www.meetup.com/coreos-pdx/events/223898899/&quot;&gt;CoreOS Portland OSCON meetup&lt;/a&gt; starting at 6:00pm at the Ecotrust Building&lt;/li&gt;
&lt;li&gt;Come by the Tectonic by CoreOS booth (#900) to meet our team and ask questions, and celebrate the launch of Kubernetes 1.0&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>Meet CoreOS at OSCON and more</title>
   <link href="https://coreos.com/blog/meet-coreos-in-oregon/"/>
   <updated>2015-07-17T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/meet-coreos-in-oregon</id>
   <content type="html">&lt;p&gt;Next week we are heading to Portland, Oregon for OSCON. We look forward to meeting fellow OSCON attendees and Portland friends at one of the below events, or at our booth (# 900) on the OSCON show floor, July 21-24. If you have questions about Kubernetes, CoreOS, Docker or rkt sign up for &lt;a href=&quot;http://goo.gl/forms/dW5CIlpoCQ&quot;&gt;office hours&lt;/a&gt; at our booth and get one-on-one time with our team. Read on to see more about where we will be next week. See you then!&lt;/p&gt;

&lt;h3 id=&quot;sunday,-july-19&quot;&gt;Sunday, July 19&lt;/h3&gt;

&lt;p&gt;Get revved up for OSCON and see &lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;Kelsey Hightower&lt;/a&gt;, product manager, developer and chief advocate at CoreOS, speak in a lightning talk at the NGINX Summit at 3 p.m. PT. Register &lt;a href=&quot;http://www.eventbrite.com/e/nginx-summit-training-portland-tickets-17031615019?aff=COREOS&quot;&gt;here&lt;/a&gt; for your ticket.&lt;/p&gt;

&lt;h3 id=&quot;tuesday,-july-21&quot;&gt;Tuesday, July 21&lt;/h3&gt;

&lt;p&gt;CoreOS will be at the Kubernetes 1.0 event – be sure to get there in time for the keynote at 11 a.m. PT. Get your &lt;a href=&quot;http://www.kuberneteslaunch.com/&quot;&gt;ticket&lt;/a&gt; before it sells out! If you can’t make it in person you can register for the live-stream. We’ll be there throughout the day and if you miss us at the event, connect with our team at the Kubernetes After Hours Party on Tuesday too.&lt;/p&gt;

&lt;p&gt;At OSCON, &lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;Kelsey Hightower&lt;/a&gt; will deliver a much-requested 3.5-hour tutorial starting at 1:30 p.m. PT on &lt;a href=&quot;http://www.oscon.com/open-source-2015/public/schedule/speaker/150240&quot;&gt;taming microservices with CoreOS and Kubernetes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The OSCON Expo Hours begin at 5 p.m. so meet us at our booth if you’re there early for the reception.&lt;/p&gt;

&lt;h3 id=&quot;wednesday,-july-22---thursday,-july-24&quot;&gt;Wednesday, July 22 - Thursday, July 24&lt;/h3&gt;

&lt;p&gt;Our CoreOS booth will have expert engineers to answer your questions and get you started with Tectonic. &lt;a href=&quot;http://goo.gl/forms/dW5CIlpoCQ&quot;&gt;Sign up for office hours&lt;/a&gt; and talk with a CoreOS expert to get all your Kubernetes, CoreOS, Docker and rkt questions answered. Visit us at booth 900 all day on Wednesday and Thursday and tweet to us &lt;a href=&quot;https://twitter.com/coreoslinux&quot;&gt;@CoreOSLinux&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/tectonicstack&quot;&gt;@TectonicStack&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;wednesday,-july-22&quot;&gt;Wednesday, July 22&lt;/h3&gt;

&lt;p&gt;Join us for our second annual CoreOS Portland OSCON meetup starting at 6 p.m. PT at the Ecotrust Building. &lt;a href=&quot;https://twitter.com/brianredbeard&quot;&gt;Brian “Redbeard” Harrington&lt;/a&gt;, principal architect at CoreOS, &lt;a href=&quot;https://twitter.com/brandonphilips&quot;&gt;Brandon Philips&lt;/a&gt;, CTO of CoreOS, &lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;Kelsey Hightower&lt;/a&gt;, product manager at CoreOS, and &lt;a href=&quot;https://twitter.com/mjg59&quot;&gt;Matthew Garrett&lt;/a&gt;, principal security engineer at CoreOS, will lead the talks of the evening. We thank our sponsors, &lt;a href=&quot;http://www.redapt.com/&quot;&gt;Redapt&lt;/a&gt; and &lt;a href=&quot;http://www.couchbase.com/&quot;&gt;Couchbase&lt;/a&gt; for making the event possible and providing drinks and bites on the &lt;a href=&quot;http://www.ecotrust.org/&quot;&gt;Ecotrust&lt;/a&gt; rooftop! &lt;a href=&quot;http://www.meetup.com/coreos-pdx/events/223898899/&quot;&gt;RSVP here&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;thursday,-july-23&quot;&gt;Thursday, July 23&lt;/h3&gt;

&lt;p&gt;After your day at OSCON, join us for a &lt;a href=&quot;http://www.oscon.com/open-source-2015/public/schedule/detail/45277&quot;&gt;Birds of a Feather (BoF)&lt;/a&gt; session at 7 p.m. PT by &lt;a href=&quot;https://twitter.com/brianredbeard&quot;&gt;Brian “Redbeard” Harrington&lt;/a&gt;, principal architect at CoreOS. He will have a lively interactive conversation with attendees and cover how to get started with CoreOS, CoreOS components and CoreOS best practices you want to learn about most.&lt;/p&gt;

&lt;h3 id=&quot;friday,-july-24&quot;&gt;Friday, July 24&lt;/h3&gt;

&lt;p&gt;At 11:10 a.m. PT &lt;a href=&quot;https://twitter.com/mjg59&quot;&gt;Matthew Garrett&lt;/a&gt; will present &lt;a href=&quot;http://www.oscon.com/open-source-2015/public/schedule/speaker/6852&quot;&gt;building a trustworthy computer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;See you in Portland!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Announcing rkt v0.7.0, featuring a new build system, SELinux and more</title>
   <link href="https://coreos.com/blog/rkt-0.7.0-with-selinux-and-new-build-system/"/>
   <updated>2015-07-15T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/rkt-0.7.0-with-selinux-and-new-build-system</id>
   <content type="html">&lt;p&gt;Today we are announcing &lt;a href=&quot;https://github.com/coreos/rkt/releases/tag/v0.7.0&quot;&gt;rkt v0.7.0&lt;/a&gt;. rkt is an app container runtime built to be efficient, secure and composable for production environments. This release includes new subcommands for a rkt image to manipulate images from the local store, a new build system based on autotools and integration with SELinux. These new capabilities improve the user experience, make it easier to build future features and improve security isolation between containers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note on rkt and OCP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As you know, rkt is an implementation of the &lt;a href=&quot;https://github.com/appc/spec&quot;&gt;App Container (appc) spec&lt;/a&gt; and rkt is also targeted to be a future implementation of the &lt;a href=&quot;https://github.com/opencontainers/specs&quot;&gt;Open Container Project (OCP) specification&lt;/a&gt;. The OCP development is still in its early days. Our plans with rkt are unchanged and the team is committed to the continued development of rkt. This is all a part of the goal to build rkt as a leading container runtime focused on security and composability for the most demanding production requirements.&lt;/p&gt;

&lt;p&gt;Now, read on for details on the new features.&lt;/p&gt;

&lt;h2 id=&quot;new-subcommands-for-rkt-image&quot;&gt;New Subcommands for rkt image&lt;/h2&gt;

&lt;p&gt;In this release all of the subcommands dealing with images in the local store can be found inside &lt;code&gt;rkt image&lt;/code&gt;. Apart from the already existing subcommands &lt;code&gt;rkt image list&lt;/code&gt;, &lt;code&gt;rkt image rm&lt;/code&gt; and &lt;code&gt;rkt image cat-manifest&lt;/code&gt;, this release adds three more:&lt;/p&gt;

&lt;h3 id=&quot;rkt-image-export&quot;&gt;rkt image export&lt;/h3&gt;

&lt;p&gt;This subcommand exports an &lt;a href=&quot;https://github.com/appc/spec/blob/master/spec/aci.md&quot;&gt;ACI&lt;/a&gt; from the local store. This comes in handy when you want to copy an image to another machine, file server and so-on.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ rkt image export coreos.com/etcd etcd.aci
$ tar xvf etcd.aci
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note that this command does not perform any network I/O so the image must be in the local store beforehand. Also, the exported ACI file might be different from the original imported to the store because &lt;code&gt;rkt image export&lt;/code&gt; always returns uncompressed ACIs.&lt;/p&gt;

&lt;h3 id=&quot;rkt-image-extract&quot;&gt;rkt image extract&lt;/h3&gt;

&lt;p&gt;For debugging or inspection you may want to extract an ACI to a directory on disk. You can get the full ACI or just its rootfs:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ rkt image extract coreos.com/etcd etcd-extracted
$ find etcd-extracted
etcd-extracted
etcd-extracted/manifest
etcd-extracted/rootfs
etcd-extracted/rootfs/etcd
etcd-extracted/rootfs/etcdctl
...
$ rkt image extract --rootfs-only coreos.com/etcd etcd-rootfs
$ find etcd-rootfs
etcd-extracted
etcd-extracted/etcd
etcd-extracted/etcdctl
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;As with &lt;code&gt;rkt image export&lt;/code&gt; no network I/O will be performed.&lt;/p&gt;

&lt;h3 id=&quot;rkt-image-render&quot;&gt;rkt image render&lt;/h3&gt;

&lt;p&gt;While the previous command extracts an ACI to a directory, it doesn’t take into account image dependencies or &lt;a href=&quot;https://github.com/appc/spec/blob/master/spec/aci.md#image-manifest-schema&quot;&gt;pathWhitelists&lt;/a&gt;. To get an image rendered as it would look ready-to-run inside of the rkt &lt;a href=&quot;https://github.com/coreos/rkt/blob/master/Documentation/devel/architecture.md&quot;&gt;stage2&lt;/a&gt; you can run &lt;code&gt;rkt image render&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ rkt image render --rootfs-only coreos.com/etcd etcd-rendered
$ find etcd-rendered
etcd-extracted
etcd-extracted/etcd
etcd-extracted/etcdctl
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;new-build-system&quot;&gt;New Build System&lt;/h2&gt;

&lt;p&gt;In 0.7.0 we introduce a new build system based on autotools. Previous versions of rkt were built with a combination of shell scripts and ad-hoc Makefiles. As building complexity grew, more and more environment variables were added that made new build options less discoverable and complicated development.&lt;/p&gt;

&lt;p&gt;The new build system based on autotools in 0.7.0 has more discoverable options and should make it easier to build future features like cross-compiling or a KVM-based stage1.&lt;/p&gt;

&lt;p&gt;This is how you build rkt now:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ ./autogen.sh 

----------------------------------------------------------------
Initialized build system. For a common configuration please run:
----------------------------------------------------------------

./configure --with-stage1=coreos
$ ./configure --help
`configure&amp;#39; configures rkt 0.7.0+git to adapt to many kinds of systems.
[...]
Optional Features:                                                                                                                                                                                                                                                             
  --disable-option-checking  ignore unrecognized --enable/--with options                                                                                                                                                                                                       
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)                                                                                                                                                                                                 
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]                                                                                                                                                                                                                            
  --enable-functional-tests                                                                                                                                                                                                                                                    
                          enable functional tests on make check (linux only,                                                                                                                                                                                                   
                          uses sudo, default: no, use auto to enable if                                                                                                                                                                                                        
                          possible)                                                                                                                                                                                                                                            

Optional Packages:                                                                                                                                                                                                                                                             
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-stage1=type      type of stage1 build one of &amp;#39;src&amp;#39;, &amp;#39;coreos&amp;#39;, &amp;#39;host&amp;#39;,
                          &amp;#39;none&amp;#39;, &amp;#39;kvm&amp;#39; (default: &amp;#39;coreos&amp;#39;)
  --with-stage1-systemd-src=git-path
                          address to git repository of systemd, used in &amp;#39;src&amp;#39;
                          build mode (default: &amp;#39;https://github.com/systemd/systemd.git&amp;#39;)
  --with-stage1-systemd-version=version
                          systemd version to build (default:
                          &amp;#39;v220&amp;#39;)
  --with-stage1-image-path
                          custom stage1 image path (default:
                          &amp;#39;&amp;#39;)
$ ./configure &amp;amp;&amp;amp; make -j4
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note that all the build options are listed with a description text that helps the user know what to write instead of having them read the build scripts to figure out which environmental variables to set.&lt;/p&gt;

&lt;h2 id=&quot;selinux-support&quot;&gt;SELinux Support&lt;/h2&gt;

&lt;p&gt;We also added support for running containers using SELinux &lt;a href=&quot;http://selinuxproject.org/page/SVirt&quot;&gt;SVirt&lt;/a&gt;, improving security isolation between containers. This means every rkt instance will run in a different SELinux context. Processes started in these contexts will be unable to interact with processes or files in any other instance’s context, even though they are running as the same user.&lt;/p&gt;

&lt;p&gt;This feature depends on appropriate policy being provided by the underlying Linux distribution. If supported, a file called “lxc_contexts” will be present in the SELinux contexts directory under /etc/selinux. In the absence of appropriate support, SELinux SVirt will automatically be disabled at runtime.&lt;/p&gt;

&lt;h2 id=&quot;other-features&quot;&gt;Other Features&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;rkt registers &lt;a href=&quot;https://github.com/appc/spec/blob/master/spec/pods.md&quot;&gt;pods&lt;/a&gt; with the metadata service by default now. Ensure it is running before running pods (&lt;code&gt;rkt metadata-service&lt;/code&gt;) or disable registration with &lt;code&gt;rkt run --mds-register=false&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;We started improving rkt UX by reducing stage1 verbosity and writing better and more consistent error messages. As we look towards the next rkt releases, we will be focusing more on UX improvements.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;get-involved&quot;&gt;Get Involved&lt;/h2&gt;

&lt;p&gt;Be a part of the development of rkt or join the discussion through the &lt;a href=&quot;https://groups.google.com/forum/#!forum/rkt-dev&quot;&gt;rkt-dev mailing list&lt;/a&gt; or &lt;a href=&quot;https://github.com/coreos/rkt/issues&quot;&gt;GitHub issues&lt;/a&gt;. We welcome you to &lt;a href=&quot;https://github.com/coreos/rkt/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22&quot;&gt;contribute directly to the project&lt;/a&gt;. &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Q&A with Sysdig on containers, monitoring and CoreOS</title>
   <link href="https://coreos.com/blog/qa-sysdig-monitor-containers-on-coreos/"/>
   <updated>2015-07-14T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/qa-sysdig-monitor-containers-on-coreos</id>
   <content type="html">&lt;p&gt;Today we congratulate Sysdig, the container visibility company, &lt;a href=&quot;https://sysdig.com/monitoring-as-a-microservice?utm_source=referral&amp;amp;utm_medium=coreos&amp;amp;utm_campaign=coreosfestblog-071415&quot;&gt;on its funding news and launch of its commercial offering&lt;/a&gt;, Sysdig Cloud. We interviewed &lt;a href=&quot;https://twitter.com/lorisdegio&quot;&gt;Loris Degioanni&lt;/a&gt;, the creator and CEO of Sysdig, about the company, containers and how Sysdig works with CoreOS. He is a pioneer in the field of network analysis through his work on WinPcap and Wireshark, which are open source tools with millions of users worldwide.&lt;/p&gt;

&lt;p&gt;Read on to dive in, and be sure to meet Sysdig and our team at our July 29 &lt;a href=&quot;http://www.meetup.com/coreos/events/223897172/&quot;&gt;Meetup in San Francisco to learn more&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: In your own words, what is Sysdig? Why is it important in containerized environments?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Loris: &lt;a href=&quot;http://www.sysdig.org/&quot;&gt;Sysdig&lt;/a&gt; is an open source system visibility tool, designed to meet the needs of modern IT professionals. You can use it to monitor and troubleshoot things like system activity, network and file I/O, application requests and much more. Unique features include the ability to work with trace files (similar to tools such as Wireshark) and deep, native container support.&lt;/p&gt;

&lt;p&gt;As for containerized environments: containers are an extremely interesting and powerful technology – I’m personally a big fan. But containers are also a relatively young technology (at least in their current form), and until now there has been a bit of catch 22 in terms of container visibility. Either you monitor your containers from the outside, with inherently limited visibility, given the opaque and self-contained nature of containers. Or you install extra monitoring software inside the container, which largely undermines the benefits of using a container in the first place – performance, deployability, portability, dependency simplification, security, etc.&lt;/p&gt;

&lt;p&gt;Sysdig is the first visibility tool designed specifically to support containers. And in order to truly support containers, we knew we had to solve the issue above. Sysdig’s instrumentation is based on a little kernel module that can capture information like system calls from “underneath” containers. This makes it possible to explore anything that’s happening inside containers, while running sysdig entirely on the host machine or inside another container. There is no need to instrument your containers, or install any agent inside them. In other words, Sysdig provides full visibility into all your containers, from outside of the containers themselves.&lt;/p&gt;

&lt;p&gt;This tends to be quite a radical departure from what people are used to, and is also the basis of our commercial product, &lt;a href=&quot;https://sysdig.com/&quot;&gt;Sysdig Cloud&lt;/a&gt;. Based on this same open source technology, Sysdig Cloud offers a container-native monitoring solution, with distributed collection, discovery, dashboarding, alerting, and topology mapping.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What lessons from contributing to Wireshark influence what you are doing today?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Loris: I spent my Ph.D. and the first 10 years of my career working on network monitoring. The lessons I learned during that time have highly influenced the architecture and underlying philosophies of sysdig.&lt;/p&gt;

&lt;p&gt;Network monitoring as a whole offers a pretty elegant set of workflows. First, there is the fundamental ability to capture the information you need into trace files. These trace files are not only easily shared, but maybe even more importantly, they decouple the troubleshooting process from the issue itself. No longer are you working inside of a broken system, trying to fix a problem, as the problem is bringing down the system around you.
Network monitoring workflows also include the ability to filter information with well known languages, and visualize your data with industry standard tools like Wireshark.&lt;/p&gt;

&lt;p&gt;I believe these workflows are not only relevant in the context of network monitoring. Trace files, decoupled troubleshooting, natural filters, standardized visualizations: these are widely applicable concepts. With our work on sysdig, we are trying to bring these well-proven approaches from the world of network monitoring into the world of system, container and application visibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How does Sysdig work with CoreOS environments? What types of information can Sysdig pull from a CoreOS host?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Loris: Sysdig fully supports CoreOS environments, and offers the same 100% visibility you would find in a non-containerized environment. Sysdig works with CoreOS by installing &lt;a href=&quot;https://github.com/draios/sysdig/wiki/How%20to%20Install%20Sysdig%20for%20Linux#installation-inside-a-docker-container&quot;&gt;the container we provide&lt;/a&gt;, which contains all the required dependencies and offers an isolated execution environment. Since we provide a precompile driver, installation is really easy – it is a single command line and takes 30 seconds. &lt;/p&gt;

&lt;p&gt;Once installed, sysdig will be able to surface very rich information about your CoreOS environment: both the host OS and the containers you have running. This includes everything from top processes, to network connections, to top files and directories, to a list of executed commands for both the host OS and any of the running containers. And that’s just the tip of the iceberg. For some interesting use cases with sysdig running in CoreOS environments, you can refer to our two-part CoreOS blog series &lt;a href=&quot;https://sysdig.com/coreos-sysdig-part-1-digging-into-coreos-environments/&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;https://sysdig.com/sysdig-coreos-part-2-troubleshooting-flannel-networking-confd/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What is the memory and CPU overhead required by Sysdig?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Loris: Typically low, but it depends on what kind of activity is happening on the machine. Sysdig instruments the operating system’s kernel, and the overhead depends on how many events there are to be captured. On a machine with average load, the CPU occupation should be very low: a few percentage points. CPU occupation of sysdig can go higher on systems with a lot of I/O or network activity. The Sysdig Cloud agent, on the other hand, incorporates additional protective mechanisms, such as subsampling techniques, to ensure the CPU occupation always stays within an acceptable range of &amp;lt;5%.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: You presented the &lt;a href=&quot;https://youtu.be/exna5ntTCpY?list=PLlh6TqkU8kg8Ld0Zu1aRWATiqBkxseZ9g&quot;&gt;Dark Art of Container Monitoring at CoreOS Fest&lt;/a&gt; this year. Tell us more about what should be monitored.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Loris: In terms of what should be monitored, my answer is: everything! The really important question is: how should it be monitored? The same features that make containers so interesting and revolutionary (i.e. the fact that they are isolated, self-contained, simple and lightweight), make them a real challenge to monitor. In particular, the traditional approach of having an agent on any “entity” doesn’t work well with containers, because it’s too invasive and doesn’t scale.&lt;/p&gt;

&lt;p&gt;This is the problem we’re trying to solve with sysdig and Sysdig Cloud. We’re excited about working on it because great visibility is a key requirement to adopt containers in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Describe what Sysdig does with CoreOS Linux to help monitor system security.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Loris: Sysdig has powerful security-oriented features. Here are some examples of what CoreOS users can do with sysdig to monitor system security:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Show the directories that the user &amp;quot;root&amp;quot; visits&lt;/li&gt;
&lt;li&gt;Observe ssh activity&lt;/li&gt;
&lt;li&gt;Show every file open that happens in /etc&lt;/li&gt;
&lt;li&gt;Show all the network connections established by a process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now think about being able to obtain this information for any container running on a CoreOS host, but from outside the container, with no instrumentation and no dependencies.&lt;/p&gt;

&lt;p&gt;If you are curious to try sysdig out, installation on CoreOS is super easy and instructions can be found &lt;a href=&quot;http://www.sysdig.org/install/&quot;&gt;here&lt;/a&gt;. And don’t forget to let us know what you think on &lt;a href=&quot;https://twitter.com/sysdig&quot;&gt;twitter&lt;/a&gt; or at &lt;a href=&quot;mailto:info@sysdig.com&quot;&gt;info@sysdig.com&lt;/a&gt;!&lt;/p&gt;

&lt;h3 id=&quot;join-coreos-and-sysdig-in-san-francisco-for-the-july-meetup&quot;&gt;Join CoreOS and Sysdig in San Francisco for the July Meetup&lt;/h3&gt;

&lt;p&gt;Attend this month’s CoreOS San Francisco Meetup that will feature the CoreOS team and Gianluca Borello, senior software engineer at Sysdig. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When:&lt;/strong&gt; Wednesday, July 29, 2015 starting at 6 p.m. PT&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where:&lt;/strong&gt; Okta, 301 Brannan Street, San Francisco, CA 94107&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RSVP:&lt;/strong&gt; &lt;a href=&quot;http://www.meetup.com/coreos/events/223897172/&quot;&gt;http://www.meetup.com/coreos/events/223897172/&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>How to get involved with CoreOS projects</title>
   <link href="https://coreos.com/blog/get-involved-with-coreos-projects/"/>
   <updated>2015-07-10T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/get-involved-with-coreos-projects</id>
   <content type="html">&lt;p&gt;Today we’re excited to build and collaborate with our community at the inaugural CoreOS hackathon. Even if you can’t join us at GopherCon in Denver, there are numerous ways to get involved and contribute.&lt;/p&gt;

&lt;p&gt;Every project on GitHub includes helpful information on contributing that can be found in the &lt;code&gt;CONTRIBUTING.md&lt;/code&gt; file. Be sure to look at it before you jump in and begin coding.&lt;/p&gt;

&lt;h3 id=&quot;etcd&quot;&gt;etcd&lt;/h3&gt;

&lt;p&gt;Serving as the backbone of many distributed systems, from Kubernetes to Pivotal’s Cloud Foundry and beyond, etcd is a Go codebase and key-value store where the state of the art in distributed systems comes together. If your interests lie in consensus protocols, APIs and clustering, etcd has a number of areas where contribution is more than welcome.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/coreos/etcd/labels/help%20wanted&quot;&gt;Hack on etcd&lt;/a&gt;. &lt;/p&gt;

&lt;h3 id=&quot;fleet&quot;&gt;fleet&lt;/h3&gt;

&lt;p&gt;CoreOS Linux is built for scale, and at scale, managing systemd can be a challenge. We created fleet to distribute init across the data center. fleet is used in nearly all CoreOS deployments to simplify administrative overhead. If you are interested in operational plumbing, there is no shortage of work to be done. &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/coreos/fleet/labels/help-wanted&quot;&gt;Hack on fleet&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;flannel&quot;&gt;flannel&lt;/h3&gt;

&lt;p&gt;If software defined networks and the low levels of data center connectivity are in your interests, you can help build flannel, the container-friendly software networking fabric.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/coreos/flannel/issues?q=is%3Aopen+is%3Aissue&quot;&gt;Hack on flannel&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;rkt&quot;&gt;rkt&lt;/h3&gt;

&lt;p&gt;Jump in with the rkt team and help create a secure, composable and standards based container runtime starting with &lt;a href=&quot;https://github.com/coreos/rkt/labels/help%20wanted&quot;&gt;these requests&lt;/a&gt;. Help shape the future of the container ecosystem and stay up to date with our &lt;a href=&quot;https://groups.google.com/forum/#!forum/rocket-dev&quot;&gt;rkt mailing list&lt;/a&gt; too.&lt;/p&gt;

&lt;p&gt;With the recent announcement to collaborate on the Open Container Project (OCP), stay tuned for updates on how we will work together and work with OCP and rkt.&lt;/p&gt;

&lt;h2 id=&quot;gophercon-hack-day-on-july-10&quot;&gt;GopherCon Hack Day on July 10&lt;/h2&gt;

&lt;p&gt;For any of you attending GopherCon, here are the details of the hack day: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When:&lt;/strong&gt; Friday, July 10, 2015 from 10:00 a.m. - 5:00 p.m. MDT&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where:&lt;/strong&gt; Room 403, Denver Convention Center&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schedule:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;10:00 a.m. - 10:30 a.m. - Brandon Philips, CoreOS Two Years in&lt;/p&gt;

&lt;p&gt;10:30 a.m. - 11:00 a.m. - Kelsey Hightower, Kubernetes talk &lt;/p&gt;

&lt;p&gt;11 a.m. - 11:30 a.m. - Russell Haering, &lt;a href=&quot;https://www.scaleft.com/&quot;&gt;ScaleFT&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;11:30 a.m. - 12 p.m. - Micha Leuffen, &lt;a href=&quot;http://wercker.com/&quot;&gt;Wercker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-LUNCH-&lt;/p&gt;

&lt;p&gt;1:00 p.m. - 4:00 p.m. - Hack Day Competition&lt;/p&gt;

&lt;p&gt;4:00 p.m. - 5:00 p.m. - Competition demos and winner announcement&lt;/p&gt;

&lt;p&gt;We welcome your involvement and contributions to CoreOS projects. We wouldn’t be here without our contributors and there is much to be done! &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>OpenSSL has been Updated (CVE-2015-1793)</title>
   <link href="https://coreos.com/blog/CVE-2015-1793/"/>
   <updated>2015-07-10T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/CVE-2015-1793</id>
   <content type="html">&lt;p&gt;&lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
&lt;meta name=&quot;twitter:site&quot; content=&quot;@coreoslinux&quot;&gt;
&lt;meta name=&quot;twitter:title&quot; content=&quot;OpenSSL has been Updated (CVE-2015-1793)&quot;&gt;
&lt;meta name=&quot;twitter:description&quot; content=&quot;The Alternative Chains Certificate Forgery vulnerability in OpenSSL (CVE-2015-1793) has been patched in CoreOS Linux.&quot;&gt;
&lt;meta name=&quot;twitter:image:src&quot; content=&quot;https://coreos.com/assets/images/media/second-epoch.png&quot;&gt;&lt;/p&gt;

&lt;p&gt;The Alternative Chains Certificate Forgery vulnerability in OpenSSL, as
reported in &lt;a href=&quot;http://openssl.org/news/secadv_20150709.txt&quot;&gt;CVE-2015-1793&lt;/a&gt;, has
been patched in CoreOS Linux (Alpha, Beta and Stable channels). If automatic
updates are enabled (default configuration), your server should be patched
within the next several hours (if it hasn’t already received the update).&lt;/p&gt;

&lt;p&gt;If automatic updates are disabled, you can force an update by running
&lt;code&gt;update_engine_client -check_for_update&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you have any questions or concerns, please join us in IRC
&lt;a href=&quot;irc://irc.freenode.org:6667/#coreos&quot;&gt;freenode/#coreos&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Happy 2nd Epoch CoreOS Linux</title>
   <link href="https://coreos.com/blog/coreos-second-epoch/"/>
   <updated>2015-07-07T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-second-epoch</id>
   <content type="html">&lt;p&gt;&lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
&lt;meta name=&quot;twitter:site&quot; content=&quot;@coreoslinux&quot;&gt;
&lt;meta name=&quot;twitter:creator&quot; content=&quot;@brandonphilips&quot;&gt;
&lt;meta name=&quot;twitter:title&quot; content=&quot;Happy 2nd Epoch CoreOS Linux&quot;&gt;
&lt;meta name=&quot;twitter:description&quot; content=&quot;Today we rolled out the 735.0.0 release of CoreOS Linux to the alpha channel. Our CoreOS Linux version numbers are counted from our epoch on July 1, 2013, which means this month marks the end of our second year working on CoreOS Linux.&quot;&gt;
&lt;meta name=&quot;twitter:image:src&quot; content=&quot;https://coreos.com/assets/images/media/second-epoch.png&quot;&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/second-epoch.png&quot; alt=&quot;Our CoreOS Linux version numbers are counted from our epoch on July 1, 2013, which means this month marks the end of our second year working on CoreOS Linux.&quot; style=&quot;margin: 0 auto; display: block; margin-bottom: 20px;&quot;&gt;&lt;/p&gt;

&lt;p&gt;Today we rolled out the 735.0.0 release of CoreOS Linux to the &lt;a href=&quot;/releases/&quot;&gt;alpha channel&lt;/a&gt;. Our CoreOS Linux version numbers are counted from our epoch on July 1, 2013, which means this month marks the end of our second year working on CoreOS Linux.&lt;/p&gt;

&lt;p&gt;Two years ago we started this journey with a vision of improving the consistency, deployment speed and security of server infrastructure. In this time we have kicked off a rethinking of how server OSes are designed and used. In a recent article  &lt;a href=&quot;http://www.infoworld.com/article/2942721/linux/from-coreos-to-nano-micro-oses-strip-down-for-containers.html&quot;&gt;InfoWorld&lt;/a&gt; said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;CoreOS Linux “was the first influential micro operating system designed for today’s cloud environments.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Last year, we celebrated &lt;a href=&quot;https://coreos.com/blog/coreos-epoch/&quot;&gt;our first stable channel release&lt;/a&gt; and since then we have been hard at work pushing important bug fixes and feature releases to that channel every 2.5 weeks on average.&lt;/p&gt;

&lt;div style=&quot;display: block; margin: 20px auto; width: 500px;&quot;&gt;
&lt;svg version=&quot;1.1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; x=&quot;0px&quot; y=&quot;0px&quot;
   width=&quot;500px&quot; preserveAspectRatio=&quot;xMidYMin&quot; viewBox=&quot;0 0 435.667 170.667&quot; enable-background=&quot;new 0 0 435.667 170.667&quot;
   xml:space=&quot;preserve&quot;&gt;
&lt;g&gt;
  &lt;path d=&quot;M214.491,8.49h1.391v6.668h3.25v1.175h-4.642V8.49z&quot;/&gt;
  &lt;path d=&quot;M223.585,12.567c-0.012-0.624-0.276-1.151-1.067-1.151c-0.588,0-1.14,0.264-1.655,0.576l-0.503-0.923
    c0.647-0.408,1.475-0.768,2.411-0.768c1.475,0,2.195,0.899,2.195,2.542v3.49h-1.127l-0.108-0.647h-0.036
    c-0.528,0.443-1.127,0.792-1.823,0.792c-1.031,0-1.751-0.696-1.751-1.727C220.118,13.491,221.174,12.831,223.585,12.567z
     M222.302,15.398c0.479,0,0.852-0.24,1.283-0.647v-1.319c-1.595,0.204-2.123,0.624-2.123,1.211
    C221.462,15.17,221.81,15.398,222.302,15.398z&quot;/&gt;
  &lt;path d=&quot;M226.706,14.774c0.528,0.408,1.031,0.66,1.631,0.66c0.636,0,0.936-0.3,0.936-0.708c0-0.492-0.636-0.708-1.259-0.948
    c-0.779-0.288-1.655-0.731-1.655-1.715c0-1.032,0.827-1.763,2.146-1.763c0.815,0,1.475,0.336,1.955,0.708l-0.636,0.84
    c-0.408-0.3-0.828-0.504-1.295-0.504c-0.587,0-0.863,0.276-0.863,0.647c0,0.456,0.587,0.648,1.223,0.875
    c0.804,0.3,1.691,0.684,1.691,1.787c0,1.007-0.804,1.823-2.291,1.823c-0.804,0-1.655-0.348-2.23-0.816L226.706,14.774z&quot;/&gt;
  &lt;path d=&quot;M232.023,11.536h-0.84v-1.031l0.912-0.06l0.168-1.607h1.151v1.607h1.499v1.091h-1.499v2.807
    c0,0.695,0.264,1.031,0.828,1.031c0.204,0,0.443-0.06,0.611-0.132l0.24,1.02c-0.324,0.108-0.732,0.216-1.2,0.216
    c-1.367,0-1.871-0.864-1.871-2.135V11.536z&quot;/&gt;
  &lt;path d=&quot;M240.025,13.419l-2.362-4.929h1.487l0.852,2.003c0.228,0.588,0.456,1.127,0.696,1.727h0.048
    c0.252-0.6,0.504-1.139,0.732-1.727l0.851-2.003h1.452l-2.363,4.929v2.915h-1.392V13.419z&quot;/&gt;
  &lt;path d=&quot;M246.337,10.301c1.595,0,2.435,1.151,2.435,2.794c0,0.264-0.024,0.504-0.06,0.647h-3.742
    c0.12,1.068,0.792,1.667,1.739,1.667c0.503,0,0.935-0.156,1.367-0.432l0.468,0.864c-0.564,0.372-1.271,0.636-2.015,0.636
    c-1.631,0-2.902-1.14-2.902-3.083C243.626,11.476,244.957,10.301,246.337,10.301z M247.572,12.867c0-0.935-0.396-1.499-1.199-1.499
    c-0.696,0-1.295,0.516-1.416,1.499H247.572z&quot;/&gt;
  &lt;path d=&quot;M253.164,12.567c-0.012-0.624-0.276-1.151-1.067-1.151c-0.588,0-1.14,0.264-1.655,0.576l-0.504-0.923
    c0.647-0.408,1.476-0.768,2.411-0.768c1.475,0,2.194,0.899,2.194,2.542v3.49h-1.127l-0.108-0.647h-0.036
    c-0.527,0.443-1.127,0.792-1.822,0.792c-1.032,0-1.751-0.696-1.751-1.727C249.699,13.491,250.753,12.831,253.164,12.567z
     M251.881,15.398c0.479,0,0.852-0.24,1.283-0.647v-1.319c-1.595,0.204-2.123,0.624-2.123,1.211
    C251.041,15.17,251.389,15.398,251.881,15.398z&quot;/&gt;
  &lt;path d=&quot;M256.227,10.445h1.139l0.097,1.043h0.048c0.419-0.768,1.043-1.188,1.667-1.188c0.3,0,0.491,0.036,0.671,0.12l-0.239,1.199
    c-0.204-0.06-0.36-0.096-0.611-0.096c-0.468,0-1.032,0.324-1.392,1.211v3.598h-1.379V10.445z&quot;/&gt;
  &lt;path d=&quot;M205.332,26.984c0.3,0.52,0.67,0.739,1.14,0.739c0.7,0,1.049-0.399,1.049-1.399v-4.548h0.83v4.628
    c0,1.129-0.52,2.049-1.809,2.049c-0.83,0-1.419-0.36-1.799-1.05L205.332,26.984z&quot;/&gt;
  &lt;path d=&quot;M209.942,23.476h0.83v2.968c0,0.91,0.27,1.299,0.91,1.299c0.5,0,0.85-0.25,1.309-0.819v-3.448h0.82v4.857h-0.68l-0.07-0.76
    h-0.03c-0.45,0.53-0.93,0.88-1.599,0.88c-1.029,0-1.489-0.66-1.489-1.899V23.476z&quot;/&gt;
  &lt;path d=&quot;M215.451,21.217h0.82v6.197c0,0.26,0.11,0.36,0.23,0.36c0.05,0,0.09,0,0.18-0.02l0.11,0.62c-0.11,0.05-0.25,0.08-0.47,0.08
    c-0.62,0-0.87-0.39-0.87-1.1V21.217z&quot;/&gt;
  &lt;path d=&quot;M221.072,21.767c-0.51,0.33-0.76,0.669-0.76,1.239c0.03-0.01,0.06-0.01,0.09-0.01c0.27,0,0.53,0.18,0.53,0.51
    c0,0.34-0.22,0.549-0.53,0.549c-0.399,0-0.629-0.32-0.629-0.899c0-0.799,0.37-1.379,1.059-1.779L221.072,21.767z&quot;/&gt;
  &lt;path d=&quot;M222.482,27.654h1.459v-4.697h-1.159v-0.53c0.58-0.1,1-0.26,1.349-0.47h0.63v5.697h1.319v0.68h-3.598V27.654z&quot;/&gt;
  &lt;path d=&quot;M227.342,27.014c0.38,0.4,0.879,0.76,1.629,0.76c0.77,0,1.319-0.46,1.319-1.169c0-0.76-0.52-1.27-2.039-1.27v-0.629
    c1.359,0,1.809-0.52,1.809-1.189c0-0.62-0.419-1.009-1.099-1.009c-0.53,0-0.979,0.27-1.359,0.649l-0.44-0.52
    c0.49-0.46,1.08-0.8,1.829-0.8c1.109,0,1.909,0.59,1.909,1.619c0,0.77-0.47,1.259-1.16,1.519v0.04
    c0.77,0.18,1.379,0.74,1.379,1.619c0,1.129-0.93,1.819-2.099,1.819c-1.02,0-1.669-0.43-2.099-0.9L227.342,27.014z&quot;/&gt;
  &lt;path d=&quot;M234.062,25.515h2.299v0.629h-2.299V25.515z&quot;/&gt;
  &lt;path d=&quot;M239.661,26.984c0.3,0.52,0.67,0.739,1.14,0.739c0.699,0,1.049-0.399,1.049-1.399v-4.548h0.83v4.628
    c0,1.129-0.52,2.049-1.809,2.049c-0.83,0-1.419-0.36-1.799-1.05L239.661,26.984z&quot;/&gt;
  &lt;path d=&quot;M244.271,23.476h0.83v2.968c0,0.91,0.27,1.299,0.91,1.299c0.5,0,0.85-0.25,1.309-0.819v-3.448h0.82v4.857h-0.68l-0.07-0.76
    h-0.03c-0.45,0.53-0.93,0.88-1.599,0.88c-1.029,0-1.489-0.66-1.489-1.899V23.476z&quot;/&gt;
  &lt;path d=&quot;M249.782,23.476h0.68l0.069,0.7h0.03c0.46-0.46,0.96-0.819,1.629-0.819c1.02,0,1.479,0.66,1.479,1.899v3.078h-0.819v-2.968
    c0-0.91-0.28-1.299-0.92-1.299c-0.5,0-0.84,0.26-1.329,0.75v3.518h-0.819V23.476z&quot;/&gt;
  &lt;path d=&quot;M257.081,23.646c0.499-0.33,0.749-0.669,0.749-1.249c-0.029,0.01-0.05,0.01-0.08,0.01c-0.279,0-0.529-0.18-0.529-0.5
    c0-0.35,0.22-0.56,0.529-0.56c0.391,0,0.63,0.33,0.63,0.91c0,0.799-0.38,1.369-1.069,1.769L257.081,23.646z&quot;/&gt;
  &lt;path d=&quot;M259.732,27.654h1.459v-4.697h-1.159v-0.53c0.579-0.1,0.999-0.26,1.349-0.47h0.63v5.697h1.319v0.68h-3.598V27.654z&quot;/&gt;
  &lt;path d=&quot;M268.599,26.575h-0.869v1.759h-0.78v-1.759h-2.868v-0.54l2.729-4.078h0.92v3.958h0.869V26.575z M266.95,25.915v-1.849
    c0-0.34,0.03-0.89,0.05-1.229h-0.04c-0.159,0.31-0.339,0.59-0.52,0.899l-1.489,2.179H266.95z&quot;/&gt;
&lt;/g&gt;
&lt;g&gt;
  &lt;path d=&quot;M333.194,9.665h-2.267V8.49h5.912v1.175h-2.254v6.668h-1.392V9.665z&quot;/&gt;
  &lt;path d=&quot;M338.019,7.866h1.379v2.183l-0.048,1.14c0.492-0.468,1.079-0.888,1.884-0.888c1.259,0,1.811,0.852,1.811,2.339v3.694
    h-1.379v-3.514c0-0.971-0.276-1.331-0.924-1.331c-0.516,0-0.852,0.252-1.344,0.731v4.114h-1.379V7.866z&quot;/&gt;
  &lt;path d=&quot;M344.559,8.634c0-0.468,0.36-0.792,0.852-0.792s0.852,0.324,0.852,0.792c0,0.456-0.36,0.779-0.852,0.779
    S344.559,9.089,344.559,8.634z M344.714,10.445h1.38v5.889h-1.38V10.445z&quot;/&gt;
  &lt;path d=&quot;M347.919,14.774c0.527,0.408,1.031,0.66,1.631,0.66c0.635,0,0.936-0.3,0.936-0.708c0-0.492-0.637-0.708-1.26-0.948
    c-0.779-0.288-1.654-0.731-1.654-1.715c0-1.032,0.826-1.763,2.146-1.763c0.815,0,1.475,0.336,1.955,0.708l-0.637,0.84
    c-0.407-0.3-0.827-0.504-1.295-0.504c-0.588,0-0.863,0.276-0.863,0.647c0,0.456,0.588,0.648,1.223,0.875
    c0.805,0.3,1.691,0.684,1.691,1.787c0,1.007-0.803,1.823-2.291,1.823c-0.803,0-1.654-0.348-2.23-0.816L347.919,14.774z&quot;/&gt;
  &lt;path d=&quot;M356.906,13.419l-2.362-4.929h1.487l0.852,2.003c0.228,0.588,0.455,1.127,0.695,1.727h0.048
    c0.252-0.6,0.504-1.139,0.731-1.727l0.852-2.003h1.451l-2.362,4.929v2.915h-1.392V13.419z&quot;/&gt;
  &lt;path d=&quot;M363.217,10.301c1.595,0,2.435,1.151,2.435,2.794c0,0.264-0.023,0.504-0.06,0.647h-3.742
    c0.12,1.068,0.792,1.667,1.739,1.667c0.504,0,0.936-0.156,1.367-0.432l0.468,0.864c-0.563,0.372-1.271,0.636-2.015,0.636
    c-1.631,0-2.902-1.14-2.902-3.083C360.507,11.476,361.838,10.301,363.217,10.301z M364.452,12.867c0-0.935-0.396-1.499-1.199-1.499
    c-0.695,0-1.295,0.516-1.415,1.499H364.452z&quot;/&gt;
  &lt;path d=&quot;M370.044,12.567c-0.012-0.624-0.275-1.151-1.067-1.151c-0.587,0-1.139,0.264-1.654,0.576l-0.504-0.923
    c0.647-0.408,1.475-0.768,2.41-0.768c1.476,0,2.195,0.899,2.195,2.542v3.49h-1.128l-0.107-0.647h-0.036
    c-0.527,0.443-1.128,0.792-1.823,0.792c-1.031,0-1.751-0.696-1.751-1.727C366.578,13.491,367.634,12.831,370.044,12.567z
     M368.761,15.398c0.48,0,0.852-0.24,1.283-0.647v-1.319c-1.595,0.204-2.122,0.624-2.122,1.211
    C367.922,15.17,368.27,15.398,368.761,15.398z&quot;/&gt;
  &lt;path d=&quot;M373.107,10.445h1.139l0.096,1.043h0.049c0.419-0.768,1.043-1.188,1.667-1.188c0.3,0,0.491,0.036,0.671,0.12l-0.239,1.199
    c-0.204-0.06-0.36-0.096-0.612-0.096c-0.467,0-1.031,0.324-1.391,1.211v3.598h-1.379V10.445z&quot;/&gt;
  &lt;path d=&quot;M322.331,26.984c0.301,0.52,0.67,0.739,1.141,0.739c0.699,0,1.049-0.399,1.049-1.399v-4.548h0.83v4.628
    c0,1.129-0.521,2.049-1.81,2.049c-0.829,0-1.419-0.36-1.799-1.05L322.331,26.984z&quot;/&gt;
  &lt;path d=&quot;M326.943,23.476h0.829v2.968c0,0.91,0.271,1.299,0.909,1.299c0.5,0,0.85-0.25,1.31-0.819v-3.448h0.819v4.857h-0.68
    l-0.07-0.76h-0.029c-0.449,0.53-0.93,0.88-1.6,0.88c-1.029,0-1.488-0.66-1.488-1.899V23.476z&quot;/&gt;
  &lt;path d=&quot;M332.452,21.217h0.819v6.197c0,0.26,0.11,0.36,0.23,0.36c0.05,0,0.09,0,0.18-0.02l0.109,0.62
    c-0.109,0.05-0.249,0.08-0.469,0.08c-0.62,0-0.87-0.39-0.87-1.1V21.217z&quot;/&gt;
  &lt;path d=&quot;M338.072,21.767c-0.51,0.33-0.76,0.669-0.76,1.239c0.029-0.01,0.061-0.01,0.09-0.01c0.27,0,0.529,0.18,0.529,0.51
    c0,0.34-0.219,0.549-0.529,0.549c-0.399,0-0.629-0.32-0.629-0.899c0-0.799,0.369-1.379,1.059-1.779L338.072,21.767z&quot;/&gt;
  &lt;path d=&quot;M339.482,27.654h1.459v-4.697h-1.159v-0.53c0.579-0.1,0.999-0.26,1.349-0.47h0.631v5.697h1.318v0.68h-3.598V27.654z&quot;/&gt;
  &lt;path d=&quot;M348.349,26.575h-0.869v1.759h-0.779v-1.759h-2.869v-0.54l2.729-4.078h0.92v3.958h0.869V26.575z M346.701,25.915v-1.849
    c0-0.34,0.029-0.89,0.05-1.229h-0.04c-0.16,0.31-0.34,0.59-0.52,0.899l-1.489,2.179H346.701z&quot;/&gt;
  &lt;path d=&quot;M351.062,25.515h2.299v0.629h-2.299V25.515z&quot;/&gt;
  &lt;path d=&quot;M356.661,26.984c0.3,0.52,0.67,0.739,1.14,0.739c0.699,0,1.05-0.399,1.05-1.399v-4.548h0.829v4.628
    c0,1.129-0.521,2.049-1.81,2.049c-0.829,0-1.419-0.36-1.799-1.05L356.661,26.984z&quot;/&gt;
  &lt;path d=&quot;M361.271,23.476h0.83v2.968c0,0.91,0.27,1.299,0.91,1.299c0.499,0,0.85-0.25,1.309-0.819v-3.448h0.82v4.857h-0.68
    l-0.07-0.76h-0.03c-0.45,0.53-0.93,0.88-1.599,0.88c-1.029,0-1.49-0.66-1.49-1.899V23.476z&quot;/&gt;
  &lt;path d=&quot;M366.782,23.476h0.68l0.069,0.7h0.03c0.46-0.46,0.96-0.819,1.629-0.819c1.02,0,1.479,0.66,1.479,1.899v3.078h-0.819v-2.968
    c0-0.91-0.28-1.299-0.92-1.299c-0.5,0-0.84,0.26-1.329,0.75v3.518h-0.819V23.476z&quot;/&gt;
  &lt;path d=&quot;M375.321,21.767c-0.51,0.33-0.76,0.669-0.76,1.239c0.03-0.01,0.06-0.01,0.09-0.01c0.27,0,0.53,0.18,0.53,0.51
    c0,0.34-0.221,0.549-0.53,0.549c-0.399,0-0.63-0.32-0.63-0.899c0-0.799,0.37-1.379,1.06-1.779L375.321,21.767z&quot;/&gt;
  &lt;path d=&quot;M376.732,27.654h1.459v-4.697h-1.159v-0.53c0.579-0.1,0.999-0.26,1.349-0.47h0.63v5.697h1.319v0.68h-3.598V27.654z&quot;/&gt;
  &lt;path d=&quot;M381.561,27.044c0.38,0.379,0.859,0.729,1.609,0.729c0.779,0,1.399-0.57,1.399-1.459c0-0.879-0.54-1.399-1.359-1.399
    c-0.439,0-0.71,0.14-1.09,0.39l-0.439-0.28l0.21-3.068h3.188v0.709h-2.469l-0.17,1.889c0.3-0.16,0.59-0.26,0.979-0.26
    c1.089,0,1.979,0.62,1.979,1.999c0,1.379-1.039,2.159-2.148,2.159c-1.02,0-1.649-0.43-2.089-0.87L381.561,27.044z&quot;/&gt;
&lt;/g&gt;
&lt;g&gt;
  &lt;path d=&quot;M14.101,61.655c0.936,0,1.679,0.456,2.147,0.972l-0.563,0.636c-0.42-0.444-0.924-0.732-1.571-0.732
    c-1.499,0-2.495,1.224-2.495,3.178c0,1.979,0.947,3.227,2.447,3.227c0.744,0,1.295-0.312,1.799-0.875l0.563,0.611
    c-0.611,0.72-1.391,1.14-2.386,1.14c-1.979,0-3.454-1.511-3.454-4.078C10.588,63.202,12.087,61.655,14.101,61.655z&quot;/&gt;
  &lt;path d=&quot;M20.042,63.694c1.427,0,2.699,1.115,2.699,3.07c0,1.931-1.271,3.046-2.699,3.046s-2.698-1.116-2.698-3.046
    C17.344,64.809,18.615,63.694,20.042,63.694z M20.042,68.995c1.008,0,1.679-0.9,1.679-2.231c0-1.343-0.671-2.255-1.679-2.255
    c-0.995,0-1.679,0.912-1.679,2.255C18.363,68.096,19.047,68.995,20.042,68.995z&quot;/&gt;
  &lt;path d=&quot;M24.279,63.838h0.815l0.084,0.839h0.036c0.504-0.552,1.115-0.983,1.811-0.983c0.888,0,1.367,0.42,1.607,1.115
    c0.612-0.66,1.211-1.115,1.919-1.115c1.2,0,1.775,0.792,1.775,2.279v3.694h-0.984v-3.562c0-1.091-0.348-1.559-1.079-1.559
    c-0.456,0-0.924,0.3-1.463,0.899v4.222h-0.983v-3.562c0-1.091-0.348-1.559-1.091-1.559c-0.432,0-0.923,0.3-1.463,0.899v4.222
    h-0.983V63.838z&quot;/&gt;
  &lt;path d=&quot;M34.227,63.838h0.815l0.084,0.839h0.036c0.504-0.552,1.115-0.983,1.811-0.983c0.888,0,1.367,0.42,1.607,1.115
    c0.612-0.66,1.211-1.115,1.919-1.115c1.2,0,1.775,0.792,1.775,2.279v3.694h-0.984v-3.562c0-1.091-0.348-1.559-1.079-1.559
    c-0.456,0-0.923,0.3-1.463,0.899v4.222h-0.983v-3.562c0-1.091-0.348-1.559-1.091-1.559c-0.432,0-0.923,0.3-1.463,0.899v4.222
    h-0.983V63.838z&quot;/&gt;
  &lt;path d=&quot;M44.091,63.838h0.996V67.4c0,1.091,0.324,1.559,1.091,1.559c0.6,0,1.02-0.3,1.571-0.983v-4.138h0.983v5.829h-0.815
    l-0.084-0.912h-0.036c-0.54,0.636-1.115,1.056-1.919,1.056c-1.235,0-1.787-0.792-1.787-2.279V63.838z&quot;/&gt;
  &lt;path d=&quot;M50.703,63.838h0.815l0.084,0.839h0.036c0.552-0.552,1.151-0.983,1.955-0.983c1.223,0,1.775,0.792,1.775,2.279v3.694
    h-0.983v-3.562c0-1.091-0.336-1.559-1.104-1.559c-0.6,0-1.007,0.312-1.595,0.899v4.222h-0.983V63.838z&quot;/&gt;
  &lt;path d=&quot;M57.087,62.003c0-0.384,0.3-0.636,0.684-0.636s0.684,0.252,0.684,0.636c0,0.372-0.3,0.635-0.684,0.635
    S57.087,62.375,57.087,62.003z M57.267,63.838h0.983v5.829h-0.983V63.838z&quot;/&gt;
  &lt;path d=&quot;M60.387,64.641h-0.864v-0.744l0.912-0.06l0.12-1.631h0.828v1.631h1.571v0.803h-1.571v3.238c0,0.72,0.228,1.127,0.899,1.127
    c0.204,0,0.468-0.084,0.66-0.156l0.192,0.744c-0.324,0.108-0.72,0.216-1.08,0.216c-1.247,0-1.667-0.792-1.667-1.943V64.641z&quot;/&gt;
  &lt;path d=&quot;M64.323,71.358c0.66,0,1.08-0.527,1.319-1.247l0.132-0.432l-2.338-5.841h1.02l1.187,3.226
    c0.18,0.504,0.384,1.104,0.564,1.643h0.048c0.168-0.528,0.336-1.127,0.492-1.643l1.043-3.226h0.959l-2.195,6.309
    c-0.408,1.151-1.007,2.027-2.183,2.027c-0.264,0-0.492-0.048-0.684-0.12l0.192-0.78C63.999,71.31,64.179,71.358,64.323,71.358z&quot;/&gt;
  &lt;path d=&quot;M75.421,61.655c0.936,0,1.679,0.456,2.147,0.972l-0.563,0.636c-0.42-0.444-0.924-0.732-1.571-0.732
    c-1.499,0-2.495,1.224-2.495,3.178c0,1.979,0.947,3.227,2.447,3.227c0.744,0,1.295-0.312,1.799-0.875l0.563,0.611
    c-0.611,0.72-1.391,1.14-2.386,1.14c-1.979,0-3.454-1.511-3.454-4.078C71.907,63.202,73.406,61.655,75.421,61.655z&quot;/&gt;
  &lt;path d=&quot;M81.361,63.694c1.427,0,2.699,1.115,2.699,3.07c0,1.931-1.271,3.046-2.699,3.046s-2.698-1.116-2.698-3.046
    C78.663,64.809,79.934,63.694,81.361,63.694z M81.361,68.995c1.008,0,1.679-0.9,1.679-2.231c0-1.343-0.671-2.255-1.679-2.255
    c-0.995,0-1.679,0.912-1.679,2.255C79.682,68.096,80.366,68.995,81.361,68.995z&quot;/&gt;
  &lt;path d=&quot;M85.598,63.838h0.815l0.084,0.839h0.036c0.552-0.552,1.151-0.983,1.955-0.983c1.223,0,1.775,0.792,1.775,2.279v3.694
    h-0.983v-3.562c0-1.091-0.336-1.559-1.104-1.559c-0.6,0-1.007,0.312-1.595,0.899v4.222h-0.983V63.838z&quot;/&gt;
  &lt;path d=&quot;M92.33,64.641h-0.863v-0.744l0.911-0.06l0.12-1.631h0.828v1.631h1.571v0.803h-1.571v3.238c0,0.72,0.228,1.127,0.899,1.127
    c0.204,0,0.468-0.084,0.66-0.156l0.192,0.744c-0.324,0.108-0.72,0.216-1.08,0.216c-1.247,0-1.667-0.792-1.667-1.943V64.641z&quot;/&gt;
  &lt;path d=&quot;M96.218,63.838h0.815l0.084,1.055h0.036c0.396-0.731,0.996-1.199,1.655-1.199c0.251,0,0.432,0.036,0.624,0.12l-0.192,0.864
    c-0.192-0.06-0.324-0.096-0.564-0.096c-0.492,0-1.079,0.36-1.475,1.344v3.742h-0.983V63.838z&quot;/&gt;
  &lt;path d=&quot;M100.202,62.003c0-0.384,0.3-0.636,0.684-0.636s0.684,0.252,0.684,0.636c0,0.372-0.3,0.635-0.684,0.635
    S100.202,62.375,100.202,62.003z M100.382,63.838h0.983v5.829h-0.983V63.838z&quot;/&gt;
  &lt;path d=&quot;M103.334,61.127h0.983v2.327l-0.024,1.055c0.528-0.468,1.175-0.815,1.823-0.815c1.511,0,2.314,1.163,2.314,2.962
    c0,1.991-1.188,3.154-2.519,3.154c-0.54,0-1.151-0.264-1.667-0.72h-0.036l-0.084,0.576h-0.792V61.127z M105.744,68.983
    c0.959,0,1.667-0.875,1.667-2.315c0-1.283-0.432-2.146-1.535-2.146c-0.492,0-1.007,0.276-1.559,0.792v3.058
    C104.833,68.815,105.361,68.983,105.744,68.983z&quot;/&gt;
  &lt;path d=&quot;M109.91,63.838h0.996V67.4c0,1.091,0.324,1.559,1.091,1.559c0.6,0,1.02-0.3,1.571-0.983v-4.138h0.983v5.829h-0.815
    l-0.084-0.912h-0.036c-0.54,0.636-1.115,1.056-1.919,1.056c-1.235,0-1.787-0.792-1.787-2.279V63.838z&quot;/&gt;
  &lt;path d=&quot;M116.69,64.641h-0.863v-0.744l0.911-0.06l0.12-1.631h0.828v1.631h1.571v0.803h-1.571v3.238c0,0.72,0.228,1.127,0.899,1.127
    c0.204,0,0.468-0.084,0.66-0.156l0.192,0.744c-0.324,0.108-0.72,0.216-1.08,0.216c-1.247,0-1.667-0.792-1.667-1.943V64.641z&quot;/&gt;
  &lt;path d=&quot;M120.398,62.003c0-0.384,0.3-0.636,0.684-0.636s0.684,0.252,0.684,0.636c0,0.372-0.3,0.635-0.684,0.635
    S120.398,62.375,120.398,62.003z M120.577,63.838h0.983v5.829h-0.983V63.838z&quot;/&gt;
  &lt;path d=&quot;M125.796,63.694c1.427,0,2.699,1.115,2.699,3.07c0,1.931-1.271,3.046-2.699,3.046c-1.427,0-2.698-1.116-2.698-3.046
    C123.098,64.809,124.369,63.694,125.796,63.694z M125.796,68.995c1.008,0,1.679-0.9,1.679-2.231c0-1.343-0.671-2.255-1.679-2.255
    c-0.995,0-1.679,0.912-1.679,2.255C124.118,68.096,124.801,68.995,125.796,68.995z&quot;/&gt;
  &lt;path d=&quot;M130.034,63.838h0.815l0.084,0.839h0.036c0.552-0.552,1.151-0.983,1.955-0.983c1.223,0,1.775,0.792,1.775,2.279v3.694
    h-0.983v-3.562c0-1.091-0.336-1.559-1.104-1.559c-0.6,0-1.007,0.312-1.595,0.899v4.222h-0.983V63.838z&quot;/&gt;
  &lt;path d=&quot;M136.442,68.347c0.503,0.408,1.02,0.696,1.715,0.696c0.768,0,1.151-0.408,1.151-0.912c0-0.6-0.695-0.864-1.331-1.104
    c-0.828-0.3-1.739-0.695-1.739-1.679c0-0.935,0.744-1.655,2.003-1.655c0.731,0,1.367,0.3,1.811,0.66l-0.468,0.624
    c-0.396-0.3-0.815-0.516-1.331-0.516c-0.732,0-1.067,0.396-1.067,0.839c0,0.54,0.635,0.756,1.295,1.008
    c0.84,0.312,1.775,0.659,1.775,1.763c0,0.948-0.756,1.739-2.135,1.739c-0.828,0-1.619-0.348-2.171-0.804L136.442,68.347z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M13.518,74.991c0.89,0,1.489,0.41,1.879,0.81l-0.479,0.53c-0.33-0.35-0.74-0.61-1.39-0.61
    c-1.329,0-2.179,1.02-2.179,2.648c0,1.649,0.78,2.688,2.179,2.688c0.47,0,0.93-0.15,1.189-0.39v-1.709h-1.389v-0.689h2.149v2.758
    c-0.43,0.42-1.159,0.76-2.039,0.76c-1.719,0-2.948-1.259-2.948-3.398C10.49,76.28,11.759,74.991,13.518,74.991z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M16.789,75.28c0-0.32,0.25-0.529,0.57-0.529s0.57,0.209,0.57,0.529c0,0.31-0.25,0.53-0.57,0.53
    S16.789,75.59,16.789,75.28z M16.939,76.809h0.82v4.857h-0.82V76.809z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M19.539,77.479h-0.72v-0.62l0.76-0.05l0.1-1.359h0.689v1.359h1.309v0.67h-1.309v2.698
    c0,0.6,0.19,0.939,0.75,0.939c0.17,0,0.39-0.07,0.55-0.13l0.16,0.62c-0.27,0.09-0.6,0.18-0.899,0.18
    c-1.04,0-1.389-0.66-1.389-1.619V77.479z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M22.779,74.551h0.82v1.939l-0.03,1c0.46-0.44,0.95-0.799,1.619-0.799c1.02,0,1.479,0.659,1.479,1.899v3.078
    h-0.82v-2.968c0-0.91-0.28-1.299-0.919-1.299c-0.5,0-0.839,0.26-1.329,0.75v3.518h-0.82V74.551z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M28.149,76.809h0.83v2.968c0,0.91,0.27,1.299,0.91,1.299c0.5,0,0.85-0.25,1.309-0.819v-3.448h0.82v4.857
    h-0.68l-0.07-0.76h-0.03c-0.45,0.53-0.93,0.88-1.599,0.88c-1.029,0-1.489-0.66-1.489-1.899V76.809z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M33.659,74.551h0.82v1.939l-0.02,0.879c0.44-0.39,0.979-0.679,1.519-0.679c1.259,0,1.929,0.969,1.929,2.468
    c0,1.659-0.99,2.629-2.099,2.629c-0.45,0-0.959-0.22-1.389-0.6h-0.03l-0.07,0.48h-0.66V74.551z M35.668,81.097
    c0.799,0,1.389-0.729,1.389-1.929c0-1.069-0.36-1.789-1.279-1.789c-0.41,0-0.84,0.23-1.299,0.66v2.548
    C34.909,80.957,35.348,81.097,35.668,81.097z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M41.159,76.809h0.83v2.968c0,0.91,0.27,1.299,0.91,1.299c0.5,0,0.85-0.25,1.309-0.819v-3.448h0.82v4.857
    h-0.68l-0.07-0.76h-0.03c-0.45,0.53-0.93,0.88-1.599,0.88c-1.029,0-1.489-0.66-1.489-1.899V76.809z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M46.539,80.567c0.42,0.34,0.85,0.58,1.429,0.58c0.64,0,0.959-0.34,0.959-0.76c0-0.5-0.58-0.72-1.109-0.919
    c-0.689-0.25-1.449-0.58-1.449-1.399c0-0.779,0.62-1.379,1.669-1.379c0.609,0,1.139,0.25,1.509,0.549l-0.39,0.52
    c-0.33-0.25-0.68-0.43-1.109-0.43c-0.609,0-0.89,0.33-0.89,0.699c0,0.45,0.53,0.63,1.08,0.84c0.7,0.26,1.479,0.55,1.479,1.469
    c0,0.79-0.629,1.449-1.779,1.449c-0.689,0-1.349-0.29-1.809-0.67L46.539,80.567z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M52.678,76.69c1.239,0,1.939,0.889,1.939,2.278c0,0.17-0.01,0.33-0.03,0.45h-3.278
    c0.06,1.049,0.689,1.709,1.619,1.709c0.46,0,0.85-0.15,1.209-0.38l0.29,0.54c-0.42,0.27-0.939,0.5-1.599,0.5
    c-1.299,0-2.329-0.95-2.329-2.539C50.499,77.659,51.569,76.69,52.678,76.69z M53.897,78.878c0-0.989-0.44-1.539-1.199-1.539
    c-0.68,0-1.299,0.56-1.399,1.539H53.897z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M55.818,76.809h0.68l0.07,0.879h0.03c0.33-0.609,0.83-0.999,1.379-0.999c0.21,0,0.36,0.03,0.52,0.1
    l-0.16,0.72c-0.16-0.05-0.27-0.08-0.47-0.08c-0.41,0-0.9,0.3-1.229,1.12v3.118h-0.82V76.809z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M59.058,80.567c0.42,0.34,0.85,0.58,1.429,0.58c0.64,0,0.959-0.34,0.959-0.76c0-0.5-0.58-0.72-1.109-0.919
    c-0.689-0.25-1.449-0.58-1.449-1.399c0-0.779,0.62-1.379,1.669-1.379c0.609,0,1.139,0.25,1.509,0.549l-0.39,0.52
    c-0.33-0.25-0.68-0.43-1.109-0.43c-0.609,0-0.89,0.33-0.89,0.699c0,0.45,0.53,0.63,1.08,0.84c0.7,0.26,1.479,0.55,1.479,1.469
    c0,0.79-0.629,1.449-1.779,1.449c-0.689,0-1.349-0.29-1.809-0.67L59.058,80.567z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M68.147,78.589c0-0.62-0.21-1.22-1-1.22c-0.569,0-1.069,0.26-1.449,0.52l-0.33-0.57
    c0.45-0.29,1.129-0.629,1.909-0.629c1.189,0,1.689,0.79,1.689,1.999v2.979h-0.68l-0.07-0.58h-0.02c-0.47,0.38-1.01,0.7-1.609,0.7
    c-0.819,0-1.429-0.51-1.429-1.379C65.159,79.348,66.078,78.818,68.147,78.589z M66.818,81.127c0.47,0,0.859-0.23,1.329-0.65v-1.349
    c-1.629,0.2-2.179,0.6-2.179,1.219C65.968,80.897,66.338,81.127,66.818,81.127z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M72.497,76.69c0.64,0,1.089,0.27,1.419,0.58l-0.41,0.53c-0.29-0.25-0.59-0.43-0.979-0.43
    c-0.88,0-1.52,0.76-1.52,1.879c0,1.109,0.61,1.859,1.5,1.859c0.459,0,0.85-0.23,1.139-0.49l0.37,0.54
    c-0.439,0.39-0.999,0.63-1.579,0.63c-1.289,0-2.278-0.93-2.278-2.539C70.159,77.619,71.248,76.69,72.497,76.69z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M75.078,76.809h0.68l0.07,0.879h0.03c0.33-0.609,0.83-0.999,1.379-0.999c0.21,0,0.36,0.03,0.52,0.1
    l-0.16,0.72c-0.16-0.05-0.27-0.08-0.47-0.08c-0.41,0-0.9,0.3-1.229,1.12v3.118h-0.82V76.809z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M80.337,76.69c1.189,0,2.249,0.929,2.249,2.559c0,1.609-1.06,2.539-2.249,2.539s-2.249-0.93-2.249-2.539
    C78.089,77.619,79.148,76.69,80.337,76.69z M80.337,81.107c0.839,0,1.399-0.75,1.399-1.859c0-1.12-0.56-1.879-1.399-1.879
    c-0.83,0-1.399,0.76-1.399,1.879C78.938,80.358,79.508,81.107,80.337,81.107z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M83.738,80.567c0.42,0.34,0.85,0.58,1.429,0.58c0.64,0,0.959-0.34,0.959-0.76c0-0.5-0.58-0.72-1.109-0.919
    c-0.689-0.25-1.449-0.58-1.449-1.399c0-0.779,0.62-1.379,1.669-1.379c0.609,0,1.139,0.25,1.509,0.549l-0.39,0.52
    c-0.33-0.25-0.68-0.43-1.109-0.43c-0.609,0-0.89,0.33-0.89,0.699c0,0.45,0.53,0.63,1.08,0.84c0.7,0.26,1.479,0.55,1.479,1.469
    c0,0.79-0.629,1.449-1.779,1.449c-0.689,0-1.349-0.29-1.809-0.67L83.738,80.567z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M87.928,80.567c0.42,0.34,0.85,0.58,1.429,0.58c0.64,0,0.959-0.34,0.959-0.76c0-0.5-0.58-0.72-1.109-0.919
    c-0.689-0.25-1.449-0.58-1.449-1.399c0-0.779,0.62-1.379,1.669-1.379c0.609,0,1.139,0.25,1.509,0.549l-0.39,0.52
    c-0.33-0.25-0.68-0.43-1.109-0.43c-0.609,0-0.89,0.33-0.89,0.699c0,0.45,0.53,0.63,1.08,0.84c0.7,0.26,1.479,0.55,1.479,1.469
    c0,0.79-0.629,1.449-1.779,1.449c-0.689,0-1.349-0.29-1.809-0.67L87.928,80.567z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M96.867,74.991c0.78,0,1.399,0.38,1.789,0.81l-0.47,0.53c-0.35-0.37-0.77-0.61-1.309-0.61
    c-1.25,0-2.079,1.02-2.079,2.648c0,1.649,0.79,2.688,2.039,2.688c0.62,0,1.08-0.26,1.499-0.729l0.47,0.51
    c-0.51,0.6-1.159,0.95-1.989,0.95c-1.649,0-2.878-1.259-2.878-3.398C93.938,76.28,95.188,74.991,96.867,74.991z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M101.817,76.69c1.189,0,2.249,0.929,2.249,2.559c0,1.609-1.06,2.539-2.249,2.539s-2.249-0.93-2.249-2.539
    C99.568,77.619,100.627,76.69,101.817,76.69z M101.817,81.107c0.839,0,1.399-0.75,1.399-1.859c0-1.12-0.56-1.879-1.399-1.879
    c-0.83,0-1.399,0.76-1.399,1.879C100.417,80.358,100.987,81.107,101.817,81.107z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M105.347,76.809h0.68l0.07,0.879h0.03c0.33-0.609,0.83-0.999,1.379-0.999c0.21,0,0.36,0.03,0.52,0.1
    l-0.16,0.72c-0.16-0.05-0.27-0.08-0.47-0.08c-0.41,0-0.9,0.3-1.229,1.12v3.118h-0.82V76.809z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M110.537,76.69c1.239,0,1.939,0.889,1.939,2.278c0,0.17-0.01,0.33-0.03,0.45h-3.278
    c0.06,1.049,0.689,1.709,1.619,1.709c0.46,0,0.85-0.15,1.209-0.38l0.29,0.54c-0.42,0.27-0.939,0.5-1.599,0.5
    c-1.299,0-2.329-0.95-2.329-2.539C108.358,77.659,109.428,76.69,110.537,76.69z M111.756,78.878c0-0.989-0.44-1.539-1.199-1.539
    c-0.68,0-1.299,0.56-1.399,1.539H111.756z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M113.347,78.359c0-2.099,1.159-3.368,2.809-3.368c1.639,0,2.798,1.279,2.798,3.368
    c0,2.109-1.159,3.428-2.798,3.428C114.507,81.787,113.347,80.468,113.347,78.359z M118.095,78.359c0-1.629-0.77-2.639-1.939-2.639
    c-1.18,0-1.949,1.009-1.949,2.639c0,1.639,0.77,2.698,1.949,2.698C117.326,81.057,118.095,79.998,118.095,78.359z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M120.347,80.238c0.47,0.49,1.12,0.819,1.809,0.819c0.859,0,1.369-0.43,1.369-1.069
    c0-0.669-0.479-0.879-1.099-1.159l-0.939-0.41c-0.61-0.26-1.33-0.73-1.33-1.689c0-0.999,0.88-1.739,2.069-1.739
    c0.78,0,1.469,0.33,1.929,0.81l-0.44,0.54c-0.4-0.38-0.89-0.62-1.489-0.62c-0.739,0-1.229,0.37-1.229,0.959
    c0,0.63,0.58,0.87,1.089,1.089l0.939,0.4c0.759,0.33,1.349,0.78,1.349,1.749c0,1.04-0.859,1.869-2.239,1.869
    c-0.919,0-1.719-0.38-2.289-0.97L120.347,80.238z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M128.397,82.076v1.639h-0.82v-6.906h0.68l0.07,0.56h0.03c0.44-0.37,0.979-0.679,1.549-0.679
    c1.249,0,1.919,0.969,1.919,2.479c0,1.649-0.99,2.619-2.099,2.619c-0.45,0-0.899-0.21-1.349-0.56L128.397,82.076z M129.586,81.097
    c0.799,0,1.389-0.729,1.389-1.929c0-1.069-0.36-1.789-1.279-1.789c-0.41,0-0.82,0.23-1.299,0.66v2.548
    C128.836,80.957,129.266,81.097,129.586,81.097z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M133.127,76.809h0.68l0.07,0.879h0.03c0.33-0.609,0.83-0.999,1.379-0.999c0.21,0,0.36,0.03,0.52,0.1
    l-0.16,0.72c-0.16-0.05-0.27-0.08-0.47-0.08c-0.41,0-0.9,0.3-1.229,1.12v3.118h-0.82V76.809z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M138.386,76.69c1.189,0,2.249,0.929,2.249,2.559c0,1.609-1.06,2.539-2.249,2.539s-2.249-0.93-2.249-2.539
    C136.138,77.619,137.197,76.69,138.386,76.69z M138.386,81.107c0.839,0,1.399-0.75,1.399-1.859c0-1.12-0.56-1.879-1.399-1.879
    c-0.83,0-1.399,0.76-1.399,1.879C136.987,80.358,137.556,81.107,138.386,81.107z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M141.927,76.809h0.819v5.407c0,0.989-0.36,1.619-1.329,1.619c-0.3,0-0.55-0.06-0.72-0.13l0.17-0.62
    c0.12,0.04,0.29,0.08,0.46,0.08c0.479,0,0.6-0.36,0.6-0.949V76.809z M141.777,75.28c0-0.32,0.25-0.529,0.57-0.529
    c0.31,0,0.56,0.209,0.56,0.529c0,0.31-0.25,0.53-0.56,0.53C142.027,75.81,141.777,75.59,141.777,75.28z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M146.206,76.69c1.239,0,1.939,0.889,1.939,2.278c0,0.17-0.01,0.33-0.03,0.45h-3.278
    c0.06,1.049,0.689,1.709,1.619,1.709c0.46,0,0.85-0.15,1.209-0.38l0.29,0.54c-0.42,0.27-0.939,0.5-1.599,0.5
    c-1.299,0-2.329-0.95-2.329-2.539C144.028,77.659,145.097,76.69,146.206,76.69z M147.426,78.878c0-0.989-0.44-1.539-1.199-1.539
    c-0.68,0-1.299,0.56-1.399,1.539H147.426z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M151.326,76.69c0.64,0,1.089,0.27,1.419,0.58l-0.41,0.53c-0.29-0.25-0.59-0.43-0.979-0.43
    c-0.88,0-1.52,0.76-1.52,1.879c0,1.109,0.61,1.859,1.5,1.859c0.459,0,0.85-0.23,1.139-0.49l0.37,0.54c-0.44,0.39-1,0.63-1.58,0.63
    c-1.289,0-2.278-0.93-2.278-2.539C148.987,77.619,150.076,76.69,151.326,76.69z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M154.047,77.479h-0.72v-0.62l0.76-0.05l0.1-1.359h0.689v1.359h1.309v0.67h-1.309v2.698
    c0,0.6,0.19,0.939,0.75,0.939c0.17,0,0.39-0.07,0.55-0.13l0.16,0.62c-0.27,0.09-0.6,0.18-0.899,0.18
    c-1.04,0-1.389-0.66-1.389-1.619V77.479z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M157.157,80.567c0.42,0.34,0.85,0.58,1.429,0.58c0.64,0,0.959-0.34,0.959-0.76c0-0.5-0.58-0.72-1.109-0.919
    c-0.689-0.25-1.449-0.58-1.449-1.399c0-0.779,0.62-1.379,1.669-1.379c0.609,0,1.139,0.25,1.509,0.549l-0.39,0.52
    c-0.33-0.25-0.68-0.43-1.109-0.43c-0.609,0-0.89,0.33-0.89,0.699c0,0.45,0.53,0.63,1.08,0.84c0.7,0.26,1.479,0.55,1.479,1.469
    c0,0.79-0.629,1.449-1.779,1.449c-0.689,0-1.349-0.29-1.809-0.67L157.157,80.567z&quot;/&gt;
&lt;/g&gt;
&lt;g&gt;
  &lt;path d=&quot;M14.222,122.989c1.067,0,1.787,0.492,2.255,0.972l-0.576,0.636c-0.396-0.42-0.888-0.732-1.667-0.732
    c-1.595,0-2.615,1.224-2.615,3.178c0,1.979,0.936,3.227,2.615,3.227c0.563,0,1.115-0.18,1.427-0.468v-2.051h-1.667v-0.828h2.579
    v3.31c-0.516,0.504-1.391,0.912-2.447,0.912c-2.062,0-3.538-1.511-3.538-4.078C10.588,124.536,12.111,122.989,14.222,122.989z&quot;/&gt;
  &lt;path d=&quot;M18.148,123.337c0-0.384,0.3-0.636,0.684-0.636s0.684,0.252,0.684,0.636c0,0.372-0.3,0.635-0.684,0.635
    S18.148,123.708,18.148,123.337z M18.327,125.172h0.983V131h-0.983V125.172z&quot;/&gt;
  &lt;path d=&quot;M21.447,125.975h-0.864v-0.744l0.912-0.06l0.12-1.631h0.828v1.631h1.571v0.803h-1.571v3.238
    c0,0.72,0.228,1.127,0.899,1.127c0.204,0,0.468-0.084,0.66-0.156l0.192,0.744c-0.324,0.108-0.72,0.216-1.08,0.216
    c-1.247,0-1.667-0.792-1.667-1.943V125.975z&quot;/&gt;
  &lt;path d=&quot;M25.335,122.461h0.983v2.327l-0.036,1.199c0.551-0.528,1.139-0.959,1.943-0.959c1.223,0,1.775,0.792,1.775,2.279V131
    h-0.983v-3.562c0-1.091-0.336-1.559-1.104-1.559c-0.6,0-1.007,0.312-1.595,0.899V131h-0.983V122.461z&quot;/&gt;
  &lt;path d=&quot;M31.779,125.172h0.996v3.562c0,1.091,0.324,1.559,1.091,1.559c0.6,0,1.02-0.3,1.571-0.983v-4.138h0.983V131h-0.815
    l-0.084-0.912h-0.036c-0.54,0.636-1.115,1.056-1.919,1.056c-1.235,0-1.787-0.792-1.787-2.279V125.172z&quot;/&gt;
  &lt;path d=&quot;M38.391,122.461h0.983v2.327l-0.024,1.055c0.528-0.468,1.175-0.815,1.823-0.815c1.511,0,2.314,1.163,2.314,2.962
    c0,1.991-1.187,3.154-2.519,3.154c-0.54,0-1.151-0.264-1.667-0.72h-0.036L39.182,131h-0.792V122.461z M40.802,130.317
    c0.959,0,1.667-0.875,1.667-2.315c0-1.283-0.432-2.146-1.535-2.146c-0.492,0-1.007,0.276-1.559,0.792v3.058
    C39.89,130.149,40.418,130.317,40.802,130.317z&quot;/&gt;
  &lt;path d=&quot;M47.571,129.285c0.563,0.587,1.343,0.983,2.17,0.983c1.032,0,1.644-0.516,1.644-1.284c0-0.803-0.576-1.055-1.319-1.391
    l-1.127-0.492c-0.732-0.312-1.595-0.875-1.595-2.027c0-1.199,1.055-2.087,2.482-2.087c0.936,0,1.763,0.396,2.315,0.972
    l-0.528,0.647c-0.479-0.456-1.067-0.744-1.787-0.744c-0.887,0-1.475,0.444-1.475,1.151c0,0.756,0.696,1.043,1.307,1.308
    l1.127,0.479c0.912,0.396,1.619,0.936,1.619,2.099c0,1.247-1.031,2.243-2.687,2.243c-1.103,0-2.062-0.456-2.747-1.164
    L47.571,129.285z&quot;/&gt;
  &lt;path d=&quot;M53.991,125.975h-0.863v-0.744l0.911-0.06l0.12-1.631h0.828v1.631h1.571v0.803h-1.571v3.238
    c0,0.72,0.228,1.127,0.899,1.127c0.204,0,0.468-0.084,0.66-0.156l0.192,0.744c-0.324,0.108-0.72,0.216-1.08,0.216
    c-1.247,0-1.667-0.792-1.667-1.943V125.975z&quot;/&gt;
  &lt;path d=&quot;M60.961,127.306c0-0.744-0.252-1.463-1.199-1.463c-0.684,0-1.284,0.312-1.739,0.624l-0.396-0.684
    c0.54-0.348,1.355-0.755,2.291-0.755c1.427,0,2.027,0.947,2.027,2.398V131h-0.815l-0.084-0.696h-0.024
    c-0.564,0.456-1.211,0.84-1.931,0.84c-0.983,0-1.715-0.612-1.715-1.655C57.375,128.218,58.478,127.582,60.961,127.306z
     M59.366,130.353c0.563,0,1.031-0.276,1.595-0.78v-1.619c-1.955,0.24-2.615,0.72-2.615,1.463
    C58.346,130.077,58.79,130.353,59.366,130.353z&quot;/&gt;
  &lt;path d=&quot;M63.806,125.172h0.815l0.084,1.055h0.036c0.396-0.731,0.996-1.199,1.655-1.199c0.251,0,0.432,0.036,0.624,0.12
    l-0.192,0.864c-0.192-0.06-0.324-0.096-0.564-0.096c-0.492,0-1.079,0.36-1.475,1.344V131h-0.983V125.172z&quot;/&gt;
  &lt;path d=&quot;M67.695,129.681c0.503,0.408,1.02,0.696,1.715,0.696c0.768,0,1.151-0.408,1.151-0.912c0-0.6-0.695-0.864-1.331-1.104
    c-0.828-0.3-1.739-0.695-1.739-1.679c0-0.935,0.744-1.655,2.003-1.655c0.731,0,1.367,0.3,1.811,0.66l-0.468,0.624
    c-0.396-0.3-0.815-0.516-1.331-0.516c-0.732,0-1.067,0.396-1.067,0.839c0,0.54,0.635,0.756,1.295,1.008
    c0.84,0.312,1.775,0.659,1.775,1.763c0,0.948-0.756,1.739-2.135,1.739c-0.828,0-1.619-0.348-2.171-0.804L67.695,129.681z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M13.868,141.001h-2.389L10.849,143H10l2.219-6.556h0.939L15.377,143h-0.879L13.868,141.001z
     M13.658,140.332l-0.31-1c-0.23-0.729-0.44-1.449-0.649-2.209h-0.04c-0.21,0.76-0.42,1.479-0.65,2.209l-0.32,1H13.658z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M18.178,138.023c0.64,0,1.089,0.27,1.419,0.58l-0.41,0.53c-0.29-0.25-0.59-0.43-0.979-0.43
    c-0.88,0-1.52,0.76-1.52,1.879c0,1.109,0.61,1.859,1.5,1.859c0.459,0,0.85-0.23,1.139-0.49l0.37,0.54c-0.44,0.39-1,0.63-1.58,0.63
    c-1.289,0-2.278-0.93-2.278-2.539C15.84,138.952,16.929,138.023,18.178,138.023z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M20.759,138.143h0.68l0.07,0.879h0.03c0.33-0.609,0.83-0.999,1.379-0.999c0.21,0,0.36,0.03,0.52,0.1
    l-0.16,0.72c-0.16-0.05-0.27-0.08-0.47-0.08c-0.41,0-0.9,0.3-1.229,1.12V143h-0.82V138.143z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M26.018,138.023c1.189,0,2.249,0.929,2.249,2.559c0,1.609-1.06,2.539-2.249,2.539s-2.249-0.93-2.249-2.539
    C23.769,138.952,24.828,138.023,26.018,138.023z M26.018,142.441c0.839,0,1.399-0.75,1.399-1.859c0-1.12-0.56-1.879-1.399-1.879
    c-0.83,0-1.399,0.76-1.399,1.879C24.618,141.691,25.188,142.441,26.018,142.441z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M29.419,141.901c0.42,0.34,0.85,0.58,1.429,0.58c0.64,0,0.959-0.34,0.959-0.76c0-0.5-0.58-0.72-1.109-0.919
    c-0.689-0.25-1.449-0.58-1.449-1.399c0-0.779,0.62-1.379,1.669-1.379c0.609,0,1.139,0.25,1.509,0.549l-0.39,0.52
    c-0.33-0.25-0.68-0.43-1.109-0.43c-0.609,0-0.89,0.33-0.89,0.699c0,0.45,0.53,0.63,1.08,0.84c0.7,0.26,1.479,0.55,1.479,1.469
    c0,0.79-0.629,1.449-1.779,1.449c-0.689,0-1.349-0.29-1.809-0.67L29.419,141.901z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M33.609,141.901c0.42,0.34,0.85,0.58,1.429,0.58c0.64,0,0.959-0.34,0.959-0.76c0-0.5-0.58-0.72-1.109-0.919
    c-0.689-0.25-1.449-0.58-1.449-1.399c0-0.779,0.62-1.379,1.669-1.379c0.609,0,1.139,0.25,1.509,0.549l-0.39,0.52
    c-0.33-0.25-0.68-0.43-1.109-0.43c-0.609,0-0.89,0.33-0.89,0.699c0,0.45,0.53,0.63,1.08,0.84c0.7,0.26,1.479,0.55,1.479,1.469
    c0,0.79-0.629,1.449-1.779,1.449c-0.689,0-1.349-0.29-1.809-0.67L33.609,141.901z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M42.697,139.922c0-0.62-0.209-1.22-1-1.22c-0.569,0-1.069,0.26-1.449,0.52l-0.33-0.57
    c0.45-0.29,1.129-0.629,1.909-0.629c1.189,0,1.689,0.79,1.689,1.999V143h-0.68l-0.07-0.58h-0.02c-0.47,0.38-1.01,0.7-1.609,0.7
    c-0.819,0-1.429-0.51-1.429-1.379C39.709,140.681,40.628,140.152,42.697,139.922z M41.368,142.461c0.47,0,0.859-0.23,1.329-0.65
    v-1.349c-1.629,0.2-2.179,0.6-2.179,1.219C40.518,142.231,40.888,142.461,41.368,142.461z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M45.069,135.884h0.82v6.197c0,0.26,0.11,0.36,0.23,0.36c0.05,0,0.09,0,0.18-0.02l0.11,0.62
    c-0.11,0.05-0.25,0.08-0.47,0.08c-0.62,0-0.87-0.39-0.87-1.1V135.884z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M47.618,135.884h0.82v6.197c0,0.26,0.11,0.36,0.23,0.36c0.05,0,0.09,0,0.18-0.02l0.11,0.62
    c-0.11,0.05-0.25,0.08-0.47,0.08c-0.62,0-0.87-0.39-0.87-1.1V135.884z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M54.787,136.324c0.78,0,1.399,0.38,1.789,0.81l-0.47,0.53c-0.35-0.37-0.77-0.61-1.309-0.61
    c-1.25,0-2.079,1.02-2.079,2.648c0,1.649,0.79,2.688,2.039,2.688c0.62,0,1.08-0.26,1.499-0.729l0.47,0.51
    c-0.51,0.6-1.159,0.95-1.989,0.95c-1.649,0-2.878-1.259-2.878-3.398C51.859,137.613,53.108,136.324,54.787,136.324z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M59.738,138.023c1.189,0,2.249,0.929,2.249,2.559c0,1.609-1.06,2.539-2.249,2.539s-2.249-0.93-2.249-2.539
    C57.489,138.952,58.548,138.023,59.738,138.023z M59.738,142.441c0.839,0,1.399-0.75,1.399-1.859c0-1.12-0.56-1.879-1.399-1.879
    c-0.83,0-1.399,0.76-1.399,1.879C58.338,141.691,58.908,142.441,59.738,142.441z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M63.268,138.143h0.68l0.07,0.879h0.03c0.33-0.609,0.83-0.999,1.379-0.999c0.21,0,0.36,0.03,0.52,0.1
    l-0.16,0.72c-0.16-0.05-0.27-0.08-0.47-0.08c-0.41,0-0.9,0.3-1.229,1.12V143h-0.82V138.143z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M68.457,138.023c1.239,0,1.939,0.889,1.939,2.278c0,0.17-0.01,0.33-0.03,0.45h-3.278
    c0.06,1.049,0.689,1.709,1.619,1.709c0.46,0,0.85-0.15,1.209-0.38l0.29,0.54c-0.42,0.27-0.939,0.5-1.599,0.5
    c-1.299,0-2.329-0.95-2.329-2.539C66.279,138.993,67.348,138.023,68.457,138.023z M69.677,140.212c0-0.989-0.44-1.539-1.199-1.539
    c-0.68,0-1.299,0.56-1.399,1.539H69.677z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M71.268,139.692c0-2.099,1.159-3.368,2.809-3.368c1.639,0,2.798,1.279,2.798,3.368
    c0,2.109-1.159,3.428-2.798,3.428C72.428,143.12,71.268,141.801,71.268,139.692z M76.016,139.692c0-1.629-0.77-2.639-1.939-2.639
    c-1.18,0-1.949,1.009-1.949,2.639c0,1.639,0.77,2.698,1.949,2.698C75.246,142.39,76.016,141.331,76.016,139.692z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M78.268,141.571c0.47,0.49,1.12,0.819,1.809,0.819c0.859,0,1.369-0.43,1.369-1.069
    c0-0.669-0.479-0.879-1.099-1.159l-0.939-0.41c-0.61-0.26-1.33-0.73-1.33-1.689c0-0.999,0.88-1.739,2.069-1.739
    c0.78,0,1.469,0.33,1.929,0.81l-0.44,0.54c-0.4-0.38-0.89-0.62-1.489-0.62c-0.739,0-1.229,0.37-1.229,0.959
    c0,0.63,0.58,0.87,1.089,1.089l0.939,0.4c0.759,0.33,1.349,0.78,1.349,1.749c0,1.04-0.859,1.869-2.239,1.869
    c-0.919,0-1.719-0.38-2.289-0.97L78.268,141.571z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M86.318,143.41v1.639h-0.82v-6.906h0.68l0.07,0.56h0.03c0.44-0.37,0.979-0.679,1.549-0.679
    c1.249,0,1.919,0.969,1.919,2.479c0,1.649-0.99,2.619-2.099,2.619c-0.45,0-0.899-0.21-1.349-0.56L86.318,143.41z M87.507,142.43
    c0.799,0,1.389-0.729,1.389-1.929c0-1.069-0.36-1.789-1.279-1.789c-0.41,0-0.82,0.23-1.299,0.66v2.548
    C86.757,142.291,87.187,142.43,87.507,142.43z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M91.048,138.143h0.68l0.07,0.879h0.03c0.33-0.609,0.83-0.999,1.379-0.999c0.21,0,0.36,0.03,0.52,0.1
    l-0.16,0.72c-0.16-0.05-0.27-0.08-0.47-0.08c-0.41,0-0.9,0.3-1.229,1.12V143h-0.82V138.143z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M96.307,138.023c1.189,0,2.249,0.929,2.249,2.559c0,1.609-1.06,2.539-2.249,2.539s-2.249-0.93-2.249-2.539
    C94.058,138.952,95.118,138.023,96.307,138.023z M96.307,142.441c0.839,0,1.399-0.75,1.399-1.859c0-1.12-0.56-1.879-1.399-1.879
    c-0.83,0-1.399,0.76-1.399,1.879C94.908,141.691,95.477,142.441,96.307,142.441z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M99.848,138.143h0.819v5.407c0,0.989-0.36,1.619-1.329,1.619c-0.3,0-0.55-0.06-0.72-0.13l0.17-0.62
    c0.12,0.04,0.29,0.08,0.46,0.08c0.479,0,0.6-0.36,0.6-0.949V138.143z M99.698,136.614c0-0.32,0.25-0.529,0.57-0.529
    c0.31,0,0.56,0.209,0.56,0.529c0,0.31-0.25,0.53-0.56,0.53C99.948,137.143,99.698,136.924,99.698,136.614z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M104.127,138.023c1.239,0,1.939,0.889,1.939,2.278c0,0.17-0.01,0.33-0.03,0.45h-3.278
    c0.06,1.049,0.689,1.709,1.619,1.709c0.46,0,0.85-0.15,1.209-0.38l0.29,0.54c-0.42,0.27-0.939,0.5-1.599,0.5
    c-1.299,0-2.329-0.95-2.329-2.539C101.948,138.993,103.017,138.023,104.127,138.023z M105.346,140.212
    c0-0.989-0.44-1.539-1.199-1.539c-0.68,0-1.299,0.56-1.399,1.539H105.346z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M109.246,138.023c0.64,0,1.089,0.27,1.419,0.58l-0.41,0.53c-0.29-0.25-0.59-0.43-0.979-0.43
    c-0.88,0-1.52,0.76-1.52,1.879c0,1.109,0.61,1.859,1.5,1.859c0.459,0,0.85-0.23,1.139-0.49l0.37,0.54c-0.44,0.39-1,0.63-1.58,0.63
    c-1.289,0-2.278-0.93-2.278-2.539C106.908,138.952,107.997,138.023,109.246,138.023z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M111.968,138.813h-0.72v-0.62l0.76-0.05l0.1-1.359h0.689v1.359h1.309v0.67h-1.309v2.698
    c0,0.6,0.19,0.939,0.75,0.939c0.17,0,0.39-0.07,0.55-0.13l0.16,0.62c-0.27,0.09-0.6,0.18-0.899,0.18
    c-1.04,0-1.389-0.66-1.389-1.619V138.813z&quot;/&gt;
  &lt;path fill=&quot;#808285&quot; d=&quot;M115.077,141.901c0.42,0.34,0.85,0.58,1.429,0.58c0.64,0,0.959-0.34,0.959-0.76
    c0-0.5-0.58-0.72-1.109-0.919c-0.689-0.25-1.449-0.58-1.449-1.399c0-0.779,0.62-1.379,1.669-1.379c0.609,0,1.139,0.25,1.509,0.549
    l-0.39,0.52c-0.33-0.25-0.68-0.43-1.109-0.43c-0.609,0-0.89,0.33-0.89,0.699c0,0.45,0.53,0.63,1.08,0.84
    c0.7,0.26,1.479,0.55,1.479,1.469c0,0.79-0.629,1.449-1.779,1.449c-0.689,0-1.349-0.29-1.809-0.67L115.077,141.901z&quot;/&gt;
&lt;/g&gt;
&lt;line fill=&quot;none&quot; stroke=&quot;#BCBEC0&quot; stroke-width=&quot;0.7255&quot; stroke-miterlimit=&quot;10&quot; x1=&quot;10&quot; y1=&quot;102&quot; x2=&quot;428&quot; y2=&quot;102&quot;/&gt;
&lt;line fill=&quot;none&quot; stroke=&quot;#BCBEC0&quot; stroke-width=&quot;0.7255&quot; stroke-miterlimit=&quot;10&quot; x1=&quot;10&quot; y1=&quot;164&quot; x2=&quot;428&quot; y2=&quot;164&quot;/&gt;
&lt;line fill=&quot;none&quot; stroke=&quot;#BCBEC0&quot; stroke-width=&quot;0.7255&quot; stroke-miterlimit=&quot;10&quot; x1=&quot;10&quot; y1=&quot;41&quot; x2=&quot;428&quot; y2=&quot;41&quot;/&gt;
&lt;g&gt;
  &lt;path d=&quot;M217.628,74.786h2.84v-8.362h-2.34v-1.44c1.26-0.24,2.141-0.56,2.94-1.04h1.721v10.842h2.5v1.88h-7.662V74.786z&quot;/&gt;
  &lt;path d=&quot;M227.948,73.666c0.76,0.72,1.7,1.36,2.98,1.36c1.42,0,2.46-0.9,2.46-2.441c0-1.52-0.94-2.38-2.34-2.38
    c-0.82,0-1.28,0.22-2.041,0.72l-1.1-0.7l0.38-6.281h6.801v1.94h-4.801l-0.26,3.081c0.541-0.26,1.021-0.42,1.681-0.42
    c2.18,0,4,1.24,4,3.98c0,2.781-2.14,4.381-4.481,4.381c-2.06,0-3.4-0.82-4.341-1.761L227.948,73.666z&quot;/&gt;
  &lt;path d=&quot;M237.467,70.245c0-4.301,1.68-6.542,4.321-6.542s4.321,2.261,4.321,6.542c0,4.301-1.68,6.662-4.321,6.662
    S237.467,74.546,237.467,70.245z M243.909,70.245c0-3.601-0.88-4.741-2.121-4.741c-1.22,0-2.121,1.141-2.121,4.741
    s0.9,4.861,2.121,4.861C243.028,75.106,243.909,73.846,243.909,70.245z&quot;/&gt;
  &lt;path d=&quot;M251.188,70.906h-3.581v-1.68h3.581v-3.781h1.74v3.781h3.581v1.68h-3.581v3.781h-1.74V70.906z&quot;/&gt;
&lt;/g&gt;
&lt;g&gt;
  &lt;path d=&quot;M334.708,66.545c-0.461-0.56-1.261-0.96-2.021-0.96c-1.601,0-2.901,1.18-3.001,4.701c0.74-0.94,1.84-1.5,2.761-1.5
    c2.2,0,3.721,1.28,3.721,3.941c0,2.541-1.82,4.181-4.001,4.181c-2.5,0-4.621-1.94-4.621-6.222c0-4.941,2.4-6.981,5.002-6.981
    c1.539,0,2.641,0.64,3.4,1.44L334.708,66.545z M334.028,72.726c0-1.5-0.739-2.26-2-2.26c-0.72,0-1.561,0.4-2.28,1.46
    c0.24,2.261,1.14,3.221,2.38,3.221C333.188,75.146,334.028,74.286,334.028,72.726z&quot;/&gt;
  &lt;path d=&quot;M346.668,73.386h-1.601v3.281h-2.16v-3.281h-5.621v-1.56l5.041-7.882h2.74v7.662h1.601V73.386z M342.908,71.606v-2.881
    c0-0.74,0.061-1.9,0.1-2.64h-0.08c-0.32,0.66-0.68,1.3-1.04,1.98l-2.32,3.541H342.908z&quot;/&gt;
  &lt;path d=&quot;M347.986,70.245c0-4.301,1.681-6.542,4.321-6.542s4.321,2.261,4.321,6.542c0,4.301-1.681,6.662-4.321,6.662
    S347.986,74.546,347.986,70.245z M354.427,70.245c0-3.601-0.88-4.741-2.12-4.741c-1.22,0-2.12,1.141-2.12,4.741
    s0.9,4.861,2.12,4.861C353.547,75.106,354.427,73.846,354.427,70.245z&quot;/&gt;
  &lt;path d=&quot;M361.706,70.906h-3.58v-1.68h3.58v-3.781h1.74v3.781h3.581v1.68h-3.581v3.781h-1.74V70.906z&quot;/&gt;
&lt;/g&gt;
&lt;g&gt;
  &lt;path d=&quot;M209.808,133.666c0.76,0.72,1.7,1.36,2.98,1.36c1.42,0,2.46-0.9,2.46-2.441c0-1.52-0.94-2.38-2.34-2.38
    c-0.82,0-1.28,0.22-2.041,0.72l-1.1-0.7l0.38-6.281h6.801v1.94h-4.801l-0.26,3.081c0.541-0.26,1.021-0.42,1.681-0.42
    c2.18,0,4,1.24,4,3.98c0,2.781-2.14,4.381-4.481,4.381c-2.06,0-3.4-0.82-4.341-1.761L209.808,133.666z&quot;/&gt;
  &lt;path d=&quot;M219.468,139.047c1.28-0.5,2.02-1.4,2.02-2.42c-0.06,0-0.12,0-0.18,0c-0.78,0-1.48-0.52-1.48-1.42
    c0-0.86,0.7-1.42,1.541-1.42c1.08,0,1.72,0.88,1.72,2.36c0,1.96-1.14,3.48-3.121,4.161L219.468,139.047z&quot;/&gt;
  &lt;path d=&quot;M224.827,130.245c0-4.301,1.68-6.541,4.321-6.541s4.321,2.261,4.321,6.541c0,4.301-1.68,6.662-4.321,6.662
    S224.827,134.546,224.827,130.245z M231.269,130.245c0-3.601-0.88-4.741-2.121-4.741c-1.22,0-2.121,1.141-2.121,4.741
    c0,3.601,0.9,4.861,2.121,4.861C230.389,135.106,231.269,133.846,231.269,130.245z&quot;/&gt;
  &lt;path d=&quot;M235.087,130.245c0-4.301,1.68-6.541,4.321-6.541s4.321,2.261,4.321,6.541c0,4.301-1.68,6.662-4.321,6.662
    S235.087,134.546,235.087,130.245z M241.529,130.245c0-3.601-0.88-4.741-2.121-4.741c-1.22,0-2.121,1.141-2.121,4.741
    c0,3.601,0.9,4.861,2.121,4.861C240.648,135.106,241.529,133.846,241.529,130.245z&quot;/&gt;
  &lt;path d=&quot;M245.347,130.245c0-4.301,1.68-6.541,4.321-6.541s4.321,2.261,4.321,6.541c0,4.301-1.681,6.662-4.321,6.662
    S245.347,134.546,245.347,130.245z M251.788,130.245c0-3.601-0.881-4.741-2.121-4.741c-1.22,0-2.121,1.141-2.121,4.741
    c0,3.601,0.9,4.861,2.121,4.861C250.908,135.106,251.788,133.846,251.788,130.245z&quot;/&gt;
  &lt;path d=&quot;M259.067,130.906h-3.58v-1.68h3.58v-3.781h1.741v3.781h3.58v1.68h-3.58v3.781h-1.741V130.906z&quot;/&gt;
&lt;/g&gt;
&lt;g&gt;
  &lt;path d=&quot;M327.147,134.786h2.841v-8.362h-2.341v-1.44c1.261-0.24,2.141-0.56,2.94-1.04h1.721v10.842h2.5v1.88h-7.661V134.786z&quot;/&gt;
  &lt;path d=&quot;M339.046,130.145v-0.08c-0.979-0.7-1.76-1.64-1.76-2.98c0-2.061,1.641-3.381,3.841-3.381c2.28,0,3.741,1.38,3.741,3.441
    c0,1.26-0.881,2.32-1.701,2.92v0.08c1.181,0.66,2.201,1.601,2.201,3.301c0,1.96-1.721,3.461-4.301,3.461
    c-2.48,0-4.321-1.44-4.321-3.501C336.746,131.826,337.847,130.785,339.046,130.145z M341.107,135.266c1.221,0,2.102-0.72,2.102-1.9
    c0-1.38-1.341-1.88-3.062-2.581c-0.8,0.58-1.38,1.4-1.38,2.38C338.767,134.426,339.807,135.266,341.107,135.266z M342.968,127.285
    c0-1.121-0.701-1.94-1.881-1.94c-0.98,0-1.74,0.64-1.74,1.74c0,1.28,1.141,1.84,2.561,2.4
    C342.587,128.805,342.968,128.085,342.968,127.285z&quot;/&gt;
  &lt;path d=&quot;M347.126,139.047c1.28-0.5,2.02-1.4,2.02-2.42c-0.06,0-0.119,0-0.18,0c-0.779,0-1.48-0.52-1.48-1.42
    c0-0.86,0.701-1.42,1.541-1.42c1.08,0,1.721,0.88,1.721,2.36c0,1.96-1.141,3.48-3.121,4.161L347.126,139.047z&quot;/&gt;
  &lt;path d=&quot;M352.486,130.245c0-4.301,1.681-6.541,4.321-6.541s4.321,2.261,4.321,6.541c0,4.301-1.681,6.662-4.321,6.662
    S352.486,134.546,352.486,130.245z M358.927,130.245c0-3.601-0.88-4.741-2.12-4.741c-1.22,0-2.12,1.141-2.12,4.741
    c0,3.601,0.9,4.861,2.12,4.861C358.047,135.106,358.927,133.846,358.927,130.245z&quot;/&gt;
  &lt;path d=&quot;M362.745,130.245c0-4.301,1.68-6.541,4.32-6.541s4.321,2.261,4.321,6.541c0,4.301-1.681,6.662-4.321,6.662
    S362.745,134.546,362.745,130.245z M369.187,130.245c0-3.601-0.881-4.741-2.121-4.741c-1.22,0-2.12,1.141-2.12,4.741
    c0,3.601,0.9,4.861,2.12,4.861C368.306,135.106,369.187,133.846,369.187,130.245z&quot;/&gt;
  &lt;path d=&quot;M373.005,130.245c0-4.301,1.681-6.541,4.321-6.541s4.321,2.261,4.321,6.541c0,4.301-1.681,6.662-4.321,6.662
    S373.005,134.546,373.005,130.245z M379.447,130.245c0-3.601-0.88-4.741-2.12-4.741c-1.221,0-2.12,1.141-2.12,4.741
    c0,3.601,0.899,4.861,2.12,4.861C378.567,135.106,379.447,133.846,379.447,130.245z&quot;/&gt;
  &lt;path d=&quot;M386.726,130.906h-3.581v-1.68h3.581v-3.781h1.74v3.781h3.581v1.68h-3.581v3.781h-1.74V130.906z&quot;/&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/div&gt;

&lt;h3 id=&quot;coreos-year-1-highlights&quot;&gt;CoreOS Year 1 Highlights&lt;/h3&gt;

&lt;p&gt;In the post for that first stable release we highlighted our progress to date:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CoreOS engineers contributed features and fixes to open source projects including Docker, the Linux kernel, networkd, systemd and more&lt;/li&gt;
&lt;li&gt;Official CoreOS image added to Google Compute Engine, Rackspace, Amazon&lt;/li&gt;
&lt;li&gt;Joined the Docker Governance Board as a Contributing Member&lt;/li&gt;
&lt;li&gt;Today’s most respected technology companies and many Fortune 500 companies are using and testing CoreOS in their environments&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;coreos-year-2-highlights&quot;&gt;CoreOS Year 2 Highlights&lt;/h3&gt;

&lt;p&gt;In the tradition of that post one year ago, let’s take a look at some of the highlights from the last year of CoreOS.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Announced &lt;a href=&quot;https://tectonic.com/blog/announcing-tectonic/&quot;&gt;Tectonic&lt;/a&gt;, a commercial Kubernetes platform that combines the CoreOS stack with Kubernetes to bring companies Google-style infrastructure&lt;/li&gt;
&lt;li&gt;Worked with community partners to create App Container (&lt;a href=&quot;https://github.com/appc/spec&quot;&gt;appc&lt;/a&gt;), a specification defining a container image format, runtime environment and discovery protocol, to work towards the goal of a standard, portable shipping container for applications&lt;/li&gt;
&lt;li&gt;Created &lt;a href=&quot;https://github.com/coreos/rkt&quot;&gt;rkt&lt;/a&gt;, a container runtime designed for composability, security and speed and the first implementation of appc&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://coreos.com/blog/CoreOS-enterprise-docker-registry/&quot;&gt;Quay.io joined CoreOS&lt;/a&gt; to provide Enterprise Registry, delivering secured hosting of your container repositories behind the firewall&lt;/li&gt;
&lt;li&gt;Released &lt;a href=&quot;https://coreos.com/blog/etcd-2.0-release-first-major-stable-release/&quot;&gt;etcd 2.0&lt;/a&gt;, which powers important projects in the container and distributed systems ecosystem including the flannel, locksmith, fleet and Kubernetes projects. etcd also supports community projects like HashiCorp’s Vault, and Docker 1.7s networking backend.&lt;/li&gt;
&lt;li&gt;Joined forces with industry leaders to launch the &lt;a href=&quot;https://coreos.com/blog/app-container-and-the-open-container-project/&quot;&gt;Open Container Project&lt;/a&gt;, chartered to establish common standards for software containers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our ability to build and ship innovative and high-quality projects is due in large part to the feedback and interest from our community. Thank you for all of your help in contributing, bug testing, promoting and learning more about what we are doing here at CoreOS.&lt;/p&gt;

&lt;h2 id=&quot;celebrate-with-us-at-gophercon&quot;&gt;Celebrate With Us at GopherCon&lt;/h2&gt;

&lt;p&gt;We will be celebrating our second birthday with our friends at GopherCon in Denver. Swing by our booth to get a limited edition CoreOS GopherCon sticker. Or, join us at our birthday party, brought to you by our friends from &lt;a href=&quot;http://www.couchbase.com/&quot;&gt;Couchbase&lt;/a&gt; and &lt;a href=&quot;http://www.iron.io/&quot;&gt;Iron.io&lt;/a&gt; on Thursday, July 9, at 8 p.m. MDT. Lastly, don’t miss our hack day on Friday, July 10, where you can work alongside a CoreOS engineer, learn about our open source projects and compete for prizes.&lt;/p&gt;

&lt;h3 id=&quot;rsvp-for-our-second-birthday-party&quot;&gt;RSVP for our Second Birthday Party&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Thursday, July 9 at 8 - 11 p.m. MDT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pizza Republica in Denver, Colorado. Sponsored by &lt;a href=&quot;http://www.couchbase.com/&quot;&gt;Couchbase&lt;/a&gt; and &lt;a href=&quot;http://www.iron.io/&quot;&gt;Iron.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.eventbrite.com/e/coreos-2nd-birthday-at-gophercon-tickets-17419178231&quot;&gt;http://www.eventbrite.com/e/coreos-2nd-birthday-at-gophercon-tickets-17419178231&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;coreos-birthday-hack-day&quot;&gt;CoreOS Birthday Hack Day&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Friday, July 10 at 10 a.m. - 5 p.m. MDT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Room 403, GopherCon in Denver, Colorado&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.gophercon.com/&quot;&gt;http://www.gophercon.com/&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Upcoming CoreOS Events in July</title>
   <link href="https://coreos.com/blog/events-in-july/"/>
   <updated>2015-07-06T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/events-in-july</id>
   <content type="html">&lt;p&gt;Need your CoreOS fix? Check out where you can find us this month! &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, July 7-Friday, July 10, 2015 - Denver, CO&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We’re going to &lt;a href=&quot;http://gophercon.com/&quot;&gt;GopherCon&lt;/a&gt;! Be sure to stop by our booth to pick up some swag and say hello. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, July 7, 2015 at 6:00 p.m. MDT - Denver, CO&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start your GopherCon experience the right way. Join &lt;a href=&quot;https://twitter.com/brianredbeard&quot;&gt;Brian “Redbeard” Harrington&lt;/a&gt; and other awesome speakers at the GopherCon &lt;a href=&quot;http://www.meetup.com/Denver-Go-Language-User-Group/events/222335594/&quot;&gt;Kick off party&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thursday, July 9, 2015 at 1:40 p.m. MDT - Denver, CO&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Be sure to check out &lt;a href=&quot;https://twitter.com/barakmich?lang=en&quot;&gt;Barak Michener&lt;/a&gt; give a talk at GopherCon about &lt;a href=&quot;http://gophercon.com/schedule/9july/&quot;&gt;Cayley and building a graph database&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thursday, July 9, 2015 at 4:00 p.m. MDT - Denver, CO&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Don’t miss &lt;a href=&quot;https://twitter.com/kelseyhightower?lang=en&quot;&gt;Kelsey Hightower&lt;/a&gt; at GopherCon talking about &lt;a href=&quot;http://gophercon.com/talks/betting/&quot;&gt;betting the company on go and winning&lt;/a&gt;! &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thursday, July 9, 2015 at 8:00 p.m. MDT - Denver, CO&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re attending GopherCon, come celebrate our second birthday with us and our friends from &lt;a href=&quot;http://www.couchbase.com/&quot;&gt;Couchbase&lt;/a&gt; and &lt;a href=&quot;http://www.iron.io/&quot;&gt;Iron.io&lt;/a&gt; at Pizza Republica! Pizza, beer and video games included. &lt;a href=&quot;http://www.eventbrite.com/e/coreos-2nd-birthday-at-gophercon-tickets-17419178231&quot;&gt;RSVP here&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Friday, July 10, 2015 - 11:00 a.m. BRT - Porto Alegre, Brazil&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Meet &lt;a href=&quot;https://twitter.com/mjg59&quot;&gt;Matthew Garrett&lt;/a&gt; and discuss Free Software communities at &lt;a href=&quot;http://softwarelivre.org/fisl16/conteudos/highlights?lang=en&quot;&gt;FISL&lt;/a&gt; in Brazil. He’ll present, Using DRM technologies to protect users.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Friday, July 10, 2015 at 10:00 a.m. MDT - Denver, CO&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;End GopherCon with a good time! Join us at our &lt;a href=&quot;http://gophercon.com/schedule/10july/&quot;&gt;Hack Day&lt;/a&gt; in room 403. We’ll have speakers from CoreOS and the community, as well as a special Hack Day competition.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, July 14, 2015 at 6:00 p.m. IDT - Tel Aviv, Israel&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re in Tel Aviv, swing by the &lt;a href=&quot;http://www.meetup.com/Docker-Tel-Aviv/events/222368071/&quot;&gt;Docker Tel Aviv Meetup&lt;/a&gt; to hear Joey Schorr discuss the Quay.io container lifecylce.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, July 14, 2015 at 5:00 p.m. EDT - Online&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.datastax.com/&quot;&gt;DataStax&lt;/a&gt; is hosting a webinar on leveraging Docker and CoreOS to provide always available Cassandra at Instaclustr. Register &lt;a href=&quot;http://learn.datastax.com/Webinar-Leveraging-Docker-and-CoreOS.html&quot;&gt;here&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, July 21, 2015 at 10:00 a.m. PDT - Portland, OR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join us as we celebrate Kubernetes 1.0! Come by in person at the event or after party if you’re at OSCON. If you can’t make it to Portland, not to worry. Register to watch the keynote &lt;a href=&quot;https://www.eventbrite.com/e/kubernetes-10-launch-after-hours-party-tickets-16980424908&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, July 21, 2015 at 1:30 p.m. PDT - Portland, OR&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;Kelsey Hightower&lt;/a&gt; will be at OSCON giving a workshop on &lt;a href=&quot;http://www.oscon.com/open-source-2015/public/schedule/speaker/150240&quot;&gt;taming microservices with CoreOS and Kubernetes&lt;/a&gt;. Don’t miss it!&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thursday, July 23, 2015 at 7:00 p.m. BST - London, UK&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We’re ending the month with our friends at the &lt;a href=&quot;http://www.meetup.com/CoreOS-London/events/223574059/&quot;&gt;CoreOS London Meetup&lt;/a&gt;! Come hang out and learn more about &lt;a href=&quot;https://tectonic.com&quot;&gt;Tectonic&lt;/a&gt; and how it combines Kubernetes and the CoreOS software portfolio.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;Want more CoreOS in your city? Let us know! email us at &lt;a href=&quot;mailto:community@coreos.com&quot;&gt;community@coreos.com&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Introducing flannel 0.5.0 with AWS and GCE</title>
   <link href="https://coreos.com/blog/introducing-flannel-0.5.0-with-aws-and-gce/"/>
   <updated>2015-06-30T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/introducing-flannel-0.5.0-with-aws-and-gce</id>
   <content type="html">&lt;p&gt;Last week we released flannel &lt;a href=&quot;https://github.com/coreos/flannel/releases/tag/v0.5.0&quot;&gt;v0.5&lt;/a&gt;, a virtual network that gives a range of IP addresses to each host to use with container runtimes.
We have been working hard to add features to flannel to enable a wider variety of use cases, such as taking advantage of cloud providers&amp;#39; networking capabilities, as part of the goal to enable containers to effectively communicate across networks and ensure they are easily portable across cloud providers.&lt;/p&gt;

&lt;p&gt;With this in mind, flannel v0.5 includes the following new features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;support for Google Compute Engine (&lt;a href=&quot;https://cloud.google.com/compute/&quot;&gt;GCE&lt;/a&gt;), &lt;/li&gt;
&lt;li&gt;a client/server mode and, &lt;/li&gt;
&lt;li&gt;a multi-network mode.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please refer to the &lt;a href=&quot;https://github.com/coreos/flannel/blob/master/README.md&quot;&gt;readme&lt;/a&gt; for details on the client/server and the multi-network modes. &lt;/p&gt;

&lt;h3 id=&quot;try-out-the-new-release&quot;&gt;Try Out the New Release&lt;/h3&gt;

&lt;p&gt;In this post we will provide an overview of how to setup flannel on Amazon Virtual Private Cloud (&lt;a href=&quot;http://aws.amazon.com/vpc/&quot;&gt;Amazon VPC&lt;/a&gt;) backend introduced in flannel &lt;a href=&quot;https://github.com/coreos/flannel/releases/tag/v0.4.0&quot;&gt;v0.4&lt;/a&gt; and the newly added GCE backend.&lt;/p&gt;

&lt;p&gt;When flannel runs the &lt;code&gt;gce&lt;/code&gt; or the &lt;code&gt;aws-vpc&lt;/code&gt; backend it does not create a separate interface as it does when running the &lt;code&gt;udp&lt;/code&gt; or the &lt;code&gt;vxlan&lt;/code&gt; backends.&lt;/p&gt;

&lt;p&gt;This is because with &lt;code&gt;gce&lt;/code&gt; and &lt;code&gt;aws-vpc&lt;/code&gt; backends, there is no overlay or encapsulation and flannel simply manipulates the IP routes to achieve maximum performance. &lt;/p&gt;

&lt;p&gt;Let’s get started with setting up flannel on GCE instances. &lt;/p&gt;

&lt;h2 id=&quot;gce-backend&quot;&gt;GCE Backend&lt;/h2&gt;

&lt;p&gt;From the Developers Console, we start by creating a new network.&lt;/p&gt;

&lt;p&gt;Configure the network name and address range. Then add firewall rules to allow etcd traffic (tcp/2379), SSH, and ICMP. 
That&amp;#39;s it for the network configuration.
Now it’s time to create an instance.
Let&amp;#39;s call it &lt;code&gt;demo-instance-1&lt;/code&gt;.
Under the &amp;quot;Management, disk, networking, access &amp;amp; security options&amp;quot; make the following changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the &amp;quot;Network&amp;quot; to be our newly created network&lt;/li&gt;
&lt;li&gt;Enable IP forwarding&lt;/li&gt;
&lt;li&gt;Under &amp;quot;Access and Security&amp;quot; set the compute permissions to &amp;quot;Read Write&amp;quot; and remember to add your SSH key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br/&gt;
&lt;div class=&quot;row&quot;&gt;
  &lt;div class=&quot;col-lg-6 col-md-6 col-sm-6 col-xs-12 co-m-screenshot&quot;&gt;
    &lt;a href=&quot;/assets/images/media/gce-instance.png&quot;&gt;
      &lt;img src=&quot;/assets/images/media/gce-instance.png&quot; alt=&quot;New GCE Instance&quot;&gt;
    &lt;/a&gt;
    &lt;div class=&quot;co-m-screenshot-caption&quot;&gt;Booting a new GCE instance&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class=&quot;col-lg-6 col-md-6 col-sm-6 col-xs-12 co-m-screenshot&quot;&gt;
    &lt;a href=&quot;/assets/images/media/gce-instance-and-security.png&quot;&gt;
      &lt;img src=&quot;/assets/images/media/gce-instance-and-security.png&quot; alt=&quot;Security settings for a new instance&quot;&gt;
    &lt;/a&gt;
    &lt;div class=&quot;co-m-screenshot-caption&quot;&gt;Security settings for a new instance&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;With the permissions set, we can launch the instance! &lt;/p&gt;

&lt;p&gt;The only remaining steps now are to start etcd, publish the network configuration and lastly, run the flannel daemon. 
SSH into &lt;code&gt;demo-instance-1&lt;/code&gt; and execute the following steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start etcd:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ etcd2 -advertise-client-urls http://$INTERNAL_IP:2379 -listen-client-urls http://0.0.0.0:2379
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Publish configuration in etcd (ensure that the network range does not overlap with the one configured for the GCE network)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ etcdctl set /coreos.com/network/config &amp;#39;{&amp;quot;Network&amp;quot;:&amp;quot;10.40.0.0/16&amp;quot;, &amp;quot;Backend&amp;quot;: {&amp;quot;Type&amp;quot;: &amp;quot;gce&amp;quot;}}&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Fetch the 0.5 release using wget from &lt;a href=&quot;https://github.com/coreos/flannel/releases/download/v0.5.0/flannel-0.5.0-linux-amd64.tar.gz&quot;&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Run flannel daemon:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ sudo ./flanneld --etcd-endpoints=http://127.0.0.1:2379
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now make a clone of &lt;code&gt;demo-instance-1&lt;/code&gt; and SSH into it to run the these steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fetch the 0.5 release as before.&lt;/li&gt;
&lt;li&gt;Run flannel with the &lt;code&gt;--etcd-endpoints&lt;/code&gt; flag set to the &lt;em&gt;internal&lt;/em&gt; IP of the instance running etcd&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check that the subnet lease acquired by each of the hosts has been added!&lt;/p&gt;

&lt;p&gt;&lt;br/&gt;
&lt;div class=&quot;row&quot;&gt;
  &lt;div class=&quot;col-lg-10 col-lg-offset-1 col-md-10 col-md-offset-1 col-sm-12 col-xs-12 co-m-screenshot&quot;&gt;
    &lt;a href=&quot;/assets/images/media/gce-routes.png&quot; class=&quot;co-m-screenshot&quot;&gt;
      &lt;img src=&quot;/assets/images/media/gce-routes.png&quot; alt=&quot;GCE Routes&quot; /&gt;
    &lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;caption&quot;&gt;GCE Routes&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;It’s important to note that GCE currently &lt;a href=&quot;https://cloud.google.com/compute/docs/resource-quotas&quot;&gt;limits&lt;/a&gt; the number of routes per &lt;em&gt;project&lt;/em&gt; to 100. &lt;/p&gt;

&lt;h2 id=&quot;amazon-vpc-backend&quot;&gt;Amazon VPC Backend&lt;/h2&gt;

&lt;p&gt;In order to run flannel on AWS we need to first create an &lt;a href=&quot;http://aws.amazon.com/vpc/&quot;&gt;Amazon VPC&lt;/a&gt;.
Amazon VPC enables us to launch EC2 instances into a virtual network, which we can configure via its route table.&lt;/p&gt;

&lt;p&gt;From the VPC dashboard start out by running the &amp;quot;VPC Wizard&amp;quot;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &amp;quot;VPC with a Single Public Subnet&amp;quot;&lt;/li&gt;
&lt;li&gt;Configure the network and the subnet address ranges &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br/&gt;
&lt;div class=&quot;row&quot;&gt;
  &lt;div class=&quot;col-lg-10 col-lg-offset-1 col-md-10 col-md-offset-1 col-sm-12 col-xs-12 co-m-screenshot&quot;&gt;
    &lt;a href=&quot;/assets/images/media/aws-vpc.png&quot;&gt;
      &lt;img src=&quot;/assets/images/media/aws-vpc.png&quot; alt=&quot;New Amazon VPC&quot; /&gt;
    &lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;caption&quot;&gt;Creating a new Amazon VPC&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;Now that we have set up our VPC and subnet, let’s create an Identity and Access Management (&lt;a href=&quot;http://aws.amazon.com/iam/&quot;&gt;IAM&lt;/a&gt;) role to grant the required permissions to our EC2 instances. &lt;/p&gt;

&lt;p&gt;From the console, select Services -&amp;gt; Administration &amp;amp; Security -&amp;gt; IAM. &lt;/p&gt;

&lt;p&gt;We first need to create a &lt;a href=&quot;http://docs.aws.amazon.com/IAM/latest/UserGuide/policies_overview.html&quot;&gt;policy&lt;/a&gt; that we will later assign to an IAM role.
Under &amp;quot;Create Policy&amp;quot; select the &amp;quot;Create Your Own Policy&amp;quot; option.
The following permissions are required as shown below in the sample policy document.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ec2:CreateRoute&lt;/li&gt;
&lt;li&gt;ec2:DeleteRoute&lt;/li&gt;
&lt;li&gt;ec2:ReplaceRoute&lt;/li&gt;
&lt;li&gt;ec2:DescribeRouteTables&lt;/li&gt;
&lt;li&gt;ec2:DescribeInstances&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;{
    &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,
    &amp;quot;Statement&amp;quot;: [
    {
            &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,
            &amp;quot;Action&amp;quot;: [
                &amp;quot;ec2:CreateRoute&amp;quot;,
                &amp;quot;ec2:DeleteRoute&amp;quot;,
                &amp;quot;ec2:ReplaceRoute&amp;quot;
            ],
            &amp;quot;Resource&amp;quot;: [
                &amp;quot;*&amp;quot;
            ]
    },
    {
            &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,
            &amp;quot;Action&amp;quot;: [
                &amp;quot;ec2:DescribeRouteTables&amp;quot;,
                &amp;quot;ec2:DescribeInstances&amp;quot;
            ],
            &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;
    }
    ]
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note that although the first three permissions can be tied to the route table resource of our subnet, the ec2:Describe* permissions can not be limited to a particular resource.
For simplicity, we leave the &amp;quot;Resource&amp;quot; as wildcard in both. &lt;/p&gt;

&lt;p&gt;With the policy added, let&amp;#39;s attach it to a new IAM role by clicking the &amp;quot;Create New Role&amp;quot; button and setting the following options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Role Name: &lt;code&gt;demo-role&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Role Type: &amp;quot;Amazon EC2&amp;quot;&lt;/li&gt;
&lt;li&gt;Attach the policy we created earlier&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are now all set to launch an EC2 instance. 
In the launch wizard, choose the &lt;code&gt;CoreOS-stable-681.2.0&lt;/code&gt; image and under &amp;quot;Configure Instance Details&amp;quot; perform the following steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change the &amp;quot;Network&amp;quot; to the VPC we just created&lt;/li&gt;
&lt;li&gt;Enable &amp;quot;Auto-assign Public IP&amp;quot;&lt;/li&gt;
&lt;li&gt;Select IAM &lt;code&gt;demo-role&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br/&gt;
&lt;div class=&quot;row&quot;&gt;
  &lt;div class=&quot;col-lg-10 col-lg-offset-1 col-md-10 col-md-offset-1 col-sm-12 col-xs-12 co-m-screenshot&quot;&gt;
    &lt;a href=&quot;/assets/images/media/aws-instance-configuration.png&quot; class=&quot;co-m-screenshot&quot;&gt;
      &lt;img src=&quot;/assets/images/media/aws-instance-configuration.png&quot; alt=&quot;AWS EC2 Instance Details&quot; /&gt;
    &lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;caption&quot;&gt;Configuring AWS EC2 instance details&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;Under the &amp;quot;Configure Security Group&amp;quot; tab add the rules to allow etcd traffic (tcp/2379), SSH and ICMP.&lt;/p&gt;

&lt;p&gt;Go ahead and launch the instance! &lt;/p&gt;

&lt;p&gt;Since our instance will be sending and receiving traffic for IPs other than the one assigned by our subnet, we need to disable source/destination checks. &lt;/p&gt;

&lt;p&gt;&lt;br/&gt;
&lt;div class=&quot;row&quot;&gt;
  &lt;div class=&quot;col-lg-10 col-lg-offset-1 col-md-10 col-md-offset-1 col-sm-12 col-xs-12 co-m-screenshot&quot;&gt;
    &lt;a href=&quot;/assets/images/media/aws-src-dst-check.png&quot; class=&quot;co-m-screenshot&quot;&gt;
      &lt;img src=&quot;/assets/images/media/aws-src-dst-check.png&quot; alt=&quot;Disable AWS Source/Dest Check&quot; /&gt;
    &lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;caption&quot;&gt;Disable AWS Source/Dest Check&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;All that’s left now is to start etcd, publish the network configuration and run the flannel daemon. 
First, SSH into &lt;code&gt;demo-instance-1&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start etcd:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ etcd2 -advertise-client-urls http://$INTERNAL_IP:2379 -listen-client-urls http://0.0.0.0:2379
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Publish configuration in etcd (ensure that the network range does not overlap with the one configured for the VPC)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ etcdctl set /coreos.com/network/config &amp;#39;{&amp;quot;Network&amp;quot;:&amp;quot;10.20.0.0/16&amp;quot;, &amp;quot;Backend&amp;quot;: {&amp;quot;Type&amp;quot;: &amp;quot;aws-vpc&amp;quot;}}&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Fetch the latest release using wget from &lt;a href=&quot;https://github.com/coreos/flannel/releases/download/v0.5.0/flannel-0.5.0-linux-amd64.tar.gz&quot;&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Run flannel daemon:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;sudo ./flanneld --etcd-endpoints=http://127.0.0.1:2379
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Next, create and connect to a clone of &lt;code&gt;demo-instance-1&lt;/code&gt;.
Run flannel with the &lt;code&gt;--etcd-endpoints&lt;/code&gt; flag set to the &lt;em&gt;internal&lt;/em&gt; IP of the instance running etcd.&lt;/p&gt;

&lt;p&gt;Confirm that the subnet route table has entries for the lease acquired by each of the subnets.&lt;/p&gt;

&lt;p&gt;&lt;br/&gt;
&lt;div class=&quot;row&quot;&gt;
  &lt;div class=&quot;col-lg-10 col-lg-offset-1 col-md-10 col-md-offset-1 col-sm-12 col-xs-12 co-m-screenshot&quot;&gt;
    &lt;a href=&quot;/assets/images/media/aws-routes.png&quot; class=&quot;co-m-screenshot&quot;&gt;
      &lt;img src=&quot;/assets/images/media/aws-routes.png&quot; alt=&quot;AWS Routes&quot; /&gt;
    &lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;caption&quot;&gt;AWS Routes&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;Keep in mind that the Amazon VPC &lt;a href=&quot;http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Appendix_Limits.html&quot;&gt;limits&lt;/a&gt; the number of entries per route table to 50.&lt;/p&gt;

&lt;p&gt;Note that these are just sample configurations, so feel free to try it out and set up what works best for you!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>App Container and the Open Container Project</title>
   <link href="https://coreos.com/blog/app-container-and-the-open-container-project/"/>
   <updated>2015-06-22T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/app-container-and-the-open-container-project</id>
   <content type="html">&lt;p&gt;Today we’re pleased to &lt;a href=&quot;https://www.opencontainers.org/pressrelease/&quot;&gt;announce&lt;/a&gt; that CoreOS, Docker, and a large group of industry leaders are working together on a standard container format through the formation of the Open Container Project (OCP). OCP is housed under the Linux Foundation, and is chartered to establish common standards for software containers. This announcement means we are starting to see the concepts behind the App Container spec and Docker converge. This is a win for both users of containers and our industry at large. &lt;/p&gt;

&lt;p&gt;In December 2014 we announced &lt;a href=&quot;https://github.com/coreos/rkt&quot;&gt;rkt&lt;/a&gt;, a new container runtime intended to address issues around security and composability in the container ecosystem. At the same time, we started App Container (&lt;a href=&quot;https://github.com/appc/spec&quot;&gt;appc&lt;/a&gt;), a specification defining a container image format, runtime environment and discovery protocol, to work towards the goal of a standard, portable shipping container for applications. We believe strongly that open standards are key to the success of the container ecosystem. &lt;/p&gt;

&lt;p&gt;We created App Container to kickstart a movement toward a shared industry standard. With the announcement of the Open Container Project, Docker is showing the world that they are similarly committed to open standards. Today Docker is the de facto image format for containers, and therefore is a good place to start from in working towards a standard. We look forward to working with Docker, Google, Red Hat and many others in this effort to bring together the best ideas across the industry.&lt;/p&gt;

&lt;p&gt;As we participate in OCP, our primary goals are as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users should be able to package their application once and have it work with any container runtime (like Docker, &lt;a href=&quot;https://github.com/coreos/rkt&quot;&gt;rkt&lt;/a&gt;, &lt;a href=&quot;https://github.com/apcera/kurma&quot;&gt;Kurma&lt;/a&gt;, or &lt;a href=&quot;https://github.com/3ofcoins/jetpack&quot;&gt;Jetpack&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The standard should fulfill the requirements of the most rigorous security and production environments &lt;/li&gt;
&lt;li&gt;The standard should be vendor neutral and developed in the open&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;app-container&quot;&gt;App Container&lt;/h2&gt;

&lt;p&gt;We believe most of the core concepts from App Container will form an important part of OCP. Our experience developing App Container will play a critical role as we begin collaboration on the OCP specification. We anticipate that much of App Container will be directly integrated into the OCP specification, with tweaks being made to provide greater compatibility with the existing Docker ecosystem. The end goal is to converge on a single unified specification of a standard container format, and the success of OCP will mean the major goals of App Container are satisfied. Existing appc maintainers Brandon Philips and Vincent Batts will be two of the initial maintainers of OCP and will work to harmonize the needs of both communities in the spirit of a combined standard. At the same time we will work hard to ensure that users of appc will have a smooth migration to the new standard.&lt;/p&gt;

&lt;h2 id=&quot;continuing-work-on-rkt&quot;&gt;Continuing work on rkt&lt;/h2&gt;

&lt;p&gt;CoreOS remains committed to the rkt project and will continue to invest in its development. Today rkt is a leading implementation of appc, and we plan on it becoming a leading implementation of OCP. Open standards only work if there are multiple implementations of the specification, and we will develop rkt into a leading container runtime around the new shared container format. Our goals for rkt are unchanged: a focus on security and composability for the most demanding production environments. &lt;/p&gt;

&lt;p&gt;We are excited the industry is converging a format that combines the best ideas from appc, rkt and Docker to achieve what we all need to succeed: a well-defined shared standard for containers. &lt;/p&gt;

&lt;p&gt;For more information and to see the draft charter and founding formation of the OCP, go to &lt;a href=&quot;http://www.opencontainers.org&quot;&gt;www.opencontainers.org&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Technology Preview: CoreOS Linux and xhyve</title>
   <link href="https://coreos.com/blog/coreos-and-xhyve-tech-preview/"/>
   <updated>2015-06-11T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-and-xhyve-tech-preview</id>
   <content type="html">&lt;p&gt;Yesterday a new lightweight hypervisor for OS X was released called &lt;a href=&quot;https://github.com/mist64/xhyve&quot;&gt;xhyve&lt;/a&gt;; if you are familiar with qemu-kvm on Linux, it provides a roughly similar experience. In this post we are going to show how to run CoreOS Linux under xhyve. While this is all very early and potentially buggy tech, we want to give you some tips on how to try CoreOS Linux with xhyve and run Docker or rkt on top.&lt;/p&gt;

&lt;p&gt;xyhve is a port of &lt;a href=&quot;http://bhyve.org/&quot;&gt;bhyve&lt;/a&gt;, the FreeBSD hypervisor, to OS X. It is designed to run off-the-shelf Linux distros. We’ve made it possible to run it on CoreOS Linux so you can get the benefits of a lightweight Linux OS running under a lightweight hypervisor on Macs. It is now possible to launch a full local development or testing environment with just a few shell commands. &lt;/p&gt;

&lt;p&gt;A few ideas we are thinking about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single command to launch CoreOS Linux images.&lt;/li&gt;
&lt;li&gt;Easily launch a Kubernetes cluster right on your laptop.&lt;/li&gt;
&lt;li&gt;An OS X native version of rkt that can run Linux applications inside xhyve.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep in mind that xhyve is a very new project, so much work still needs to be done. You must be running OS X Yosemite for this to work. Check out &lt;a href=&quot;https://github.com/coreos/coreos-xhyve&quot;&gt;this page for step-by-step instructions&lt;/a&gt; on how to try it out. &lt;/p&gt;

&lt;h3 id=&quot;a-quick-example&quot;&gt;A Quick Example&lt;/h3&gt;

&lt;p&gt;Currently, you need to build xhyve yourself:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git clone https://github.com/mist64/xhyve
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;xhyve
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;make
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sudo cp build/xhyve /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now we can install the initial CoreOS tooling for xhyve:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git clone https://github.com/coreos/coreos-xhyve.git
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;coreos-xhyve
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;./coreos-xhyve-fetch
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sudo ./coreos-xhyve-run
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Type &lt;code&gt;ip a&lt;/code&gt; in the console of the virtual machine to get its IP address.&lt;/p&gt;

&lt;p&gt;Let’s run a simple Docker container:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;docker -H&amp;lt;ip-of-virtual-machine&amp;gt;:2375 run -it --rm busybox
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Please &lt;a href=&quot;https://github.com/coreos/coreos-xhyve&quot;&gt;open issues with ideas&lt;/a&gt; for enhancements or use cases. We welcome contributions to the code, so please open a pull request if you have code to share.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>etcd2 in the CoreOS Linux Stable channel</title>
   <link href="https://coreos.com/blog/etcd2-in-stable-channel/"/>
   <updated>2015-06-09T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/etcd2-in-stable-channel</id>
   <content type="html">&lt;p&gt;This week marks a particularly special milestone for &lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;etcd2&lt;/a&gt;. Beginning today, etcd2 will be available in the CoreOS Linux Stable channel. This means that everyone will now be able to take advantage of etcd2, which we &lt;a href=&quot;https://coreos.com/blog/etcd-2.0-release-first-major-stable-release/&quot;&gt;launched earlier this year&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;etcd is an open source, distributed, consistent key-value store. It is a core component of CoreOS software that helps to facilitate safe automatic updates, coordinate work between hosts, and manage overlay networking for containers. To recap, new features and improvements in etcd2 include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reconfiguration protocol improvements, enabling more safeguards against accidental misconfiguration&lt;/li&gt;
&lt;li&gt;A new raft implementation, providing improved cluster stability and predictability in massive server environments&lt;/li&gt;
&lt;li&gt;On-disk safety improvements, in which CRC checksums and append-only log behavior allow etcd to detect external data corruption and avoid internal file misoperations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More details can be found in &lt;a href=&quot;https://coreos.com/blog/coreos-alpha-with-etcd-2/&quot;&gt;this post&lt;/a&gt; which first introduced etcd2. Give it a shot and let us know what you think!&lt;/p&gt;

&lt;p&gt;A special thank-you to all of the contributors who made this possible. Join us in the continued development of etcd through the &lt;a href=&quot;https://groups.google.com/forum/?hl=en#!forum/etcd-dev&quot;&gt;etcd-dev discussion mailing list&lt;/a&gt;, &lt;a href=&quot;https://github.com/coreos/etcd/issues&quot;&gt;GitHub issues&lt;/a&gt;, or &lt;a href=&quot;https://github.com/coreos/etcd/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22&quot;&gt;contributing&lt;/a&gt; directly to the project.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Building and deploying minimal containers on Kubernetes with Quay.io and wercker</title>
   <link href="https://coreos.com/blog/building-minimal-containers-with-quay-kubernetes-wercker/"/>
   <updated>2015-06-03T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/building-minimal-containers-with-quay-kubernetes-wercker</id>
   <content type="html">&lt;p&gt;&lt;em&gt;Today&amp;#39;s guest post has been written by Micha &amp;quot;mies&amp;quot; Hernandez van Leuffen, the founder and CEO of &lt;a href=&quot;http://wercker.com/&quot;&gt;wercker&lt;/a&gt;, a platform and tool for building, testing and deploying in the modern world of microservices, containers and clouds.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Edit: Added video to end of post. &lt;a href=&quot;#wercker-video&quot;&gt;Skip to video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The landscape of production has changed: monolithic is out, loosely coupled microservices are in. Modern applications consist of multiple moving parts, but most of the existing developer tooling we use was designed and built in the world of monolithic applications. &lt;/p&gt;

&lt;p&gt;Working with microservices poses new challenges: your applications now consist of multiple processes, multiple configurations, multiple environments and more than one codebase.&lt;/p&gt;

&lt;p&gt;Containers offer a way to isolate and package your applications along with their dependencies. Docker and rkt are popular container runtimes and allow for a simplified deployment model for your microservices. &lt;a href=&quot;http://wercker.com&quot;&gt;Wercker&lt;/a&gt; is a platform and command line tool &lt;a href=&quot;http://blog.wercker.com/2015/04/02/Introducing-our-docker-stack.html&quot;&gt;built on Docker&lt;/a&gt; that enables developers to develop, test, build and deliver their applications in a containerized world. Each build artifact from a pipeline is a container, which gives you an immutable testable object linked to a commit.&lt;/p&gt;

&lt;p&gt;In this tutorial, we will build and launch a containerized application on top of &lt;a href=&quot;http://kubernetes.io&quot;&gt;Kubernetes&lt;/a&gt;. Kubernetes is a cluster orchestration framework started by Google, specifically aimed at running container workloads. We will use &lt;a href=&quot;http://quay.io&quot;&gt;quay.io&lt;/a&gt; from &lt;a href=&quot;http://coreos.com&quot;&gt;CoreOS&lt;/a&gt; for our container registry and &lt;a href=&quot;https://wercker.com&quot;&gt;wercker&lt;/a&gt; (of course!) to build the container and trigger deploys to Kubernetes.&lt;/p&gt;

&lt;p&gt;The workflow we will create is depicted below:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/werker-kubernetes.png&quot; alt=&quot;werker pipeline&quot;&gt;
&lt;div class=&quot;caption&quot;&gt;Workflow from build to deployment.&lt;/div&gt;&lt;/p&gt;

&lt;h3 id=&quot;requirements&quot;&gt;Requirements&lt;/h3&gt;

&lt;p&gt;This tutorial assumes you have the following set up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A wercker account. You can sign up for free &lt;a href=&quot;https://app.wercker.com/users/new&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;An account on &lt;a href=&quot;https://quay.io/&quot;&gt;quay.io&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A Kubernetes cluster. See the &lt;a href=&quot;http://kubernetes.io/gettingstarted/&quot;&gt;getting started section&lt;/a&gt; to set one up.&lt;/li&gt;
&lt;li&gt;A fork of the application we will be building which you can find on &lt;a href=&quot;https://github.com/wercker/wercker-kubernetes-quay&quot;&gt;GitHub&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;You&amp;#39;ve added the above application to wercker and are using the &lt;a href=&quot;http://blog.wercker.com/2015/04/02/Introducing-our-docker-stack.html&quot;&gt;Docker stack&lt;/a&gt; to build it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;getting-started&quot;&gt;Getting started&lt;/h3&gt;

&lt;p&gt;The application we will be developing is a simple API with one endpoint, which returns an array of cities in JSON. You can check out the source code for the API on &lt;a href=&quot;https://github.com/wercker/wercker-kubernetes-quay/blob/master/main.go&quot;&gt;GitHub&lt;/a&gt;. The web process listens on port &lt;code&gt;5000&lt;/code&gt;; we&amp;#39;ll need this information later on.&lt;/p&gt;

&lt;p&gt;Now, let&amp;#39;s create our Kubernetes service configuration and include it into our repository.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-json&quot; data-lang=&quot;json&quot;&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;&amp;quot;kind&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Service&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;&amp;quot;apiVersion&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;v1beta3&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
   &lt;span class=&quot;nt&quot;&gt;&amp;quot;metadata&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;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;cities&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;quot;labels&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;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;cities&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;spec&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:{&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;quot;createExternalLoadBalancer&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;ports&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;port&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
           &lt;span class=&quot;nt&quot;&gt;&amp;quot;targetPort&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;http-server&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
           &lt;span class=&quot;nt&quot;&gt;&amp;quot;protocol&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;TCP&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;selector&amp;quot;&lt;/span&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;cities&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;
&lt;p&gt;We define the port that our application is listening on and use the public IP addresses that we got upon creating our Kubernetes cluster. We&amp;#39;re using &lt;a href=&quot;https://cloud.google.com/container-engine/&quot;&gt;Google Container Engine&lt;/a&gt;, which allows for &lt;code&gt;createExternalLoadBalancer&lt;/code&gt;. If you&amp;#39;re using a platform which doesn&amp;#39;t support &lt;code&gt;createExternalLoadBalancer&lt;/code&gt; then you need to add the public IP addresses of the nodes to the &lt;code&gt;publicIPs&lt;/code&gt; property.&lt;/p&gt;

&lt;p&gt;Next, we&amp;#39;re going to define our pipeline, which describes how wercker will build and deploy your application.&lt;/p&gt;

&lt;h3 id=&quot;wercker.yml---build-pipeline&quot;&gt;wercker.yml - build pipeline&lt;/h3&gt;

&lt;p&gt;On wercker, you structure your pipelines in a file called &lt;a href=&quot;http://devcenter.wercker.com/docs/wercker-yml/index.html&quot;&gt;wercker.yml&lt;/a&gt;. It’s where you define the actions (steps) and environment for your tasks (tests, builds, deploys). Pipelines can either pass or fail, depending on the results of the steps within. Steps come in three varieties; steps from the wercker step &lt;a href=&quot;https://app.wercker.com/#explore/steps/search/&quot;&gt;registry&lt;/a&gt;, inline &lt;code&gt;script&lt;/code&gt; steps and &lt;code&gt;internal&lt;/code&gt; steps that run with extra privileges.&lt;/p&gt;

&lt;p&gt;Pipelines also come with environment variables, some of which are set by default, others you can define yourself. Each pipeline can have its own base container (the main language environment of your application) and any number of services (databases, queues).&lt;/p&gt;

&lt;p&gt;Now, let&amp;#39;s have a look at our build pipeline for the application. You can check out the entire wercker.yml on &lt;a href=&quot;https://github.com/wercker/wercker-kubernetes-quay/blob/master/wercker.yml&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;l-Scalar-Plain&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;l-Scalar-Plain&quot;&gt;box&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;google/golang&lt;/span&gt;
    &lt;span class=&quot;l-Scalar-Plain&quot;&gt;steps&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;# Test the project&lt;/span&gt;
    &lt;span class=&quot;p-Indicator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;go test&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;go test ./...&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;# Statically build the project&lt;/span&gt;
    &lt;span class=&quot;p-Indicator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;go build&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;CGO_ENABLED=0 go build -a -ldflags &amp;#39;-s&amp;#39; -installsuffix cgo -o app .&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;# Create cities-controller.json only for initialization&lt;/span&gt;
    &lt;span class=&quot;p-Indicator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;create cities-controller.json&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;./create_cities-controller.json.sh&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;# Copy binary to a location that gets passed along to the deploy pipeline&lt;/span&gt;
    &lt;span class=&quot;p-Indicator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;copy binary&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;cp app cities-service.json cities-controller.json &amp;quot;$WERCKER_OUTPUT_DIR&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;box&lt;/code&gt; is the container and environment in which the build runs. Here we see that we&amp;#39;re using the &lt;code&gt;google/golang&lt;/code&gt; image as a base container for our build as it has the golang language and build tools installed in it. We also have a small unit test inside of our code base which we run first. Next we compile our code and build the &lt;code&gt;app&lt;/code&gt; executable.&lt;/p&gt;

&lt;p&gt;As we want to build a minimal container, we will statically compile our application. We disable the ability to create Go packages that call C code with the &lt;code&gt;CGO_ENABLED=0&lt;/code&gt; flag, rebuild all dependencies with the &lt;code&gt;-a&lt;/code&gt; flag, and finally we remove any debug information with the &lt;code&gt;-ldflags&lt;/code&gt; flag, resulting in an even smaller binary.&lt;/p&gt;

&lt;p&gt;Next, we create our Kubernetes replication controller programmatically based on the git commit using a shell script. You can check out the shell script on &lt;a href=&quot;https://github.com/wercker/wercker-kubernetes-quay/blob/kubectl_step/create_cities-controller.json.sh&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The last step copies the executable and Kubernetes service definitions into the &lt;code&gt;$WERCKER_OUTPUT_DIR&lt;/code&gt; folder, and the contents of this folder gets passed along to the &lt;code&gt;/pipeline/source/&lt;/code&gt; folder within the deploy pipeline.&lt;/p&gt;

&lt;h3 id=&quot;wercker.yml---push-to-quay.io&quot;&gt;wercker.yml - push to quay.io&lt;/h3&gt;

&lt;p&gt;We&amp;#39;re now ready to set up our deploy pipelines and targets. We will create two deploy targets. The first will push our container to Quay.io, the second will perform the rolling update to Kubernetes. Deploy targets are created in the wercker web interface and reference the corresponding section in the &lt;code&gt;wercker.yml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/werker-targets.png&quot; alt=&quot;werker pipeline&quot;&gt;
&lt;div class=&quot;caption&quot;&gt;Deploy targets in werker.&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;In order to add any information such as usernames, passwords, or tokens that our deploy target might need, we define these as environment variables for each target. These environment variables will be injected when a pipeline is executed.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://quay.io&quot;&gt;Quay.io&lt;/a&gt; is a public and private registry for &lt;a href=&quot;http://docker.com&quot;&gt;Docker&lt;/a&gt; image repositories. We will be using Quay.io to host the container image that is built from wercker.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;l-Scalar-Plain&quot;&gt;deploy&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;l-Scalar-Plain&quot;&gt;box&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;google/golang&lt;/span&gt;
    &lt;span class=&quot;l-Scalar-Plain&quot;&gt;steps&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;
     &lt;span class=&quot;c1&quot;&gt;# Use the scratch step to build a container from scratch based on the files present&lt;/span&gt;
    &lt;span class=&quot;p-Indicator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;internal/docker-scratch-push&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;$QUAY_USERNAME&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;$QUAY_PASSWORD&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;cmd&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;./app&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;$WERCKER_GIT_COMMIT&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;ports&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;5000&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;repository&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;quay.io/wercker/wercker-kubernetes-quay&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;registry&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;https://quay.io&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The deploy section of our &lt;a href=&quot;http://devcenter.wercker.com/docs/wercker-yml/index.html&quot;&gt;wercker.yml&lt;/a&gt; above consists of a single step. We use the &lt;code&gt;internal/docker-scratch-push&lt;/code&gt; step to create a minimal container based on the files present in the &lt;code&gt;$WERCKER_ROOT&lt;/code&gt; environment variable (which contains our binary and source code) from the build, and push it to Quay.io. The &lt;code&gt;$QUAY_USERNAME&lt;/code&gt; and &lt;code&gt;$QUAY_PASSWORD&lt;/code&gt; parameters are environment variables that we have entered on the wercker web interface. For the tag, we use the git commit hash, so each container is versioned. This hash is available as an environment variable from within the wercker pipeline.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;cmd&lt;/code&gt; parameter is the command that we want to run on start-up of the container, which in our case is our application that we&amp;#39;ve built. We also need to define the port on which our application will be available, which should be the same port as in our Kubernetes service definition. Finally, we fill in the details of our Quay.io repository and the URL of the registry.&lt;/p&gt;

&lt;p&gt;If you take a look at your Quay.io dashboard you will see that the final container that was pushed is just 1.2MB!&lt;/p&gt;

&lt;h3 id=&quot;wercker.yml---kubernetes-rolling-update&quot;&gt;wercker.yml - Kubernetes rolling update&lt;/h3&gt;

&lt;p&gt;For this tutorial, we assume you&amp;#39;ve already created a service with an accompanying replication controller. If not, you can do this via wercker as well. See the initialize section in the &lt;a href=&quot;https://github.com/wercker/wercker-kubernetes-quay/blob/kubectl_step/wercker.yml#L39-L52&quot;&gt;wercker.yml&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let&amp;#39;s proceed to do the rolling update on Kubernetes, replacing our pods one-by-one.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;   &lt;span class=&quot;l-Scalar-Plain&quot;&gt;rolling-update&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;p-Indicator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;kubectl&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;$KUBERNETES_MASTER&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;username&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;$KUBERNETES_USERNAME&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;password&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;$KUBERNETES_PASSWORD&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;insecure-skip-tls-verify&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;true&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;rolling-update cities&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;quay.io/wercker/wercker-kubernetes-quay:$WERCKER_GIT_COMMIT&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The environment variables are again defined in the wercker web interface. The &lt;code&gt;$KUBERNETES_MASTER&lt;/code&gt; environment variable contains the IP address of our instance.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/werker-pipeline.png&quot; alt=&quot;werker pipeline&quot;&gt;
&lt;div class=&quot;caption&quot;&gt;Kubernetes credentials defined in the pipeline.&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;We execute the rolling update command and tell Kubernetes to use our Docker container from Quay.io with the &lt;code&gt;image&lt;/code&gt; parameter. The tag we use for the container is the git commit hash.&lt;/p&gt;

&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;In this tutorial, we have showcased how to build minimal containers and use &lt;a href=&quot;http://wercker.com&quot;&gt;wercker&lt;/a&gt; as our assembly line. Our final container was just 1.2MB, making for low-cost deploys!&lt;/p&gt;

&lt;p&gt;Though the go programming language compiles to single binaries, making our life easier, our learnings can be applied to other programming languages as well.&lt;/p&gt;

&lt;p&gt;Using wercker&amp;#39;s automated build process we&amp;#39;ve not only created a minimal container, but also linked our artifact versioning to git commits in Quay.io.&lt;/p&gt;

&lt;p&gt;Pairing our versioned containers with Kubernetes&amp;#39; orchestration capabilities results in a radically simplified deployment process, especially with the power of rolling updates!&lt;/p&gt;

&lt;p&gt;In short, the combination of Kubernetes, Quay.io and wercker is a powerful and disruptive way of building and deploying modern-day applications.&lt;/p&gt;

&lt;p&gt;In this article we&amp;#39;ve just scratched the surface of developing container-based microservices. To learn more about Kubernetes check out the &lt;a href=&quot;http://kubernetes.io/gettingstarted/&quot;&gt;getting started guides&lt;/a&gt;. For more information on Quay.io, see the documentation &lt;a href=&quot;http://docs.quay.io/&quot;&gt;site&lt;/a&gt;. You can sign up for wercker &lt;a href=&quot;https://app.wercker.com/users/new&quot;&gt;here&lt;/a&gt; and more information and documentation is available at our &lt;a href=&quot;http://devcenter.wercker.com/&quot;&gt;dev center&lt;/a&gt;. The source code for our final application including its &lt;code&gt;wercker.yml&lt;/code&gt; is available on &lt;a href=&quot;https://github.com/wercker/wercker-kubernetes-quay&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;div id=&quot;wercker-video&quot;&gt;
  &lt;iframe style=&quot;width: 400px; height: 235px; display: block; margin: 40px auto 20px auto;&quot; src=&quot;https://www.youtube.com/embed/PXLL3e7iW40?rel=0&amp;amp;showinfo=0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
 &lt;/div&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Oh, the places we’ll be in June</title>
   <link href="https://coreos.com/blog/events-in-june/"/>
   <updated>2015-06-02T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/events-in-june</id>
   <content type="html">&lt;p&gt;We’re across the US and in the Netherlands this month. Check out where we’re speaking!&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Couchbase Connect: Thursday, June 4 at 1:45 p.m. PDT – Santa Clara, CA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Brian Harrington (&lt;a href=&quot;https://twitter.com/brianredbeard&quot;&gt;@brianredbeard&lt;/a&gt;), also known as Redbeard, principal architect at CoreOS, will be at &lt;a href=&quot;http://www.cvent.com/events/couchbase-connect-15/event-summary-b7744ca960364b75aba41de42cbef19e.aspx?page=overview&quot;&gt;Couchbase Connect&lt;/a&gt; and will join Traun Leyden from Couchbase to discuss Tectonic, provide a deep dive on the technology behind Kubernetes, and walk through the steps required to get Couchbase running on Kubernetes. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HP Discover: Thursday, June 4 at 3:30 p.m. PDT – Las Vegas, NV&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At &lt;a href=&quot;http://discover.hp.com/Discover/home&quot;&gt;HP Discover&lt;/a&gt; in Las Vegas this week? Brandon Philips (&lt;a href=&quot;https://twitter.com/brandonphilips&quot;&gt;@brandonphilips&lt;/a&gt;), CTO of CoreOS, Janne Heino of Nokia and Chris Grzegorczyk (&lt;a href=&quot;https://twitter.com/grze&quot;&gt;@grze&lt;/a&gt;), chief architect at HP, will speak on Thursday, June 4 at 3:30 p.m. at Discover Theater 1 about &lt;a href=&quot;http://discover.hp.com/Discover/Events/LasVegas2015/SessionDetail/46c2da96-5c89-4b17-afd6-1835508d8f2f&quot;&gt;Hybrid cloud and containers for modern application architectures&lt;/a&gt;. Join Nokia to walk through its global private cloud deployment of Helion Eucalyptus that also uses CoreOS’s container runtime, rkt.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ContainerDays Boston: Friday, June 5 at 3:40 p.m. EDT – Boston, MA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Barak Michener (&lt;a href=&quot;https://twitter.com/barakmich&quot;&gt;@barakmich&lt;/a&gt;), software engineer and CoreOS developer advocate, will be at &lt;a href=&quot;http://containerdays.org/events/2015-boston/#event&quot;&gt;ContainerDays Boston&lt;/a&gt; and will discuss CoreOS: Building the Layers of the Cluster. Barak will also join Dave Nielsen (&lt;a href=&quot;https://twitter.com/davenielsen&quot;&gt;@davenielsen&lt;/a&gt;) from CloudCamp on Saturday at 12:55 p.m. EDT for a &lt;a href=&quot;http://containerdays.org/events/2015-boston/programme.html#firstc&quot;&gt;workshop&lt;/a&gt; that will help you get started with deploying your first container to CoreOS, Cloud Foundry, Azure and AWS.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;QCon: Monday, June 8 at 9 a.m. EDT – New York, NY&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join Kelsey Hightower (&lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;@kelseyhightower&lt;/a&gt;), product manager, developer and chief advocate at CoreOS, for an in-depth, day-long &lt;a href=&quot;https://qconnewyork.com/&quot;&gt;tutorial at QCon New York&lt;/a&gt; on &lt;a href=&quot;https://qconnewyork.com/ny2015/tutorial/modern-container-orchestration-kubernetes-coreos-and-more&quot;&gt;Kubernetes and CoreOS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud Expo East: Tuesday, June 9 at 1:55 p.m. EDT – New York, NY&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Meet Jake Moshenko, product technical lead at CoreOS, who will speak at Cloud Expo East about &lt;a href=&quot;http://www.cloudcomputingexpo.com/event/schedule&quot;&gt;Containers: New Ways to Deploy and Manage Applications at Scale&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nutanix .NEXT: Tuesday, June 9-Wednesday, June 10 – Miami, FL&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kelsey Hightower (&lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;@kelseyhightower&lt;/a&gt;) and Alex Polvi (&lt;a href=&quot;https://twitter.com/polvi&quot;&gt;@polvi&lt;/a&gt;), CEO of CoreOS, will present at &lt;a href=&quot;http://www.nutanix.com/next-user-conference/&quot;&gt;Nutanix .NEXT&lt;/a&gt;, the company’s first user conference. See Kelsey speak on Tuesday, June 9 at 3:30 p.m. EDT on Containers—What They Mean for the Future of Application Deployment.
Alex will join Alan Cohen, chief commercial officer at Illumio, Dheeraj Pandey (&lt;a href=&quot;https://twitter.com/trailsfootmarks&quot;&gt;@trailsfootmarks&lt;/a&gt;), CEO of Nutanix, and JR Rivers (&lt;a href=&quot;https://twitter.com/JRCumulus&quot;&gt;@JRCumulus&lt;/a&gt;), CEO of Cumulus Networks, in the closing keynote panel: The New Enterprise IT Stack. Don’t miss it on Wednesday, June 10 at 12:15 p.m. EDT.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GoSV Meetup: Tuesday, June 9 at 6:30 p.m. PDT – San Mateo, CA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The CoreOS team will be talking with the Go Silicon Valley Meetup group this month in San Mateo at Collective Health. Register &lt;a href=&quot;http://www.meetup.com/GolangSV/events/221145722/&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NYLUG Meetup: Wednesday, June 17 at 6:30 p.m. EDT – New York, NY&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The CoreOS New York team will be at the New York Linux Users Group (NYLUG) and will provide an overview of CoreOS. Sign-ups begin on June 3. Register to attend &lt;a href=&quot;http://www.meetup.com/nylug-meetings/events/222505390/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GoSF Meetup: Wednesday, June 17 at 6:30 p.m. PDT – San Francisco, CA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;See the CoreOS team at the &lt;a href=&quot;http://www.meetup.com/golangsf/events/221271422/&quot;&gt;GoSF Meetup&lt;/a&gt; to listen in on a talk about A Survey of RPC options in Go.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GOTO Amsterdam: Friday, June 19 – Amsterdam, The Netherlands&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kelsey Hightower (&lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;@kelseyhightower&lt;/a&gt;) will be at &lt;a href=&quot;http://gotocon.com/amsterdam-2015/schedule/friday.jsp&quot;&gt;GOTO Amsterdam&lt;/a&gt; speaking on rkt and the App Container spec at 11:30 a.m. CEST and will join a panel at 3:50 p.m. CEST to discuss Docker predictions.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre-DockerCon panel: Sunday, June 21 – San Francisco, CA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join Kelsey Hightower (&lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;@kelseyhightower&lt;/a&gt;) and other thought leaders that will be at DockerCon for a pre-event evening panel on &lt;a href=&quot;https://insights.ubuntu.com/event/conducting-systems-and-services-an-evening-about-orchestration/&quot;&gt;conducting systems and services: an evening about orchestration&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DevOpsDays Amsterdam: Wednesday, June 24 – Amsterdam, The Netherlands&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Learn about CoreOS at a &lt;a href=&quot;http://www.devopsdays.org/events/2015-amsterdam/&quot;&gt;DevOpsDays Amsterdam&lt;/a&gt; workshop presented by Chris Kühl (&lt;a href=&quot;https://twitter.com/blixtra&quot;&gt;@blixtra&lt;/a&gt;) on June 24.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;In case you missed it, check out the &lt;a href=&quot;https://coreos.com/fest/&quot;&gt;recordings of the CoreOS Fest talks&lt;/a&gt; that were held last month. More will be posted this month so stay tuned.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS Linux is in the OpenStack App Marketplace</title>
   <link href="https://coreos.com/blog/coreos-in-the-openstack-marketplace/"/>
   <updated>2015-05-19T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-in-the-openstack-marketplace</id>
   <content type="html">&lt;p&gt;Today at the OpenStack Summit in Vancouver, we are pleased to announce that CoreOS Linux – the lightweight operating system that provides stable, reliable updates to all machines connected to the update service – is included in the OpenStack Community App Catalog.&lt;/p&gt;

&lt;p&gt;CoreOS Linux is now available in the Community App Catalog alongside ActiveState Stackato, Apcera, Cloud Foundry, Kubernetes, MySQL, Oracle Database 12c and Oracle Multitenant, Postgres, Project Atomic, Rally, Redis, Tomcat and Wordpress. The Community App Catalog is where community members can share apps and tools designed to integrate with OpenStack Clouds.&lt;/p&gt;

&lt;p&gt;With the ability to use CoreOS directly from the catalog, it will be easier to use CoreOS Linux on OpenStack. CoreOS Linux delivers automatic updates that are critical to keeping a system secure. CoreOS Linux’s continuous stream of updates minimizes the complexity of an update and engineering teams have the &lt;a href=&quot;https://coreos.com/releases/&quot;&gt;flexibility to select specific release channels&lt;/a&gt; to deploy and control how clusters apply updates. Get started with CoreOS on OpenStack &lt;a href=&quot;http://apps.openstack.org/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;At the intersection of open source technologies, we are excited to continue helping users succeed with containers in the OpenStack ecosystem. If you are at the OpenStack Summit this week, stop by to meet us and see our talk today at 2 p.m., &lt;a href=&quot;http://sched.co/2qgQ&quot;&gt;Dream Stack, CoreOS + OpenStack + Kubernetes&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS at OpenStack Summit 2015</title>
   <link href="https://coreos.com/blog/openstack-summit/"/>
   <updated>2015-05-18T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/openstack-summit</id>
   <content type="html">&lt;p&gt;CoreOS is in Vancouver this week. Not only are we excited to see where OpenStack is taking containers; we’re also pumped for 24-hour poutine.&lt;/p&gt;

&lt;p&gt;There are CoreOS-focused events on the first three days of the conference! Speakers on Monday and Tuesday, plus a deep dive into CoreOS all afternoon on Wednesday.&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;&lt;strong&gt;Monday, May 18, 2015 at 2:00 p.m.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Don’t miss our very own &lt;a href=&quot;https://twitter.com/mjg59&quot;&gt;Matthew Garrett&lt;/a&gt; talking about how we can &lt;a href=&quot;http://sched.co/2qcu&quot;&gt;secure cloud infrastructure using TPMs&lt;/a&gt; today at 2 p.m.&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, May 19, 2015 at 2:00 p.m.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next up on Tuesday, May 19 at 2 p.m., we have &lt;a href=&quot;https://twitter.com/brianredbeard&quot;&gt;Brian “Redbeard” Harrington&lt;/a&gt; from CoreOS telling us all about the &lt;a href=&quot;http://sched.co/2qgQ&quot;&gt;Dream Stack, CoreOS + OpenStack + Kubernetes&lt;/a&gt;.&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, May 20, 2015 at 1:50-6:00 p.m.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To dive deeper into CoreOS, our &lt;a href=&quot;http://sched.co/3FvZ&quot;&gt;Collaboration Day&lt;/a&gt; event is on Wednesday at 1:50-6 p.m. Brian Harrington and Brian Waldon will be there to answer all of your CoreOS questions. Here is the schedule:&lt;/p&gt;

&lt;table&gt;&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align: left&quot;&gt;Time&lt;/th&gt;
&lt;th style=&quot;text-align: left&quot;&gt;Topic&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left&quot;&gt;1:50 - 2:30&lt;/td&gt;
&lt;td style=&quot;text-align: left&quot;&gt;CoreOS as a building block for OpenStack Ironic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left&quot;&gt;2:40 - 3:20&lt;/td&gt;
&lt;td style=&quot;text-align: left&quot;&gt;Managing CoreOS Images effectively with Glance (Dos and Don&amp;#39;ts)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left&quot;&gt;3:30 - 4:10&lt;/td&gt;
&lt;td style=&quot;text-align: left&quot;&gt;CoreOS Developer AMA (Ask Me Anything)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left&quot;&gt;4:10 - 4:30&lt;/td&gt;
&lt;td style=&quot;text-align: left&quot;&gt;20 minute break&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left&quot;&gt;4:30 - 5:10&lt;/td&gt;
&lt;td style=&quot;text-align: left&quot;&gt;Administrative/Firmware containers - going beyond your web applications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left&quot;&gt;5:20 - 6:00&lt;/td&gt;
&lt;td style=&quot;text-align: left&quot;&gt;Building minimal application containers from scratch&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;hr/&gt;

&lt;p&gt;Be sure to stop by our 3D-printing booth right near registration! That’s right. We’ve teamed up with &lt;a href=&quot;http://www.codame.com/&quot;&gt;Codame&lt;/a&gt; to immortalize your time here at OpenStack Summit. Try it alone, or bring a friend. You’re not going to want to miss this! &lt;/p&gt;

&lt;p&gt;Meet our team and tweet to us &lt;a href=&quot;https://twitter.com/coreoslinux&quot;&gt;@CoreOSLinux&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;img style=&quot;display: block; margin: 0 auto;&quot; src=&quot;/assets/images/media/openstack-summit.jpg&quot; alt=&quot;CoreOS at OpenStack Summit&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>New Functional Testing in etcd</title>
   <link href="https://coreos.com/blog/new-functional-testing-in-etcd/"/>
   <updated>2015-05-14T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/new-functional-testing-in-etcd</id>
   <content type="html">&lt;p&gt;Today we are discussing the new &lt;a href=&quot;https://github.com/coreos/etcd/tree/master/tools/functional-tester&quot;&gt;fault-injecting, functional testing framework&lt;/a&gt; built to test &lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;etcd&lt;/a&gt;, which can deploy a cluster, inject failures, and check the cluster for correctness continuously.&lt;/p&gt;

&lt;p&gt;For context, etcd is an open source, distributed, consistent key-value store. It is a core component of CoreOS software that facilitates safe automatic updates, coordinates work scheduled to hosts, and sets up overlay networking for containers. Because of its core position in the stack, its correctness and availability is significantly critical, which is why the etcd team has built the functional testing framework.&lt;/p&gt;

&lt;p&gt;Since writing the framework, we have run it continuously for the last two months, and etcd has shown to be robust under many kinds of harsh failure scenarios. This framework has also helped us identify a few potential bugs and improvements that we’ve fixed in newer releases &amp;mdash; read on for more info.&lt;/p&gt;

&lt;h2 id=&quot;functional-testing&quot;&gt;Functional Testing&lt;/h2&gt;

&lt;p&gt;etcd’s functional test suite tests the functionality of an etcd cluster with a focus on failure-resistance under heavy usage.&lt;/p&gt;

&lt;p&gt;The main workflow of the functional test suite is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It sets up a new etcd cluster and injects a failure into the cluster. A failure is some unexpected situation that may happen in the cluster, e.g., machine doesn’t work or network is down.&lt;/li&gt;
&lt;li&gt;It repairs the failure and expects the etcd cluster to recover within a short amount of time (usually one minute).&lt;/li&gt;
&lt;li&gt;It waits for the etcd cluster to be fully consistent and making progress.&lt;/li&gt;
&lt;li&gt;It starts the next round of failure injection.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meanwhile, the framework makes continuous write requests to the etcd cluster to simulate heavy workloads. As a result, there are constantly hundreds of write requests queued, intentionally causing a heavy burden on the etcd cluster.&lt;/p&gt;

&lt;p&gt;If the running cluster cannot recover from failure, the functional testing framework archives the cluster state and does the next round of testing on a new etcd cluster. When archiving, process logs and data directories for each etcd member are saved into a separate directory, which can be viewed and debugged in the future.&lt;/p&gt;

&lt;h2 id=&quot;basic-architecture&quot;&gt;Basic Architecture&lt;/h2&gt;

&lt;p&gt;etcd&amp;#39;s functional test suite has two components: &lt;a href=&quot;https://github.com/coreos/etcd/tree/master/tools/functional-tester/etcd-agent&quot;&gt;etcd-agent&lt;/a&gt; and &lt;a href=&quot;https://github.com/coreos/etcd/tree/master/tools/functional-tester/etcd-tester&quot;&gt;etcd-tester&lt;/a&gt;. etcd-agent runs on every etcd node and etcd-tester is a single controller of the test.&lt;/p&gt;

&lt;p&gt;etcd-agent is a daemon on each machine. It can start, stop, restart, isolate and terminate an etcd process. The agent exposes these functionalities via RPC.&lt;/p&gt;

&lt;p&gt;etcd-tester utilizes all etcd-agents to control the cluster and simulate various test cases. For example, it starts a three-member cluster by sending three start-RPC calls to three different etcd-agents. It then forces one of the members to fail by sending a stop-RPC call to the member’s etcd-agent.&lt;/p&gt;

&lt;p&gt;&lt;img style=&quot;margin: 0 auto; display:block;&quot; src=&quot;/assets/images/media/etcd-functional-testing.svg&quot; alt=&quot;etcd functional testing&quot; /&gt;&lt;/p&gt;

&lt;p&gt;While etcd-tester uses etcd-agent to control etcd externally, it also directly connects to etcd members to make simulated HTTP requests, including setting a range of keys and checking member health.&lt;/p&gt;

&lt;h2 id=&quot;internal-testing-suite&quot;&gt;Internal Testing Suite&lt;/h2&gt;

&lt;p&gt;The internal functional testing suite case is built upon four &lt;code&gt;n1-highcpu-2&lt;/code&gt; virtual machines on Google Compute Engine. Each machine has 2 virtual cores, 1.8G memory and 200G standard persistent disk. Three machines have etcd-agent running as a daemon, while the fourth machine runs etcd-tester as the controller.&lt;/p&gt;

&lt;p&gt;Currently we have six major failures to simulate the most common cases that etcd may meet in real life:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;kill all members

&lt;ul&gt;
&lt;li&gt;the whole data center experiences an outage, and the etcd cluster in the data center is killed&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;kill the majority of the cluster

&lt;ul&gt;
&lt;li&gt;part of the data center experiences an outage, and the etcd cluster loses quorum&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;kill one member

&lt;ul&gt;
&lt;li&gt;a single machine needs to be upgraded or maintained&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;kill one member for a significant time and expect it to recover from an incoming snapshot

&lt;ul&gt;
&lt;li&gt;a single machine is down due to hardware failure, and requires manual repair&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;isolate one member

&lt;ul&gt;
&lt;li&gt;the network interface on a single machine is broken&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;isolate all members

&lt;ul&gt;
&lt;li&gt;the router or switch in the data center is broken&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meanwhile, 250k 100-byte keys are written into the etcd cluster continuously, which means we’re storing about 25MB of data in the cluster.&lt;/p&gt;

&lt;h3 id=&quot;discovering-potential-bugs&quot;&gt;Discovering Potential Bugs&lt;/h3&gt;

&lt;p&gt;This test suite has helped us to discover potential bugs and areas to improve. In one discovery, we found that when a leader is helping the follower catch up with the progress of the cluster, there was a slight possibility that memory and CPU usage could explode without bound. After digging into the log, it turned out that the leader was repeatedly sending 50MB-size snapshot messages and overloaded its transport module. To fix the issue, we designed a message flow control for snapshot messages that solved the resource explosion. &lt;/p&gt;

&lt;p&gt;Another example is the automatic WAL repair feature added in 2.1.0. To protect data integrity, etcd intentionally refuses to restart if the last entry in the underlying WAL was half-written, which may happen if the process is killed or disk is full. We&amp;#39;ve found this happens occasionally (once per hundred rounds) in functional testing, and it’s safe and easier to remove the error automatically and recover from the cluster to simplify the recovery for the administrator. This functionality has been merged into the master branch, and will be released in v2.1.0.&lt;/p&gt;

&lt;p&gt;After several weeks of running and debugging, the etcd cluster has survived several thousand consecutive rounds of all six failures. Surviving serious testing, the etcd cluster is strong and working quite well.&lt;/p&gt;

&lt;h2 id=&quot;diving-into-the-code&quot;&gt;Diving into the Code&lt;/h2&gt;

&lt;h3 id=&quot;build-and-run&quot;&gt;Build and Run&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/coreos/etcd/tree/master/tools/functional-tester/etcd-agent&quot;&gt;etcd-agent&lt;/a&gt; can be built via&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ go build github.com/coreos/etcd/tools/functional-tester/etcd-agent
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;and &lt;a href=&quot;https://github.com/coreos/etcd/tree/master/tools/functional-tester/etcd-tester&quot;&gt;etcd-tester&lt;/a&gt; at&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ go build github.com/coreos/etcd/tools/functional-tester/etcd-tester
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Run etcd-agent binary on machine{1,2,3}:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ ./etcd-agent --etcd-path=$ETCD_BIN_PATH
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Run etcd-tester binary on machine4:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ ./etcd-tester -agent-endpoints=”$MACHINE1_IP:9027,$MACHINE2_IP:9027,$MACHINE3_IP:9027” -limit=3 -stress-key-count=250000 -stress-key-size=100
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;etcd-tester starts running, and makes 3 rounds of all failures on a 3-member cluster in machines 1, 2, and 3.&lt;/p&gt;

&lt;h3 id=&quot;add-a-new-failure&quot;&gt;Add a new failure&lt;/h3&gt;

&lt;p&gt;Let us go through the process to add &lt;code&gt;failureKillOne&lt;/code&gt;, which kills one member and recovers it afterwards. First, write how to inject and recover from failure:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-go&quot; data-lang=&quot;go&quot;&gt;&lt;span class=&quot;kd&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;failureKillOne&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;description&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kd&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;newFailureKillOne&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;failureKillOne&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;failureKillOne&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// detailed description of the failure&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;kill one member&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;kd&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;f&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;failureKillOne&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Inject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;cluster&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;round&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;error&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// round robin on all members&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;round&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Size&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// ask its agent to stop etcd&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Agents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Stop&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;kd&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;f&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;failureKillOne&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Recover&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;cluster&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;round&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;error&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;round&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;%&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Size&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// ask its agent to restart etcd&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;err&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Agents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Restart&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;err&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;nil&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;err&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// wait for recovery done&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;WaitHealth&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;
&lt;p&gt;Then we add it into failure lists:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;  t := &amp;amp;tester{
    failures: []failure{
      newFailureKillOne(),
    },
    cluster: c,
    limit:   *limit,
  }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Done.&lt;/p&gt;

&lt;p&gt;As you see, the framework is simple but already fairly powerful. We are looking forward to having you join the etcd test party!&lt;/p&gt;

&lt;h2 id=&quot;future-plans&quot;&gt;Future Plans&lt;/h2&gt;

&lt;p&gt;The framework is still under active development, and more failure cases and checks will be added.&lt;/p&gt;

&lt;p&gt;Random network partitions, network delays and runtime reconfigurations are some classic failure cases that the framework does not yet cover. Another interesting idea we plan to explore is a cascading failure case that injects multiple failure cases at the same time.&lt;/p&gt;

&lt;p&gt;On the recovery side, more checks against consistent views of the keyspace on all members is a good starting point for more exploration.&lt;/p&gt;

&lt;p&gt;The internal testing cluster runs 24/7, and our etcd cluster works perfectly under the current failure set. The etcd team is making its best effort to guarantee etcd’s correctness, and hopes that we can provide users the most robust consensus store possible.&lt;/p&gt;

&lt;p&gt;Follow-up plans for more specific and harsher tests are in our TODO list. This framework is good to imitate real-life scenarios, but it cannot have fine controls on lower-level system and hardware behaviors. Future testing approaches may use simulated networks and disks to tackle these failure simulations.&lt;/p&gt;

&lt;p&gt;We will keep enhancing the testing strength and coverage by adding more failure cases and checks into the framework. Pull requests to the &lt;a href=&quot;https://github.com/coreos/etcd/tree/master/tools/functional-tester&quot;&gt;framework&lt;/a&gt; are welcomed!&lt;/p&gt;

&lt;h1 id=&quot;acknowledgement&quot;&gt;Acknowledgement&lt;/h1&gt;

&lt;p&gt;We are running our testing cluster on GCE. Thanks to Google for providing the testing environment.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Upcoming CoreOS Events in May</title>
   <link href="https://coreos.com/blog/events-in-may/"/>
   <updated>2015-05-12T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/events-in-may</id>
   <content type="html">&lt;p&gt;We kicked off May by hosting our first ever &lt;a href=&quot;https://coreos.com/fest/&quot;&gt;CoreOS Fest&lt;/a&gt;, and it was a blast! We’re sad to see it go, but we’re excited about all of the other events we’ll be speaking at and attending this month.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, May 13, 2015 at 2:00 p.m. EDT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What could be better than listening to &lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;Kelsey Hightower&lt;/a&gt; give a talk! Listen in from anywhere in the world to hear Kelsey discuss how to get started with containers and microservices during the Logentries Webinar. &lt;a href=&quot;http://info.logentries.com/containers-and-microservices&quot;&gt;Register now!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, May 13, 2015 at 6:00 p.m. PDT - San Francisco, CA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://twitter.com/abcrawf&quot;&gt;Alex Crawford&lt;/a&gt; from CoreOS will be giving an overview of CoreOS at the &lt;a href=&quot;http://www.meetup.com/sf-DevOps/events/221248204/&quot;&gt;SF DevOps Meetup group&lt;/a&gt;. Thanks to &lt;a href=&quot;https://twitter.com/teespring&quot;&gt;Teespring&lt;/a&gt; for hosting the event at its SOMA office. Be sure not to miss it!&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, May 19, 2015 at 2:00 p.m. PDT - Vancouver, BC Canada&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you find yourself at &lt;a href=&quot;https://www.openstack.org/summit/vancouver-2015&quot;&gt;OpenStack Summit Vancouver&lt;/a&gt;, be sure to check out &lt;a href=&quot;https://twitter.com/brianredbeard&quot;&gt;Brian ‘Redbeard’ Harrington&lt;/a&gt; talk about modern practices for building a private cloud that runs containers at scale. We’ll also have our team there, so please stop by our area and meet us. We even have a &lt;a href=&quot;https://www.openstack.org/summit/vancouver-2015/schedule/&quot;&gt;Collaboration Day&lt;/a&gt; session for attendees on Wednesday, May 20 from 1:50 p.m. to 6 p.m.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, May 20, 2015 at 9:10 a.m. EDT - Seven Springs, PA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CoreOS CEO &lt;a href=&quot;https://twitter.com/polvi&quot;&gt;Alex Polvi&lt;/a&gt; will be keynoting &lt;a href=&quot;http://www.whd.global/eng/whd-usa-agenda-150502.php&quot;&gt;WHD.usa&lt;/a&gt; this year by talking about building distributed systems and securing the backend of the internet.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, May 20, 2015 at 6:30 p.m. EDT - Atlanta, GA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join &lt;a href=&quot;https://twitter.com/bakins&quot;&gt;Brian Akins&lt;/a&gt; from CoreOS in Atlanta at the &lt;a href=&quot;http://www.meetup.com/DevOpsATL/events/222182988/&quot;&gt;DevOps ATL Meetup&lt;/a&gt;, where he’ll be discussing new ways to deploy and manage applications at scale. Thanks to &lt;a href=&quot;https://twitter.com/MailChimp&quot;&gt;MailChimp&lt;/a&gt; for hosting this meetup at their Ponce City Market office.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, May 20, 2015 at 11:05 a.m. MDT - Denver, CO&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Don’t miss &lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;Kelsey Hightower&lt;/a&gt; at &lt;a href=&quot;http://gluecon.com/&quot;&gt;GlueCon 2015&lt;/a&gt; where he’ll give an overview of key technologies at CoreOS and how you can use these new technologies to build performant, reliable, large distributed systems.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thursday, May 21 2015 at 11:20 a.m. MDT - Denver, CO&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CoreOS CTO &lt;a href=&quot;https://twitter.com/BrandonPhilips&quot;&gt;Brandon Philips&lt;/a&gt; will be at &lt;a href=&quot;http://gluecon.com/&quot;&gt;GlueCon 2015&lt;/a&gt; discussing how to create a Google-like infrastructure. It will cover everything you need to know from the OS to the scheduler.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thursday, May 21 2015 at 2:40 p.m. EDT - Charleston, SC&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can find &lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;Kelsey Hightower&lt;/a&gt; at &lt;a href=&quot;https://www.codeshowse.com/&quot;&gt;CodeShow SE 2015&lt;/a&gt; explaining how to manage containers at scale with CoreOS and Kubernetes. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thursday, May 21, 2015 at 7:30 p.m. CEST - Madrid, Spain&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://twitter.com/iaguis&quot;&gt;Iago Lopez Galeiras&lt;/a&gt; will be joining the &lt;a href=&quot;http://www.meetup.com/madrid-devops/events/222177432/&quot;&gt;Madrid DevOps Meetup&lt;/a&gt; this month to give a talk on rkt and the App Container spec.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, May 26, 2015 at 6:00 p.m. EDT - Charlottesville, VA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Don’t miss &lt;a href=&quot;https://twitter.com/bakins&quot;&gt;Brian Akins&lt;/a&gt; from CoreOS give an introduction to building large reliable systems at the &lt;a href=&quot;http://www.meetup.com/DevOpsCV/events/221256226/&quot;&gt;DevOps Charlottesville&lt;/a&gt; Meetup group.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Friday, May  29, 2015 at 11:50 a.m. PDT - Santa Clara, CA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Be sure to check out &lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;Kelsey Hightower&lt;/a&gt; at &lt;a href=&quot;http://velocityconf.com/devops-web-performance-2015/public/schedule/detail/41818&quot;&gt;Velocity&lt;/a&gt; where his talk will examine all the major components of CoreOS including etcd, fleet, docker, and systemd; and how these components work together.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;h2 id=&quot;coreos-fest-recap&quot;&gt;CoreOS Fest Recap&lt;/h2&gt;

&lt;p&gt;Check out some of the best moments from &lt;a href=&quot;https://coreos.com/fest/&quot;&gt;CoreOS Fest 2015&lt;/a&gt;! &lt;/p&gt;

&lt;iframe width=&quot;640&quot; height=&quot;360&quot; src=&quot;https://www.youtube.com/embed/UfKRXQD3Pbs?rel=0&amp;amp;showinfo=0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;Join us at an event in your area! If you would like our help putting together a CoreOS meetup, or would like to speak at one of our upcoming meetups, please contact us at &lt;a href=&quot;mailto:press@coreos.com&quot;&gt;press@coreos.com&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS State of the Union at CoreOS Fest</title>
   <link href="https://coreos.com/blog/coreos-state-of-the-union-coreosfest/"/>
   <updated>2015-05-05T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-state-of-the-union-coreosfest</id>
   <content type="html">&lt;p&gt;At CoreOS Fest we have much to celebrate with the open source community. Today over 800 people contribute to CoreOS projects and we want to thank all of you for being a part of our community. &lt;/p&gt;

&lt;p&gt;We want to take this opportunity to reflect on where we started from with CoreOS Linux.  Below, we go into depth about each project, but first, a few highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We&amp;#39;ve now shipped CoreOS Linux images for nearly 674 days, since the CoreOS epoch on July 1, 2013.&lt;/li&gt;
&lt;li&gt;We&amp;#39;ve rolled out 13 major releases of the Linux kernel from 3.8.0, released in February 2013, to the 4.0 release in April 2015. &lt;/li&gt;
&lt;li&gt;In that time, we have tagged 329 releases of our images. &lt;/li&gt;
&lt;li&gt;We have 500+ projects on GitHub that mention etcd, including major projects like Kubernetes, using etcd.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;coreos-linux&quot;&gt;CoreOS Linux&lt;/h2&gt;

&lt;p&gt;Our namesake project, CoreOS Linux, started with the idea of continuous delivery of a Linux operating system. Best practice in the industry is to ship applications regularly to get the latest security fixes and newest features to users – we think an operating system can be shipped in a similar way. And for nearly two years, since the CoreOS epoch on July 1, 2013, we have been shipping regular updates to CoreOS Linux machines.&lt;/p&gt;

&lt;p&gt;In a way, CoreOS Linux is a kernel delivery system. The  alpha channel has rolled through 13 major releases of the Linux kernel from 3.8.0 in February 2013 to the recent 4.0 release in April 2015. This doesn’t include all of the minor patch releases we have bumped through as well. In that time we have tagged 329 releases of our images. To achieve this goal, CoreOS uses a transactional system so upgrades can happen automatically.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/assets/images/media/fest-os-stats.jpg&quot;&gt;
  &lt;img src=&quot;/assets/images/media/fest-os-stats.jpg&quot; alt=&quot;CoreOS Linux stats and community&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;caption&quot;&gt;CoreOS Linux stats shared at CoreOS Fest&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;Community feedback has been incredibly important throughout this journey: users help us track down bugs in upstream projects like the Linux kernel, give us feedback on new features, and flag regressions that are missed by our testing.&lt;/p&gt;

&lt;p&gt;A wide variety of companies are building their products and infrastructure on top of CoreOS Linux, including many participants at CoreOS Fest:&lt;/p&gt;

&lt;p&gt;Deis, a project recently acquired by Engine Yard, spoke yesterday on &amp;quot;Lessons Learned From Building Platforms on Top of CoreOS&amp;quot;
Mesosphere DCOS uses CoreOS by default, and we are happy to have them sponsor CoreOS Fest
Salesforce Data.com spoke today on how they are using distributed systems and application containers
Coinbase presented a talk today on &amp;quot;Container Management &amp;amp; Analytics&amp;quot;&lt;/p&gt;

&lt;h2 id=&quot;etcd&quot;&gt;etcd&lt;/h2&gt;

&lt;p&gt;We build CoreOS Linux with just a single-host use case in mind, but wanted people to trust and use CoreOS to update their entire fleet of machines. To solve this problem of automated yet controlled updates across a distributed set of systems, we built &lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;etcd&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;etcd was initially created to provide an API-driven distributed &amp;quot;reboot lock&amp;quot; to a cluster of hosts, and it has been very successful serving this basic purpose. But over the last two years, adoption and usage of etcd has been exploded: today it is being used as a key part of projects like Google&amp;#39;s Kubernetes, Cloud Foundry&amp;#39;s Diego, Mailgun&amp;#39;s Vulcan and many more custom service discovery and master election systems.&lt;/p&gt;

&lt;p&gt;At CoreOS Fest we have seen demonstrations of a PostgreSQL master election system built by Compose.io, a MySQL master election system built by HP, and a discussion by Yodlr about how they use it for their internal microservice infrastructure. With feedback from all of these users of etcd, we are planning an advanced V3 API, a next-generation disk-backed store and writing new punishing long-running tests to ensure etcd remains a highly reliable component of distributed infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/assets/images/media/fest-etcd-stats.jpg&quot;&gt;
  &lt;img src=&quot;/assets/images/media/fest-etcd-stats.jpg&quot; alt=&quot;CoreOS' etcd stats and community&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;caption&quot;&gt;etcd stats shared at CoreOS Fest&lt;/div&gt;&lt;/p&gt;

&lt;h2 id=&quot;fleet-on-top-of-etcd&quot;&gt;fleet on top of etcd&lt;/h2&gt;

&lt;p&gt;After etcd, we built &lt;a href=&quot;https://github.com/coreos/fleet&quot;&gt;fleet&lt;/a&gt;, a scheduler system that ties together systemd and etcd into a distributed init system. fleet can be thought of as a logical extension of systemd that operates at the cluster level instead of the machine level. &lt;/p&gt;

&lt;p&gt;The fleet project is low level and designed as a foundation for higher order orchestration: its goal is to be a simple and resilient init system for your cluster. It can be used to run containers directly and also as a tool to bootstrap higher-level software like Kubernetes, Mesos, Deis and others. &lt;/p&gt;

&lt;p&gt;For more on fleet, see the &lt;a href=&quot;https://coreos.com/docs/launching-containers/launching/launching-containers-fleet/&quot;&gt;documentation on launching containers with fleet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/assets/images/media/fest-fleet-stats.jpg&quot;&gt;
  &lt;img src=&quot;/assets/images/media/fest-fleet-stats.jpg&quot; alt=&quot;CoreOS' fleet stats and community&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;caption&quot;&gt;fleet stats shared at CoreOS Fest&lt;/div&gt;&lt;/p&gt;

&lt;h2 id=&quot;rkt&quot;&gt;rkt&lt;/h2&gt;

&lt;p&gt;The youngest CoreOS project is &lt;a href=&quot;https://github.com/coreos/rkt&quot;&gt;rkt&lt;/a&gt;, a container runtime, which was launched in December. rkt has security as a core focus and was designed to fit into the existing Unix process model to integrate well with tools like systemd and Kubernetes. And rkt was also built to support the concept of pods: a container composed of multiple processes that share resources like local network and IPC.&lt;/p&gt;

&lt;p&gt;Where is rkt today? At CoreOS fest we discussed how &lt;a href=&quot;http://blog.kubernetes.io/2015/05/appc-support-for-kubernetes-through-rkt.html&quot;&gt;rkt was integrated into Kubernetes&lt;/a&gt;, and showed this functionality in a demo yesterday. rkt is also used in Tectonic, our new integrated container platform. Looking forward, we are planning improved UX around trust and image handling tools, advanced networking capabilities, and splitting the stage1 out from rkt to support other isolation mechanisms like KVM.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/assets/images/media/fest-rkt-stats.jpg&quot;&gt;
  &lt;img src=&quot;/assets/images/media/fest-rkt-stats.jpg&quot; alt=&quot;CoreOS' rkt stats and community&quot; /&gt;
&lt;/a&gt;
&lt;div class=&quot;caption&quot;&gt;rkt stats shared at CoreOS Fest&lt;/div&gt;&lt;/p&gt;

&lt;h2 id=&quot;container-networking&quot;&gt;Container networking&lt;/h2&gt;

&lt;p&gt;Containers are most useful when they can interact with other systems over the network. Today in the container ecosystem we have some fairly basic patterns for network configuration, but over time we will need to give users the ability to configure more complex topologies. &lt;a href=&quot;https://github.com/appc/cni&quot;&gt;CNI (Container Network Interface)&lt;/a&gt; defines the API between a runtime like rkt and how a container actually joins a network, via an external plugin interface. Our intention with CNI is to develop a generic networking solution supporting a variety of tools, with reusable plugins for different backend technologies like macvlan, ipvlan, Open vSwitch and more. &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/coreos/flannel/&quot;&gt;flannel&lt;/a&gt; is another important and useful component in container network environments. In our future work with flannel, we’d like to introduce a flannel server, integrate it into Kubernetes and add generic UDP encapsulation support.&lt;/p&gt;

&lt;h2 id=&quot;ignition:-machine-configuration&quot;&gt;Ignition: Machine Configuration&lt;/h2&gt;

&lt;p&gt;Ignition is a new utility for configuring machines on first boot. This utility provides similar mechanisms to  coreos-cloudinit but will provide the ability to configure a machine before the first boot. By configuring the system early, problems like ordering around network configuration are more easily solved. Just like coreos-cloudinit, Ignition will also have the ability to mark services to start on boot and configure user accounts.&lt;/p&gt;

&lt;p&gt;Ignition is still under heavy development, but we are hoping to be able to start shipping it in CoreOS in the next couple of months.&lt;/p&gt;

&lt;h2 id=&quot;participate!&quot;&gt;Participate!&lt;/h2&gt;

&lt;p&gt;We encourage all of you as users of our systems and to continue having conversations with us. Please share ideas and tell us about what is working well, what may not be working well, and how can continue to have a useful feedback loop. In the GitHub repos for each of these projects, you can find a CONTRIBUTING.md and ROADMAP.md which outlines how to get started and where the projects are going. Thank you to our contributors!&lt;/p&gt;

&lt;p&gt;We will also have the replays of the talks available at a later date, which will include a demo of Ignition and more&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>App Container spec gains new support as a community-led effort</title>
   <link href="https://coreos.com/blog/appc-gains-new-support/"/>
   <updated>2015-05-04T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/appc-gains-new-support</id>
   <content type="html">&lt;p&gt;Today is the inaugural &lt;a href=&quot;https://coreos.com/fest/&quot;&gt;CoreOS Fest&lt;/a&gt;, the community event for distributed systems and application containers. We at CoreOS are here to celebrate you – those who want to join us on a journey to secure the backend of the Internet and build distributed systems technologies to bring web scale architecture to any organization. We&amp;#39;ve come a long way since releasing our first namesake project, CoreOS Linux, in 2013, and as a company we now foster dozens of open source projects as we work together with the community to create the components necessary for this new paradigm in production infrastructure.  &lt;/p&gt;

&lt;p&gt;An important part of working with this community has been the development of the &lt;a href=&quot;https://github.com/appc/spec&quot;&gt;App Container spec (appc)&lt;/a&gt;, which provides a definition on how to build and run containerized applications. &lt;a href=&quot;https://coreos.com/blog/rocket/&quot;&gt;Announced in December&lt;/a&gt;, the appc spec emphasizes application container security execution, portability and modularity. &lt;a href=&quot;https://coreos.com/rkt/docs/&quot;&gt;rkt&lt;/a&gt;, a container runtime developed by CoreOS, is the first implementation of appc.&lt;/p&gt;

&lt;p&gt;As security and portability between stacks becomes central to the successful adoption of application containers, today appc has gained support from various companies in the community:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google has furthered its support of appc by implementing rkt into Kubernetes and joining as a maintainer of appc &lt;/li&gt;
&lt;li&gt;Apcera has announced an additional appc implementation called Kurma&lt;/li&gt;
&lt;li&gt;Red Hat has assigned an engineer to participate as a maintainer of appc&lt;/li&gt;
&lt;li&gt;VMware recently announced how they will contribute to appc and shipped rkt in Project Photon&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In order to ensure the specification remains a community-led effort, the appc project has established a &lt;a href=&quot;https://github.com/appc/spec/blob/master/POLICY.md&quot;&gt;governance policy&lt;/a&gt; and elected several new community maintainers unaffiliated with CoreOS: initially, &lt;a href=&quot;https://github.com/vbatts&quot;&gt;Vincent Batts&lt;/a&gt; of Red Hat, &lt;a href=&quot;https://github.com/thockin&quot;&gt;Tim Hockin&lt;/a&gt; of Google and  &lt;a href=&quot;https://github.com/cdaylward&quot;&gt;Charles Aylward&lt;/a&gt; of Twitter. This new set of maintainers brings each of their own unique points of view and allows appc to be a true collaborative effort. Two of the initial developers of the spec from CoreOS, &lt;a href=&quot;https://github.com/philips&quot;&gt;Brandon Philips&lt;/a&gt; and &lt;a href=&quot;https://github.com/jonboulle&quot;&gt;Jonathan Boulle&lt;/a&gt;, remain as maintainers, but now are proud to have the collective help of others to make the spec what it is intended to be: open, well-specified and developed by a community. &lt;/p&gt;

&lt;p&gt;In the months after the launch of appc, we have seen the adoption and support behind a common application container specification grow quickly. These companies and individuals are coming together to ensure there is a well defined specification for application containers, providing guidelines to ensure security, openness and modularity between stacks. &lt;/p&gt;

&lt;h2 id=&quot;google-furthers-its-support-of-appc-by-integrating-rkt-into-kubernetes&quot;&gt;Google furthers its support of appc by integrating rkt into Kubernetes&lt;/h2&gt;

&lt;p&gt;Today also marks support for appc arriving in the Kubernetes project, via the integration of rkt as a configurable container runtime for Kubernetes clusters.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The first implementation of the appc specification into Kubernetes, through the support of CoreOS rkt, is an important milestone for the Kubernetes project,&amp;quot; said Craig McLuckie, product manager and Kubernetes co-founder at Google. &amp;quot;Designed with cluster first management in mind, appc support enables developers to use their preferred container image through the same Google infrastructure inspired orchestration framework.&amp;quot; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Kubernetes is an open source project introduced by Google to help organizations run their infrastructure in a similar manner to the internal infrastructure that runs Google Search, Gmail and other Google services. Today&amp;#39;s announcement of rkt being integrated directly into Kubernetes means that users will have the ability to run ACIs, the image format defined in the App Container spec, and take advantage of rkt’s first-class support for pods. rkt’s native support for running Docker images means they can also continue to use their existing images.&lt;/p&gt;

&lt;h2 id=&quot;apcera’s-new-implementation-of-appc,-kurma&quot;&gt;Apcera’s new implementation of appc, Kurma&lt;/h2&gt;

&lt;p&gt;Also announced today is Kurma, a new implementation of appc by Apcera. Kurma is an execution environment for running applications in containers. Kurma provides a framework that allows containers to be managed and orchestrated beyond itself. Kurma joins a variety of implementations of the appc spec that have emerged in the last six months, such as Jetpack, an App Container runtime for FreeBSD, and libappc, a C++ library for working with containerized applications. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Apcera has long been invested in secure container technology to power our core platform,&amp;quot; said Derek Collison, founder and CEO of Apcera. &amp;quot;We are excited to bring our technology to the open source community and to partner with CoreOS on the future of appc.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;red-hat-involvement-as-a-maintainer-of-appc&quot;&gt;Red Hat involvement as a maintainer of appc&lt;/h2&gt;

&lt;p&gt;Red Hat recently assigned an engineer to participate as a maintainer of appc. Bringing years of experience in container development and leadership in Docker, Kubernetes and the Linux community as a whole, they bring a unique skillset to the effort.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The adoption of container technology is an exciting trend and one that we believe can have significant customer benefit,” said Matt Hicks, senior director, engineering, Red Hat. “But at the same time, fragmentation of approaches and formats runs the risk of undercutting the momentum. We are excited to be included as maintainers and will work to not only innovate, but also to help create stability for our customers that adopt containers.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;vmware’s-continued-support-of-appc&quot;&gt;VMware’s continued support of appc&lt;/h2&gt;

&lt;p&gt;In April, &lt;a href=&quot;https://coreos.com/blog/vmware-ships-rkt/&quot;&gt;VMware announced support for appc and shipped rkt&lt;/a&gt; in Project Photon&amp;trade;, making rkt available to VMware vSphere&amp;reg; and VMware vCloud® Air&amp;trade; customers. VMware has been an early proponent of appc and is working closely with the community to push forward the spec.&lt;/p&gt;

&lt;p&gt;Today VMware reaffirmed their commitment to appc, showing its importance as a community-wide specification.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“VMware supports appc today offering rkt to our customers as a container runtime engine,” said Kit Colbert, vice president and CTO, Cloud-Native Apps, VMware. “We will work with the appc community to address portability and security across platforms – topics that are top of mind for enterprises seeking to support application containers in their IT environments.” &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;join-the-appc-community-effort&quot;&gt;Join the appc community effort&lt;/h2&gt;

&lt;p&gt;We welcome these new companies into the community and invite others to join the movement to bring forward a secure and portable container standard. Get involved by joining the &lt;a href=&quot;https://groups.google.com/forum/#!forum/appc-dev&quot;&gt;appc&lt;/a&gt; mailing list and discussion on &lt;a href=&quot;https://github.com/appc/spec/issues&quot;&gt;GitHub&lt;/a&gt;. We welcome the continued independent implementations of tools to be able to run the same container consistently.&lt;/p&gt;

&lt;p&gt;Thank you to all who are coming out to &lt;a href=&quot;https://coreos.com/fest/&quot;&gt;CoreOS Fest&lt;/a&gt;. Please follow along with the event on Twitter &lt;a href=&quot;https://twitter.com/coreosfest&quot;&gt;@CoreOSFest&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/search?q=%23coreosfest&amp;amp;src=typd&quot;&gt;#CoreOSFest&lt;/a&gt;. For those who aren&amp;#39;t able to make it in person, the talks will be recorded and available at a later date.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS Fest 2015 Guide</title>
   <link href="https://coreos.com/blog/coreos-fest-2015-survival-guide/"/>
   <updated>2015-04-29T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-fest-2015-survival-guide</id>
   <content type="html">&lt;p&gt;CoreOS Fest 2015 is in less than a week, and we want to make sure that you’re ready! To ensure that you have everything you need in order to have the best two days, we’ve put together a CoreOS Fest Guide. &lt;/p&gt;

&lt;p&gt;If you haven’t gotten a ticket, but plan on joining us, there are only a few remaining tickets so be sure to &lt;a href=&quot;/fest/&quot;&gt;register now&lt;/a&gt; while they are available. &lt;/p&gt;

&lt;p&gt;We wouldn’t be here today without the help from our wonderful sponsors. Thank you to &lt;a href=&quot;http://intel.com/&quot;&gt;Intel&lt;/a&gt;, &lt;a href=&quot;https://cloud.google.com/&quot;&gt;Google&lt;/a&gt;, &lt;a href=&quot;http://www.vmware.com/&quot;&gt;VMware&lt;/a&gt;, &lt;a href=&quot;http://aws.amazon.com/activate/&quot;&gt;AWS&lt;/a&gt;, &lt;a href=&quot;https://www.rackspace.com/&quot;&gt;Rackspace&lt;/a&gt;, &lt;a href=&quot;https://chef.io/&quot;&gt;Chef&lt;/a&gt;, &lt;a href=&quot;http://www.projectcalico.org/&quot;&gt;Project Calico&lt;/a&gt;, &lt;a href=&quot;https://sysdigcloud.com/&quot;&gt;Sysdig&lt;/a&gt;, &lt;a href=&quot;https://mesosphere.com/&quot;&gt;Mesosphere&lt;/a&gt; and &lt;a href=&quot;https://giantswarm.io/&quot;&gt;Giant Swarm&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;location&quot;&gt;Location&lt;/h3&gt;

&lt;p&gt;CoreOS Fest is located at The Village at &lt;a href=&quot;https://www.google.com/maps/place/969+Market+St,+San+Francisco,+CA+94103&quot;&gt;969 Market St. (between 5th and 6th St.)&lt;/a&gt; in downtown San Francisco, right by the Powell St. BART station. For local parking options, please check for options &lt;a href=&quot;https://www.parkme.com/search?q=The+Village%2C+San+Francisco%2C+CA%2C+United+States&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;badge-pick-up-times&quot;&gt;Badge Pick-Up Times&lt;/h3&gt;

&lt;p&gt;The registration desk is located on the top floor of &lt;a href=&quot;https://www.google.com/maps/place/969+Market+St,+San+Francisco,+CA+94103&quot;&gt;The Village&lt;/a&gt;. When you walk in, head
straight up the stairs to pick up your badge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monday, May 4:&lt;/strong&gt;&lt;br/&gt;
8:00 a.m. - end of day&lt;br/&gt;
At the registration desk on the top floor&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, May 5:&lt;/strong&gt;&lt;br/&gt;
8:00 a.m. - end of day&lt;br/&gt;
At the registration desk on the top floor&lt;/p&gt;

&lt;h3 id=&quot;breakfast-and-lunch-details&quot;&gt;Breakfast and Lunch Details&lt;/h3&gt;

&lt;p&gt;Breakfast and lunch will be held on the top floor each day.
Dietary restrictions? We’ve accommodated for most diets, but if you’re concerned that we won’t have something for your specific diet, we recommend packing a lunch. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monday, May 4:&lt;/strong&gt;&lt;br/&gt;
Breakfast: 8 a.m. - 9 a.m.&lt;br/&gt;
Lunch: 11:45 a.m. - 1:00 p.m.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, May 5:&lt;/strong&gt;&lt;br/&gt;
Breakfast: 8:30 a.m. - 9:30 a.m.&lt;br/&gt;
Lunch: 11:45 a.m. - 1:00 p.m.&lt;/p&gt;

&lt;h3 id=&quot;after-party-details&quot;&gt;After Party Details&lt;/h3&gt;

&lt;p&gt;Join us May 4 for our After Party on the top floor of &lt;a href=&quot;https://www.google.com/maps/place/969+Market+St,+San+Francisco,+CA+94103&quot;&gt;The Village&lt;/a&gt; from 5:45 p.m. to 8:00 p.m. We’ll also share a drink and a goodbye on May 5 at 5 p.m. - 6 p.m. at the &lt;a href=&quot;http://aws.amazon.com/start-ups/loft/&quot;&gt;AWS Pop-Up Loft&lt;/a&gt; next door, at 925 Market St. &lt;/p&gt;

&lt;h3 id=&quot;coreos-office-hours&quot;&gt;CoreOS Office Hours&lt;/h3&gt;

&lt;p&gt;Attendees may sign up for office hours through a link you’ll get in your attendee email. Since there is a limited number of spots, please look at the &lt;a href=&quot;https://coreos.com/fest/&quot;&gt;conference schedule&lt;/a&gt; before getting your office hours tickets. Paper office hours tickets will not need to be shown at any time during CoreOS Fest as long as you have your badge.&lt;/p&gt;

&lt;h3 id=&quot;questions?&quot;&gt;Questions?&lt;/h3&gt;

&lt;p&gt;Have questions or need help the day of the event? You can email us at &lt;a href=&quot;mailto:fest@coreos.com&quot;&gt;fest@coreos.com&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;a-few-things-to-keep-in-mind&quot;&gt;A Few Things to Keep in Mind&lt;/h3&gt;

&lt;h4 id=&quot;be-on-time&quot;&gt;Be on time&lt;/h4&gt;

&lt;p&gt;Unlike CS101, this is something you’ll want to wake up for. We promise to have breakfast &amp;mdash; and more importantly, coffee &amp;mdash; waiting for you.&lt;/p&gt;

&lt;h4 id=&quot;talks-will-be-recorded&quot;&gt;Talks will be recorded&lt;/h4&gt;

&lt;p&gt;All talks will be recorded, so if you miss one, don’t worry! All videos will be posted on &lt;a href=&quot;/fest/&quot;&gt;the Fest ‘15 site&lt;/a&gt; after the event. &lt;/p&gt;

&lt;h4 id=&quot;bring-a-bag&quot;&gt;Bring a bag&lt;/h4&gt;

&lt;p&gt;Here at CoreOS, we believe that there &lt;em&gt;is&lt;/em&gt; such a thing as having too many conference tote bags. If you’ll need a bag, make sure to bring your own, and we&amp;#39;ll spare you the bagception dilemma.&lt;/p&gt;

&lt;h4 id=&quot;charging-and-wi-fi&quot;&gt;Charging and Wi-Fi&lt;/h4&gt;

&lt;p&gt;Wi-Fi is available at the venue, along with charging stations and outlets.&lt;/p&gt;

&lt;h4 id=&quot;come-with-questions&quot;&gt;Come with questions&lt;/h4&gt;

&lt;p&gt;Some of the most influential developers in infrastructure will be there to tell stories of their successes, missteps and lessons learned. They’re here to answer your questions, so bring on the tough ones!&lt;/p&gt;

&lt;h3 id=&quot;follow-#coreosfest-on-twitter&quot;&gt;Follow #CoreOSFest on Twitter&lt;/h3&gt;

&lt;p&gt;Make sure that you follow &lt;a href=&quot;https://twitter.com/coreosfest&quot;&gt;@CoreOSFest&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/search?q=%23CoreOSFest&amp;amp;src=typd&quot;&gt;#CoreOSFest&lt;/a&gt; on Twitter for live schedule updates, recorded talks and news.&lt;/p&gt;

&lt;p&gt;We’re only a few days away from &lt;a href=&quot;/fest/&quot;&gt;CoreOS Fest&lt;/a&gt; and we’re excited to see you all there!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Announcing GovCloud support on AWS</title>
   <link href="https://coreos.com/blog/coreos-on-aws-govcloud/"/>
   <updated>2015-04-27T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-on-aws-govcloud</id>
   <content type="html">&lt;p&gt;Today we are happy to announce CoreOS Linux now supports Amazon Web Services GovCloud (US). &lt;a href=&quot;http://aws.amazon.com/govcloud-us/&quot;&gt;AWS GovCloud&lt;/a&gt; is an isolated AWS Region for US government agencies and customers to move sensitive workloads into the AWS cloud by addressing their specific regulatory and compliance requirements. With this, automatic updates are now stable and available to all government agencies using the cloud.&lt;/p&gt;

&lt;p&gt;CoreOS Linux customers will benefit from the security thanks to support of FedRAMP, a US government program sharing a standardized approach to security assessment, authorization and continuous monitoring for cloud products and services.&lt;/p&gt;

&lt;p&gt;For more details, see the documentation on &lt;a href=&quot;https://coreos.com/docs/running-coreos/cloud-providers/ec2/&quot;&gt;Running CoreOS on EC2&lt;/a&gt;. &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>rkt 0.5.4, featuring repository authentication, port forwarding and more</title>
   <link href="https://coreos.com/blog/rkt-0.5.4/"/>
   <updated>2015-04-24T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/rkt-0.5.4</id>
   <content type="html">&lt;p&gt;Since the &lt;a href=&quot;/blog/announcing-rkt-0.5/&quot;&gt;last rkt release&lt;/a&gt; a few weeks ago, development has continued apace, and today we&amp;#39;re happy to announce rkt &lt;a href=&quot;https://coreos.com/rkt/docs/0.5.4/&quot;&gt;v0.5.4&lt;/a&gt;. This release includes a number of new features and improvements across the board, including authentication for image fetching, per-application arguments, running from pod manifests, and port forwarding support – check below the break for more details.&lt;/p&gt;

&lt;p&gt;rkt, a container runtime for application containers, is under heavy development but making rapid progress towards a 1.0 release. Earlier this week, &lt;a href=&quot;/blog/vmware-ships-rkt/&quot;&gt;VMware announced&lt;/a&gt; support for rkt and the emerging App Container (appc) specification. appc is an open specification defining how applications can be run in containers, and rkt is the first implementation of the spec. With increasing industry commitment and involvement in appc, it is quickly fulfilling its promise of becoming a standard of how applications should be deployed in containers. &lt;/p&gt;

&lt;p&gt;VMware released a short &lt;a href=&quot;https://www.youtube.com/watch?v=ZA6flb7otNg&amp;amp;sf37744884=1&quot;&gt;demo&lt;/a&gt; about how its new Project Photon works with rkt via Vagrant and VMware Fusion.&lt;/p&gt;

&lt;p&gt;Read on below for more about the latest features in rkt 0.5.4.&lt;/p&gt;

&lt;h3 id=&quot;authentication-for-image-fetching&quot;&gt;Authentication for image fetching&lt;/h3&gt;

&lt;p&gt;rkt now supports HTTP Basic and OAuth Bearer Token authentication when retrieving remote images from HTTP endpoints and Docker registries. To facilitate this, we&amp;#39;ve introduced a flexible configuration system, allowing vendors to ship default configurations and then systems administrators to supplement or override configuration locally. Configuration is fully versioned to support forwards and backwards compatibility – check out the &lt;a href=&quot;/rkt/docs/0.5.4/configuration.html&quot;&gt;rkt documentation&lt;/a&gt; for more details.&lt;/p&gt;

&lt;p&gt;Here&amp;#39;s a simple example of fetching an image from a private Docker registry (note that Docker registries support only Basic authentication):&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ sudo cat /etc/rkt/auth.d/myuser.json 
{
    &amp;quot;rktKind&amp;quot;: &amp;quot;dockerAuth&amp;quot;,
    &amp;quot;rktVersion&amp;quot;: &amp;quot;v1&amp;quot;,
    &amp;quot;registries&amp;quot;: [&amp;quot;quay.io&amp;quot;],
    &amp;quot;credentials&amp;quot;: {
        &amp;quot;user&amp;quot;: &amp;quot;myuser&amp;quot;,
        &amp;quot;password&amp;quot;: &amp;quot;sekr3tstuff&amp;quot;
    }
}
$ sudo /rkt --insecure-skip-verify fetch docker://quay.io/myuser/privateapp
rkt: fetching image from docker://quay.io/myuser/privateapp
Downloading layer: cf2616975b4a3cba083ca99bc3f0bf25f5f528c3c52be1596b30f60b0b1c37ff
Downloading layer: 6ce2e90b0bc7224de3db1f0d646fe8e2c4dd37f1793928287f6074bc451a57ea
....
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;per-application-arguments-and-image-signature-verification-for-local-images&quot;&gt;Per-application arguments and image signature verification for local images&lt;/h3&gt;

&lt;p&gt;The flag parsing in &lt;code&gt;rkt run&lt;/code&gt; has been reworked to support per-app flags when running a pod with multiple images. Furthermore, in keeping with our philosophy of &amp;quot;secure by default&amp;quot;, rkt will now attempt signature verification even when referencing local image files (during &lt;code&gt;rkt fetch&lt;/code&gt; or &lt;code&gt;rkt run&lt;/code&gt; commands). In this case, &lt;code&gt;rkt&lt;/code&gt; expects to find the signature file alongside the referenced image – for example:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt; $ rkt run imgs/pauser.aci
     error opening signature file: open /home/coreos/rkt/imgs/pauser.aci.asc: no such file or directory
 $ gpg2 --armor --detach-sign imgs/pauser.aci
 $ rkt run imgs/pauser.aci
     rkt: signature verified:
       Irma Bot (ACI Signing Key)
     ^]^]^]Container rootfs terminated by signal KILL.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Specific signatures can be provided with the &lt;code&gt;--signature&lt;/code&gt; flag, which also applies per-app in the case of multiple references. In this example, we import two local images into the rkt CAS, specifying images signatures for both:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;     $ rkt fetch   \
        imgs/pauser.aci --signature ./present.asc  \
        imgs/bash.aci --signature foo.asc
      rkt: signature verified:
        Joe Packager (CoreOS)
sha512-b680fd853abeba1a310a344e9fbf8ac9
sha512-ae78000a3d38fae4009699bf7494b293
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;running-from-pod-manifests&quot;&gt;Running from pod manifests&lt;/h3&gt;

&lt;p&gt;In previous versions of rkt, the arguments passed to &lt;code&gt;rkt run&lt;/code&gt; (or &lt;code&gt;rkt prepare&lt;/code&gt;) would be used to internally generate a Pod Manifest which is executed by &lt;a href=&quot;/rkt/docs/0.5.4/devel/architecture.html#stages&quot;&gt;later stages&lt;/a&gt; of rkt. This release introduces a new flag, &lt;code&gt;--pod-manifest&lt;/code&gt;, to both &lt;code&gt;rkt prepare&lt;/code&gt; and &lt;code&gt;rkt run&lt;/code&gt;, to supply a pre-created &lt;a href=&quot;https://github.com/appc/spec/blob/master/SPEC.md#pod-manifest-schema&quot;&gt;pod manifest&lt;/a&gt; to rkt. &lt;/p&gt;

&lt;p&gt;A pod manifest completely defines the execution environment of the &lt;a href=&quot;https://github.com/appc/spec/blob/master/SPEC.md#app-container-pods-pods&quot;&gt;pod&lt;/a&gt; to be run, such as volume mounts, port mappings, isolators, etc. This allows users complete control over all of these parameters in a well-defined way, without the need of a complicated rkt command-line invocation. For example, when integrating rkt as a container runtime for a cluster orchestration system like &lt;a href=&quot;https://github.com/GoogleCloudPlatform/kubernetes&quot;&gt;Kubernetes&lt;/a&gt;, the system can now programmatically generate a pod manifest instead of feeding a complicated series of arguments to the rkt CLI.&lt;/p&gt;

&lt;p&gt;In this first implementation &amp;mdash; and following the &lt;a href=&quot;https://github.com/appc/spec/blob/master/SPEC.md#pod-manifest-schema&quot;&gt;prescriptions of the upstream appc spec&lt;/a&gt; &amp;mdash; the pod manifest is treated as the definitive record of the desired execution state: anything specified in the &lt;code&gt;app&lt;/code&gt; fields will override what is in the original image, such as &lt;code&gt;exec&lt;/code&gt; parameters, volumes mounts, port mappings, etc. This allows the operator to completely control what will be executed by rkt. Since the pod manifest is treated as a complete source of truth &amp;mdash; and expected to be generated by orchestration tools with complete knowledge of the execution environment – &lt;code&gt;--pod-manifest&lt;/code&gt; is initially considered mutually exclusive with other flags, such as &lt;code&gt;--volumes&lt;/code&gt; and &lt;code&gt;--port&lt;/code&gt;. See &lt;code&gt;rkt run --help&lt;/code&gt; for more details.&lt;/p&gt;

&lt;h3 id=&quot;port-forwarding&quot;&gt;Port forwarding&lt;/h3&gt;

&lt;p&gt;rkt now supports forwarding ports from the host to pods when using private networking. &lt;/p&gt;

&lt;p&gt;As a simple example, given an app with the following ports entry in its &lt;a href=&quot;https://github.com/appc/spec/blob/master/SPEC.md#image-manifest&quot;&gt;Image Manifest&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;{
    &amp;quot;name&amp;quot;: &amp;quot;http&amp;quot;,
    &amp;quot;port&amp;quot;: 80,
    &amp;quot;protocol&amp;quot;: &amp;quot;tcp&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;the following &lt;code&gt;rkt run&lt;/code&gt; command can be used to forward traffic from the host&amp;#39;s TCP port 8888 to port 80 inside the pod:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;rkt run --private-net --port=http:8888 myapp.aci
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Whenever possible, it is more convenient to use a SDN solution like &lt;a href=&quot;https://github.com/coreos/flannel/&quot;&gt;flannel&lt;/a&gt; to assign routable IPs to rkt pods. However, when such an option is not available, or for &amp;quot;edge&amp;quot; apps that require straddling both SDN and external networks (such as a load balancer), port forwarding can be used to expose select ports to the pod.&lt;/p&gt;

&lt;h3 id=&quot;testing,-forward-compatibility,-and-more&quot;&gt;Testing, forward-compatibility, and more&lt;/h3&gt;

&lt;p&gt;There&amp;#39;s plenty more under the hood in this release, including an &lt;a href=&quot;https://github.com/coreos/rkt/tree/master/tests&quot;&gt;extensive functional test harness&lt;/a&gt;, a new &lt;a href=&quot;https://github.com/coreos/rkt/pull/738&quot;&gt;database schema migration&lt;/a&gt; process, and various internal improvements to the codebase. As we&amp;#39;ve talked about previously, rkt is a young project and we aren&amp;#39;t yet able to guarantee API/ABI stability between releases, but forward-compatibility is a top priority for the forthcoming 0.6 release, and these changes are important steps towards this goal.&lt;/p&gt;

&lt;p&gt;For full details of all the changes in this release, check out the &lt;a href=&quot;https://github.com/coreos/rkt/releases/tag/v0.5.4&quot;&gt;release on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;get-involved!&quot;&gt;Get involved!&lt;/h3&gt;

&lt;p&gt;We&amp;#39;re on a journey to create an efficient, secure and composable application container runtime for production environments, and we want you to join us. Take part in the discussion through the &lt;a href=&quot;https://groups.google.com/forum/#!forum/rkt-dev&quot;&gt;rkt-dev mailing list&lt;/a&gt; or &lt;a href=&quot;https://github.com/coreos/rkt/issues&quot;&gt;GitHub issues&lt;/a&gt; &amp;mdash; and for those eager to get stuck in, &lt;a href=&quot;https://github.com/coreos/rkt/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22&quot;&gt;contribute directly to the project&lt;/a&gt;. Are you doing interesting things with rkt or appc and want to share it with the world? Contact our marketing team at &lt;a href=&quot;mailto:press@coreos.com&quot;&gt;press@coreos.com&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>VMware Ships rkt and Supports App Container Spec</title>
   <link href="https://coreos.com/blog/vmware-ships-rkt/"/>
   <updated>2015-04-20T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/vmware-ships-rkt</id>
   <content type="html">&lt;p&gt;Today VMware shipped &lt;a href=&quot;https://github.com/coreos/rkt&quot;&gt;rkt&lt;/a&gt;, the application container runtime, and made it available to VMware customers in Project Photon. VMware also announced their support of the &lt;a href=&quot;https://github.com/appc/spec&quot;&gt;App Container spec&lt;/a&gt;, of which rkt is the first implementation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“VMware is happy to provide rkt to offer our customers application container choice. rkt is the first implementation of the App Container spec (appc), and we look forward to contributing to the appc community to advance security and portability between platforms.”&lt;/p&gt;

&lt;p&gt;&amp;mdash; Kit Colbert, vice president and CTO, Cloud-Native Apps, VMware&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We are thrilled to welcome VMware into the appc and rkt communities. The appc specific was formed to create an industry standard of how applications should be deployed in containers, with a focus on portability, composability, and security. rkt is a project originated by CoreOS to provide a production-ready Linux implementation of the specification.&lt;/p&gt;

&lt;p&gt;VMware&amp;#39;s extensive experience with running applications at scale in enterprise environments will be incredibly valuable as we work together with the community towards a 1.0 release of the appc specification and the rkt project.&lt;/p&gt;

&lt;p&gt;Join us on our mission to create a secure, composable and standards-based container runtime. We welcome your involvement and contributions to rkt and appc:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;join the ongoing discussion around the appc spec through the &lt;a href=&quot;https://github.com/appc/spec/issues&quot;&gt;open issues on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;reach out on the &lt;a href=&quot;https://groups.google.com/forum/#!forum/rkt-dev&quot;&gt;rkt&lt;/a&gt; and &lt;a href=&quot;https://groups.google.com/forum/#!forum/appc-dev&quot;&gt;appc&lt;/a&gt; mailing lists&lt;/li&gt;
&lt;li&gt;to jump right in, check out the &amp;quot;Help Wanted&amp;quot; label on the &lt;a href=&quot;https://github.com/coreos/rkt/labels/help%20wanted&quot;&gt;rkt GitHub project&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>etcd 2.0 in CoreOS Alpha Image</title>
   <link href="https://coreos.com/blog/coreos-alpha-with-etcd-2/"/>
   <updated>2015-04-16T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-alpha-with-etcd-2</id>
   <content type="html">&lt;p&gt;Today we are pleased to announce that the first CoreOS image to have an &lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;etcd&lt;/a&gt; v2.0 release is now available in CoreOS alpha channel. etcd v2.0 marks a milestone in the evolution of etcd and includes many new features and improvements over etcd 0.4 including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reconfiguration protocol improvements&lt;/strong&gt;: guards against accidental misconfiguration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New raft implementation&lt;/strong&gt;: provides improved cluster stability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;On-disk safety improvements&lt;/strong&gt;: utilizes CRC checksums and append-only log behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;etcd is an open source, distributed, consistent key-value store. It is a core component of CoreOS software that facilitates safe automatic updates, coordinates work scheduled to hosts, and sets up overlay networking for containers. Check out the &lt;a href=&quot;https://coreos.com/blog/etcd-2.0-release-first-major-stable-release&quot;&gt;etcd v2.0 announcement&lt;/a&gt; for more details on etcd and the new features.&lt;/p&gt;

&lt;p&gt;We’ve been using etcd v2.0 in production behind &lt;a href=&quot;https://discovery.etcd.io&quot;&gt;discovery.etcd.io&lt;/a&gt; and &lt;a href=&quot;https://quay.io&quot;&gt;quay.io&lt;/a&gt; for a few months now and it has proven to be stable in these use cases. All existing applications that use the etcd API should work against this new version of etcd. We have tested etcd v2.0 with applications like fleet, locksmith and flannel. The user facing API to etcd should provide the same features it had in the past; if you find issues please report them on &lt;a href=&quot;https://github.com/coreos/etcd/issues&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;setup-using-cloud-init&quot;&gt;Setup Using cloud-init&lt;/h3&gt;

&lt;p&gt;If you want to dive right in and try out bootstrapping a new cluster, the &lt;a href=&quot;https://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config/#etcd2&quot;&gt;cloud-init docs&lt;/a&gt; have full details on all of the parameters. To support the new features of etcd v2.0, such as multiple listen addresses and proxy modes, a new cloud-init section named &lt;code&gt;etcd2&lt;/code&gt; is used. With a few lines of configuration and a new discovery token, you can take etcd v2.0 for a spin on your cluster. &lt;/p&gt;

&lt;h3 id=&quot;iana-ports&quot;&gt;IANA Ports&lt;/h3&gt;

&lt;p&gt;With the release of etcd2, we’ve taken the opportunity to begin the transition to our &lt;a href=&quot;http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=etcd&quot;&gt;IANA-assigned&lt;/a&gt; port numbers: 2379 and 2380. For backward compatibility, etcd2 is configured to listen on both the new and old port numbers (4001 and 7001) by default, but this can always be further restricted as desired.&lt;/p&gt;

&lt;h3 id=&quot;migration-and-changes&quot;&gt;Migration and Changes&lt;/h3&gt;

&lt;p&gt;Existing clusters running etcd 0.4 clusters will not automatically migrate to etcd v2.0. As there are semantic changes in how etcd clusters are managed between the two versions, we have decided to include both. There are &lt;a href=&quot;/etcd/docs/2.0.8/backward_compatibility.html#data-directory-migration&quot;&gt;documented methods&lt;/a&gt; to migrate to etcd v2.0 and you may do this at your own pace. We encourage users to use etcd v2.0 for all new clusters to take advantage of the large number of stability and performance improvements over the older series.&lt;/p&gt;

&lt;p&gt;In this process, we have had to break backward compatibility in two cases in order to support this change:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Starting fleet.service without explicitly starting etcd.service or etcd2.service will no longer work. If you are using fleet and need a local etcd endpoint, you will need to also start etcd.service or etcd2.service.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Starting flannel.service without explicitly starting etcd.service or etcd2.service will no longer work. If you are using flannel and need a local etcd endpoint, you will need to also start etcd.service or etcd2.service.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We have discouraged the use of this implicit dependency via our documentation but you can check if you will be affected. Make sure that etcd.service or etcd2.service are enabled or started in your cloud-config.&lt;/p&gt;

&lt;h3 id=&quot;looking-forward&quot;&gt;Looking Forward&lt;/h3&gt;

&lt;p&gt;As we look forward to etcd v2.1.0 and beyond, there are a number of exciting things shaping up inside of etcd. In the near future new features such as the &lt;a href=&quot;https://github.com/coreos/etcd/blob/master/Documentation/rfc/api_security.md&quot;&gt;authorization and authentication API&lt;/a&gt; will make it safer to operate multiple applications on a single cluster. The team has also been operating both on-going test environments that introduce regular partitions and crashes and making &lt;a href=&quot;https://github.com/coreos/etcd/blob/master/Documentation/benchmarks/etcd-2-1-0-benchmarks.md&quot;&gt;practical benchmarks&lt;/a&gt; available. In the last few days there has also been an &lt;a href=&quot;https://github.com/coreos/etcd/pull/2675&quot;&gt;active discussion&lt;/a&gt; on how to evolve the etcd APIs to better support the applications using etcd for coordination and scheduling today.&lt;/p&gt;

&lt;p&gt;We welcome your involvement in the development of etcd - via the &lt;a href=&quot;https://groups.google.com/forum/?hl=en#!forum/etcd-dev&quot;&gt;etcd-dev discussion mailing list&lt;/a&gt;, &lt;a href=&quot;https://github.com/coreos/etcd/issues&quot;&gt;GitHub issues&lt;/a&gt;, or &lt;a href=&quot;https://github.com/coreos/etcd/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22&quot;&gt;contributing&lt;/a&gt; directly to the project.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS on ARM64</title>
   <link href="https://coreos.com/blog/coreos-on-arm64/"/>
   <updated>2015-04-14T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-on-arm64</id>
   <content type="html">&lt;p&gt;&lt;em&gt;This is a guest post from CoreOS contributor, Geoff Levand, Linux Architect, Huawei America Software Lab. He has started work on an ARM64 port of CoreOS. Here is the current state of the project, followed by how you can help.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Recent patches that I&amp;#39;ve contributed to CoreOS have added basic support for a new target board named arm64-usr.  There is currently a single generic ARM64 little endian Linux profile.  This profile should work with any ARM64 platform currently supported by the mainline Linux kernel, so the ARM V8 Foundation Model, the ARM FVP_VE Fast Model, the ARM FVP_BASE Fast Model, and recent qemu-system-aarch64.  I hope to add other profiles to support an ARM64 big endian build, and also to get the eight-core HiSilicon 6220 based &lt;a href=&quot;https://www.96boards.org/products/hikey/&quot;&gt;HiKey developer board&lt;/a&gt; supported.&lt;/p&gt;

&lt;p&gt;ARM64 porting work is still in progress, so please consider what is done so far as experimental.  Some initial work I did along with Michael Marineau of CoreOS was to clean up parts of the CoreOS build system to simplify the way architectures are defined, and also to make the generic build infrastructure completely architecture agnostic.  The resulting system should make it quite straight forward to add additional architecture support to CoreOS.&lt;/p&gt;

&lt;p&gt;The ARM64 architecture is a relatively new one, so many upstream software packages have either only recently been updated to support ARM64, or have not yet been.  Much of my CoreOS porting work so far has been going through the packages which don&amp;#39;t build and figuring out how to get them to build.  Sometimes a package can be updated to the latest upstream, sometimes a package keyword can be set, sometimes a modification to the ebuild in coreos-overlay will work, and other times a combination of these are needed.  This process is still ongoing, and some difficult packages still lay ahead.  The resulting arm64-usr build is experimental and all the work to bring it up will need testing and review in the future.&lt;/p&gt;

&lt;p&gt;There is still a lot of work to be done.  Many more packages need to be brought up, and as I mentioned, this involves working at a low level with the package ebuild files and the CoreOS build system.  At another level, all the CoreOS features will need to be exercised and verified as needed to bring up the stability and confidence of the port.  There are going to be multi-arch clusters, so ARM64 and x86_64 nodes are going to need to work together -- it sounds pretty cool.  Someone will need to get in there and make that happen.  If you have any interest in the ARM64 port I encourage you get involve and help out.&lt;/p&gt;

&lt;p&gt;For general info about the port you can look at &lt;a href=&quot;http://github.com/glevand&quot;&gt;my Github site&lt;/a&gt;.  For those who would like to investigate more, or even help with the effort, see my &lt;a href=&quot;https://glevand.github.io/coreos/coreos-arm64-howto.txt&quot;&gt;CoreOS ARM64 HOWTO document&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Continue the discussion with Geoff at &lt;a href=&quot;https://coreos.com/fest/&quot;&gt;CoreOS Fest&lt;/a&gt; and on freenode in #coreos as geoff-&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Counting Down to CoreOS Fest on May 4 and 5</title>
   <link href="https://coreos.com/blog/countdown-to-coreos-fest/"/>
   <updated>2015-04-13T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/countdown-to-coreos-fest</id>
   <content type="html">&lt;p&gt;As we count down to the inaugural &lt;a href=&quot;https://coreos.com/fest&quot;&gt;CoreOS Fest&lt;/a&gt; in just three weeks, we are thrilled to announce additional speakers and the agenda! CoreOS Fest will be May 4-5 at The Village at 969 Market Street in San Francisco and we hope you will join us.&lt;/p&gt;

&lt;p&gt;CoreOS Fest is a two-day event about the tools and best practices used to build modern infrastructure stacks. CoreOS Fest connects people from all levels of the community with future-thinking industry veterans to learn how to build distributed systems that support application containers. This May’s festival is brought to you by our premier sponsor &lt;a href=&quot;http://intel.com/&quot;&gt;Intel&lt;/a&gt;, and additional sponsors &lt;a href=&quot;https://sysdigcloud.com/&quot;&gt;Sysdig&lt;/a&gt;, &lt;a href=&quot;https://chef.io/&quot;&gt;Chef&lt;/a&gt;, &lt;a href=&quot;https://mesosphere.com/&quot;&gt;Mesosphere&lt;/a&gt;, &lt;a href=&quot;http://metaswitch.com/&quot;&gt;Metaswitch Networks&lt;/a&gt; and &lt;a href=&quot;https://giantswarm.io/&quot;&gt;Giant Swarm&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;CoreOS Fest will include speakers from Google, Intel, Salesforce Data.com, HP, and more, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://twitter.com/brendandburns/&quot;&gt;Brendan Burns&lt;/a&gt;, software engineer at Google and founder of Kubernetes&lt;/strong&gt;, will provide a technical overview of Kubernetes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://twitter.com/ongardie&quot;&gt;Diego Ongaro&lt;/a&gt;, creator of Raft&lt;/strong&gt;, will discuss the Raft Consensus Algorithm&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/mezcalero&quot;&gt;Lennart Poettering&lt;/a&gt;, creator of systemd&lt;/strong&gt;, will talk about systemd at the Core of the OS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://twitter.com/lynxbat&quot;&gt;Nicholas Weaver&lt;/a&gt;, director of SDI-X at Intel&lt;/strong&gt;, will demonstrate how we can optimize container architectures for the next level of scale&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.linkedin.com/in/rudraraju&quot;&gt;Prakash Rudraraju&lt;/a&gt;, manager of technical operations at Salesforce Data.com&lt;/strong&gt;, will join Brian Harrington, principal architect at CoreOS, for a fireside chat on how Salesforce Data.com is thinking about distributed systems and application containers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://twitter.com/entropyworks&quot;&gt;Yazz Atlas&lt;/a&gt;, HPCS principle engineer with Hewlett-Packard Advanced Technology Group&lt;/strong&gt;, will give a presentation on automated MySQL Cluster Failover using Galera Cluster on CoreOS Linux&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://twitter.com/lorisdegio&quot;&gt;Loris Degioanni&lt;/a&gt;, CEO and founder of Sysdig and co-creator of Wireshark&lt;/strong&gt;, will present the dark art of container monitoring&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://twitter.com/gabrtv&quot;&gt;Gabriel Monroy&lt;/a&gt;, CTO at OpDemand/Deis&lt;/strong&gt;, will discuss lessons learned from building platforms on top of CoreOS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/spencerkimball&quot;&gt;Spencer Kimball&lt;/a&gt;, founder of Cockroach Labs&lt;/strong&gt;, will talk about CockroachDB&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://twitter.com/winsletts&quot;&gt;Chris Winslett&lt;/a&gt;, product manager at Compose.io&lt;/strong&gt;, will present etcd based Postgres SQL HA Cluster&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://twitter.com/teemow&quot;&gt;Timo Derstappen&lt;/a&gt;, co-founder of Giant Swarm&lt;/strong&gt;, will present Containers on the Autobahn&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More speakers will be added at &lt;a href=&quot;https://coreos.com/fest/&quot;&gt;https://coreos.com/fest/&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;As a part of today&amp;#39;s schedule announcement, we are offering 10 percent off the regular ticket price until tomorrow, April 14, at 10 a.m. PT. Use &lt;a href=&quot;https://ti.to/coreos/CoreOSFest/with/tgbvcqtte2w&quot;&gt;this link&lt;/a&gt; to reserve your 10 percent off ticket. Tickets are selling fast so get them before we sell out! &lt;/p&gt;

&lt;p&gt;Once again, CoreOS Fest thanks its top level sponsor &lt;a href=&quot;http://intel.com/&quot;&gt;Intel&lt;/a&gt; and additional sponsors, including &lt;a href=&quot;https://sysdigcloud.com/&quot;&gt;Sysdig&lt;/a&gt;, &lt;a href=&quot;https://chef.io/&quot;&gt;Chef&lt;/a&gt;, &lt;a href=&quot;https://mesosphere.com/&quot;&gt;Mesosphere&lt;/a&gt;, &lt;a href=&quot;http://metaswitch.com/&quot;&gt;Metaswitch Networks&lt;/a&gt; and &lt;a href=&quot;https://giantswarm.io/&quot;&gt;Giant Swarm&lt;/a&gt;. If you’re interested in participating at CoreOS Fest as a sponsor, contact &lt;a href=&quot;mailto:fest@coreos.com&quot;&gt;fest@coreos.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For more CoreOS Fest news, follow along &lt;a href=&quot;https://twitter.com/coreoslinux&quot;&gt;@coreoslinux&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/search?q=%23coreosfest&quot;&gt;#CoreOSFest&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Upcoming CoreOS Events in April</title>
   <link href="https://coreos.com/blog/coreos-april-events/"/>
   <updated>2015-04-07T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-april-events</id>
   <content type="html">&lt;p&gt;Supplied with fresh CoreOS t-shirts and half our weight in airport Cinnabons, we’ve made sure that you’ll be seeing a lot of us this April. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, April 8, 2015 at 10:15 a.m. EDT - Philadelphia, PA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Don’t miss Kelsey Hightower (@kelseyhightower), developer advocate and toolsmith at CoreOS, kick off our April events by speaking at &lt;a href=&quot;http://phillyemergingtech.com/&quot;&gt;ETE Conference&lt;/a&gt;. He’ll be discussing managing containers at scale with &lt;a href=&quot;https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/getting-started-guides/coreos.md&quot;&gt;CoreOS and Kubernetes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thursday, April 16, 2015 at 7:00 p.m. CET - Amsterdam, Netherlands&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kelsey Hightower will be giving an introduction to &lt;a href=&quot;https://coreos.com/using-coreos/clustering/&quot;&gt;fleet&lt;/a&gt;, CoreOS and building large reliable systems at the &lt;a href=&quot;http://www.meetup.com/Docker-Randstad/&quot;&gt;Docker Randstad Meetup&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thursday, April 16, 2015 at 6:00 p.m. PDT - San Francisco, CA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Brian Harrington will be giving an overview of CoreOS at &lt;a href=&quot;http://www.eventbrite.com/e/cloudcamp-sf-all-things-containers-tickets-15984034678&quot;&gt;CloudCamp&lt;/a&gt;. This is an unconference dedicated to all things containers. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Friday, April 17, 2015 - San Francisco, CA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Joined by a few of our very own, CoreOS CTO Brandon Philips (@BrandonPhilips) will be speaking at &lt;a href=&quot;http://www.sponseasy.com/p/container-camp&quot;&gt;Container Camp&lt;/a&gt;. This event focuses on the latest developments in software virtualization. Get your tickets &lt;a href=&quot;https://ti.to/brandsmith/container-camp-2015&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday April 21 - Saturday, April 25, 2015 - Berlin, Germany&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This year we’ll be attending Open Source Data Center Conference &lt;a href=&quot;http://www.netways.de/osdc&quot;&gt;(OSDC)&lt;/a&gt; where Kelsey Hightower will be talking on &lt;a href=&quot;http://www.netways.de/osdc/osdc2015/program/hightower_building_distributed_systems_with_coreos_copy_1/&quot;&gt;building distributed systems with CoreOS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, April 22 at 6:30p.m. CET - Berlin, Germany&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re in Berlin, be sure to check out Kelsey Hightower talk about managing containers at scale with CoreOS and Kubernetes. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;h2 id=&quot;in-case-you-missed-it&quot;&gt;In case you missed it&lt;/h2&gt;

&lt;p&gt;In case you missed it, check out &lt;a href=&quot;https://twitter.com/winsletts&quot;&gt;Chris Winslett&lt;/a&gt; from &lt;a href=&quot;https://www.compose.io/&quot;&gt;Compose.io&lt;/a&gt; talk about an etcd-based PostgreSQL HA Cluster:&lt;/p&gt;

&lt;iframe width=&quot;640&quot; height=&quot;360&quot; src=&quot;https://www.youtube.com/embed/CYtaZZjPXTs?rel=0&amp;amp;showinfo=0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;coreos-fest&quot;&gt;CoreOS Fest&lt;/h2&gt;

&lt;p&gt;Don’t forget that &lt;a href=&quot;https://coreos.com/fest/&quot;&gt;CoreOS Fest&lt;/a&gt; is happening the following month on May 4 and 5! We’ve released a tentative schedule and our &lt;a href=&quot;https://coreos.com/blog/coreos-fest-speakers-announced/&quot;&gt;first round of speakers&lt;/a&gt;. Keep checking back for more updates as the event gets closer.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Announcing Tectonic: The Commercial Kubernetes Platform</title>
   <link href="https://coreos.com/blog/announcing-tectonic/"/>
   <updated>2015-04-06T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/announcing-tectonic</id>
   <content type="html">&lt;p&gt;&lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
&lt;meta name=&quot;twitter:site&quot; content=&quot;@coreoslinux&quot;&gt;
&lt;meta name=&quot;twitter:creator&quot; content=&quot;@polvi&quot;&gt;
&lt;meta name=&quot;twitter:title&quot; content=&quot;Announcing Tectonic and Google Ventures Funding&quot;&gt;
&lt;meta name=&quot;twitter:description&quot; content=&quot;CoreOS announces Tectonic, the Kubernetes + CoreOS platform for businesses, and additional funding led by Google Ventures to bring Kubernetes to the enterprise.&quot;&gt;
&lt;meta name=&quot;twitter:image:src&quot; content=&quot;https://coreos.com/assets/images/media/tectonic-launch.png&quot;&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/tectonic-launch.png&quot; alt=&quot;CoreOS Tech Stack + Kubernetes&quot; style=&quot;margin: 0 auto; display: block; margin-bottom: 20px;&quot;&gt;&lt;/p&gt;

&lt;p&gt;Our technology is often characterized as “Google’s infrastructure for everyone else.” Today we are excited to make this idea a reality by announcing &lt;a href=&quot;https://tectonic.com&quot;&gt;Tectonic&lt;/a&gt;, a commercial Kubernetes platform. Tectonic provides the combined power of the CoreOS portfolio and the Kubernetes project to any cloud or on-premise environment. &lt;/p&gt;

&lt;h2 id=&quot;why-we-are-building-tectonic&quot;&gt;Why we are building Tectonic&lt;/h2&gt;

&lt;p&gt;Our users want to securely run containers at scale in a distributed environment. We help companies do this by building open source tools which allow teams to create this type of infrastructure. With Tectonic, we now have an option for companies that want a preassembled and enterprise-ready distribution of these tools, allowing them to quickly see the benefits of modern container infrastructure.&lt;/p&gt;

&lt;h2 id=&quot;what-is-tectonic?&quot;&gt;What is Tectonic?&lt;/h2&gt;

&lt;p&gt;Tectonic is a platform combining Kubernetes and the CoreOS stack. Tectonic pre-packages all of the components required to build Google-style infrastructure and adds additional commercial features, such as a management console for workflows and dashboards, an integrated registry to build and share Linux containers, and additional tools to automate deployment and customize rolling updates. &lt;/p&gt;

&lt;p&gt;Tectonic is available today to a select number of early customers. Head over to &lt;a href=&quot;https://tectonic.com&quot;&gt;tectonic.com&lt;/a&gt; to sign up for the waitlist if your company is interested in participating. &lt;/p&gt;

&lt;h2 id=&quot;what-is-kubernetes?&quot;&gt;What is Kubernetes?&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://kubernetes.io&quot;&gt;Kubernetes&lt;/a&gt; is an open source project introduced by Google to help organizations run their infrastructure in a similar manner to the internal infrastructure that runs Google Search, Gmail, and other Google services. The concepts and workflows in Kubernetes are designed to help engineers focus on their application instead of infrastructure and build for high availability of services. With the Kubernetes APIs, users can manage application infrastructure - such as load balancing, service discovery, and rollout of new versions - in a way that is consistent and fault-tolerant.&lt;/p&gt;

&lt;h2 id=&quot;tectonic-and-coreos&quot;&gt;Tectonic and CoreOS&lt;/h2&gt;

&lt;p&gt;Tectonic is a commercial product, and with this release, we have decided to launch our commercial products under a new brand, separate from the CoreOS name. We want our open source components - like etcd, rkt, flannel, and CoreOS Linux - to always be freely available for everyone under their respective open source licenses. We think open source development works best when it is community-supported infrastructure that we all share and build with few direct commercial motives. To that end, we want to keep CoreOS focused on building completely open source components. &lt;/p&gt;

&lt;p&gt;To get access to an early release of Tectonic or to learn more, visit tectonic.com. To contribute and learn more about our open source projects visit coreos.com.&lt;/p&gt;

&lt;h2 id=&quot;google-ventures-funding&quot;&gt;Google Ventures Funding&lt;/h2&gt;

&lt;p&gt;In addition to introducing Tectonic, today we are announcing an investment in CoreOS, Inc. led by &lt;a href=&quot;https://gv.com&quot;&gt;Google Ventures&lt;/a&gt;. It is great to have the support and backing of Google Ventures as we bring the Kubernetes platform to market. The investment will help us accelerate our efforts to secure the backend of the Internet and deliver Google-like infrastructure to everyone else. &lt;/p&gt;

&lt;h2 id=&quot;faq&quot;&gt;FAQ&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q&lt;/strong&gt;: What does this change about CoreOS Linux and other open source projects like rkt, etcd, fleet, flannel, etc?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: Nothing: development will continue, and we want to see all of the open source projects continue to thrive as independent components. CoreOS Linux will remain the same carefully maintained, open source, and container-focused OS it has always been. Tectonic uses many of these projects internally - including rkt, etcd, flannel, and fleet - and runs on top of the same CoreOS Linux operating system as any other application would. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q&lt;/strong&gt;: I am using Apache Mesos, Deis, or another application on top of CoreOS Linux: does anything change for me?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: No, this announcement doesn&amp;#39;t change anything about the CoreOS Linux project or software. Tectonic is simply another container-delivered application that runs on top of CoreOS Linux.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q&lt;/strong&gt;: What does this change for existing Enterprise Registry, Managed Linux, or Quay.io customers?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: Everything will remain the same for existing customers. All of these components are utilized in the Tectonic stack and we continue to offer support, fix bugs and add features to these products.&lt;/p&gt;

&lt;hr/&gt;

&lt;p&gt;Follow &lt;a href=&quot;https://twitter.com/tectonicstack&quot;&gt;@TectonicStack&lt;/a&gt; on Twitter &lt;/p&gt;

&lt;p&gt;Go to &lt;a href=&quot;https://tectonic.com/&quot;&gt;Tectonic.com&lt;/a&gt; to join an early release or to stay up to date on Tectonic news&lt;/p&gt;

&lt;p&gt;Visit us in person at &lt;a href=&quot;https://coreos.com/fest&quot;&gt;CoreOS Fest&lt;/a&gt; in San Francisco May 4-5, to learn more about CoreOS, Tectonic and all things distributed systems&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Announcing rkt v0.5, featuring pods, overlayfs, and more </title>
   <link href="https://coreos.com/blog/announcing-rkt-0.5/"/>
   <updated>2015-04-01T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/announcing-rkt-0.5</id>
   <content type="html">&lt;p&gt;rkt is a new container runtime for applications, intended to meet the most demanding production requirements of security, efficiency and composability. rkt is also an implementation of the emerging &lt;a href=&quot;https://github.com/appc/spec&quot;&gt;Application Container (appc) specification&lt;/a&gt;, an open specification defining how applications can be run in containers. Today we are announcing the next major release of rkt, v0.5, with a number of new features that bring us closer to these goals, and want to give an update on the upcoming roadmap for the rkt project. &lt;/p&gt;

&lt;h3 id=&quot;appc-v0.5---introducing-pods&quot;&gt;appc v0.5 - introducing pods&lt;/h3&gt;

&lt;p&gt;This release of rkt updates to the &lt;a href=&quot;https://github.com/appc/spec/releases&quot;&gt;latest version of the appc spec&lt;/a&gt;, which introduces &lt;em&gt;pods&lt;/em&gt;. Pods encapsulate a group of Application Container Images and describe their runtime environment, serving as a first-class unit for application container execution.&lt;/p&gt;

&lt;p&gt;Pods are a concept recently popularised by Google&amp;#39;s &lt;a href=&quot;http://kubernetes.io/&quot;&gt;Kubernetes&lt;/a&gt; project. The idea emerged from the recognition of a powerful, pervasive pattern in deploying applications in containers, particularly at scale. The key insight is that, while one of the main value propositions of containers is for applications to run in isolated and self-contained environments, it is often useful to co-locate certain &amp;quot;helper&amp;quot; applications within a container. These applications have an intimate knowledge of each other - they are designed and developed to work co-operatively - and hence can share the container environment without conflict, yet still be isolated from interfering with other application containers on the same system.&lt;/p&gt;

&lt;p&gt;A classic example of a pod is service discovery using the sidekick model, wherein the main application process serves traffic, and the sidekick process uses its knowledge of the pod environment to register the application in the discovery service. The pod links together the lifecycle of the two processes and ensures they can be jointly deployed and constrained in the cluster. &lt;/p&gt;

&lt;p&gt;Another simple example is a database co-located with a backup worker. In this case, the backup worker could be isolated from interfering with the database&amp;#39;s work - through memory, I/O and CPU limits applied to the process - but when the database process is shut down the backup process will terminate too. By making the backup worker an independent application container, and making pods the unit of deployment, we can reuse the worker for backing up data from a variety of applications: SQL databases, file stores or simple log files.&lt;/p&gt;

&lt;p&gt;This is the power that pods provide: they encapsulate a self-contained, deployable unit that still provides granularity (for example, per-process isolators) and facilitates advanced use cases. Bringing pods to rkt enables it to natively model a huge variety of application use cases, and integrate tightly with cluster-level orchestration systems like Kubernetes.&lt;/p&gt;

&lt;p&gt;For more information on pods, including the technical definition, check out the &lt;a href=&quot;https://github.com/appc/spec/blob/master/SPEC.md#app-container-pods-pods&quot;&gt;appc spec&lt;/a&gt; or the &lt;a href=&quot;https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/pods.md&quot;&gt;Kubernetes documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;overlayfs-support&quot;&gt;overlayfs support&lt;/h3&gt;

&lt;p&gt;On modern Linux systems, rkt now uses &lt;a href=&quot;https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/overlayfs.txt&quot;&gt;overlayfs&lt;/a&gt; by default when running application containers. This provides immense benefits to performance and efficiency: start times for large containers will be much faster, and multiple pods using the same images will consume less disk space and can share page cache entries. &lt;/p&gt;

&lt;p&gt;If overlayfs is not supported on the host operating system, rkt gracefully degrades back to the previous behaviour of extracting each image at runtime - this behaviour can also be triggered with the new &lt;code&gt;--no-overlay&lt;/code&gt; flag to &lt;code&gt;rkt run&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Another improvement behind the scenes is the introduction of a &lt;em&gt;tree cache&lt;/em&gt; for rkt&amp;#39;s local image storage. When storing ACIs in its local database (for example, after pulling them from a remote repository using &lt;code&gt;rkt fetch&lt;/code&gt;), rkt will now store the expanded root filesystem of the image on disk. This means that when pods that reference this image are subsequently started (via &lt;code&gt;rkt run&lt;/code&gt;), the pod filesystem can be created almost instantaneously in the case of overlayfs - or, without overlayfs, by using a simple copy instead of needing to expand the image again from its compressed format.&lt;/p&gt;

&lt;p&gt;To facilitate simultaneous use of the tree store by multiple rkt invocations, file-based locking has been added to ensure images that are in use cannot be removed. Future versions of rkt will expose more advanced capabilities to manage images in the store.&lt;/p&gt;

&lt;h3 id=&quot;stage1-from-source&quot;&gt;stage1 from source&lt;/h3&gt;

&lt;p&gt;When executing application containers, rkt uses a modular approach (described in the &lt;a href=&quot;https://github.com/coreos/rkt/blob/master/Documentation/architecture.md&quot;&gt;architecture documentation&lt;/a&gt;) to support swappable, alternative execution environments. The default stage1 that we develop with rkt itself is based on systemd, but alternative implementations can leverage different technologies like KVM-based virtual machines to execute applications. &lt;/p&gt;

&lt;p&gt;In earlier versions of rkt, the pre-bundled stage1 was assembled from a copy of the CoreOS Linux distribution image. We have been working hard to decouple this process to make it easier to package rkt for different operating systems and in different build environments. In rkt 0.5, the default stage1 is now constructed from source code, and over the next few releases we will make it easier to build alternative stage1 images by documenting and &lt;a href=&quot;https://github.com/coreos/rkt/issues/572&quot;&gt;stabilizing the ABI&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;&amp;quot;rocket&amp;quot;,-&amp;quot;rocket&amp;quot;,-&amp;quot;rkt&amp;quot;?&quot;&gt;&amp;quot;Rocket&amp;quot;, &amp;quot;rocket&amp;quot;, &amp;quot;rkt&amp;quot;?&lt;/h3&gt;

&lt;p&gt;This release also sees us standardizing on a single name for all areas of the project - the command-line tool, filesystem names and Unix groups, and the title of the project itself. Instead of &amp;quot;rocket&amp;quot;, &amp;quot;Rocket&amp;quot;, or &amp;quot;rock&amp;#39;t&amp;quot;, we now simply use &amp;quot;rkt&amp;quot;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/rkt-horizontal-color.png&quot; alt=&quot;rkt logo&quot; style=&quot;max-width: 200px&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;looking-forward&quot;&gt;Looking forward&lt;/h3&gt;

&lt;p&gt;rkt is a young project and the last few months have seen rapid changes to the codebase. As we look towards rkt 0.6 and beyond, we will be focusing on making it possible to depend on rkt to roll-forward from version to version without breaking working setups. There are several areas that are needed to make this happen, including reaching the initial stable version (1.0) of the appc spec, implementing &lt;a href=&quot;https://github.com/coreos/rkt/issues/600&quot;&gt;functional testing&lt;/a&gt;, stabilizing the on-disk formats, and implementing &lt;a href=&quot;https://github.com/coreos/rkt/issues/706&quot;&gt;schema upgrades&lt;/a&gt; for the store. We realize that stability is vital for people considering using rkt in production environments, and this will be a priority in the next few releases. The goal is to make it possible for a user that was happily using rkt 0.6 to upgrade to rkt 0.7 without having to remove their downloaded ACIs or configuration files.&lt;/p&gt;

&lt;p&gt;We welcome your involvement in the development of rkt - via the &lt;a href=&quot;https://groups.google.com/forum/#!forum/rkt-dev&quot;&gt;rkt-dev discussion mailing list&lt;/a&gt;, &lt;a href=&quot;https://github.com/coreos/rkt/issues&quot;&gt;GitHub issues&lt;/a&gt;, or &lt;a href=&quot;https://github.com/coreos/rkt/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22&quot;&gt;contributing&lt;/a&gt; directly to the project. &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS Fest 2015 First Round of Speakers Announced</title>
   <link href="https://coreos.com/blog/coreos-fest-speakers-announced/"/>
   <updated>2015-03-27T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-fest-speakers-announced</id>
   <content type="html">&lt;p&gt;As you might already know, we’re launching our first ever &lt;a href=&quot;/fest&quot;&gt;CoreOS Fest&lt;/a&gt; this May 4th and 5th in San Francisco! We’ve been hard at work making sure that this event is two days filled with all things distributed, and all things awesome. &lt;/p&gt;

&lt;p&gt;In addition to many CoreOS project leads taking the stage, we are excited to announce a sneak peek at some of our community speakers. Join us at CoreOS Fest and you’ll hear from some of the most influential people in distributed systems today: Brendan Burns, one of the founders of Kubernetes; Diego Ongaro, the creator of Raft; Gabriel Monroy, the creator of Deis; Spencer Kimball, CEO of Cockroach Labs; Loris Degioanni, CEO of Sysdig; and many more! &lt;/p&gt;

&lt;p&gt;We are still accepting submissions for speakers through March 31st, so we encourage you to submit your talk in our &lt;a href=&quot;https://cfp.coreos.com/en/coreosfest-spring-2015/cfp/session/new&quot;&gt;Call for Papers portal&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;While the schedule will be live in the coming weeks, here&amp;#39;s a high level overview: &lt;/p&gt;

&lt;p&gt;We’ll kick off day one at 9 AM PDT (with registration and breakfast beforehand) with a single track of speakers, followed by lunch, then afternoon panels and breakouts. You’ll have lots of opportunities to connect and talk with fellow attendees, especially at an evening reception on the first day. Day two will include breakfast, single-track talks, lunch, panels and more.&lt;/p&gt;

&lt;h2 id=&quot;confirmed-speakers&quot;&gt;Confirmed Speakers&lt;/h2&gt;

&lt;p&gt;See more about our first round of speakers:&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;div class=&quot;row&quot;&gt;
  &lt;div class=&quot;col-lg-10 col-md-12 col-sm-12 col-xs-12&quot;&gt;
    &lt;div class=&quot;row&quot;&gt;
      &lt;div class=&quot;col-lg-2 col-md-2 col-sm-2 col-xs-3&quot;&gt;
        &lt;img src=&quot;/assets/images/photos/Brendan.png&quot; alt=&quot;Brendan Burns&quot; /&gt;
      &lt;/div&gt;
      &lt;div class=&quot;col-lg-10 col-md-10 col-sm-8 col-xs-9&quot;&gt;
        &lt;div&gt;Brendan Burns&lt;/div&gt;
        &lt;div&gt;Software Engineer at Google and a founder of the Kubernetes project&lt;/div&gt;
        &lt;p&gt;Brendan works in the Google Cloud Platform, leading engineering efforts to make the Google Cloud Platform the best place to run containers. He also has managed several other cloud teams including the Managed VMs team, and Cloud DNS. Prior to Cloud, he was a lead engineer in Google’s web search infrastructure, building backends that powered social and personal search. Prior to working at Google, he was a professor at Union College in Schenectady, NY. He received a PhD in Computer Science from the University of Massachusetts Amherst, and a BA in Computer Science and Studio Art from Williams College.&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;hr&gt;
  &lt;/div&gt;
  &lt;div class=&quot;col-lg-10 col-md-12 col-sm-12 col-xs-12&quot;&gt;
    &lt;div class=&quot;row&quot;&gt;
      &lt;div class=&quot;col-lg-2 col-md-2 col-sm-2 col-xs-3&quot;&gt;
        &lt;img src=&quot;/assets/images/photos/Diego.png&quot; alt=&quot;Diego Ongaro&quot; /&gt;
      &lt;/div&gt;
      &lt;div class=&quot;col-lg-10 col-md-10 col-sm-8 col-xs-9&quot;&gt;
        &lt;div&gt;Diego Ongaro&lt;/div&gt;
        &lt;div&gt;Creator of &lt;a href=&quot;http://raftconsensus.github.io&quot;&gt;Raft&lt;/a&gt;&lt;/div&gt;
        &lt;p&gt;Diego recently completed his doctorate with John Ousterhout at Stanford. During his doctorate, he worked on RAMCloud (a 5-10 microsecond RTT key-value store), Raft, and LogCabin (a coordination service built with Raft). He’s lately been continuing development on LogCabin as an independent contractor.&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;hr&gt;
  &lt;/div&gt;
  &lt;div class=&quot;col-lg-10 col-md-12 col-sm-12 col-xs-12&quot;&gt;
    &lt;div class=&quot;row&quot;&gt;
      &lt;div class=&quot;col-lg-2 col-md-2 col-sm-2 col-xs-3&quot;&gt;
        &lt;img src=&quot;/assets/images/photos/Gabriel.png&quot; alt=&quot;Gabriel Monroy&quot; /&gt;
      &lt;/div&gt;
      &lt;div class=&quot;col-lg-10 col-md-10 col-sm-8 col-xs-9&quot;&gt;
        &lt;div&gt;Gabriel Monroy&lt;/div&gt;
        &lt;div&gt;CTO of &lt;a href=&quot;http://opdemand.com/&quot;&gt;OpDemand&lt;/a&gt; and creator of &lt;a href=&quot;http://deis.io/&quot;&gt;Deis&lt;/a&gt;&lt;/div&gt;
        &lt;p&gt;Gabriel Monroy is CTO at OpDemand and the creator of Deis, the leading CoreOS-based PaaS.  As an early contributor to Docker and CoreOS, Gabriel has deep experience putting containers into production and frequently advises organizations on PaaS, container automation and distributed systems.  Gabriel spoke recently at QConSF on cluster scheduling and deploying containers at scale.&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;hr&gt;
  &lt;/div&gt;
  &lt;div class=&quot;col-lg-10 col-md-12 col-sm-12 col-xs-12&quot;&gt;
    &lt;div class=&quot;row&quot;&gt;
      &lt;div class=&quot;col-lg-2 col-md-2 col-sm-2 col-xs-3&quot;&gt;
        &lt;img src=&quot;/assets/images/photos/Spencer.png&quot; alt=&quot;Spencer Kimball&quot; /&gt;
      &lt;/div&gt;
      &lt;div class=&quot;col-lg-10 col-md-10 col-sm-8 col-xs-9&quot;&gt;
        &lt;div&gt;Spencer Kimball&lt;/div&gt;
        &lt;div&gt;CEO of &lt;a href=&quot;http://cockroachdb.org/&quot;&gt;Cockroach Labs&lt;/a&gt;&lt;/div&gt;
        &lt;p&gt;Spencer is CEO of Cockroach Labs. After helping to re-architect and re-implement Square's items catalog service, Spencer was convinced that the industry needed a more capable database software. He began work on the design and implementation of Cockroach as an open source project and moved to work on it full time at Square mid-2014. Spencer managed the acquisition of Viewfinder by Square as CEO and before that, shared the roles of co-CTO and co-founder. Previously, he worked at Google on systems and web application infrastructure, most recently helping to build Colossus, Google’s exascale distributed file system, and on Java infrastructure, including the open-sourced Google Servlet Engine.&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;hr&gt;
  &lt;/div&gt;
  &lt;div class=&quot;col-lg-10 col-md-12 col-sm-12 col-xs-12&quot;&gt;
    &lt;div class=&quot;row&quot;&gt;
      &lt;div class=&quot;col-lg-2 col-md-2 col-sm-2 col-xs-3&quot;&gt;
        &lt;img src=&quot;/assets/images/photos/Loris.png&quot; alt=&quot;Loris Degioanni&quot; /&gt;
      &lt;/div&gt;
      &lt;div class=&quot;col-lg-10 col-md-10 col-sm-8 col-xs-9&quot;&gt;
        &lt;div&gt;Loris Degioanni&lt;/div&gt;
        &lt;div&gt;CEO of &lt;a href=&quot;http://www.sysdig.org/&quot;&gt;Sysdig&lt;/a&gt;&lt;/div&gt;
        &lt;p&gt;Loris is the creator and CEO of Sysdig, a popular open source troubleshooting tool for Linux environments. He is a pioneer in the field of network analysis through his work on WinPcap and Wireshark: open source tools with millions of users worldwide. Loris was previously a senior director of technology at Riverbed, and co-founder/CTO at CACE Technologies, the company behind Wireshark. Loris holds a PhD in computer engineering from Politecnico di Torino, Italy.&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;hr&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Excited? Stay tuned for more announcements and join us at CoreOS Fest 2015.&lt;/p&gt;

&lt;p&gt;Buy your early bird ticket by March 31st: &lt;a href=&quot;https://coreos.com/fest/&quot;&gt;&lt;a href=&quot;https://coreos.com/fest/&quot;&gt;https://coreos.com/fest/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Submit a speaking abstract by March 31st: &lt;a href=&quot;https://cfp.coreos.com/en/coreosfest-spring-2015/cfp/session/new&quot;&gt;CFP Portal&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Become a sponsor, &lt;a href=&quot;mailto:fest@coreos.com?Subject=CoreOS Fest Sponsorship&quot;&gt;email us for more details&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>What makes a cluster a cluster?</title>
   <link href="https://coreos.com/blog/cluster-osi-model/"/>
   <updated>2015-03-20T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/cluster-osi-model</id>
   <content type="html">&lt;p&gt;&lt;em&gt;“What makes a cluster a cluster?”&lt;/em&gt; - Ask that question of 10 different engineers and you’ll get 10 different answers. Some look at it from a hardware perspective, some see it as a particular set of cloud technologies, and some say it’s the protocols exchanging information on the network.&lt;/p&gt;

&lt;p&gt;With this ever-growing field of distributed systems technologies, it is helpful to compare the goals, roles and differences of some of these new projects based on their functionality. In this post we propose a conceptual description of the cluster at large, while showing some examples of emerging distributed systems technologies. &lt;/p&gt;

&lt;h2 id=&quot;layers-of-abstraction&quot;&gt;Layers of abstraction&lt;/h2&gt;

&lt;p&gt;The tech community has long agreed on what a network looks like. We’ve largely come to agree, in principle, on the &lt;a href=&quot;http://en.wikipedia.org/wiki/OSI_model&quot;&gt;OSI (Open Systems Interconnection) model&lt;/a&gt; (and in practice, on its close cousin, the &lt;a href=&quot;http://en.wikipedia.org/wiki/Internet_protocol_suite#Comparison_of_TCP.2FIP_and_OSI_layering&quot;&gt;TCP/IP model&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;A key aspect of this model is the separation of concerns, with well-defined responsibilities and dependence between components: every layer depends on the layer below it and provides useful network functionality (connection, retry, packetization) to the layer above it. At the top, finally, are web sessions and applications of all sorts running and abstracting communication.&lt;/p&gt;

&lt;p&gt;So, as an exercise to try to answer “What makes a cluster a cluster?” let’s apply the same sort of thinking to layers of abstraction in terms of execution of code on a group of machines, instead of communication between these machines.&lt;/p&gt;

&lt;p&gt;Here’s a snapshot of the OSI model, applied to containers and clustering: &lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/osi-model-clustering.svg&quot; alt=&quot;OSI Applied to Clustering&quot; style=&quot;margin: 0 auto; display: block; margin-bottom: 20px;&quot;&gt;&lt;/p&gt;

&lt;p&gt;Let’s take a look from the bottom up.&lt;/p&gt;

&lt;h2 id=&quot;level-1,-hardware&quot;&gt;Level 1, Hardware&lt;/h2&gt;

&lt;p&gt;The hardware layer is where it all begins. In a modern environment, this may mean physical (bare metal) or virtualized hardware – abstraction knows no bounds – but for our purposes, we define hardware as the CPU, RAM, disk and network equipment that is rented or bought in discrete units.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Examples: bare metal, virtual machines, cloud&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;level-2,-os/machine-abi&quot;&gt;Level 2, OS/Machine ABI&lt;/h2&gt;

&lt;p&gt;The OS layer is where we define how software executes on the hardware: the OS gives us the Application Binary Interface (ABI) by which we agree on a common language that our userland applications speak to the OS (system calls, device drivers, and so on). We also set up a network stack so that these machines can communicate amongst each other. This layer therefore provides our lowest level complete execution environment for applications. &lt;/p&gt;

&lt;p&gt;Now, traditionally, we stop here, and run our final application on top of this as a third pseudo-layer of the OS and various user-space packages. We provision individual machines with slightly different software stacks (a database server, an app server) and there’s our server rack. &lt;/p&gt;

&lt;p&gt;Over the lifetime of servers and software, however, the permutations and histories of individual machine configurations start to become unwieldy. As an industry, we are learning that managing this complexity becomes costly or infeasible over time, even at moderate scale (e.g. 3+ machines). &lt;/p&gt;

&lt;p&gt;This is often where people start to talk about containers, as containers treat the entire OS userland as one hermetic application package that can be managed as an independent unit. Because of this abstraction, we can conceptually shift containers up the stack, as long as they’re above layer 2. We’ll revisit containers in layer 6.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Examples: kernel + {systemd, cgroups/namespaces, jails, zones}&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;level-3,-cluster-consensus&quot;&gt;Level 3, Cluster Consensus&lt;/h2&gt;

&lt;p&gt;To begin to mitigate the complexity of managing individual servers, we need to start thinking about machines in some greater, collective sense: this is our first notion of a &lt;em&gt;cluster&lt;/em&gt;. We want to write software that scales across these individual servers and shares work effortlessly.&lt;/p&gt;

&lt;p&gt;However, as we add more servers to the picture, we now introduce many more points of failure: networks partition, machines crash and disks fail. How can we build systems in the face of greater uncertainty? What we’d like is some way of creating a uniform set of data and data primitives, as needed by distributed systems. Much like in multiprocessor programming, we need the equivalent of locks, message passing, shared memory and atomicity across this group of machines.&lt;/p&gt;

&lt;p&gt;This is an interesting and vibrant field of algorithmic research: a first stop for the curious reader should be the &lt;a href=&quot;http://research.microsoft.com/en-us/um/people/lamport/pubs/pubs.html&quot;&gt;works of Leslie Lamport&lt;/a&gt;, particularly his earlier writing on ordering and reliability of distributed systems. His later work describes Paxos, the preeminent &lt;a href=&quot;http://en.wikipedia.org/wiki/Consensus_%28computer_science%29&quot;&gt;consensus protocol&lt;/a&gt;; the other major protocol, as provided by many projects in this category, is &lt;a href=&quot;https://raftconsensus.github.io/&quot;&gt;Raft&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Why is this called consensus? The machines need to ‘agree’ on the same history and order of events in order to make the guarantees we’d like for the primitives described. Locks cannot be taken twice, for example, even if some subset of messages disappears or arrives out of order, or member machines crash for unknown reasons. &lt;/p&gt;

&lt;p&gt;These algorithms build data structures to form a coherent, consistent, and fault-tolerant whole.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Examples: etcd, ZooKeeper, consul&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;level-4,-cluster-resources&quot;&gt;Level 4, Cluster Resources&lt;/h2&gt;

&lt;p&gt;With this perspective of a unified cluster, we can now talk about cluster resources. Having abstracted the primitives of individual machines, we use this higher level view to create and interact with the complete set of resources that we have at our disposal. Thus we can consider in aggregate the CPUs, RAM, disk and networking as available to any process in the cluster, as provided by the physical layers underneath.&lt;/p&gt;

&lt;p&gt;Viewing the cluster as one large machine, all devices (CPU, RAM, disk, networking) become abstract. This is a benefit already being used by containers. Containers depend on these things being abstracted on their behalf; for example, network bridges. This is so they can use these abstractions at a level higher in the stack while running on any of the underlying hardware.&lt;/p&gt;

&lt;p&gt;In some sense, this layer is the equivalent of the hardware layer of the now-primordial notion of the cluster. It may not be as celebrated as the layers above it, but this layer is where some important innovation takes place. Showing a cool auto-scaling webapp demo is nice, but requires things like carving up cluster IP space or where a block device is attached to a host.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Examples: flannel, remote block storage, weave&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;level-5,-cluster-orchestration-and-scheduling&quot;&gt;Level 5, Cluster Orchestration and Scheduling&lt;/h2&gt;

&lt;p&gt;Cluster orchestration, then, starts to look a lot like an OS kernel atop these cluster-level resources and the tools given by consistency – symmetry with the layers below again. It’s the purview of the orchestration platform to divide and share cluster resources, schedule applications to run, manage permissions, set up interfaces into and out of the cluster, and at the end of the day, find an ABI-compatible environment for the userland. With increased scale comes new challenges: from finding the right machines to providing the best experience to users of the cluster. &lt;/p&gt;

&lt;p&gt;Any software that will run on the cluster must ultimately execute on a physical CPU on a particular server. How the application code gets there and what abstractions it sees is controlled by the orchestration layer. This is similar to how WiFi simulates a copper wire to existing network stacks, with a controllable abstraction through access points, signal strength, meshes, encryption and more.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Examples: fleet, Mesos, Kubernetes&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;level-6,-containers&quot;&gt;Level 6, Containers&lt;/h2&gt;

&lt;p&gt;This brings us back to containers, which, as described earlier, the entire userland is bundled together and treated as a single application unit. &lt;/p&gt;

&lt;p&gt;If you’ve followed the whole stack up to this point, you’ll see why containers sit at level 6, instead of at level 2 or 3. It’s because the layers of abstraction below this point all depend on each other to build up to the point where a single-serving userland can safely abstract whether it’s running as one process on a local machine or as something scheduled on the cluster as a whole. &lt;/p&gt;

&lt;p&gt;Containers are actually simple that way; they depend on everything else to provide the appropriate execution environment. They carry userland data and expect specific OS details to be presented to them. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Examples: Rocket, Docker, systemd-nspawn&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;level-7,-application&quot;&gt;Level 7, Application&lt;/h2&gt;

&lt;p&gt;Containers are currently getting a lot of attention in the industry because they can separate the OS and software dependencies from the hardware. By abstracting these details, we can create consistent execution environments across a fleet of machines and let the traditional POSIX userland continue to work, fairly seamlessly, no matter where you take it. If the intention is to share the containers, then choice is important, as is agreeing upon a sharable standard. Containers are exciting; it starts us down the road of a lot of open source work in the realm of true distributed systems, backwards-compatible with the code we already write – our &lt;strong&gt;Application&lt;/strong&gt;.&lt;/p&gt;

&lt;h2 id=&quot;closing-thoughts&quot;&gt;Closing Thoughts&lt;/h2&gt;

&lt;p&gt;For any of the layers of the cluster, there are (and will continue to be) multiple implementations. Some will combine layers, some will break them into sub-pieces – but this was true of networking in the past as well (do you remember &lt;a href=&quot;http://en.wikipedia.org/wiki/Internetwork_Packet_Exchange&quot;&gt;IPX&lt;/a&gt;? Or &lt;a href=&quot;http://en.wikipedia.org/wiki/AppleTalk&quot;&gt;AppleTalk&lt;/a&gt;?). &lt;/p&gt;

&lt;p&gt;As we continue to work deeply on the internals of every layer, we also sometimes want to take a step back to look at the overall picture and consider the greater audience of people who are interested and starting to work on clusters of their own. We want to introduce this concept as a guideline, with a symmetric way of thinking about a cluster and its components. We’d love your thoughts on what defines a cluster as more than a mass of hardware. &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Announcing rkt and App Container 0.4.1</title>
   <link href="https://coreos.com/blog/rocket-0.4.1/"/>
   <updated>2015-03-13T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/rocket-0.4.1</id>
   <content type="html">&lt;p&gt;Today we are announcing &lt;a href=&quot;https://github.com/coreos/rocket&quot;&gt;rkt&lt;/a&gt; v0.4.1. rkt is a new app container runtime and implementation of the &lt;a href=&quot;https://github.com/appc/spec&quot;&gt;App Container (appc) spec&lt;/a&gt;. This milestone &lt;a href=&quot;https://github.com/coreos/rocket/releases/tag/v0.4.1&quot;&gt;release&lt;/a&gt; includes new features like private networking, an enhanced container lifecycle, and unprivileged image fetching, all of which get us closer to our goals of a production-ready container runtime that is composable, secure, and fast.&lt;/p&gt;

&lt;h2 id=&quot;private-networking&quot;&gt;Private Networking&lt;/h2&gt;

&lt;p&gt;This release includes our first iteration of the rkt networking subsystem. As an example, let&amp;#39;s run &lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;etcd&lt;/a&gt; in a private network:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;# Run an etcd container in a private network
$ rkt run --private-net coreos.com/etcd:v2.0.4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;By using the &lt;code&gt;--private-net&lt;/code&gt; flag, the etcd container will run with its own network stack decoupled from the host. This includes a private &lt;code&gt;lo&lt;/code&gt; loopback device and an &lt;code&gt;eth0&lt;/code&gt; device with an IP in the 172.16.28.0/24 address range. By default, rkt creates a veth pair, with one end becoming &lt;code&gt;eth0&lt;/code&gt; in the container and the other placed on the host. rkt will also set up an IP masquerade rule (NAT) to allow the container to speak to the outside world.&lt;/p&gt;

&lt;p&gt;This can be demonstrated by being able to reach etcd on its version endpoint from the host:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ curl 172.16.28.9:2379/version
{&amp;quot;releaseVersion&amp;quot;:&amp;quot;2.0.4&amp;quot;,&amp;quot;internalVersion&amp;quot;:&amp;quot;2&amp;quot;}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The networking configuration in rkt is designed to be highly pluggable to facilitate a variety of networking topologies and infrastructures. In this release, we have included plugins for veth, bridge, and macvlan, and more are under active development. See the &lt;a href=&quot;https://github.com/coreos/rkt/blob/master/Documentation/networking.md&quot;&gt;rkt network docs&lt;/a&gt; for details.&lt;/p&gt;

&lt;p&gt;If you are interested in building new network plugins, please take a look at the &lt;a href=&quot;https://github.com/coreos/rkt/issues/273&quot;&gt;current specification&lt;/a&gt; and get involved by reaching out on GitHub or the mailing list. We would also like to extend a thank you to everyone who has spent time giving valuable feedback on the spec so far.&lt;/p&gt;

&lt;h2 id=&quot;unprivileged-fetches&quot;&gt;Unprivileged Fetches&lt;/h2&gt;

&lt;p&gt;It is good practice to download files over the Internet only as unprivileged users. With this release of rkt, it is possible to set up a &lt;code&gt;rkt&lt;/code&gt; Unix group, and give users in that group the ability to download and verify container images. For example, let&amp;#39;s give the &lt;code&gt;core&lt;/code&gt; user permission to use &lt;code&gt;rkt&lt;/code&gt; to retrieve images and verify their signature:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ sudo groupadd rkt
$ sudo usermod -a -G rkt core
$ sudo rkt install
$ rkt fetch coreos.com/etcd:v2.0.5
rkt: searching for app image coreos.com/etcd:v2.0.5
rkt: fetching image from https://github.com/coreos/etcd/releases/download/v2.0.5/etcd-v2.0.5-linux-amd64.aci
Downloading ACI: [==========                                   ] 897 KB/3.76 MB
Downloading signature from https://github.com/coreos/etcd/releases/download/v2.0.5/etcd-v2.0.5-linux-amd64.aci.asc
rkt: signature verified:                                       ] 0 B/819 B
  CoreOS ACI Builder &amp;lt;release@coreos.com&amp;gt;
sha512-295a78d35f7ac5cc919e349837afca6d
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The new &lt;code&gt;rkt install&lt;/code&gt; subcommand is a simple helper to quickly set up all of the rkt directory permissions. These steps could easily be scripted outside of &lt;code&gt;rkt&lt;/code&gt; for a more complex setup or a custom group name; for example, distributions that package rkt in their native formats would configure directory permissions at the time the package is installed.&lt;/p&gt;

&lt;p&gt;Note that the image we’ve fetched will still need to be run with &lt;code&gt;sudo&lt;/code&gt;, as Linux doesn&amp;#39;t yet make it possible to do many of the operations necessary to start a container without root privileges. But at this stage, you can trust that the image comes from an author you have already trusted via &lt;code&gt;rkt trust&lt;/code&gt;. &lt;/p&gt;

&lt;h2 id=&quot;other-features&quot;&gt;Other Features&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;rkt prepare&lt;/code&gt; is a new command that can be used to set up a container without immediately running it. This gives users the ability to allocate a container ID and do filesystem setup before launching any processes. In this way, a container can be prepared ahead of time, so that when &lt;code&gt;rkt run-prepared&lt;/code&gt; is subsequently invoked, the process startup happens immediately with few additional steps. Being able to pre-allocate a unique container ID also facilitates better integration with higher-level orchestration systems.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;rkt run&lt;/code&gt; can now append additional command line flags and environment variables for all apps, as well as optionally have containers inherit the environment from the parent process. For full details see the &lt;a href=&quot;https://github.com/coreos/rkt/blob/master/Documentation/commands.md#passing-arguments&quot;&gt;command line&lt;/a&gt; documentation. &lt;/p&gt;

&lt;p&gt;The image store now uses a &lt;a href=&quot;https://github.com/cznic/ql&quot;&gt;ql&lt;/a&gt; database to track metadata about images in the store. This is used to keep track of URLs, labels, and other metadata of images stored inside rkt&amp;#39;s local store. Note that if you are upgrading from a previous rkt release on a system, you may need to remove &lt;code&gt;/var/lib/rkt&lt;/code&gt;. We understand people are already beginning to rely on rkt and over the next few releases will focus heavily on introducing stable APIs. But until we are closer to a 1.0 release, expect that there will be more regular changes.&lt;/p&gt;

&lt;p&gt;For more details about this 0.4.1 release and pre-compiled standalone &lt;code&gt;rkt&lt;/code&gt; Linux binaries see the &lt;a href=&quot;https://github.com/coreos/rkt/releases/tag/v0.4.1&quot;&gt;release page&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;updates-to-app-container-spec&quot;&gt;Updates to App Container spec&lt;/h2&gt;

&lt;p&gt;Finally, this change updates rkt to the latest version of the appc spec, v0.4.1. Recent changes to the spec include reworked isolators, new OS-specific requirements, and greater explicitness around image signing and encryption. You can refer to a list of some major changes and additions &lt;a href=&quot;https://github.com/appc/spec/releases/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Join us on the mission to create a secure, composable and standards based container runtime, and get involved in hacking on rkt or App Container here: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;rkt&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/coreos/rkt/labels/help%20wanted&quot;&gt;Help Wanted&lt;/a&gt;, &lt;a href=&quot;https://groups.google.com/forum/#!forum/rocket-dev&quot;&gt;Mailing list&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App Container&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/appc/spec/labels/help%20wanted&quot;&gt;Help Wanted&lt;/a&gt;, &lt;a href=&quot;https://groups.google.com/forum/#!forum/appc-dev&quot;&gt;Mailing list&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>rkt Now Available in CoreOS Alpha Channel</title>
   <link href="https://coreos.com/blog/rocket-in-alpha/"/>
   <updated>2015-03-12T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/rocket-in-alpha</id>
   <content type="html">&lt;p&gt;Our &lt;a href=&quot;/releases/&quot;&gt;CoreOS Alpha channel&lt;/a&gt; is designed to strike a balance between offering early access to new versions of software and serving as the release candidate for the &lt;a href=&quot;/releases/&quot;&gt;Beta&lt;/a&gt; and &lt;a href=&quot;/releases/&quot;&gt;Stable&lt;/a&gt; channels. Due to its release-candidate nature, we must be conservative in upgrading critical system components (e.g. systemd and etcd), but in order to get new technologies (like fleet and flannel) into the hands of users for testing we must occasionally include pre-production versions of these components in Alpha.&lt;/p&gt;

&lt;p&gt;Today, we are adding &lt;a href=&quot;/blog/rocket/&quot;&gt;rkt&lt;/a&gt;, a container runtime built on top of the &lt;a href=&quot;https://github.com/appc/spec&quot;&gt;App Container spec&lt;/a&gt;, to make it easier for users to try it and give us feedback. &lt;/p&gt;

&lt;p&gt;rkt will join systemd-nspawn and Docker as container runtimes that are available to CoreOS users. Keep in mind that rkt is still pre-1.0 and that you should not rely on flags or the data in &lt;code&gt;/var/lib/rkt&lt;/code&gt; to work between versions. Specifically, next week v0.4.1 will land in Alpha which is incompatible with images and containers created by previous versions of rkt. Besides the addition of &lt;code&gt;/usr/bin/rkt&lt;/code&gt; to the image, nothing major has changed and no additional daemons will run by default.&lt;/p&gt;

&lt;h2 id=&quot;release-cadence&quot;&gt;Release Cadence&lt;/h2&gt;

&lt;p&gt;We have adopted a regular weekly schedule for Alpha releases, rolling out a new version every Thursday. Every other week we release a Beta, taking the best of the previous two Alpha versions and promoting it bit-for-bit. Similarly, once every four weeks we promote the best of the previous two Beta releases to Stable.&lt;/p&gt;

&lt;h2 id=&quot;give-it-a-spin&quot;&gt;Give it a spin&lt;/h2&gt;

&lt;p&gt;If you want to spin up a CoreOS Alpha machine and get started, check out the &lt;a href=&quot;https://github.com/coreos/rkt/tree/v0.3.2/Documentation&quot;&gt;documentation for v0.3.2&lt;/a&gt;. We look forward to having you involved in rkt development via the &lt;a href=&quot;https://groups.google.com/forum/#!forum/rocket-dev&quot;&gt;rkt-dev discussion mailing list&lt;/a&gt;, &lt;a href=&quot;https://github.com/coreos/rkt/issues&quot;&gt;GitHub issues&lt;/a&gt;, or &lt;a href=&quot;https://github.com/coreos/rkt/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22&quot;&gt;contributing&lt;/a&gt; directly to the project. We have made great progress so far, but there is still much to build!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The First CoreOS Fest</title>
   <link href="https://coreos.com/blog/coreos-fest-2015/"/>
   <updated>2015-03-11T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-fest-2015</id>
   <content type="html">&lt;p&gt;&lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
&lt;meta name=&quot;twitter:site&quot; content=&quot;@coreoslinux&quot;&gt;
&lt;meta name=&quot;twitter:title&quot; content=&quot;@CoreOS Launches First Ever CoreOS Fest&quot;&gt;
&lt;meta name=&quot;twitter:description&quot; content=&quot;CoreOS Fest will focus on celebrating those who are inspired to create simple solutions for complicated problems.&quot;&gt;
&lt;meta name=&quot;twitter:image:src&quot; content=&quot;https://coreos.com/assets/images/media/coreosfest-banner.png&quot;&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/coreosfest-banner.png&quot; alt=&quot;CoreOS Fest 2015&quot; style=&quot;margin: 0 auto; display: block; margin-bottom: 20px;&quot;&gt;&lt;/p&gt;

&lt;p&gt;Get ready, &lt;a href=&quot;/fest&quot;&gt;CoreOS Fest&lt;/a&gt;, our celebration of everything distributed, is right around the corner! Our first CoreOS Fest is happening May 4 and 5, 2015 in San Francisco. You’ll learn more about application containers, container orchestration, clustering, devops security, new Linux, Go and more. &lt;/p&gt;

&lt;p&gt;Join us for this two-day event as we talk about the newest in distributed systems technologies and together talk about securing the Internet. Be part of discussions shaping modern infrastructure stacks, hear from peers on how they are using these technologies today and get inspired to learn new ways to speed up your application development process.  &lt;/p&gt;

&lt;p&gt;Take a journey with us (in space and time) and help contribute to the next generation of infrastructure. The early bird tickets are available until March 31st and are only $199, so snatch one up now before they are gone.  After March 31st, tickets will be available for $349. See you in May.  &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://cfp.coreos.com/en/coreosfest-spring-2015/cfp/session/new&quot;&gt;Submit an Abstract&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/fest&quot;&gt;Grab An Early Bird Ticket&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are interested in sponsoring the event, reach out to &lt;a href=&quot;mailto:fest@coreos.com?subject=CoreOS%20Fest%20Sponsorship&quot;&gt;fest@coreos.com&lt;/a&gt; and we would be happy to send you the prospectus.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS on VMware vSphere and VMware vCloud Air</title>
   <link href="https://coreos.com/blog/vmware-vcloud-air-and-vsphere/"/>
   <updated>2015-03-09T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/vmware-vcloud-air-and-vsphere</id>
   <content type="html">&lt;p&gt;At CoreOS, we want to make the world successful with containers on all computing platforms. Today, we are taking one step closer to that goal by announcing, with VMware, that CoreOS is fully supported and integrated with both &lt;a href=&quot;http://www.vmware.com/products/vsphere&quot;&gt;VMware vSphere 5.5&lt;/a&gt; and &lt;a href=&quot;http://www.vmware.com/cloud-services&quot;&gt;VMware vCloud Air&lt;/a&gt;. Enterprises that have been evaluating using containers but needed fully supported environments to begin now have the support to get started.&lt;/p&gt;

&lt;p&gt;We’ve worked closely with VMware in enabling CoreOS to run on vSphere 5.5 (see the &lt;a href=&quot;http://blogs.vmware.com/vsphere/2015/01/technical-preview-coreos-vsphere-5-5.html&quot;&gt;technical preview of CoreOS on vSphere 5.5&lt;/a&gt;). This collaboration extends the security, consistency, and reliability advantages of CoreOS to users of vSphere. Developers can focus on their applications and operations get the control they need. We encourage you to read more from VMware here:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://blogs.vmware.com/vsphere/2015/03/coreos-now-supported-vmware-vsphere-5-5-vmware-vcloud-air&quot;&gt;CoreOS Now Supported on VMware vSphere 5.5 and VMware vCloud Air&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As a sysadmin you’ve gotta be thinking, what does this mean for me?&lt;/p&gt;

&lt;p&gt;Many people have been running CoreOS on VMware for a while now, but something was missing. Mainly performance and full integration with VMware management APIs. Today that all changes. CoreOS is now shipping &lt;a href=&quot;http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&amp;amp;cmd=displayKC&amp;amp;externalId=2073803&quot;&gt;open-vm-tools&lt;/a&gt;, the open source implementation of VMware Tools, which enables better performance and enables management of CoreOS VMs running in all VMware environments.&lt;/p&gt;

&lt;p&gt;Lets take a quick moment to explore some of the things that are now possible.&lt;/p&gt;

&lt;h2 id=&quot;taking-coreos-for-a-spin-with-vmware-fusion&quot;&gt;Taking CoreOS for a spin with VMware Fusion&lt;/h2&gt;

&lt;p&gt;The following tutorial will walk you through downloading an official CoreOS VMware image and configuring it using a &lt;a href=&quot;https://coreos.com/docs/cluster-management/setup/cloudinit-config-drive&quot;&gt;cloud config drive&lt;/a&gt;. Once configured, a CoreOS instance will be launched and managed using the vmrun command line tool that ships with &lt;a href=&quot;http://www.vmware.com/products/fusion&quot;&gt;VMware Fusion&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To make the following commands easier to run set the following vmrun alias in your shell:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;alias vmrun=&amp;#39;/Applications/VMware\ Fusion.app/Contents/Library/vmrun&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;download-a-coreos-vmware-image&quot;&gt;Download a CoreOS VMware Image&lt;/h3&gt;

&lt;p&gt;First things first, download a CoreOS VMware image and save it to your local machine:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ mkdir coreos-vmware
$ cd coreos-vmware
$ wget http://alpha.release.core-os.net/amd64-usr/current/coreos_production_vmware.vmx
$ wget http://alpha.release.core-os.net/amd64-usr/current/coreos_production_vmware_image.vmdk.bz2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Decompress the VMware disk image:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ bzip2 -d coreos_production_vmware_image.vmdk.bz2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;configuring-a-coreos-vm-with-a-config-drive&quot;&gt;Configuring a CoreOS VM with a config-drive&lt;/h3&gt;

&lt;p&gt;By default CoreOS VMware images do not have any users configured, which means you won’t be able to login to your VM after it boots. Also, many of the &lt;code&gt;vmrun&lt;/code&gt; guest OS commands require a valid CoreOS username and password.&lt;/p&gt;

&lt;p&gt;A config-drive is the best way to configure a CoreOS instance running on VMware. Before you can create a config-drive, you’ll need some user data. For this tutorial you will use a CoreOS cloud-config file as user data to configure users and set the hostname.&lt;/p&gt;

&lt;h4 id=&quot;generate-the-password-hash-for-the-core-and-root-users&quot;&gt;Generate the password hash for the core and root users&lt;/h4&gt;

&lt;p&gt;Before creating the cloud-config file, generate a password hash for the core and root users:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ openssl passwd -1
Password:
Verifying - Password:
$1$LEfVXsiG$lhcyOrkJq02jWnEhF93IR/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Enter &lt;code&gt;vmware&lt;/code&gt; at both password prompts.&lt;/p&gt;

&lt;h4 id=&quot;create-a-cloud-config-file&quot;&gt;Create a cloud config file&lt;/h4&gt;

&lt;p&gt;Now we are ready to create a cloud-config file:&lt;/p&gt;

&lt;p&gt;edit cloud-config.yaml&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;#cloud-config

hostname: vmware-guest
users:
  - name: core
    passwd: $1$LEfVXsiG$lhcyOrkJq02jWnEhF93IR/
    groups:
      - sudo
      - docker
  - name: root
    passwd: $1$LEfVXsiG$lhcyOrkJq02jWnEhF93IR/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;create-a-config-drive&quot;&gt;Create a config-drive&lt;/h4&gt;

&lt;p&gt;With your cloud-config file in place you can use it to create a config drive. The easiest way to create a config-drive is to generate an ISO using a cloud-config file and attach it to a VM.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ mkdir -p /tmp/new-drive/openstack/latest
$ cp cloud-config.yaml /tmp/new-drive/openstack/latest/user_data
$ hdiutil makehybrid -iso -joliet -joliet-volume-name &amp;quot;config-2&amp;quot; -o ~/cloudconfig.iso /tmp/new-drive
$ rm -r /tmp/new-drive
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;At this point you should have a config-drive named &lt;code&gt;cloudconfig.iso&lt;/code&gt; in your home directory.&lt;/p&gt;

&lt;h4 id=&quot;attaching-a-config-drive-to-a-vm&quot;&gt;Attaching a config-drive to a VM&lt;/h4&gt;

&lt;p&gt;Before booting the CoreOS VM the config-drive must be attached to the VM. Do this by appending the following lines to the &lt;code&gt;coreos_production_vmware.vmx&lt;/code&gt; config file:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;ide0:0.present = &amp;quot;TRUE&amp;quot;
ide0:0.autodetect = &amp;quot;TRUE&amp;quot;
ide0:0.deviceType = &amp;quot;cdrom-image&amp;quot;
ide0:0.fileName = &amp;quot;/Users/kelseyhightower/cloudconfig.iso&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;At this point you are ready to launch the CoreOS VM:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;vmrun start coreos_production_vmware.vmx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/assets/images/media/vmware-login.png&quot; alt=&quot;CoreOS on VMware&quot; class=&quot;image-center&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;running-commands&quot;&gt;Running commands&lt;/h3&gt;

&lt;p&gt;With the CoreOS VM up and running use the &lt;code&gt;vmrun&lt;/code&gt; command line tool to interact with it. Let&amp;#39;s start by checking the status of vmware-tools in the VM:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ vmrun checkToolsState coreos_production_vmware.vmx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Grab the VM’s IP address with the &lt;code&gt;getGuestIPAddress&lt;/code&gt; command:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ vmrun getGuestIPAddress coreos_production_vmware.vmx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Full VMware integration also means you can now run guest OS commands. For example you can list the running processes using the &lt;code&gt;listProcessesInGuest&lt;/code&gt; command:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ vmrun -gu core -gp vmware listProcessesInGuest coreos_production_vmware.vmx
Process list: 63
pid=1, owner=root, cmd=/usr/lib/systemd/systemd --switched-root --system --deserialize 21
pid=2, owner=root, cmd=kthreadd
pid=3, owner=root, cmd=ksoftirqd/0
pid=4, owner=root, cmd=kworker/0:0
pid=5, owner=root, cmd=kworker/0:0H
pid=6, owner=root, cmd=kworker/u2:0
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Finally you can now run arbitrary commands and scripts using VMware management tools. For example, use the &lt;code&gt;runProgramInGuest&lt;/code&gt; command to initiate a graceful shutdown:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ vmrun -gu root -gp vmware runProgramInGuest coreos_production_vmware.vmx /usr/sbin/shutdown now
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/assets/images/media/vmware-run.png&quot; alt=&quot;CoreOS on VMware&quot; class=&quot;image-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We have only scratched the surface regarding the number of things you can do with the new VMware powered CoreOS images. Check out the &lt;a href=&quot;https://www.vmware.com/support/developer/vix-api/vix112_vmrun_command.pdf&quot;&gt;“Using vmrun to Control Virtual Machines”&lt;/a&gt; e-book for more details.&lt;/p&gt;

&lt;h2 id=&quot;coreos-and-vmware-going-forward&quot;&gt;CoreOS and VMware going forward&lt;/h2&gt;

&lt;p&gt;We look forward to continuing on the journey to secure the backend of the Internet by working on all types of platforms in the cloud or behind the firewall. We are continuing to work with VMware so that CoreOS is also supported on the recently announced vSphere 6. If you have any questions in the meantime, you can find us on IRC as you get started. Feedback can also be provided at the &lt;a href=&quot;https://communities.vmware.com/community/vmtn/vm-guest/linux/coreos&quot;&gt;VMware / CoreOS community forum&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Managing CoreOS Logs with Logentries</title>
   <link href="https://coreos.com/blog/logentries-on-coreos/"/>
   <updated>2015-03-05T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/logentries-on-coreos</id>
   <content type="html">&lt;p&gt;Today &lt;a href=&quot;https://logentries.com/&quot;&gt;Logentries&lt;/a&gt; announced a CoreOS integration, so CoreOS users can get a a deeper understanding into their CoreOS environments. The new integration enables CoreOS users to easily send logs using the Journal logging system, part of CoreOS’ Systemd process manager, directly into Logentries for real-time monitoring, alerting, and data visualization. This is the first CoreOS log management integration.&lt;/p&gt;

&lt;p&gt;To learn more about centralizing logs from CoreOS clusters read Trevor Parsons, co-founder and chief scientist at Logentires &lt;a href=&quot;https://blog.logentries.com/2015/03/how-to-centralize-logs-from-coreos-clusters/&quot;&gt;post&lt;/a&gt;. Or get started by following the documentation &lt;a href=&quot;https://logentries.com/doc/coreos/&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Upcoming CoreOS Events in March</title>
   <link href="https://coreos.com/blog/upcoming-march-events/"/>
   <updated>2015-03-03T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/upcoming-march-events</id>
   <content type="html">&lt;p&gt;March brings a variety of events – including a keynote from Alex Polvi (&lt;a href=&quot;https://twitter.com/polvi&quot;&gt;@polvi&lt;/a&gt;), CEO of CoreOS, at Rackspace Solve. Read on for more details on the team’s whereabouts this month.&lt;/p&gt;

&lt;p&gt;In case you missed it, Alex keynoted at The Linux Foundation Collab Summit last month. See the &lt;a href=&quot;https://www.youtube.com/watch?v=cLvgNgO5-Oc&amp;amp;feature=youtube_gdata&quot;&gt;replay&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, March 3, 2015 at 6 p.m. EST – Montreal, QC&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The month kicks off with Jake Moshenko (&lt;a href=&quot;https://twitter.com/JacobMoshenko&quot;&gt;@JacobMoshenko&lt;/a&gt;), product manager for the Quay.io container registry at CoreOS, at &lt;a href=&quot;https://www.eventbrite.ca/e/big-data-montreal-34-devopsmtl-joint-event-tuesday-tickets-15825827476&quot;&gt;Big Data Montreal&lt;/a&gt;. Jake will discuss &lt;a href=&quot;https://github.com/coreos/rocket&quot;&gt;Rocket&lt;/a&gt; and how CoreOS and Quay.io fit into the development lifecycle.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, March 4, 2015 at 1:30 p.m. PST – San Francisco, CA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join us at &lt;a href=&quot;http://solve.rackspace.com/sanfrancisco.html&quot;&gt;Rackspace Solve&lt;/a&gt; to see Alex Polvi (&lt;a href=&quot;https://twitter.com/polvi&quot;&gt;@polvi&lt;/a&gt;), CEO of CoreOS, speak about Container Technology: Applications and Implications. &lt;a href=&quot;http://solve.rackspace.com/sanfrancisco.html&quot;&gt;Registration is free&lt;/a&gt; and there will be talks from Wikimedia, Walmart Labs, DigitalFilmTree, Tinder and more.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, March 10, 2015 at 7 p.m. GWT - London, England&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you find yourself in London, be sure to stop by the &lt;a href=&quot;http://www.meetup.com/CoreOS-London/events/220600563/&quot;&gt;CoreOS London meetup&lt;/a&gt;. They are currently confirming speakers for the event. If you are interested in speaking be sure to submit on &lt;a href=&quot;https://github.com/CoreOS-London/speak&quot;&gt;github&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monday, March 16, 2015 at 7 p.m. PDT – San Francisco, CA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join the CoreOS San Francisco March &lt;a href=&quot;http://www.meetup.com/coreos/events/220610067/&quot;&gt;Meetup&lt;/a&gt; at Imgur (&lt;a href=&quot;https://twitter.com/imgur&quot;&gt;@imgur&lt;/a&gt;). On the agenda: &lt;a href=&quot;https://github.com/coreos/rocket&quot;&gt;Rocket&lt;/a&gt;, &lt;a href=&quot;https://github.com/appc/spec/&quot;&gt;appc spec&lt;/a&gt; and &lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;etcd&lt;/a&gt;. Chris Winslett from Compose.io (&lt;a href=&quot;https://twitter.com/composeio&quot;&gt;@composeio&lt;/a&gt;) will also explain how &lt;a href=&quot;https://www.compose.io/&quot;&gt;Compose.io&lt;/a&gt; uses etcd as its “repository of truth.”&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Friday, March 27, 2015 at 6:45 p.m. CDT – Pflugerville, TX&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Brian “Redbeard” Harrington (&lt;a href=&quot;https://twitter.com/brianredbeard&quot;&gt;@brianredbeard&lt;/a&gt;), is an opening speaker at &lt;a href=&quot;http://containerdaysaustin.com/2015/&quot;&gt;Container Days Austin&lt;/a&gt;. Container Days provides a forum for all interested in the technical, process and production ramifications of adopting container style virtualization. Get your tickets &lt;a href=&quot;http://www.eventbrite.com/e/container-days-austin-2015-tickets-15159477405&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/airpair.png&quot; alt=&quot;AirPair Writing Completition&quot; class=&quot;image-center&quot; /&gt;&lt;/p&gt;

&lt;p&gt;On another note, this month CoreOS has joined the &lt;a href=&quot;https://www.airpair.com/100k-writing-competition&quot;&gt;AirPair $100K writing competition&lt;/a&gt;. For more details please see the contest site, &lt;a href=&quot;https://www.airpair.com/100k-writing-competition&quot;&gt;https://www.airpair.com/100k-writing-competition&lt;/a&gt;, for more information.&lt;/p&gt;

&lt;p&gt;If you have a CoreOS, etcd or Rocket implementation, tutorial or use case now is a great time to share. How do you apply CoreOS for automatic server updates? Do you have any stories about your implementation of etcd to keep an application up when a server needs or goes down? Any exciting ways you have applied Rocket, the first container runtime based on the Application Container specification?&lt;/p&gt;

&lt;p&gt;If you are interested in writing about your experiences with CoreOS, etcd or Rocket, email &lt;a href=&quot;mailto:press@coreos.com&quot;&gt;press@coreos.com&lt;/a&gt; and we will give you support to make your post a success. More details about the competition are &lt;a href=&quot;https://www.airpair.com/100k-writing-competition&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>App Container and Docker</title>
   <link href="https://coreos.com/blog/app-container-and-docker/"/>
   <updated>2015-02-13T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/app-container-and-docker</id>
   <content type="html">&lt;p&gt;A core principle of the &lt;a href=&quot;https://github.com/appc/spec&quot;&gt;App Container&lt;/a&gt; (appc) specification is that it is open: multiple implementations of the spec should exist and be developed independently. Even though the spec is young and pre-1.0, it has already seen a &lt;a href=&quot;https://github.com/appc/spec#what-are-some-implementations-of-the-spec&quot;&gt;number of implementations&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;With this in mind, over the last few weeks we have been working on ways to make appc interoperable with the Docker v1 Image format. As we discovered, the two formats are sufficiently compatible that Docker v1 Images can easily be run alongside appc images (ACIs). Today we want to describe two different demonstrations of this interoperability, and start a conversation about closer integration between the Docker and appc communities.&lt;/p&gt;

&lt;h2 id=&quot;rkt-running-docker-images&quot;&gt;rkt Running Docker Images&lt;/h2&gt;

&lt;p&gt;rkt is an App Container implementation that fully implements the current state of the spec. This means it can download, verify and run App Container Images (ACIs). And now along with ACI support the latest release of rkt, v0.3.2, can download and run container images directly from the Docker Hub or any other Docker Registry:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ rkt --insecure-skip-verify run docker://redis docker://tenstartups/redis-commander
rkt: fetching image from docker://redis
rkt: warning: signature verification has been disabled
Downloading layer: 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158
…
      _.-``    `.  `_.  &amp;#39;&amp;#39;-._           Redis 2.8.19 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ &amp;#39;&amp;#39;-._
 (    &amp;#39;      ,       .-`  | `,    )     Running in stand alone mode
 |`-._`-...-` __...-.``-._|&amp;#39;` _.-&amp;#39;|     Port: 6379
 |    `-._   `._    /     _.-&amp;#39;    |     PID: 3
...
[3] 12 Feb 09:09:19.071 # Server started, Redis version 2.8.19
# redis will be  running on 127.0.0.1:6379 and redis-commander on 127.0.0.1:8081
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;docker-running-app-container-images&quot;&gt;Docker Running App Container Images&lt;/h2&gt;

&lt;p&gt;At the same time as adding Docker support to rkt, we have also opened a &lt;a href=&quot;https://github.com/docker/docker/pull/10776&quot;&gt;pull-request&lt;/a&gt; that enables Docker to run appc images (ACIs). This is a simple functional PR that includes many of the essential features of the image spec. Docker API operations such as image list, run image by appc image ID and more work as expected and integrate with the native Docker experience. As a simple example, downloading and running an &lt;a href=&quot;https://github.com/coreos/etcd/releases&quot;&gt;etcd&lt;/a&gt; ACI works seamlessly with the addition of this patchset:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ docker pull --format aci coreos.com/etcd:v2.0.0
$ docker run --format aci coreos.com/etcd
2015/02/12 11:21:05 no data-dir provided, using default data-dir ./default.etcd
2015/02/12 11:21:05 etcd: listening for peers on http://localhost:2380
2015/02/12 11:21:05 etcd: listening for peers on http://localhost:7001
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;For more details, check out the &lt;a href=&quot;https://github.com/docker/docker/pull/10776&quot;&gt;PR&lt;/a&gt; itself.&lt;/p&gt;

&lt;h2 id=&quot;docker-and-app-container:-looking-forward&quot;&gt;Docker and App Container: Looking forward&lt;/h2&gt;

&lt;p&gt;We think App Container represents the next logical iteration in what a container image format, runtime engine, and discovery protocol should look like. App Container is young but we want to continue to get wider community feedback and see the spec evolve into something that can work for a number of runtimes. &lt;/p&gt;

&lt;p&gt;Before appc spec reaches 1.0 (stable) status, we would like feedback from the Docker community on what might need to be modified in the spec in order for it to be supported natively in Docker. To gather feedback and start the discussion, we have put up a &lt;a href=&quot;https://github.com/docker/docker/issues/10777&quot;&gt;proposal&lt;/a&gt; to add appc support to Docker.&lt;/p&gt;

&lt;p&gt;We are looking forward to getting additional feedback from the Docker community on this proposal. Working together, we can create a better appc spec for everyone to use, and over time, work towards a shared standard.&lt;/p&gt;

&lt;p&gt;Join us on a mission to create a secure, composable, and standards-based container runtime.
If you are interested in hacking on rkt or App Container we encourage you to get involved:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;rkt&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/coreos/rkt/labels/help%20wanted&quot;&gt;Help Wanted&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://groups.google.com/forum/#!forum/rocket-dev&quot;&gt;Mailing list&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App Container&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/appc/spec/labels/help%20wanted&quot;&gt;Help Wanted&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://groups.google.com/forum/#!forum/appc-dev&quot;&gt;Mailing list&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want more background on the appc spec, we encourage you to read our &lt;a href=&quot;https://coreos.com/blog/rocket/&quot;&gt;first blog post&lt;/a&gt; about the App Container spec and Rocket. Also read more in a recent &lt;a href=&quot;http://opensource.com/business/15/2/interview-jonathan-boulle-rocket&quot;&gt;Q&amp;amp;A with OpenSource.com&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Announcing rkt and App Container v0.3.1</title>
   <link href="https://coreos.com/blog/rocket-and-appc-0.3.1/"/>
   <updated>2015-02-06T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/rocket-and-appc-0.3.1</id>
   <content type="html">&lt;p&gt;Today we&amp;#39;re announcing the next release of &lt;a href=&quot;https://github.com/coreos/rocket&quot;&gt;Rocket&lt;/a&gt; and the &lt;a href=&quot;https://github.com/appc/spec&quot;&gt;App Container&lt;/a&gt; (appc) spec, &lt;a href=&quot;https://github.com/coreos/rocket/releases/tag/v0.3.1&quot;&gt;v0.3.1&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;rkt-updates&quot;&gt;rkt Updates&lt;/h2&gt;

&lt;p&gt;This release of rkt includes new user-facing features and some important changes under the hood which further make progress towards our goals of security and composability.&lt;/p&gt;

&lt;p&gt;First, the rkt CLI has a couple of new commands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;rkt trust&lt;/code&gt; can be used to easily add keys to the public keystore for ACI signatures (introduced in the previous release).
This supports retrieving public keys directly from a URL or using discovery to locate public keys - a simple example of the latter is &lt;code&gt;rkt trust --prefix coreos.com/etcd&lt;/code&gt;. See the &lt;a href=&quot;https://github.com/vcaputo/rocket/commit/c49e6230fab5fb88d714604578b1fc5ce58415c2&quot;&gt;commit&lt;/a&gt; for other examples.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;rkt list&lt;/code&gt; is a simple tool to list the containers on the system. It leverages the same file-based locking as &lt;code&gt;rkt status&lt;/code&gt; and &lt;code&gt;rkt gc&lt;/code&gt; to ensure safety during concurrent invocations of &lt;code&gt;rkt&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As mentioned, v0.3.1 includes two significant changes to how rkt is built internally.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Instead of embedding the (default) stage1 using go-bindata, rkt now consumes a stage1 in the form of an actual ACI, containing a rootfs and stage1 init/enter binaries, via the &lt;code&gt;--stage1-image&lt;/code&gt; flag.
This makes it much more straightforward to use alternative stage1 image with rkt and facilitates packaging for other distributions like Fedora.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;rkt now vendors a copy of appc/spec instead of depending on HEAD.
This means that rkt can be built in a self-contained and reproducible way and that master will no longer break in response to changes to the spec.
It also makes explicit the specific version of the spec against which particular release of rkt is compiled.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a consequence of these two changes, it is now possible to use the standard Go workflow to build the rkt CLI (e.g. &lt;code&gt;go get github.com/coreos/rocket/rkt&lt;/code&gt;).
Note however that this does not implicitly build a stage1, so that will still need to be done using the included &lt;code&gt;./build&lt;/code&gt; script, or some other way for those desiring to use a different stage1.&lt;/p&gt;

&lt;h2 id=&quot;app-container-updates&quot;&gt;App Container Updates&lt;/h2&gt;

&lt;p&gt;This week saw a number of interesting projects emerge that implement the App Container Spec.
Please note, all of these are very early and actively seeking more contributors.&lt;/p&gt;

&lt;h3 id=&quot;nose-cone,-an-independent-app-container-runtime&quot;&gt;Nose Cone, an independent App Container Runtime&lt;/h3&gt;

&lt;p&gt;Nose Cone is an appc runtime that is built on top of the &lt;a href=&quot;https://github.com/cdaylward/libappc&quot;&gt;libappc C++&lt;/a&gt; library that was released a few weeks ago.
This project is only a few days old but you can find it up on &lt;a href=&quot;https://github.com/cdaylward/nosecone&quot;&gt;GitHub&lt;/a&gt;.
It makes no use of rkt, but implements the App Container specification.
It is great to see this level of experimentation around the appc spec: having multiple, alternative runtimes with different goals is an important part of building a robust specification.&lt;/p&gt;

&lt;h3 id=&quot;tools-for-building-acis&quot;&gt;Tools for building ACIs&lt;/h3&gt;

&lt;p&gt;A few tools have emerged since last week for building App Container Images. All of these are very early and could use your contributions to help get them production ready.&lt;/p&gt;

&lt;h4 id=&quot;docker2aci&quot;&gt;docker2aci&lt;/h4&gt;

&lt;p&gt;A Dockerfile and the &amp;quot;docker build&amp;quot; command is a very convenient way to build an image, and many people already have existing infrastructure and pipelines around Docker images.
To take advantage of this, the &lt;a href=&quot;https://github.com/appc/docker2aci&quot;&gt;docker2aci&lt;/a&gt; tool and library takes an existing Docker image and generates an equivalent ACI.
This means the container can now be run in any implementation of the appc spec.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ docker2aci quay.io/lafolle/redis
Downloading layer: 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158
...
Generated ACI(s):
lafolle-redis-latest.aci
$ rkt run lafolle-redis-latest.aci
[3] 04 Feb 03:56:31.186 # Server started, Redis version 2.8.8
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;goaci&quot;&gt;goaci&lt;/h4&gt;

&lt;p&gt;While a Dockerfile is a very convenient way to build, it should not be the only way to create a container image.
With the new experimental &lt;a href=&quot;https://github.com/jonboulle/goaci&quot;&gt;goaci&lt;/a&gt; tool, it is possible to build a minimal golang ACI without the need of any additional build environment.
Example:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ goaci github.com/coreos/etcd
Wrote etcd.aci
$ actool -debug validate etcd.aci
etcd.aci: valid app container image
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;quay-support&quot;&gt;Quay support&lt;/h4&gt;

&lt;p&gt;Finally, we have added experimental support for App Container Images to Quay.io, our hosted container registry.
Test it out by pulling any public image using rkt:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ rkt trust --prefix quay.io
Prefix: &amp;quot;quay.io&amp;quot;
Key: &amp;quot;https://quay.io/aci-signing-key&amp;quot;
GPG key fingerprint is: BFF3 13CD AA56 0B16 A898  7B8F 72AB F5F6 799D 33BC
    Quay.io ACI Converter (ACI conversion signing key) &amp;lt;support@quay.io&amp;gt;
Are you sure you want to trust this key (yes/no)? yes
$ rkt run quay.io/philips/golang-outyet
$ curl 127.0.0.1:8080
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;While these tools are very young, they are an important milestone towards our goals with appc. We are on a path to being able to create images with multiple, independent tools (from Docker conversion to native language tools), and have multiple ways to run them (with runtimes like rkt and Nose Cone).
This is just the beginning, but a great early example of the power of open standards.&lt;/p&gt;

&lt;p&gt;Join us on a mission to create a secure, composable, and standards-based container runtime.
If you are interested in hacking on rkt or App Container we encourage you to get involved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rkt &lt;a href=&quot;https://github.com/coreos/rkt/labels/help%20wanted&quot;&gt;Help Wanted&lt;/a&gt;, &lt;a href=&quot;https://groups.google.com/forum/#!forum/rocket-dev&quot;&gt;Mailing list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;App Container &lt;a href=&quot;https://github.com/appc/spec/labels/help%20wanted&quot;&gt;Help Wanted&lt;/a&gt;, &lt;a href=&quot;https://groups.google.com/forum/#!forum/appc-dev&quot;&gt;Mailing list&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is still much to do - onward!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Upcoming CoreOS Events in February</title>
   <link href="https://coreos.com/blog/upcoming-february-events/"/>
   <updated>2015-02-03T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/upcoming-february-events</id>
   <content type="html">&lt;p&gt;We’ve just come from FOSDEM ‘15 in Belgium and have an exciting rest of the month planned. We’ll be in Europe and the United States in February, and you can even catch Alex Polvi, CEO of CoreOS, keynoting at two events – TurboFest West (February 13) and Linux Collab Summit (February 18). Read more to see where we’ll be and meet us.&lt;/p&gt;

&lt;p&gt;Also, thank you to all that hosted and attended our events last month. Questions or comments, contact us at &lt;a href=&quot;mailto:press@coreos.com&quot;&gt;press@coreos.com&lt;/a&gt; or tweet to us &lt;a href=&quot;https://twitter.com/coreoslinux&quot;&gt;@CoreOSlinux&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;europe&quot;&gt;Europe&lt;/h2&gt;

&lt;p&gt;See slides from the Config Management Camp 2015 talk by Kelsey Hightower (&lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;@kelseyhightower&lt;/a&gt;), developer advocate at CoreOS. He presented in Belgium on February 2 about &lt;a href=&quot;http://go-talks.appspot.com/github.com/kelseyhightower/cfgmgmtcamp-2015/slides/coreos-kubernetes.slide#1&quot;&gt;Managing Containers at Scale with CoreOS and Kubernetes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, February 3 at 7 p.m. CET – Munich, Germany&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Learn about CoreOS and &lt;a href=&quot;https://github.com/coreos/rocket&quot;&gt;Rocket&lt;/a&gt; at the &lt;a href=&quot;http://www.meetup.com/CoreOS-Munich/events/219801587/&quot;&gt;Munich CoreOS meetup&lt;/a&gt; led by Brian Harrington/Redbeard (&lt;a href=&quot;https://twitter.com/brianredbeard&quot;&gt;@brianredbeard&lt;/a&gt;), principal architect at CoreOS, and Jonathan Boulle (&lt;a href=&quot;https://twitter.com/baronboulle&quot;&gt;@baronboulle&lt;/a&gt;), senior engineer at CoreOS.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, February 3 at 7 p.m. GMT – London, United Kingdom&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;See the first &lt;a href=&quot;http://www.meetup.com/Kubernetes-London/events/219877671/&quot;&gt;Kubernetes London meetup&lt;/a&gt; with Craig Box, solutions engineer for Google Cloud Platform, and Kelsey Hightower (&lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;@kelseyhightower&lt;/a&gt;), developer advocate at CoreOS.  Attendees will be guided through the first steps with Kubernetes and Kelsey will discuss managing containers at scale with CoreOS and Kubernetes.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thursday, February 5 at 7:00 p.m. CET – Frankfurt, Germany&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href=&quot;http://www.meetup.com/DevOps-Frankfurt/events/219713349/&quot;&gt;DevOps Frankfurt meetup&lt;/a&gt;, where we will give a rundown on CoreOS and Rocket from Redbeard (&lt;a href=&quot;https://twitter.com/brianredbeard&quot;&gt;@brianredbeard&lt;/a&gt;), principal architect at CoreOS, and Jonathan Boulle (&lt;a href=&quot;https://twitter.com/baronboulle&quot;&gt;@baronboulle&lt;/a&gt;), senior engineer at CoreOS.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monday, February 9 at 7:00 p.m.  CET – Berlin, Germany&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Meet Jonathan Boulle (&lt;a href=&quot;https://twitter.com/baronboulle&quot;&gt;@baronboulle&lt;/a&gt;), senior engineer at CoreOS, at the &lt;a href=&quot;http://www.meetup.com/CoreOS-Berlin/events/220013157/&quot;&gt;CoreOS Berlin meetup&lt;/a&gt; to learn about &lt;a href=&quot;https://github.com/coreos/rocket&quot;&gt;Rocket&lt;/a&gt; and the &lt;a href=&quot;https://github.com/appc/spec&quot;&gt;App Container spec&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;united-states&quot;&gt;United States&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, February 4 at 6:00 p.m. – New York, New York&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Come to our February &lt;a href=&quot;http://www.meetup.com/coreos-nyc/events/219865422/&quot;&gt;CoreOS New York City meetup&lt;/a&gt; at Work-Bench, 110 Fifth Avenue on the 5th floor, where our team will discuss our new container runtime, &lt;a href=&quot;https://github.com/coreos/rocket&quot;&gt;Rocket&lt;/a&gt;, as well as Quay.io new features. In addition, Nathan Smith, head of engineering at Wink, &lt;a href=&quot;http://www.wink.com&quot;&gt;www.wink.com&lt;/a&gt;, will walk us through how they are using CoreOS.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monday, February 9 at 6:30 p.m. EST – New York, New York&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;http://www.meetup.com/ctoschool/events/219306253/&quot;&gt;CTO School meetup&lt;/a&gt; will host an evening on Docker and the Linux container ecosystem. See Jake Moshenko (@JacobMoshenko), product manager at CoreOS, and Borja Burgos-Galindo, CEO &amp;amp; co-founder of &lt;a href=&quot;https://www.tutum.co/&quot;&gt;Tutum&lt;/a&gt;, for an intro to containers and an overview on the ecosystem, followed by a presentation from Tom Leach and Travis Thieman of Gamechanger.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Friday, February 13 – San Francisco, California&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;See Alex Polvi, CEO of CoreOS, keynote at &lt;a href=&quot;http://vmturbo.com/turbofest-west-registration/&quot;&gt;TurboFest West&lt;/a&gt;, a program of cloud and virtualization thought leadership discussions hosted by VMTurbo. Register for more details.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, February 17 at 5:30 p.m. CST – Kansas City, Missouri&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Redbeard (&lt;a href=&quot;https://twitter.com/brianredbeard&quot;&gt;@brianredbeard&lt;/a&gt;), principal architect at CoreOS, will be kickin’ it with the &lt;a href=&quot;http://www.meetup.com/Cloud-KC/events/219324916/&quot;&gt;Cloud KC meetup&lt;/a&gt; to go over CoreOS and &lt;a href=&quot;https://github.com/coreos/rocket&quot;&gt;Rocket&lt;/a&gt;. Thanks to C2FO for hosting this event.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wednesday, February 18 at 10:00 a.m. PST – Santa Rosa, California&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Alex Polvi, CEO of CoreOS, will present a keynote on Containers and the Changing Server Landscape at the &lt;a href=&quot;http://events.linuxfoundation.org/events/collaboration-summit/program/schedule&quot;&gt;Linux Collab Summit&lt;/a&gt;. See more about what Alex will discuss in a &lt;a href=&quot;http://www.linux.com/news/featured-blogs/200-libby-clark/806347-collaboration-summit-keynote-alex-polvi-coreos&quot;&gt;Q&amp;amp;A with Linux.com&lt;/a&gt; and tweet to us to meet at the event if you’ll be there.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thursday, February 19 at 7:00 p.m. CST – Carrollton, Texas&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Come to the Linux Containers &amp;amp; Virtualization meetup to meet Redbeard (&lt;a href=&quot;https://twitter.com/brianredbeard&quot;&gt;@brianredbeard&lt;/a&gt;), principal architect at CoreOS, and learn about &lt;a href=&quot;https://github.com/coreos/rocket&quot;&gt;Rocket&lt;/a&gt; and the &lt;a href=&quot;https://github.com/appc/spec&quot;&gt;App Container spec&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;February 19-February 22 – Los Angeles, California&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Meet Jonathan Boulle (&lt;a href=&quot;https://twitter.com/baronboulle&quot;&gt;@baronboulle&lt;/a&gt;), senior engineer at CoreOS, at the &lt;a href=&quot;http://www.socallinuxexpo.org/scale/13x&quot;&gt;SCALE 13x, the SoCal Linux Expo&lt;/a&gt;. Jon will &lt;a href=&quot;http://www.socallinuxexpo.org/scale/13x/presentations/rocket-and-app-container-spec&quot;&gt;present a session&lt;/a&gt; on &lt;a href=&quot;https://github.com/coreos/rocket&quot;&gt;Rocket&lt;/a&gt; and the &lt;a href=&quot;https://github.com/appc/spec&quot;&gt;App Container spec&lt;/a&gt; on Saturday, February 21 at 3:00 p.m. PT in the Carmel room.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;More events will be added, so check back for updates here and at our &lt;a href=&quot;/community&quot;&gt;community page&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;In case you missed it, watch a webinar with Kelsey Hightower, developer advocate at CoreOS, and Matt Williams, DevOps evangelist at Datadog on Managing CoreOS Container Performance for Production Workloads&lt;/p&gt;

&lt;iframe width=&quot;420&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/nlAj6Hle6wk?rel=0&quot; frameborder=&quot;0&quot; allowfullscreen style=&quot;margin: 0 auto; display: block&quot;&gt;&lt;/iframe&gt;
</content>
 </entry>
 
 <entry>
   <title>etcd 2.0 Release - First Major Stable Release</title>
   <link href="https://coreos.com/blog/etcd-2.0-release-first-major-stable-release/"/>
   <updated>2015-01-28T08:21:00+00:00</updated>
   <id>https://coreos.com/blog/etcd-2.0-release-first-major-stable-release</id>
   <content type="html">&lt;p&gt;&lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
&lt;meta name=&quot;twitter:site&quot; content=&quot;@coreoslinux&quot;&gt;
&lt;meta name=&quot;twitter:title&quot; content=&quot;etcd 2.0 Release - First Major Stable Release&quot;&gt;
&lt;meta name=&quot;twitter:description&quot; content=&quot;etcd 2.0.0 is the first stable release, including changes enhancing ease-of-use and stability of the project.&quot;&gt;
&lt;meta name=&quot;twitter:image:src&quot; content=&quot;https://coreos.com/assets/images/media/etcd2-0.png&quot;&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/etcd2-0.png&quot; alt=&quot;etcd 2.0 Release - First Major Stable Release&quot; style=&quot;margin: 0 auto; display: block; margin-bottom: 20px;&quot;&gt;&lt;/p&gt;

&lt;p&gt;Today &lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;etcd&lt;/a&gt; hit v2.0.0, our first major stable release. Since the &lt;a href=&quot;https://coreos.com/blog/etcd-2-0-release-candidate/&quot;&gt;release-candidate&lt;/a&gt;, in mid-December, the team has been hard at work stabilizing the release. You can find the &lt;a href=&quot;https://github.com/coreos/etcd/releases/tag/v2.0.0&quot;&gt;new binaries on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For a quick overview, etcd is an open source, distributed, consistent key-value store for shared configuration, service discovery, and scheduler coordination. By using etcd, applications can ensure that even in the face of individual servers failing, the application will continue to work. etcd is a core component of CoreOS software that facilitates safe automatic updates, coordinating work being scheduled to hosts, and setting up overlay networking for containers.&lt;/p&gt;

&lt;h2 id=&quot;new-updates&quot;&gt;New Updates&lt;/h2&gt;

&lt;p&gt;The etcd team has been hard at work to improve the ease-of-use and stability of the project. Some of the highlights compared to the last official release, etcd 0.4.6, include&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Internal etcd protocol improvements to guard against accidental misconfiguration&lt;/li&gt;
&lt;li&gt;&lt;code&gt;etcdctl backup&lt;/code&gt; was added to make recovering from cluster failure easier&lt;/li&gt;
&lt;li&gt;&lt;code&gt;etcdctl member list/add/remove&lt;/code&gt; commands for easily managing a cluster&lt;/li&gt;
&lt;li&gt;On-disk datastore safety improvements with CRC checksums and append-only behavior&lt;/li&gt;
&lt;li&gt;An improved &lt;a href=&quot;https://godoc.org/github.com/coreos/etcd/raft&quot;&gt;Raft consensus implementation&lt;/a&gt; already used in other projects like &lt;a href=&quot;https://github.com/cockroachdb/cockroach&quot;&gt;CockroachDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;More rigorous and faster running tests of the underlying Raft implementation, covering all state machine and cases explained in the original Raft white paper in 1.5 seconds&lt;/li&gt;
&lt;li&gt;Additional &lt;a href=&quot;https://github.com/coreos/etcd/blob/master/Documentation/admin_guide.md&quot;&gt;administrator focused documentation&lt;/a&gt; explaining common scenarios&lt;/li&gt;
&lt;li&gt;Official IANA assigned ports for etcd TCP 2379/2380&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The major goal has been to make etcd more usable and stable with all of these changes. Over the hundreds of pull requests merged to make this release, many other improvements and bug fixes have been made. Thank you to the 150 contributors who have helped etcd get where it is today and provided those bug fixes, pull requests and more.&lt;/p&gt;

&lt;h2 id=&quot;who-uses-etcd?&quot;&gt;Who uses etcd?&lt;/h2&gt;

&lt;p&gt;Many projects use etcd - Google’s Kubernetes, Pivotal’s Cloud Foundry, Mailgun and now Apache Mesos and Mesosphere DCOS too. In addition to these projects, there are more than 500 projects on &lt;a href=&quot;https://github.com/search?utf8=%E2%9C%93&amp;amp;q=etcd&quot;&gt;GitHub&lt;/a&gt;, using etcd. The feedback from these application developers continues to be an important part of the development cycle; thank you for being involved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Direct quotes from people using etcd:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;quot;We evaluated a number of persistent stores, yet etcd’s HTTP API and strong Go client support was the best fit for Cloud Foundry,&amp;quot; said Onsi Fakhouri, engineering manager at Pivotal. &amp;quot;Anyone currently running a recent version of Cloud Foundry is running etcd. We are big fans of etcd and are excited to see the rapid progress behind the key-value store.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;quot;etcd is an important part of configuration management and service discovery in our infrastructure,&amp;quot; said Sasha Klizhentas, lead engineer at Mailgun. &amp;quot;Our services use etcd for dynamic load-balancing, leader election and canary deployment patterns. etcd’s simple HTTP API helps make our infrastructure reliable and distributed.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Shared configuration and shared state are two very tricky domains for distributed systems developers as services no longer run on one machine but are coordinated across an entire datacenter,&amp;quot; said Benjamin Hindman, chief architect at Mesosphere and chair of Apache Mesos. &amp;quot;Apache Mesos and Mesosphere’s Datacenter Operating System (DCOS) will soon have a standard plugin to support etcd. Users and customers have asked for etcd support, and we’re delivering it as an option.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;get-involved-and-get-started&quot;&gt;Get Involved and Get Started&lt;/h2&gt;

&lt;p&gt;After nearly two years of diligent work, we are eager to hear your continued feedback on etcd. We will continue to work to make etcd a fundamental building block for Google-like infrastructure that users can take off the shelf, build upon and rely on.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://coreos.com/docs/distributed-configuration/getting-started-with-etcd/&quot;&gt;Getting started&lt;/a&gt; with etcd.&lt;/li&gt;
&lt;li&gt;etcd on &lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Follow us on &lt;a href=&quot;https://twitter.com/coreoslinux&quot;&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Attend upcoming CoreOS meetups in &lt;a href=&quot;https://www.meetup.com/coreos/&quot;&gt;San Francisco&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Attend upcoming CoreOS meetups in &lt;a href=&quot;https://www.meetup.com/coreos-nyc/&quot;&gt;New York city&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Find other meetups from the &lt;a href=&quot;/community&quot;&gt;CoreOS community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;brandon-philips-speaking-about-etcd-2.0&quot;&gt;Brandon Philips speaking about etcd 2.0&lt;/h2&gt;

&lt;p&gt;CoreOS CTO Brandon Philips speaking about etcd 2.0 at the CoreOS San Francsico meet up:&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/z6tjawXZ71E?rel=0&quot; frameborder=&quot;0&quot; allowfullscreen style=&quot;margin: 0 auto; display: block;&quot;&gt;&lt;/iframe&gt;
</content>
 </entry>
 
 <entry>
   <title>Update on CVE-2015-0235, GHOST</title>
   <link href="https://coreos.com/blog/CVE-2015-0235-ghost/"/>
   <updated>2015-01-28T08:01:50+00:00</updated>
   <id>https://coreos.com/blog/CVE-2015-0235-ghost</id>
   <content type="html">&lt;p&gt;The glibc vulnerability, &lt;a href=&quot;http://www.openwall.com/lists/oss-security/2015/01/27/9&quot;&gt;CVE-2015-0235&lt;/a&gt;, known as “GHOST”, has been patched on CoreOS. If automatic updates are enabled (default configuration), your server should already be patched. &lt;/p&gt;

&lt;p&gt;If automatic updates are disabled, you can force an update by running &lt;code&gt;update_engine_client -check_for_update&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Currently, the auto-update mechanism only applies to the base CoreOS, not inside your containers. If your container was built from an older ubuntu base, for example, you’ll need to update the container and get the patch from ubuntu.&lt;/p&gt;

&lt;p&gt;If you have any questions or concerns, please join us in IRC &lt;a href=&quot;irc://irc.freenode.org:6667/#coreos&quot;&gt;freenode/#coreos&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>rkt and App Container 0.2.0 Release</title>
   <link href="https://coreos.com/blog/rocket-and-appc-0.2.0/"/>
   <updated>2015-01-23T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/rocket-and-appc-0.2.0</id>
   <content type="html">&lt;p&gt;This week both &lt;a href=&quot;https://github.com/coreos/rocket&quot;&gt;rkt&lt;/a&gt; and the &lt;a href=&quot;https://github.com/appc/spec&quot;&gt;App Container&lt;/a&gt; (appc) spec have reached 0.2.0. Since our &lt;a href=&quot;https://coreos.com/blog/rocket/&quot;&gt;launch&lt;/a&gt; of the projects in December, both have been moving very quickly with a healthy community emerging. rkt now has cryptographic signing by default and a community is emerging around independent implementations of the appc spec. Read on for details on the updates.&lt;/p&gt;

&lt;h2 id=&quot;rkt-0.2.0&quot;&gt;rkt 0.2.0&lt;/h2&gt;

&lt;p&gt;Development on rkt has continued rapidly over the past few weeks, and today we are  releasing v0.2.0. This important milestone release brings a lot of new features and improvements that enable securely verified image retrieval and tools for container introspection and lifecycle management.&lt;/p&gt;

&lt;p&gt;Notably, this release introduces several important new subcommands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rkt enter&lt;/code&gt;, to enter the namespace of an app within a container&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rkt status&lt;/code&gt;, to check the status of a container and applications within it&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rkt gc&lt;/code&gt;, to garbage collect old containers no longer in use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In keeping with rkt&amp;#39;s goals of being simple and composable, we&amp;#39;ve taken care to implement these lifecycle-related subcommands without introducing additional daemons or databases. rkt achieves this by taking advantage of existing file-system and kernel semantics like advisory file-locking, atomic renames, and implicit closing (and unlocking) of open files at process exit.&lt;/p&gt;

&lt;p&gt;v0.2.0 also marks the arrival of automatic signature validation: when retrieving an image during &lt;code&gt;rkt fetch&lt;/code&gt; or &lt;code&gt;rkt run&lt;/code&gt;, Rocket will verify its signature by default. &lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;Kelsey Hightower&lt;/a&gt; has written up an &lt;a href=&quot;https://github.com/coreos/rkt/blob/master/Documentation/signing-and-verification-guide.md&quot;&gt;overview guide&lt;/a&gt; explaining this functionality. This signature verification is backed by a flexible &lt;a href=&quot;https://github.com/coreos/rocket/tree/master/pkg/keystore&quot;&gt;system for storing public keys&lt;/a&gt;, which will soon be even easier to use with a new &lt;a href=&quot;https://github.com/coreos/rkt/issues/367&quot;&gt;&lt;code&gt;rkt trust&lt;/code&gt;&lt;/a&gt; subcommand. This is a small but important step towards our goal of rkt being as secure as possible by default.&lt;/p&gt;

&lt;p&gt;Here&amp;#39;s an example of the key validation in action when retrieving the latest etcd release (in this case the &lt;a href=&quot;https://coreos.com/dist/pubkeys/aci-pubkeys.gpg&quot;&gt;CoreOS ACI signing key&lt;/a&gt; has previously been trusted using the process above):&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ rkt fetch coreos.com/etcd:v2.0.0-rc.1
rkt: searching for app image coreos.com/etcd:v2.0.0-rc.1
rkt: fetching image from https://github.com/coreos/etcd/releases/download/v2.0.0-rc.1/etcd-v2.0.0-rc.1-linux-amd64.aci
Downloading aci: [=============================                ] 2.31 MB/3.58 MB
Downloading signature from https://github.com/coreos/etcd/releases/download/v2.0.0-rc.1/etcd-v2.0.0-rc.1-linux-amd64.sig
rkt: signature verified: 
  CoreOS ACI Builder &amp;lt;release@coreos.com&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;app-container-0.2.0&quot;&gt;App Container 0.2.0&lt;/h2&gt;

&lt;p&gt;The appc spec continues to evolve but is now stabilizing. Some of the major changes are highlighted in the &lt;a href=&quot;https://groups.google.com/d/msg/appc-dev/__cpvJU7iy4/XUqSZv9Sve4J&quot;&gt;announcement email&lt;/a&gt; that went out earlier this week.&lt;/p&gt;

&lt;p&gt;This last week has also seen the emergence of two different implementations of the spec: &lt;a href=&quot;https://github.com/3ofcoins/jetpack&quot;&gt;jetpack&lt;/a&gt; (a FreeBSD/Jails-based executor) and &lt;a href=&quot;https://github.com/cdaylward/libappc/&quot;&gt;libappc&lt;/a&gt; (a C++ library for working with app containers). The authors of both projects have provided extremely helpful feedback and pull requests to the spec, and it is great to see these early implementations develop!&lt;/p&gt;

&lt;h3 id=&quot;jetpack,-app-container-for-freebsd&quot;&gt;Jetpack, App Container for FreeBSD&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/3ofcoins/jetpack&quot;&gt;Jetpack&lt;/a&gt; is an implementation of the App Container Specification for FreeBSD. It uses jails as an isolation mechanism, and ZFS for layered storage. Jetpack is a great test of the cross platform portability of appc.&lt;/p&gt;

&lt;h3 id=&quot;libappc,-c++-library-for-app-container&quot;&gt;libappc, C++ library for App Container&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/cdaylward/libappc&quot;&gt;libappc&lt;/a&gt; is a C++ library for doing things with app containers. The goal of the library is to be a flexible toolkit: manifest parsing and creation, pluggable discovery, image creation/extraction/caching, thin-provisioned file systems, etc.&lt;/p&gt;

&lt;h2 id=&quot;get-involved&quot;&gt;Get involved&lt;/h2&gt;

&lt;p&gt;If you are interested in contributing to any of these projects, please get involved! A great place to start is issues in the Help Wanted label on GitHub. You can also reach out with questions and feedback on the Rocket and appc mailing lists:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;rkt&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Help Wanted: &lt;a href=&quot;https://github.com/coreos/rocket/labels/help%20wanted&quot;&gt;https://github.com/coreos/rkt/labels/help%20wanted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Mailing list: &lt;a href=&quot;https://groups.google.com/forum/#!forum/rocket-dev&quot;&gt;rocket-dev@googlegroups.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;App Container&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Help Wanted: &lt;a href=&quot;https://github.com/appc/spec/labels/help%20wanted&quot;&gt;https://github.com/appc/spec/labels/help%20wanted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Mailing list: &lt;a href=&quot;https://groups.google.com/forum/#!forum/appc-dev&quot;&gt;appc-dev@googlegroups.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the SF Bay Area or NYC next week? Come to the meetups in each area to hear more about these changes and the future of rocket and appc. RSVP to the &lt;a href=&quot;http://www.meetup.com/coreos-nyc/events/219865422/&quot;&gt;CoreOS NYC meetup&lt;/a&gt; and &lt;a href=&quot;http://www.meetup.com/coreos/events/219887317/&quot;&gt;SF meetup&lt;/a&gt; to learn more.&lt;/p&gt;

&lt;p&gt;Lastly, thank you to the community of contributors emerging around Rocket and App Container: &lt;/p&gt;

&lt;p&gt;Alan LaMielle, Alban Crequy, Alex Polvi, Ankush Agarwal, Antoine Roy-Gobeil, azu, beadon, Brandon Philips, Brian Ketelsen, Brian Waldon, Burcu Dogan, Caleb Spare, Charles Aylward, Daniel Farrell, Dan Lipsitt, deepak1556, Derek, Emil Hessman, Eugene Yakubovich, Filippo Giunchedi, Ghislain Guiot, gprggr, Hector Fernandez, Iago López Galeiras, James Bayer, Jimmy Zelinskie, Johan Bergström, Jonathan Boulle, Josh Braegger, Kelsey Hightower, Keunwoo Lee, Krzesimir Nowak, Levi Gross, Maciej Pasternacki, Mark Kropf, Mark Lamourine, Matt Blair, Matt Boersma, Máximo Cuadros Ortiz, Meaglith Ma, PatrickJS, Pekka Enberg, Peter Bourgon, Rahul, Robo, Rob Szumski, Rohit Jnagal, sbevington, Shaun Jackman, Simone Gotti, Simon Thulbourn, virtualswede, Vito Caputo, Vivek Sekhar, Xiang Li&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Meet us for our January 2015 events</title>
   <link href="https://coreos.com/blog/jan-meetups-events/"/>
   <updated>2015-01-20T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/jan-meetups-events</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/assets/images/meetups/linux-conf-au.jpg&quot; class=&quot;image-center&quot;/&gt;
&lt;div class=&quot;caption&quot;&gt;CoreOS CTO Brandon Philips speaking at Linux Conf AU&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;January has been packed with meetups and events across the globe. So far, we’ve been to &lt;a href=&quot;http://www.meetup.com/hyderabad-scalability/events/219395821/?__hstc=112362075.2bfe7d0fa3be214843c3f09df4cedf57.1418681075208.1421451620228.1421454074640.64&amp;amp;__hssc=112362075.1.1421454074640&amp;amp;__hsfp=2722972440&quot;&gt;India&lt;/a&gt;, &lt;a href=&quot;http://www.meetup.com/zhgeeks/events/219503182/?__hstc=112362075.2bfe7d0fa3be214843c3f09df4cedf57.1418681075208.1421451620228.1421454074640.64&amp;amp;__hssc=112362075.2.1421454074640&amp;amp;__hsfp=2722972440&quot;&gt;Switzerland&lt;/a&gt;, &lt;a href=&quot;http://www.meetup.com/Golang-Paris/events/219534237/?__hstc=112362075.2bfe7d0fa3be214843c3f09df4cedf57.1418681075208.1421451620228.1421454074640.64&amp;amp;__hssc=112362075.3.1421454074640&amp;amp;__hsfp=2722972440&quot;&gt;France&lt;/a&gt;, &lt;a href=&quot;http://www.meetup.com/CoreOS-London/events/210724042/?__hstc=112362075.2bfe7d0fa3be214843c3f09df4cedf57.1418681075208.1421451620228.1421454074640.64&amp;amp;__hssc=112362075.4.1421454074640&amp;amp;__hsfp=2722972440&quot;&gt;England&lt;/a&gt; and New Zealand.&lt;/p&gt;

&lt;p&gt;Check out a CoreOS tutorial from Brandon Philips (&lt;a href=&quot;https://twitter.com/brandonphilips&quot;&gt;@brandonphilips&lt;/a&gt;) at &lt;a href=&quot;http://linux.conf.au/&quot;&gt;Linux Conf New Zealand&lt;/a&gt;.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/Mc0N1rlTyps?rel=0&quot; frameborder=&quot;0&quot; allowfullscreen style=&quot;margin: 0 auto; display: block&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Our team has been on a fantastic tour meeting CoreOS contributors and friends around the world. A special thank you to the organizers of those meetups and to all those who came out to the meetups and made us feel at home. Come join us at the following events this month:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, January 27 at 11 a.m. PST – Online&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Join us for a webinar on &lt;a href=&quot;http://devops.com/blogs/devops-toolbox/webinar-managing-coreos-container-performance-production-workloads/&quot;&gt;Managing CoreOS Container Performance for Production Workloads&lt;/a&gt;. Kelsey Hightower (&lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;@kelseyhightower&lt;/a&gt;) from CoreOS and Matt Williams from Datadog will discuss trends in container usage and show how container performance can be monitored, especially as the container deployments grow. &lt;a href=&quot;http://devops.com/blogs/devops-toolbox/webinar-managing-coreos-container-performance-production-workloads/&quot;&gt;Register here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, January 27 at 6 p.m. EST – New York, NY&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Come to our &lt;a href=&quot;http://www.meetup.com/coreos-nyc/events/219865422/&quot;&gt;January New York City meetup&lt;/a&gt; at Work-Bench, 110 Fifth Avenue on the 5th floor, where our team will discuss our new container runtime, Rocket, as well as Quay.io new features. In addition, Nathan Smith, head of engineering at Wink, &lt;a href=&quot;http://www.wink.com&quot;&gt;www.wink.com&lt;/a&gt;, will walk us through how they are using CoreOS. &lt;a href=&quot;http://www.meetup.com/coreos-nyc/events/219865422/&quot;&gt;Register here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tuesday, January 27 at 6 p.m. PST – San Francisco, CA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Our &lt;a href=&quot;http://www.meetup.com/coreos/events/219887317/&quot;&gt;January San Francisco meetup&lt;/a&gt; is not-to-miss! We’ll discuss news and updates on etcd, Rocket and AppC. &lt;a href=&quot;http://www.meetup.com/coreos/events/219887317/&quot;&gt;Register here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thursday, January 29 at 7 p.m. CET – Barcelona, Spain&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Meet Brian Harrington, better known as Redbeard (&lt;a href=&quot;https://twitter.com/brianredbeard&quot;&gt;@brianredbeard&lt;/a&gt;), for &lt;a href=&quot;http://www.meetup.com/coreos-bcn/events/219620372/?__hstc=112362075.2cc3823e236b8ecc9578333a1c12b4b6.1420564464301.1421286491041.1421346836222.25&amp;amp;__hssc=112362075.3.1421346836222&amp;amp;__hsfp=2512990328&quot;&gt;CoreOS: An Overview&lt;/a&gt;, at itnig. Dedicated VMs and configuration management tools are being replaced by containerization and new service management technologies like systemd. This meetup will give an overview of CoreOS, including etcd, schedulers (mesos, kubernetes, etc.), and containers (nspawn, docker, rocket). Understand how to use these new technologies to build performant, reliable, large distributed systems. &lt;a href=&quot;http://www.meetup.com/coreos-bcn/events/219620372/?__hstc=112362075.2cc3823e236b8ecc9578333a1c12b4b6.1420564464301.1421286491041.1421346836222.25&amp;amp;__hssc=112362075.3.1421346836222&amp;amp;__hsfp=2512990328&quot;&gt;Register here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Saturday, January 31-Sunday, February 1 – Brussels, Belgium&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Our team is attending FOSDEM ’15 to connect with developers and the open source community. See our talks and meet the team at our dev booth throughout the event.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Redbeard (&lt;a href=&quot;https://twitter.com/brianredbeard&quot;&gt;@brianredbeard&lt;/a&gt;) will discuss How CoreOS is built, modified, and updated on Saturday at 1 p.m. CET. &lt;/li&gt;
&lt;li&gt;Jon Boulle (&lt;a href=&quot;https://twitter.com/baronboulle&quot;&gt;@baronboulle&lt;/a&gt;) from our engineering team will discuss all things Go at CoreOS on Sunday at 9:05 a.m. CET.&lt;/li&gt;
&lt;li&gt;Kelsey Hightower (&lt;a href=&quot;https://twitter.com/kelseyhightower&quot;&gt;@kelseyhightower&lt;/a&gt;), developer advocate at CoreOS, will give a talk on Rocket and the App Container Spec at 11:40 a.m. CET.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A special shout out to the organizers of those meetups - &lt;a href=&quot;https://twitter.com/fintanr&quot;&gt;Fintan Ryan&lt;/a&gt;, &lt;a href=&quot;https://www.linkedin.com/in/ranganathanb&quot;&gt;Ranganathan Balashanmugam&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/al_maisan&quot;&gt;Muharem Hrnjadovic&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/fredmenez&quot;&gt;Frédéric Ménez&lt;/a&gt;, &lt;a href=&quot;https://www.linkedin.com/in/richardpaul&quot;&gt;Richard Paul&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/pzurek&quot;&gt;­Piotr Zurek&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/patrickheneise&quot;&gt;Patrick Heneise&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/benjamin&quot;&gt;Benjamin Reitzammer&lt;/a&gt;, &lt;a href=&quot;http://www.meetup.com/Linux-Containers-Virtualization/members/26595382/&quot;&gt;Sunday Ogwu&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/twoflowers&quot;&gt;Tom Martin&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/blixtra&quot;&gt;Chris Kuhl&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/romefort&quot;&gt;Johann Romefort&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;If you are interested in hosting an event of your own or inviting someone from CoreOS to speak, reach out to us at &lt;a href=&quot;mailto:press@coreos.com&quot;&gt;press@coreos.com&lt;/a&gt;.   &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Quay.io New Features</title>
   <link href="https://coreos.com/blog/new-quay-features/"/>
   <updated>2015-01-07T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/new-quay-features</id>
   <content type="html">&lt;p&gt;Today we round up our newest features and shine a spotlight on them.  Since joining the &lt;a href=&quot;https://coreos.com/blog/CoreOS-enterprise-docker-registry/&quot;&gt;CoreOS team&lt;/a&gt;, we have been working hard on features to improve the Quay.io experience. Highlights include squashed images (an experimental feature) for faster downloading, added build features for more control with build automation tools, and improved notification features for better communications within teams.  &lt;/p&gt;

&lt;h2 id=&quot;squashed-images&quot;&gt;Squashed Images&lt;/h2&gt;

&lt;p&gt;Have you ever had to deploy a repository to a large number of machines, and wished for a faster way to do so?&lt;/p&gt;

&lt;p&gt;We&amp;#39;re happy to announce a new experimental feature which allows you to download a flattened version of a tag in your repository as a single layer. Instead of downloading each layer of a repository, one by one, you can download and load a single image of your repository. This cuts down on the network roundtrips associated with a pull, and even better, allows you to download your repository &lt;em&gt;without using any bandwidth for deleted files&lt;/em&gt;. For example, if you have an image with a go binary, you can &lt;code&gt;rm&lt;/code&gt; the go compiler after the build, and we’ll only serve the remaining files. Additionally, after you pull this image once, we will cache it so that subsequent pulls of the same image are even faster!&lt;/p&gt;

&lt;p&gt;Using the squashed image is super simple: If you ask for tag &lt;code&gt;foobar&lt;/code&gt;, then executing the download command will result in a new image named &lt;code&gt;foobar.squash&lt;/code&gt;, which can be run the exact same way as its base tag:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&amp;gt; curl -L -f https://quay.io/c1/squash/username/reponame/foobar &lt;span class=&quot;p&quot;&gt;|&lt;/span&gt; docker load
&amp;gt; docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
quay.io/username/reponame              latest.squash       04acaed21a16        &lt;span class=&quot;m&quot;&gt;6&lt;/span&gt; days ago          17.28 MB
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;There are some best practices for using this feature optimally. First, since you will not benefit from layering any more, you should only use this to pull to machines which will only pull the image once, and will not perform upgrades. Ephemeral or auto-scaling machines are prime candidates. Second, to take advantage of the caching, you should let the first pull of the squashed image complete before pulling it on subsequent nodes. &lt;strong&gt;If you plan to pull to tens, hundreds, or thousands of machines, it is best to prime the cache before doing so.&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;graphic&quot;&gt;
  &lt;div class=&quot;screenshot&quot;&gt;
    &lt;img src=&quot;/assets/images/screenshots/quay-squash-download.png&quot; style=&quot;margin: 0 auto; display: block; max-width: 700px;&quot;&gt;&lt;/img&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;You can find the command to pull and load a squashed image in the main tree view for your repository. &lt;em&gt;Please replace the placeholder credentials with the credentials of one of your own robots in order to run it&lt;/em&gt;. We have tons of tests which verify that these images are correct, but please test and verify that this feature works for you before adopting it in production.&lt;/p&gt;

&lt;h2 id=&quot;builds&quot;&gt;Builds&lt;/h2&gt;

&lt;p&gt;The ability to build your repositories automatically from GitHub has been wildly popular. With great popularity comes great feature requests, such as: to only build the branches you specify, to test builds in different branches, and to have access to the &lt;code&gt;.git&lt;/code&gt; directory that would be present in a clone. We’ve got two and a half of those features ready!&lt;/p&gt;

&lt;h3 id=&quot;building-select-branches&quot;&gt;Building select branches&lt;/h3&gt;

&lt;p&gt;As of now, you can filter the branches which you want to build from GitHub. We allow you to specify any regular expression, which if it matches the branch name, will allow the build to proceed.&lt;/p&gt;

&lt;div class=&quot;graphic&quot;&gt;
  &lt;div class=&quot;screenshot&quot;&gt;
    &lt;img src=&quot;/assets/images/screenshots/setup-quay-branch.png&quot; style=&quot;margin: 0 auto; display: block; max-width: 500px;&quot;&gt;&lt;/img&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h3 id=&quot;manually-triggering-a-branch&quot;&gt;Manually triggering a branch&lt;/h3&gt;

&lt;p&gt;We also allow you to manually trigger a build from any of the branches in your repository.&lt;/p&gt;

&lt;div class=&quot;graphic&quot;&gt;
  &lt;div class=&quot;screenshot&quot;&gt;
    &lt;img src=&quot;/assets/images/screenshots/run-quay-branch.png&quot; style=&quot;margin: 0 auto; display: block; max-width: 500px;&quot;&gt;&lt;/img&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h3 id=&quot;finding-the-revision&quot;&gt;Finding the revision&lt;/h3&gt;

&lt;p&gt;As for the &lt;code&gt;.git&lt;/code&gt; directory, we were originally unable to provide it because we are not building clones; we’re building archives. After digging into your requests a bit more, it seems that the feature that you really need is to be able to tell which sha you’re actually building, at build time. So, in the interim, we&amp;#39;ve created a synthetic &lt;code&gt;.git&lt;/code&gt; directory which will allow you to run the commands &lt;code&gt;git rev-parse --short HEAD&lt;/code&gt; and &lt;code&gt;git rev-parse HEAD&lt;/code&gt;. We hope this will allow you to continue forward with your build automation tools.&lt;/p&gt;

&lt;h2 id=&quot;communication-and-notification-improvements&quot;&gt;Communication and Notification Improvements&lt;/h2&gt;

&lt;p&gt;In order to best facilitate communication with and between your teams, we&amp;#39;ve also added notification types for &lt;em&gt;Slack&lt;/em&gt;, &lt;em&gt;Flowdock&lt;/em&gt;, and &lt;em&gt;Hipchat&lt;/em&gt;. Using the API token style integrations provided by these various tools, you can now receive your repository notifications, such as build status and pushes, directly in your team chat provider.&lt;/p&gt;

&lt;h2 id=&quot;additional-updates&quot;&gt;Additional Updates&lt;/h2&gt;

&lt;p&gt;Lastly, we’ve made some ease-of-use updates to other parts of Quay.io, such as: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inviting users to join teams can now be done by email address, and users must confirm that they would like to join&lt;/li&gt;
&lt;li&gt;Ability to regenerate a robot’s credentials, in case you accidentally leak them (e.g. by running docker login without specifying quay.io)&lt;/li&gt;
&lt;li&gt;Added support for the &lt;code&gt;docker search&lt;/code&gt; command. Queries can be issued like so: &lt;code&gt;docker search quay.io/somesearchterm&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We look forward to hearing your feedback on the newest updates.  Sign up for a free trial of Quay.io &lt;a href=&quot;https://quay.io/plans/&quot;&gt;here&lt;/a&gt;.  Or if you are interested in storing your docker containers behind the firewall, try &lt;a href=&quot;https://coreos.com/products/enterprise-registry/&quot;&gt;CoreOS Enterprise Registry&lt;/a&gt;.  &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Announcing the etcd 2.0 Release Candidate</title>
   <link href="https://coreos.com/blog/etcd-2-0-release-candidate/"/>
   <updated>2014-12-18T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/etcd-2-0-release-candidate</id>
   <content type="html">&lt;p&gt;&lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
&lt;meta name=&quot;twitter:site&quot; content=&quot;@coreoslinux&quot;&gt;
&lt;meta name=&quot;twitter:title&quot; content=&quot;Announcing the etcd 2.0 Release Candidate&quot;&gt;
&lt;meta name=&quot;twitter:description&quot; content=&quot;Announcing the etcd 2.0 Release Candidate.&quot;&gt;
&lt;meta name=&quot;twitter:image:src&quot; content=&quot;https://coreos.com/assets/images/media/etcd2-0.png&quot;&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/etcd2-0.png&quot; alt=&quot;Announcing the etcd 2.0 Release Candidate&quot; style=&quot;margin: 0 auto; display: block; margin-bottom: 20px;&quot;&gt;&lt;/p&gt;

&lt;p&gt;We are pleased to announce the first release candidate for &lt;a href=&quot;https://github.com/coreos/etcd/releases/tag/v2.0.0-rc.1&quot;&gt;etcd v2.0.0&lt;/a&gt;. This is a big day for us: we have been working hard to deliver a new version of etcd and are looking forward to getting your eyes on this major release.&lt;/p&gt;

&lt;p&gt;For those unfamiliar with etcd, it is an open source, distributed, consistent key-value store for shared configuration, service discovery, and scheduler coordination. etcd is a core component of CoreOS software that facilitates safe automatic updates, coordinates work being scheduled to hosts, and sets up overlay networking for containers. It is also actively used by other projects such as Kubernetes and Cloud Foundry, and mentioned by name in 500 projects on GitHub.&lt;/p&gt;

&lt;h2 id=&quot;new-in-this-release&quot;&gt;New in this Release&lt;/h2&gt;

&lt;p&gt;This etcd release improves the whole core of etcd, from the API handling internals to rethinking how to build a solid and practical Raft library. And we have taken feedback from all of you to greatly improve the operational experience with this release; thank you for taking the time to reach out on mailing lists, IRC, and in-person at our meetups. We hope that the new tooling in etcdctl and internal changes in etcd make it foolproof to configure and easy to debug.&lt;/p&gt;

&lt;p&gt;At the heart of this release is a rethink of our &lt;a href=&quot;https://ramcloud.stanford.edu/raft.pdf&quot;&gt;Raft&lt;/a&gt; implementation. Raft enables etcd to do safe distributed compare-and-swap operations on keys and perform automatic leader election in the face of host failures. As &lt;a href=&quot;http://static.googleusercontent.com/media/research.google.com/en/us/archive/paxos_made_live.pdf&quot;&gt;many engineers have observed&lt;/a&gt;, implementing a consensus algorithm like Raft is a non-trivial task. But the etcd team has been hard at work. By leveraging all the latest knowledge and best practices in the Raft ecosystem, we’ve developed the new etcd Raft in 600 lines of Go and 2000 lines of tests, covering all cases in the state machine and every case described in the paper. &lt;/p&gt;

&lt;h2 id=&quot;working-with-the-community&quot;&gt;Working with the Community&lt;/h2&gt;

&lt;p&gt;We’re already hearing good things about the new implementation from our community:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I ran across etcd&amp;#39;s raft package and really liked it! It&amp;#39;s such a nice minimal raft library that I could embed that in Beehive in 1 day with less than 200 LOC.”&lt;/p&gt;

&lt;p&gt;&amp;ndash; Soheil Hassas Yeganeh author of &lt;a href=&quot;https://github.com/kandoo/beehive&quot;&gt;Beehive&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And from the co-author of the Raft paper:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I appreciate how you&amp;#39;re being careful to preserve the semantics of the unoptimized protocol.&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;ndash; &lt;a href=&quot;https://github.com/coreos/etcd/issues/1731&quot;&gt;Diego Ongaro&lt;/a&gt; co-author of the Raft paper&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We also owe a hearty thank you to Blake Mizerany for his architecture guidance, and Ben Darnell and the &lt;a href=&quot;https://github.com/cockroachdb/cockroach&quot;&gt;CockroachDB&lt;/a&gt; team who have provided a lot of feedback on and contributions to our Raft library and recently finished &lt;a href=&quot;https://github.com/cockroachdb/cockroach/issues/20#issuecomment-67210986&quot;&gt;integrating it into their own project&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;With this new solid core, etcd will become an even better fundamental building block for composing distributed systems. To give it a shot, please head on over to our &lt;a href=&quot;https://github.com/coreos/etcd/releases/tag/v2.0.0-rc.1&quot;&gt;GitHub release page&lt;/a&gt; for container images and binaries for Linux and OS X.&lt;/p&gt;

&lt;h2 id=&quot;frequently-asked-questions&quot;&gt;Frequently Asked Questions&lt;/h2&gt;

&lt;h3 id=&quot;what-happened-to-etcd-v1.0?&quot;&gt;What happened to etcd v1.0?&lt;/h3&gt;

&lt;p&gt;Early in the development cycle of etcd we had an API that was called &amp;quot;v1&amp;quot;. This API was on the path for removal since the v0.2.0 release over a year ago. Since we are removing this &amp;quot;v1&amp;quot; API we decided to make the major number line up with the API version number, thus etcd v2.0.0. Up until today v2.0.0 was the v0.5.0 development that has been happening in the master branch.&lt;/p&gt;

&lt;h3 id=&quot;is-etcd-v0.4-compatible-with-v2.0.0?&quot;&gt;Is etcd v0.4 compatible with v2.0.0?&lt;/h3&gt;

&lt;p&gt;For clients, the v2 API is fully supported and shouldn’t require any changes to your code unless you’re relying on older metadata about the etcd nodes. The mechanism for peer communication has been improved through the work on the Raft library and isn’t compatible with v0.4 peers. A few other implementation details were also changed and are described in the &lt;a href=&quot;https://github.com/coreos/etcd/blob/master/Documentation/2.0/backward_compatibility.md&quot;&gt;backwards compatibility&lt;/a&gt; document.&lt;/p&gt;

&lt;h3 id=&quot;when-will-etcd-v2.0.0-appear-in-coreos?&quot;&gt;When will etcd v2.0.0 appear in CoreOS?&lt;/h3&gt;

&lt;p&gt;After the release of etcd v2.0.0, it will first appear in the &lt;a href=&quot;https://coreos.com/releases&quot;&gt;CoreOS alpha channel&lt;/a&gt; and then work its way into the beta and stable channels, following the normal CoreOS release process. If you’d like to use etcd v2.0.0 on CoreOS before its official release, it can easily be run as a container.&lt;/p&gt;

&lt;h3 id=&quot;is-etcd-v2.0.0-available-as-a-container?&quot;&gt;Is etcd v2.0.0 available as a container?&lt;/h3&gt;

&lt;p&gt;Yes! The &lt;a href=&quot;https://github.com/coreos/etcd/releases/tag/v2.0.0-rc.1&quot;&gt;releases page&lt;/a&gt; on GitHub has instructions for containers, Linux, and OS X.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>App Container Spec One Week In</title>
   <link href="https://coreos.com/blog/appc-one-week-in/"/>
   <updated>2014-12-09T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/appc-one-week-in</id>
   <content type="html">&lt;p&gt;Last week we announced an initial version of the &amp;quot;App Container Spec&amp;quot;, a proposed standard for building and running application containers, along with a prototype implementation called &lt;a href=&quot;https://coreos.com/blog/rocket/&quot;&gt;Rocket&lt;/a&gt;. The community&amp;#39;s engagement with the specification this week has been highly productive, with people submitting numerous improvements and contributing feedback on a variety of topics ranging from &lt;a href=&quot;https://github.com/coreos/rocket/issues/187&quot;&gt;crypto algorithms&lt;/a&gt; to &lt;a href=&quot;https://github.com/coreos/rocket/issues/242&quot;&gt;DNS-based image discovery mechanisms&lt;/a&gt;. We had hoped to kick off a community effort to design the specification and it is already working beyond our expectations. With discussions starting on implementing the spec in &lt;a href=&quot;http://www.mail-archive.com/dev%40mesos.apache.org/msg24346.html&quot;&gt;Mesos&lt;/a&gt;, &lt;a href=&quot;https://github.com/coreos/rocket/issues/139#issuecomment-65915103&quot;&gt;Docker&lt;/a&gt;, and &lt;a href=&quot;https://github.com/GoogleCloudPlatform/kubernetes/issues/2725&quot;&gt;Kubernetes&lt;/a&gt;, it is clear that there is an incredible level of interest in the community in developing this new container standard.&lt;/p&gt;

&lt;h3 id=&quot;github-organization&quot;&gt;GitHub Organization&lt;/h3&gt;

&lt;p&gt;To keep the momentum going and ensure the project is a collaborative and community-driven effort, today we are pulling the App Container specs and tools out into a new GitHub organization called &lt;a href=&quot;https://github.com/appc&quot;&gt;appc&lt;/a&gt;. We have also created a Google Group dedicated to discussion about the specification, &lt;a href=&quot;https://groups.google.com/forum/#!forum/appc-dev&quot;&gt;appc-dev&lt;/a&gt;, and an IRC channel on Freenode, #appc. These changes should make it easier for you to get more actively involved or just more easily stay on top of changes to the specification. We are eagerly looking forward to bringing on more maintainers as new implementations of the spec emerge.&lt;/p&gt;

&lt;p&gt;You can read more about the spec and its goals over on the &lt;a href=&quot;https://github.com/appc/spec&quot;&gt;new repository on GitHub&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Docker 1.3.2 in Stable Channel</title>
   <link href="https://coreos.com/blog/docker-1-3-2-stable-channel/"/>
   <updated>2014-12-03T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/docker-1-3-2-stable-channel</id>
   <content type="html">&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: 494.3.0 wasn&amp;#39;t correctly applying this shim, we&amp;#39;ve addressed this in 494.4.0 which is rolling out now.&lt;/p&gt;

&lt;p&gt;This morning we started rolling out 494.4.0 to the &lt;a href=&quot;/releases&quot;&gt;stable channel&lt;/a&gt;. Among other things, this version updates Docker to 1.3.2, following in the footsteps of our releases to the &lt;a href=&quot;/blog/docker-1-3-2-security-update/&quot;&gt;alpha and beta channels&lt;/a&gt; last week.&lt;/p&gt;

&lt;p&gt;The update will introduce the Docker &lt;code&gt;--insecure-registry&lt;/code&gt; flag and, by default, require secure connections to container registries. This flag is not backwards compatible and will prevent many users from being able to deploy containers from self-run private repositories without SSL configured.&lt;/p&gt;

&lt;p&gt;In order to temporarily ensure backward compatibility, the Docker daemon will be run with &lt;code&gt;--insecure-registry=0.0.0.0/0&lt;/code&gt; by default in version 494.4.0 of CoreOS.&lt;/p&gt;

&lt;p&gt;As a CoreOS user, this means that your insecure private registries will continue to temporarily work in the same way as before, but we plan to remove this shim and require each user to manage whether or not their machines will communicate with an insecure registry.&lt;/p&gt;

&lt;p&gt;Before January 12th, 2015, CoreOS machines which connect to insecure registries will need to add the appropriate flags to the Docker daemon. The preferred method is via a systemd drop-in:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;cat /etc/systemd/system/docker.service.d/50-insecure-registry.conf
&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;Service&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;Environment&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;DOCKER_OPTS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;--insecure-registry=&amp;quot;10.0.1.0/24&amp;quot;&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This step can be automated by coreos-cloudinit by adding the following to your cloud-config:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;c1&quot;&gt;#cloud-config&lt;/span&gt;

&lt;span class=&quot;l-Scalar-Plain&quot;&gt;write_files&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;p-Indicator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;/etc/systemd/system/docker.service.d/50-insecure-registry.conf&lt;/span&gt;
    &lt;span class=&quot;l-Scalar-Plain&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p-Indicator&quot;&gt;|&lt;/span&gt;
        &lt;span class=&quot;no&quot;&gt;[Service]&lt;/span&gt;
        &lt;span class=&quot;no&quot;&gt;Environment=DOCKER_OPTS=&amp;#39;--insecure-registry=&amp;quot;10.0.1.0/24&amp;quot;&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Again, if you depend on insecure registries, you will need to update your configuration by January 12th, 2015.&lt;/p&gt;

&lt;p&gt;As always, if you have any questions or concerns, please join us in &lt;a href=&quot;irc://irc.freenode.org:6667/#coreos&quot;&gt;IRC #coreos&lt;/a&gt;. &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS is building a container runtime, rkt</title>
   <link href="https://coreos.com/blog/rocket/"/>
   <updated>2014-12-01T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/rocket</id>
   <content type="html">&lt;p&gt;&lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
&lt;meta name=&quot;twitter:site&quot; content=&quot;@coreoslinux&quot;&gt;
&lt;meta name=&quot;twitter:creator&quot; content=&quot;@polvi&quot;&gt;
&lt;meta name=&quot;twitter:title&quot; content=&quot;CoreOS Announces Docker Alternative - rkt&quot;&gt;
&lt;meta name=&quot;twitter:description&quot; content=&quot;rkt is an alternative to Docker, designed for environments with rigorous security and production requirements.&quot;&gt;
&lt;meta name=&quot;twitter:image:src&quot; content=&quot;https://coreos.com/assets/images/media/rocket-launch.png&quot;&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/rocket-launch.png&quot; alt=&quot;CoreOS invests in rkt, a new container runtime&quot; style=&quot;margin: 0 auto; display: block; margin-bottom: 20px;&quot;&gt;&lt;/p&gt;

&lt;p&gt;rkt is a new container runtime, designed for composability, security, and speed. Today we are releasing a &lt;a href=&quot;https://github.com/coreos/rkt&quot;&gt;prototype version on GitHub&lt;/a&gt; to begin gathering feedback from our community and explain why we are building rkt.  &lt;/p&gt;

&lt;h2 id=&quot;why-we-are-building-rkt&quot;&gt;Why we are building rkt&lt;/h2&gt;

&lt;p&gt;When we started building CoreOS, we looked at all the various components available to us, re-using the best tools, and building the ones that did not exist. We believe strongly in the Unix philosophy: tools should be independently useful, but have clean integration points. We hope this is reflected in tools that we build, such as etcd, which have seen widespread adoption and use outside CoreOS itself. &lt;/p&gt;

&lt;p&gt;When Docker was first introduced to us in early 2013, the idea of a “standard container” was striking and immediately attractive: a simple component, a composable unit, that could be used in a variety of systems. The Docker repository &lt;a href=&quot;https://github.com/docker/docker/commit/0db56e6c519b19ec16c6fbd12e3cee7dfa6018c5&quot;&gt;included a manifesto&lt;/a&gt; of what a standard container should be. This was a rally cry to the industry, and we quickly followed. Brandon Philips, co-founder/CTO of CoreOS, became a top Docker contributor, and now serves on the Docker governance board. CoreOS is one of the most widely used platforms for Docker containers, and ships releases to the community hours after they happen upstream. We thought Docker would become a simple unit that we can all agree on. &lt;/p&gt;

&lt;p&gt;Unfortunately, a simple re-usable component is not how things are playing out. Docker now is building tools for launching cloud servers, systems for clustering, and a wide range of functions: building images, running images, uploading, downloading, and eventually even overlay networking, all compiled into one monolithic binary running primarily as root on your server. The standard container manifesto &lt;a href=&quot;https://github.com/docker/docker/commit/eed00a4afd1e8e8e35f8ca640c94d9c9e9babaf7&quot;&gt;was removed&lt;/a&gt;. We should stop talking about Docker containers, and start talking about the Docker Platform. It is not becoming the simple composable building block we had envisioned. &lt;/p&gt;

&lt;h2 id=&quot;rkt-+-app-container&quot;&gt;rkt + App Container&lt;/h2&gt;

&lt;p&gt;We still believe in the original premise of containers that Docker introduced, so we are doing something about it. While we are at it, we are cleaning up and fixing a few things that we’d like to see in a production ready container. What is important to us in the design of a container?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Composable&lt;/strong&gt;. All tools for downloading, installing, and running containers should be well integrated, but independent and composable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;. Isolation should be pluggable, and the crypto primitives for strong trust, image auditing and application identity should exist from day one. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Image distribution&lt;/strong&gt;. Discovery of container images should be simple and facilitate a federated namespace, and distributed retrieval. This opens the possibility of alternative protocols, such as BitTorrent, and deployments to private environments without the requirement of a registry. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open&lt;/strong&gt;. The format and runtime should be well-specified and developed by a community. We want independent implementations of tools to be able to run the same container consistently.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;rkt-0.1.0&quot;&gt;rkt 0.1.0&lt;/h3&gt;

&lt;p&gt;rkt is a command line tool, &lt;code&gt;rkt&lt;/code&gt;, for running App Containers. An “App Container” is the specification of an image format, container runtime, and a discovery mechanism. rkt is the first implementation of an App Container, but we do not expect it to be the only one. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App Container Image: definition of a signed/encrypted tgz that includes all the bits to run an app container. &lt;/li&gt;
&lt;li&gt;App Container Runtime: definition of the environment the running app container should be given. &lt;/li&gt;
&lt;li&gt;App Container Discovery: a federated protocol for finding and downloading an app container image. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best way to drive a standard is to let a successful and proven implementation become the de facto one. However, when the point of the software is interoperability (as it is with containers), we think things are different.&lt;/p&gt;

&lt;p&gt;In developing the App Container specification, we started with some thoughtfulness around the requirements up front, then spent time refining it as we worked on an implementation (rkt). We feel these specs and implementations are pretty well thought out, but are still early enough that we need your help refining it. Please &lt;a href=&quot;https://github.com/appc/spec&quot;&gt;contribute to the spec&lt;/a&gt; by sending a pull request to start the discussion.&lt;/p&gt;

&lt;h3 id=&quot;app-container-image&quot;&gt;App Container Image&lt;/h3&gt;

&lt;p&gt;An App Container Image (ACI) is a specification for the image format of a container. It is a simple flat tarball that is always signed and optionally encrypted. By convention, an ACI is minimal, meaning it only includes the bits absolutely required to execute the application. Since an ACI may be encrypted, distribution via systems like BitTorrent, public object storage, or mirror networks is a possibility. Think of ACI as a variant of Amazon’s AMI, but created for a container world. &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/appc/spec/blob/master/SPEC.md#app-container-image&quot;&gt;Read about and contribute to the ACI draft&lt;/a&gt;. &lt;/p&gt;

&lt;h3 id=&quot;app-container-runtime&quot;&gt;App Container Runtime&lt;/h3&gt;

&lt;p&gt;The App Container Runtime defines what environment and facilities a container runtime should provide. This includes devices, environment variables, and privileges that a container should expect. It also includes a definition of a meta-data service interface for exposing data to the environment from outside the container.&lt;/p&gt;

&lt;p&gt;Security primitives are very important to us, so we added an identity feature to the meta-data service. This means every instance of a running container is given a unique identity, coupled with a lightweight HSM-like service for signing. No existing VM or container environment has a concept like this, so we would welcome and appreciate community feedback on this design. &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/appc/spec/blob/master/SPEC.md#app-container-executor&quot;&gt;Read about and contribute to the runtime draft&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;app-container-discovery&quot;&gt;App Container Discovery&lt;/h3&gt;

&lt;p&gt;App Container Discovery is a method for finding your app container image. It is inspired by golang’s &lt;a href=&quot;http://golang.org/cmd/go/#hdr-Remote_import_paths&quot;&gt;vanity URL convention for import paths&lt;/a&gt;. This means you’ll be able to refer to containers with simple names like &lt;code&gt;coreos.com/etcd&lt;/code&gt;, allowing organizations to federate their downloads without running their own registry. &lt;/p&gt;

&lt;h2 id=&quot;standard-containers&quot;&gt;Standard Containers&lt;/h2&gt;

&lt;p&gt;We want the world to run containers. A world where your application can be packaged once, and ran in the environment you choose. We believe rkt and a definition around the App Container is a requirement for this to work. Please contribute your thoughts to our &lt;a href=&quot;https://groups.google.com/forum/#!forum/rocket-dev&quot;&gt;mailing list&lt;/a&gt;, our &lt;a href=&quot;https://github.com/coreos/rkt&quot;&gt;source code&lt;/a&gt; or join us in person at the &lt;a href=&quot;http://www.meetup.com/coreos/events/218886679/&quot;&gt;CoreOS meet-up&lt;/a&gt; tonight in San Francisco. &lt;/p&gt;

&lt;h2 id=&quot;faq&quot;&gt;FAQ&lt;/h2&gt;

&lt;h4 id=&quot;what-is-rkt?&quot;&gt;What is rkt?&lt;/h4&gt;

&lt;p&gt;rkt is an alternative to the Docker runtime, designed for server environments with the most rigorous security and production requirements. rkt is oriented around the App Container specification, a new set of simple and open specifications for a portable container format.&lt;/p&gt;

&lt;h4 id=&quot;when-is-rkt-available?&quot;&gt;When is rkt available?&lt;/h4&gt;

&lt;p&gt;rkt is &lt;a href=&quot;https://github.com/coreos/rkt&quot;&gt;available today on GitHub&lt;/a&gt;. We are releasing a 0.1.0 prototype to gather community feedback. Please note that this is a prototype quality release, very much in the spirit of “release early, release often”. Please provide feedback via GitHub. &lt;/p&gt;

&lt;h4 id=&quot;why-not-just-fork-docker?&quot;&gt;Why not just fork Docker?&lt;/h4&gt;

&lt;p&gt;From a security and composability perspective, the Docker process model - where everything runs through a central daemon - is fundamentally flawed. To “fix” Docker would essentially mean a rewrite of the project, while inheriting all the baggage of the existing implementation. &lt;/p&gt;

&lt;h4 id=&quot;why-are-you-doing-this-now?&quot;&gt;Why are you doing this now?&lt;/h4&gt;

&lt;p&gt;At CoreOS we have large, serious users running in enterprise environments. We cannot in good faith continue to support Docker’s broken security model without addressing these issues. Additionally, in the past few weeks Docker has demonstrated that it is on a path to include many facilities beyond basic container management, turning it into a complex platform. Our primary users have existing platforms that they want to integrate containers with. We need to fill the gap for companies that just want a way to securely and portably run a container. &lt;/p&gt;

&lt;h4 id=&quot;will-rkt-run-on-[ubuntu,-rhel,-centos,-etc]?&quot;&gt;Will rkt run on [Ubuntu, RHEL, CentOS, etc]?&lt;/h4&gt;

&lt;p&gt;Yes, &lt;code&gt;rkt&lt;/code&gt; is a stand alone tool that will live outside of CoreOS itself and can be used on a variety of platforms. In a sense it is similar to the etcd project in that it is a tool we built because nothing like it existed.&lt;/p&gt;

&lt;h4 id=&quot;what-is-the-difference-between-rkt-and-app-container?&quot;&gt;What is the difference between rkt and App Container?&lt;/h4&gt;

&lt;p&gt;“App Container” &lt;a href=&quot;https://github.com/appc/spec&quot;&gt;defines a specification&lt;/a&gt; of the facilities surrounding the container. rkt implements these facilities as a command line tool. An open specification allows other systems do their own implementation of App Container without using rkt at all. CoreOS fully supports and embraces alternative implementations. &lt;/p&gt;

&lt;h4 id=&quot;could-app-container-support-be-contributed-to-the-docker-platform?&quot;&gt;Could App Container support be contributed to the Docker Platform?&lt;/h4&gt;

&lt;p&gt;Definitely. If the App Container specifications were implemented inside of Docker, the projects will be interoperable, meeting the original goal of the manifesto. CoreOS will evaluate contributing this work once App Container matures. &lt;/p&gt;

&lt;h4 id=&quot;will-coreos-continue-to-ship-docker?&quot;&gt;Will CoreOS continue to ship Docker?&lt;/h4&gt;

&lt;p&gt;Yes. We will continue to make sure CoreOS is the best place to run Docker. We will save the details for a future post, once rkt has developed further, but expect Docker to continue to be fully integrated with CoreOS as it is today. &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Docker 1.3.2 Rolled Out Today</title>
   <link href="https://coreos.com/blog/docker-1-3-2-security-update/"/>
   <updated>2014-11-24T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/docker-1-3-2-security-update</id>
   <content type="html">&lt;p&gt;Today Docker released &lt;a href=&quot;https://github.com/docker/docker/blob/v1.3.2/CHANGELOG.md#132-2014-11-20&quot;&gt;Docker 1.3.2&lt;/a&gt;, immediately after which we began automatically rolling out an OS update.  We were able to work with Docker to ensure that the CoreOS update could ship as soon as the Docker patch was released to the public. At the time of this writing, a significant number of CoreOS instances have already been updated.&lt;/p&gt;

&lt;p&gt;Along with the aforementioned security patches, Docker 1.3.2 introduced the &lt;code&gt;--insecure-registry&lt;/code&gt; flag which accepts a CIDR notation block of whitelisted addresses. If your installation requires access to an insecure registry, you will need to launch the Docker daemon with the &lt;code&gt;--insecure-registry&lt;/code&gt; flag and the CIDR block appropriate for your deployment. The recommended method is via a &lt;code&gt;write_files&lt;/code&gt; directive in your cloud-config.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;c1&quot;&gt;#cloud-config&lt;/span&gt;

&lt;span class=&quot;l-Scalar-Plain&quot;&gt;write_files&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;p-Indicator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;/etc/systemd/system/docker.service.d/50-insecure-registry.conf&lt;/span&gt;
    &lt;span class=&quot;l-Scalar-Plain&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p-Indicator&quot;&gt;|&lt;/span&gt;
        &lt;span class=&quot;no&quot;&gt;[Service]&lt;/span&gt;
        &lt;span class=&quot;no&quot;&gt;Environment=DOCKER_OPTS=&amp;#39;--insecure-registry=&amp;quot;10.0.1.0/24&amp;quot;&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;As a practice, CoreOS doesn’t like to roll out breaking updates like this, but the security content of Docker 1.3.2 was deemed important enough to make an exception.&lt;/p&gt;

&lt;p&gt;If you have any questions or concerns, please join us in IRC #coreos.   &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS Brings Kubernetes to Any Cloud Platform</title>
   <link href="https://coreos.com/blog/kubernetes-on-any-platform/"/>
   <updated>2014-11-10T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/kubernetes-on-any-platform</id>
   <content type="html">&lt;p&gt;If you aren’t familiar with Kubernetes, it is a container cluster manager from Google that offers a unique workflow for managing containers across multiple machines.  We have written about Kubernetes and CoreOS in a tutorial series (&lt;a href=&quot;/blog/running-kubernetes-example-on-CoreOS-part-1/&quot;&gt;Part 1&lt;/a&gt;, &lt;a href=&quot;/blog/running-kubernetes-example-on-CoreOS-part-2/&quot;&gt;Part 2&lt;/a&gt;) here for those wanting to learn more.  Last week Google announced Google Container Engine, which enables you to run and manage Docker containers on Google Cloud Platform’s virtual machines.&lt;/p&gt;

&lt;p&gt;But for those wanting to run Kubernetes outside of Google Cloud Platform or ensure &lt;a href=&quot;http://googlecloudplatform.blogspot.com/2014/11/open-source-hosted-containers-recipe.html&quot;&gt;workload mobility&lt;/a&gt;, CoreOS provides an easy way to use Kubernetes in any cloud or on-prem environment.  CoreOS maintains a &lt;a href=&quot;https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/getting-started-guides/aws.md&quot;&gt;full tutorial&lt;/a&gt; on running an elastic Kubernetes cluster on EC2. Running Kubernetes on non-Google platforms is made possible by the CoreOS project &lt;a href=&quot;https://github.com/coreos/flannel&quot;&gt;flannel&lt;/a&gt;, which provides cross-container networking on any cloud provider.&lt;/p&gt;

&lt;p&gt;In addition to flannel, Kubernetes utilizes another CoreOS project, etcd, as its distributed k/v store. etcd was inspired by a &lt;a href=&quot;http://research.google.com/archive/chubby.html&quot;&gt;paper written by Google&lt;/a&gt; and was developed by CoreOS because an open-source solution to this important piece of instrastructure didn&amp;#39;t exist. It is exciting to see this effort come full circle as etcd used as a key piece of Kubernetes.&lt;/p&gt;

&lt;p&gt;Join us in &lt;a href=&quot;irc://irc.freenode.org:6667/#coreos&quot;&gt;IRC&lt;/a&gt; or on &lt;a href=&quot;https://github.com/coreos&quot;&gt;GitHub&lt;/a&gt; to learn more.  Or explore our &lt;a href=&quot;/docs/&quot;&gt;documentation&lt;/a&gt; on how to get started with CoreOS&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Weekend Enjoyment: CoreOS Deployment Videos</title>
   <link href="https://coreos.com/blog/coreos-weekend-videos/"/>
   <updated>2014-11-07T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-weekend-videos</id>
   <content type="html">&lt;div class=&quot;row&quot;&gt;
  &lt;div class=&quot;col-lg-3 col-md-3 col-sm-3 col-xs-6&quot; style=&quot;margin-bottom: 20px;&quot;&gt;
    &lt;a href=&quot;https://www.youtube.com/watch?v=M9hBsRUeRdg&quot;&gt;
      &lt;img src=&quot;/assets/images/media/video-title-playstation.png&quot; /&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;div class=&quot;col-lg-3 col-md-3 col-sm-3 col-xs-6&quot; style=&quot;margin-bottom: 20px;&quot;&gt;
    &lt;a href=&quot;https://www.youtube.com/watch?v=uJirOCUg67o&quot;&gt;
      &lt;img src=&quot;/assets/images/media/video-title-memsql.png&quot; /&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;div class=&quot;col-lg-3 col-md-3 col-sm-3 col-xs-6&quot; style=&quot;margin-bottom: 20px;&quot;&gt;
    &lt;a href=&quot;https://www.youtube.com/watch?v=77f6rau3ris&quot;&gt;
      &lt;img src=&quot;/assets/images/media/video-title-layer.png&quot; /&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;div class=&quot;col-lg-3 col-md-3 col-sm-3 col-xs-6&quot; style=&quot;margin-bottom: 20px;&quot;&gt;
    &lt;a href=&quot;https://www.youtube.com/watch?v=VnsA9q9hKEY&quot;&gt;
      &lt;img src=&quot;/assets/images/media/video-title-mailgun.png&quot; /&gt;
    &lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;For your weekend enjoyment, we’ve posted a few videos that showcase unique CoreOS deployments. First, &lt;a href=&quot;https://www.youtube.com/watch?v=M9hBsRUeRdg&quot;&gt;Playstation walks through&lt;/a&gt; how their developers set up structured but customizable dev environments for their software teams using CoreOS, docker and systemd-nspawn.&lt;/p&gt;

&lt;p&gt;For application testing, &lt;a href=&quot;https://www.youtube.com/watch?v=uJirOCUg67o&quot;&gt;MemSQL runs a 107 machine CoreOS cluster&lt;/a&gt;. To obtain the most accurate and consistent results, this cluster must run on bare metal and CoreOS was the perfect tool for the job.&lt;/p&gt;

&lt;p&gt;Production application deployments on CoreOS are highly extensible by design. &lt;a href=&quot;https://www.youtube.com/watch?v=77f6rau3ris&quot;&gt;Layer shows us&lt;/a&gt; how CoreOS runs the infrastructure to support their unique communications platform. &lt;a href=&quot;https://www.youtube.com/watch?v=VnsA9q9hKEY&quot;&gt;Mailgun has developed&lt;/a&gt; an etcd-aware load balancer that handles traffic routing for their API infrastructure. Both examples show how CoreOS enables platform versatility and increases the productivity of your devops team.&lt;/p&gt;

&lt;p&gt;We hope these videos have inspired you to start hacking on your CoreOS-powered infrastructure this weekend. Enjoy!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Announcing CoreOS Enterprise Registry, a secure Docker registry behind your firewall</title>
   <link href="https://coreos.com/blog/standalone-enterprise-registry/"/>
   <updated>2014-10-30T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/standalone-enterprise-registry</id>
   <content type="html">&lt;p&gt;Today we are launching &lt;a href=&quot;/products/enterprise-registry&quot;&gt;CoreOS Enterprise Registry&lt;/a&gt;, a secure Docker registry behind the firewall.  The first enterprise-ready solution, CoreOS Enterprise Registry provides a web-based management interface that includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;permission controls &lt;/li&gt;
&lt;li&gt;auditing capabilities&lt;/li&gt;
&lt;li&gt;deployment of containers safely and securely &lt;/li&gt;
&lt;li&gt;availability on-prem and in your datacenter &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CoreOS Enterprise Registry provides easy ways to assign and revoke credentials as needed, and even goes as granular as providing per-user permissions.  For example, members of a team can be allowed to modify repos or only have docker pull ability. It also provides auditing capabilities so you can see who last made repository commits or access changes. Further advance controls include robot accounts, a special account type for driving automation tools and other circumstances where you don&amp;#39;t need UI access. &lt;/p&gt;

&lt;p&gt;Once just part of our &lt;a href=&quot;/products/managed-linux/plans&quot;&gt;Premium Managed Linux&lt;/a&gt; offering, CoreOS Enterprise is now available for as little as &lt;a href=&quot;/products/enterprise-registry/plans&quot;&gt;$10 a month&lt;/a&gt;.  We invite you to try it out.  &lt;/p&gt;

&lt;p&gt;To see a demo of CoreOS Enterprise Registry and talk in-person, join us this Monday for our &lt;a href=&quot;http://www.meetup.com/coreos/events/215452012/&quot;&gt;meetup&lt;/a&gt; hosted at PlayStation in San Mateo.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>A Meetup Ride to San Mateo</title>
   <link href="https://coreos.com/blog/coreos-meetup-at-playstation/"/>
   <updated>2014-10-29T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-meetup-at-playstation</id>
   <content type="html">&lt;p&gt;Our &lt;a href=&quot;http://www.meetup.com/coreos/events/215452012/&quot;&gt;San Francisco meetup&lt;/a&gt; is hitting the road on Monday and going to PlayStation in San Mateo!  As you may or may not know we are big fans of &lt;a href=&quot;https://blog.golang.org/gophercon/image00.jpg&quot;&gt;buses&lt;/a&gt; around here. So we decided to get a &lt;a href=&quot;http://www.teacherbus.com/&quot;&gt;biodiesel and solar powered bus&lt;/a&gt; to take a group down to the meetup in style.  If you are in San Francisco and want to ride with us, be one of the first 20 to &lt;a href=&quot;https://docs.google.com/forms/d/157O4Yk3DxuUNU1jn8RYIwpKeq84IjuuenDnTjX-UMxw/viewform&quot;&gt;sign up here&lt;/a&gt; and I’ll get back to you with details.   &lt;/p&gt;

&lt;p&gt;We only have 20 spots available so be absolutely positive you can make the meetup on Monday!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/teacherbus.jpg&quot; alt=&quot;CoreOS is taking the Teacher Bus to the meetup&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS Now Available On Microsoft Azure</title>
   <link href="https://coreos.com/blog/coreos-available-on-azure/"/>
   <updated>2014-10-20T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-available-on-azure</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/assets/images/media/CoreOS-Azure.png&quot; alt=&quot;CoreOS Now Available On Microsoft Azure&quot; style=&quot;margin: 0 auto; display: block; margin-bottom: 20px;&quot;&gt; &lt;/p&gt;

&lt;p&gt;This morning at the Microsoft Azure press event, Microsoft announced that CoreOS is now available as an image in the Azure Virtual Machines Gallery.  &lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/b9zSOZIId9Q?rel=0&quot; frameborder=&quot;0&quot; allowfullscreen style=&quot;margin: 0 auto; display: block; margin-bottom: 20px;&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;a href=&quot;/docs/running-coreos/cloud-providers/azure/&quot;&gt;Launching a CoreOS Linux VM&lt;/a&gt; is as easy as logging into the Azure Virtual Machines Gallery, and selecting the CoreOS image. This initial release of CoreOS Linux on Microsoft Azure includes the latest version of CoreOS Linux from the CoreOS &lt;a href=&quot;/releases&quot;&gt;alpha channel&lt;/a&gt; and will reach stable over the coming weeks.&lt;/p&gt;

&lt;p&gt;In addition to everything you need for running Docker containers out of the box, Azure customers running CoreOS can now leverage CoreOS’ distributed key/value store, etcd, to manage cluster state and configuration across an entire fleet of virtual machines.  Azure customers also have access to CoreOS’ &lt;a href=&quot;/using-coreos/updates&quot;&gt;automatic software updates&lt;/a&gt; and patches, which means never having to spend time manually rolling out OS updates again.&lt;/p&gt;

&lt;p&gt;The CoreOS team is really excited to be a part of Microsoft’s commitment to the adoption of open source technologies.  &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://azure.microsoft.com/blog/2014/10/20/azures-getting-bigger-faster-and-more-open/&quot;&gt;Read more on the Microsoft blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://coreos.com/docs/#running-coreos&quot;&gt;Read more about all of the cloud providers we support&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Godep for End User Go Projects</title>
   <link href="https://coreos.com/blog/godep-for-end-user-go-projects/"/>
   <updated>2014-10-15T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/godep-for-end-user-go-projects</id>
   <content type="html">&lt;p&gt;Every language has a problem with dependencies. In C there are problems with
bumping minor shared library versions and having unexpected bugs appear in
applications. Ruby and Python have problems with applications having
conflicting dependencies requiring the use of bundle or virtualenv to create
private library stores.&lt;/p&gt;

&lt;p&gt;Go has a distinct advantage because it is a statically compiled language. In
other words, a Go program always carries its runtime dependencies with it; no
possibilities of library versions changing. However, creating a developer
environment in which to compile this static binary is a bit more difficult and
some tools are required.&lt;/p&gt;

&lt;p&gt;While working on &lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;etcd&lt;/a&gt;, a project written in Go, we took an evolutionary
path towards a dependency system that satisfied a few basic goals we had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reproducible builds&lt;/strong&gt;: given the same git hash and version of the Go compiler we wanted an identical binary every time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero dependencies&lt;/strong&gt;: developers should be able to fork on GitHub, make a change, build, test and send a PR without having anything more than a working Go compiler installed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross platform&lt;/strong&gt;: compile and run on OSX, Linux and Windows. Bonus points for cross-compilation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;tl;dr We arrived at using &lt;a href=&quot;https://github.com/tools/godep&quot;&gt;godep&lt;/a&gt; but the rest of the post below has
some insights on how we arrived here.&lt;/p&gt;

&lt;h3 id=&quot;checked-in-gopath&quot;&gt;Checked in GOPATH&lt;/h3&gt;

&lt;p&gt;To satisfy the need for reproducible builds and zero dependencies we checked in
a copy of the GOPATH to &lt;code&gt;third_party/src&lt;/code&gt;. However, this revealed several
problems over time:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;go get github.com/coreos/etcd&lt;/code&gt; was broken since downstream dependencies
would change master and &lt;code&gt;go get&lt;/code&gt; would setup a GOPATH that looked different
than our checked in version.&lt;/li&gt;
&lt;li&gt;Windows developers had to have a working bash. Soon, we were maintaining a
copy of our build script written in Powershell.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We felt that &lt;code&gt;go get&lt;/code&gt; wasn&amp;#39;t a useful tool for installing etcd since it was
just a project built in Go and &lt;code&gt;go get&lt;/code&gt; is primarily useful for easily grabbing
libraries when you are hacking on something. However, we were overwhelmed every
week with bug reports from users who wanted to simply &lt;code&gt;go get github.com/coreos/etcd&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To solve the Windows problem I created &lt;code&gt;third_party.go&lt;/code&gt; which ported the GOPATH
management shell script to Go and gave us the ability to drop the Powershell.&lt;/p&gt;

&lt;h3 id=&quot;third_party.go&quot;&gt;third_party.go&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/coreos/third_party.go&quot;&gt;third_party.go&lt;/a&gt; worked well for a few weeks and we could remove
the duplicate build logic in the Powershell scripts. The basic usage was
simple:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;# Bump the raft dependency in the custom GOPATH
go run third_party.go bump github.com/coreos/go-etcd
# Use third_party.go to set GOPATH to third_party/src and build
go run third_party.go build github.com/coreos/etcd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;But, there was a fatal flaw with this setup: it broke cross compilation via GOOS and GOARCH.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;GOOS=linux go run third_party.go build github.com/coreos/etcd
fork/exec /var/folders/nq/jrsys0j926z9q3cjp1yfbhqr0000gn/T/go-build584136562/command-line-arguments/_obj/exe/third_party: exec format error
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The reason is that GOOS and GOARCH get used internally by &lt;code&gt;go run&lt;/code&gt;. Meaning it
literally tries to build &lt;code&gt;third_party.go&lt;/code&gt; as a Linux binary and runs it.
Running a Linux binary on an OSX machine doesn&amp;#39;t work.&lt;/p&gt;

&lt;p&gt;Furthermore by using &lt;code&gt;third_party.go&lt;/code&gt; didn&amp;#39;t get us any closer to being &amp;quot;go
gettable&amp;quot;. With the continued weekly emails and bugs for this I started looking
around for better solutions and found &lt;a href=&quot;https://github.com/kr/goven&quot;&gt;goven&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;goven-and-goven-bump&quot;&gt;goven and goven-bump&lt;/h3&gt;

&lt;p&gt;goven achieves all of the desirable traits: reproducible builds, zero
dependencies to start developing, cross compilation, and as a bonus 
&lt;code&gt;go install github.com/coreos/etcd&lt;/code&gt; works!&lt;/p&gt;

&lt;p&gt;The basic theory of operation is it checks all dependencies into subpackages of
your project. Instead of importing &lt;code&gt;code.google.com/p/goprotobuf&lt;/code&gt; you import
&lt;code&gt;github.com/coreos/etcd/third_party/code.google.com/p/goprotobuf&lt;/code&gt;. It makes the
imports uglier but it is automated by goven.&lt;/p&gt;

&lt;p&gt;Along the way I wrote some helper tools to assist in bumping dependencies which
can be found on GitHub at &lt;a href=&quot;https://github.com/philips/goven-bump&quot;&gt;philips/goven-bump&lt;/a&gt;. The scripts
&lt;code&gt;goven-bump&lt;/code&gt; and &lt;code&gt;goven-bump-commit&lt;/code&gt; grab the hg revision or git hash of the
dependency along with running goven. This makes bumping a dependency and
getting a basic commit message as easy as:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;cd ${GOPATH}/github.com/coreos/etcd
goven-bump-commit code.google.com/p/goprotobuf
git commit -m &amp;#39;bump(code.google.com/p/goprotobuf): 074202958b0a25b4d1e194fb8defe5d69c300774&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;godep-save&quot;&gt;godep save&lt;/h3&gt;

&lt;p&gt;The way that goven re-wrote the package paths turned out to be a very
successful model for us and saved the developers of etcd a ton of headaches.
However, the &lt;code&gt;goven-bump&lt;/code&gt; scripts were rather annoying and it forced the
developer to use &lt;code&gt;git log&lt;/code&gt; to find the hash of the upstream dependency.&lt;/p&gt;

&lt;p&gt;After emailing and chatting with Keith Rarick, author of goven and godep, he
told me that he was planning on adding a feature to his &lt;code&gt;godep&lt;/code&gt; project that
rewrote import paths just like goven but had the advantages of a static
dependency manifest file. After a few months of nagging he &lt;a href=&quot;https://github.com/tools/godep/pull/82&quot;&gt;merged&lt;/a&gt;
the &lt;code&gt;godep save -r&lt;/code&gt; feature and I could finally start converting projects to
stop using &lt;code&gt;goven-bump&lt;/code&gt;. Woo!&lt;/p&gt;

&lt;p&gt;&lt;code&gt;godep&lt;/code&gt; adds some additional complexity for the etcd team. But, the simplicity it
presents to regular contributors and users used to &lt;code&gt;go get&lt;/code&gt; make it worth the
additional effort. For all of the CoreOS non-library projects that are written
in Go we now use &lt;code&gt;godep&lt;/code&gt; and have achieved all of our goals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reproducible builds&lt;/li&gt;
&lt;li&gt;Zero dependencies&lt;/li&gt;
&lt;li&gt;Cross platform&lt;/li&gt;
&lt;li&gt;Easy to introspect&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you maintain a Go project, I highly recommend you &lt;code&gt;go install github.com/tools/godep&lt;/code&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Managing CoreOS with Ansible</title>
   <link href="https://coreos.com/blog/managing-coreos-with-ansible/"/>
   <updated>2014-10-13T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/managing-coreos-with-ansible</id>
   <content type="html">&lt;p&gt;This is a guest post by &lt;a href=&quot;http://shtylman.com&quot;&gt;Roman Shtylman&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This post will cover basic techniques for managing &lt;a href=&quot;https://coreos.com/&quot;&gt;CoreOS&lt;/a&gt; machines using &lt;a href=&quot;http://www.ansible.com/home&quot;&gt;Ansible&lt;/a&gt;. Familiarity with Ansible and basic understanding of CoreOS are helpful in following along with this post.&lt;/p&gt;

&lt;h2 id=&quot;what-is-ansible?&quot;&gt;What is Ansible?&lt;/h2&gt;

&lt;p&gt;From the &lt;a href=&quot;http://docs.ansible.com/&quot;&gt;Ansible Documetation&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ansible is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime rolling updates.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At the most basic level, Ansible is a tool that will run sets of commands (typically over SSH) on remote boxes (called the &lt;strong&gt;inventory&lt;/strong&gt;). These commands can be as simple as one line shell statements, or use any of the built-in Ansible &lt;a href=&quot;http://docs.ansible.com/modules_by_category.html&quot;&gt;&lt;strong&gt;modules&lt;/strong&gt;&lt;/a&gt; for common tasks like file copying, package management, system information, and more. Ansible ships with many useful modules and you can easily create your own.&lt;/p&gt;

&lt;h2 id=&quot;why-ansible-for-coreos?&quot;&gt;Why Ansible for CoreOS?&lt;/h2&gt;

&lt;p&gt;Ansible does not require a remote agent running on the target machine. It can perform all of its functions over a basic SSH connection.&lt;/p&gt;

&lt;p&gt;CoreOS is a minimal Linux distribution meant for running containers. It does not ship with a package manager or many of the other common system elements one might expect coming from other more desktop oriented distributions.&lt;/p&gt;

&lt;p&gt;Because Ansible does not require a remote agent, and because CoreOS design favors running containers over system software directly on the machine, the two make a good fit.&lt;/p&gt;

&lt;h2 id=&quot;getting-started&quot;&gt;Getting Started&lt;/h2&gt;

&lt;p&gt;Before continuing, make sure that you have &lt;a href=&quot;http://docs.ansible.com/intro_installation.html&quot;&gt;Ansible installed&lt;/a&gt; on your local machine. If Ansible is properly installed, you should be able to run the following command in a shell.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ ansible --version
ansible 1.8
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We have prepared a sample repository with a &lt;a href=&quot;https://www.vagrantup.com/&quot;&gt;Vagrant&lt;/a&gt; file to demonstrate using Ansible with CoreOS locally. This is also a good way to test your &lt;strong&gt;playbooks&lt;/strong&gt; (sets of Ansible commands) to make sure they are working as you expect. You will need to &lt;a href=&quot;https://docs.vagrantup.com/v2/installation/&quot;&gt;install vagrant&lt;/a&gt; to use these samples.&lt;/p&gt;

&lt;p&gt;If you are already running Ansible and are familiar with launching CoreOS machines in existing cloud providers, you can ignore these steps and jump to the &lt;a href=&quot;#inventory-setup&quot;&gt;next section&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run the following commands from your local machine:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ git clone https://github.com/defunctzombie/coreos-ansible-example.git
$ cd coreos-ansible-example
$ vagrant up
-- wait for vagrant to finish booting the machine(s) --
$ ./bin/generate_ssh_config
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This will boot a CoreOS machine and configure it with some basic networking. After the machine has booted, we will run a local script &lt;em&gt;generate_ssh_config&lt;/em&gt; to create a configuration file for Ansible so that it knows how to access our machine over SSH.&lt;/p&gt;

&lt;h2 id=&quot;inventory-setup&quot;&gt;Inventory Setup&lt;/h2&gt;

&lt;p&gt;The inventory file defines the hosts and groups. Our vagrant example has an inventory file in &lt;code&gt;inventory/vagrant&lt;/code&gt; which we will use when configuring our example CoreOS hosts with ansible.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;## inventory file for vagrant machines
core-01 ansible_ssh_host=172.12.8.101

[web]
core-01
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We only have 1 host called &lt;code&gt;core-01&lt;/code&gt; and we have created a &lt;code&gt;web&lt;/code&gt; group and listed our host under this group. You can have any number of hosts and groups. Ansible even support &lt;a href=&quot;http://docs.ansible.com/intro_dynamic_inventory.html&quot;&gt;dynamic inventory files&lt;/a&gt; which is what you are likely to use in large scale production environments.&lt;/p&gt;

&lt;p&gt;To run a test ping against our vagrant inventory, execute the following command in your shell (from the project folder).&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ ansible -i inventory/vagrant all -m setup
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If everything worked as expected you should see the following output.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;core-01 | FAILED &amp;gt;&amp;gt; {
    &amp;quot;failed&amp;quot;: true,
    &amp;quot;msg&amp;quot;: &amp;quot;/bin/sh: /usr/bin/python: No such file or directory\r\n&amp;quot;,
    &amp;quot;parsed&amp;quot;: false
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The command has failed. To understand why this happened and how to fix it, let&amp;#39;s take a closer look at how Ansible runs commands on remote machines.&lt;/p&gt;

&lt;h2 id=&quot;getting-ansible-running&quot;&gt;Getting Ansible Running&lt;/h2&gt;

&lt;p&gt;When you run Ansible commands or playbooks, Ansible will ssh into the remote machine, copy over the module code (written in Python) and run the module using the arguments specified in the playbook.&lt;/p&gt;

&lt;p&gt;The target machine must have a Python interpreter for Ansible to be able to execute these modules and thus configure your machine.&lt;/p&gt;

&lt;p&gt;CoreOS is designed for running containers and does not ship with a Python interpreter. Additionally, it has no package manager to install Python. This presents a small chicken-and-egg problem.&lt;/p&gt;

&lt;p&gt;Luckily Ansible has a &lt;code&gt;raw&lt;/code&gt; execution mode which bypasses Python modules and runs shell commands directly on a remote system. We will leverage this feature to bootstrap a lightweight Python interpreter onto our CoreOS hosts. Once the hosts are bootstrapped with Python, playbooks can leverage the myriad of provided Ansible modules to perform system tasks like start services, install Python libraries, and manage Docker containers.&lt;/p&gt;

&lt;p&gt;Edit the &lt;code&gt;inventory/vagrant&lt;/code&gt; file and add the following items at the end&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[coreos]
core-01

[coreos:vars]
ansible_ssh_user=core
ansible_python_interpreter=&amp;quot;PATH=/home/core/bin:$PATH python&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This will configure Ansible to look for &lt;code&gt;python&lt;/code&gt; and &lt;code&gt;pip&lt;/code&gt; in &lt;code&gt;/home/core/bin&lt;/code&gt; and use it for all hosts in the &lt;code&gt;coreos&lt;/code&gt; group. Without this, Ansible will try to use &lt;code&gt;/usr/bin/python&lt;/code&gt; which does not exist on our CoreOS hosts.&lt;/p&gt;

&lt;p&gt;To bootstrap our CoreOS hosts we will use the &lt;a href=&quot;https://github.com/defunctzombie/ansible-coreos-bootstrap&quot;&gt;coreos-bootstrap&lt;/a&gt; role.&lt;/p&gt;

&lt;p&gt;Install the role using the following command&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ ansible-galaxy install defunctzombie.coreos-bootstrap -p ./roles
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now we can run the provided &lt;code&gt;bootstrap.yml&lt;/code&gt; file using ansible.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ ansible-playbook -i inventory/vagrant bootstrap.yml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Once this command has completed, we can run our original ansible setup command and see a list of the gathered facts.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ ansible -i inventory/vagrant all -m setup
core-01 | success &amp;gt;&amp;gt; {
    &amp;quot;ansible_facts&amp;quot;: {
        &amp;quot;ansible_all_ipv4_addresses&amp;quot;: [
            &amp;quot;172.17.42.1&amp;quot;,
            &amp;quot;10.0.2.15&amp;quot;,
            &amp;quot;172.12.8.101&amp;quot;
        ],
    ...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Take a moment to look at &lt;code&gt;bootstrap.yml&lt;/code&gt; and &lt;code&gt;site.yml&lt;/code&gt;. Notice that &lt;code&gt;bootstrap.yml&lt;/code&gt; is included first. Your own Ansible scripts will need to similaly have a &lt;code&gt;bootstrap.yml&lt;/code&gt; or playbook which configures CoreOS hosts before running other playbooks.&lt;/p&gt;

&lt;h2 id=&quot;example-playbook&quot;&gt;Example Playbook&lt;/h2&gt;

&lt;p&gt;Once Ansible can run successfully on your CoreOS hosts, we can do things like start system services or launch Docker containers.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;website.yml&lt;/code&gt; file shows an small example. It starts the &lt;code&gt;etcd&lt;/code&gt; service. Then it installs the &lt;code&gt;docker-py&lt;/code&gt; library using &lt;code&gt;pip&lt;/code&gt; and finally uses the Ansible &lt;a href=&quot;http://docs.ansible.com/docker_module.html&quot;&gt;docker module&lt;/a&gt; to launch a container on the &lt;code&gt;web&lt;/code&gt; host group.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;- name: example nginx website
  hosts: web
  sudo: true
  tasks:
    - name: Start etcd
      service: name=etcd.service state=started

    - name: Install docker-py
      pip: name=docker-py

    - name: pull container
      raw: docker pull nginx:1.7.1

    - name: launch nginx container
      docker:
        image=&amp;quot;nginx:1.7.1&amp;quot;
        name=&amp;quot;example-nginx&amp;quot;
        ports=&amp;quot;8080:80&amp;quot;
        state=running
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Run this playbook with the following command&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ ansible-playbook -i inventory/vagrant website.yml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can now open &lt;a href=&quot;http://172.12.8.101:8080&quot;&gt;http://172.12.8.101:8080&lt;/a&gt; and see the default nginx landing page.&lt;/p&gt;

&lt;p&gt;You are now ready to create more plays to configure your CoreOS hosts. Plays can be leveraged for many tasks like automated app deployment, cluster management, and more.&lt;/p&gt;

&lt;h2 id=&quot;tips&quot;&gt;Tips&lt;/h2&gt;

&lt;h3 id=&quot;local-docker-registry&quot;&gt;Local Docker Registry&lt;/h3&gt;

&lt;p&gt;Downloading imagines from remote registries can be time and bandwidth consuming.  You can speed up deployments to a set of machines by running a local registry for a cluster and having other machines pull from the registry. This can be easily automated with roles and playbooks.&lt;/p&gt;

&lt;h3 id=&quot;install-pip-modules-in-a-common-playbook&quot;&gt;Install pip modules in a common playbook&lt;/h3&gt;

&lt;p&gt;If you will be using the docker module, consider installing docker-py via the pip module in a playbook that runs on all hosts and comes after the bootstrap.yml playbook.&lt;/p&gt;

&lt;h3 id=&quot;prefer-containers-over-local-binaries&quot;&gt;Prefer containers over local binaries&lt;/h3&gt;

&lt;p&gt;Avoid over-configuring the CoreOS hosts with too many locally installed tools and tweaks. In many cases, containerized services will do the job just as well and can be granted limited access to the underlying host.&lt;/p&gt;

&lt;p&gt;You can even monitor host processes by bind mounting the relevant paths into a container.&lt;/p&gt;

&lt;!-- links --&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS Machines Secured from Shellshock</title>
   <link href="https://coreos.com/blog/security-update-shellshock-patched/"/>
   <updated>2014-09-26T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/security-update-shellshock-patched</id>
   <content type="html">&lt;p&gt;Over the last few hours we began rolling out shellshock fixes to all CoreOS deploys that have automatic updates enabled (this is default). If you have disabled automatic upgrades through cloud-config &lt;a href=&quot;/docs/cluster-management/setup/update-strategies/&quot;&gt;reboot-strategy&lt;/a&gt;, a manual reboot should give you the latest version. &lt;/p&gt;

&lt;p&gt;You can test if your CoreOS has been patched by testing the exploit, or by checking the version of CoreOS you are running in &lt;code&gt;/etc/os-release&lt;/code&gt;. Patched versions are listed below:&lt;/p&gt;

&lt;table&gt;&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Channel&lt;/th&gt;
&lt;th&gt;Version&lt;/th&gt;
&lt;th&gt;Release Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Alpha&lt;/td&gt;
&lt;td&gt;452.0.0&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/releases#452.0.0&quot;&gt;View Release Notes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Beta&lt;/td&gt;
&lt;td&gt;444.2.0&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/releases#444.2.0&quot;&gt;View Release Notes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;td&gt;410.1.0&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;/releases#410.1.0&quot;&gt;View Release Notes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&lt;br/&gt;&lt;/p&gt;

&lt;p&gt;This is an important example of our &lt;a href=&quot;/using-coreos/updates/&quot;&gt;update philosophy&lt;/a&gt;. We believe the key to security is not just making patches available, but also applying them. Everything we build is to make this process safe. Hours after the real fix was published, we built new images, deployed them to every &lt;a href=&quot;/docs/#running-coreos&quot;&gt;CoreOS platform&lt;/a&gt;, and patched the CoreOS slice of the internet. &lt;/p&gt;

&lt;h2 id=&quot;only-half-the-problem&quot;&gt;Only half the problem&lt;/h2&gt;

&lt;p&gt;An astute reader might ask: what happens to the bash instances inside Docker containers? This is indeed a problem. One of the issues with building an image for every application is that you have sprawl: now there are multiple versions of bash, running in the various Docker containers. &lt;/p&gt;

&lt;p&gt;Once Docker updates their base images, you will need to rebuild every image in your environment, as well as re-deploy it. &lt;/p&gt;

&lt;p&gt;Updating containers is an open problem, and we intend to help with this by applying our update model to containers as well. More to come on this soon, but we hope this model will make huge improvements in the security of the internet. &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Security Update on CVE-2014-6371 Shellshock</title>
   <link href="https://coreos.com/blog/security-update-shellshock/"/>
   <updated>2014-09-25T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/security-update-shellshock</id>
   <content type="html">&lt;p&gt;As many of you have heard, there are open Bash vulnerabilities, &lt;a href=&quot;http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271&quot;&gt;CVE-2014-6271&lt;/a&gt;, and &lt;a href=&quot;http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-7169&quot;&gt;CVE-2014-7169&lt;/a&gt;. The common vectors for arbitrary code execution from these CVEs include: bash exposed via certain web applications and dhcpcd scripts. Additionally, SSH accounts restricted by the &lt;code&gt;command=&lt;/code&gt; option in their ssh key can bypass that restriction.&lt;/p&gt;

&lt;p&gt;By default, CoreOS is not configured in a way that would allow these issues to be exploited. Regardless, we are working to further protect our users by incorporating the fixes, once released and verified, into a new build. We were prepared to roll out a new release yesterday (September 24th, 2014), but the original fix for the CVEs &lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=1141597#c27&quot;&gt;proved to be insufficient by the developers&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you are running containers on top of CoreOS that utilize a vulnerable bash and that bash is exposed to the open internet via a mechanism like CGI, then you will need to update your containers accordingly.&lt;/p&gt;

&lt;h2 id=&quot;versions-of-coreos-with-vulnerable-bash&quot;&gt;Versions of CoreOS with vulnerable bash&lt;/h2&gt;

&lt;p&gt;All &lt;a href=&quot;/releases&quot;&gt;CoreOS channels&lt;/a&gt; including, Stable, Beta, and Alpha ship with bash 4.2.20 which is affected by CVE-2014-6271 and CVE-2014-7169.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ bash --version
GNU bash, version 4.2.20(1)-release (x86_64-cros-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later &amp;lt;http://gnu.org/licenses/gpl.html&amp;gt;

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;when-will-this-be-fixed?&quot;&gt;When will this be fixed?&lt;/h2&gt;

&lt;p&gt;CoreOS is actively tracking the open CVEs and is prepared to release 410.1.0 (Stable), 440.2.0 (Beta), and an Alpha release once CVE-2014-6371 and CVE-2014-7169 have been patched upstream and verified by the CoreOS team.&lt;/p&gt;

&lt;h2 id=&quot;what-can-i-do-to-protect-myself?&quot;&gt;What can I do to protect myself?&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Disable the use of dhcpcd on untrusted networks. dhcpcd is not the default DHCP mechanism on CoreOS.&lt;/li&gt;
&lt;li&gt;Disable the use of the SSH option &lt;code&gt;AcceptEnv&lt;/code&gt; in &lt;code&gt;sshd.conf&lt;/code&gt; and ssh keys restricted by a &lt;code&gt;command&lt;/code&gt; option in &lt;code&gt;authorized_keys&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Update any containers which expose Bash to the open internet via a mechanism like CGI&lt;/li&gt;
&lt;li&gt;If you have disabled automatic application of updates be sure to monitor your systems for new updates and reboot your machines accordingly.&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>Congrats to Interactive Markdown at the TechCrunch Disrupt Hackathon</title>
   <link href="https://coreos.com/blog/interactive-markdown-techcrunch-disrupt-winner/"/>
   <updated>2014-09-08T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/interactive-markdown-techcrunch-disrupt-winner</id>
   <content type="html">&lt;p&gt;Yesterday we were excited to see that &lt;a href=&quot;https://disruptsfhackathon.challengepost.com/submissions/26447-interactive-markdown&quot;&gt;Interactive Markdown&lt;/a&gt;, who used CoreOS on DigitalOcean, won runner up at the &lt;a href=&quot;https://techcrunch.com/2014/09/07/shower-with-friends-wins-the-disrupt-sf-2014-hackathon-grand-prize-blitz-and-interactive-markdown-are-runners-up/&quot;&gt;TechCrunch Disrupt hackathon&lt;/a&gt;.  CoreOS was made available on DigitalOcean on Friday and come Saturday the Interactive Markdown team was building their application on top of CoreOS.  From the TechCrunch Disrupt &lt;a href=&quot;https://disruptsfhackathon.challengepost.com/submissions/26447-interactive-markdown&quot;&gt;submission&lt;/a&gt;: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We set up a sophisticated CoreOS cluster on DigitalOcean to support live streaming of Android mobile applications via a highly optimized VNC dynamic reverse proxy directly to a web canvas. This streaming works on both desktop and mobile devices. We also set up a build process in docker to allow the running of numerous languages on a generic backend platform written in Go.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In just 24 hours the team had a working web application of Interactive Markdown, all built on &lt;a href=&quot;/blog/digital-ocean-supports-coreos/&quot;&gt;CoreOS on DigitalOcean&lt;/a&gt;.  Pretty impressive to get that going and present to an audience of 1,000 or so hackers in 24 hours.  Congrats again to the team and go check out their TechCrunch Disrupt Hackathon demo here:&lt;/p&gt;

&lt;div style=&quot;display: inline-block; text-align: center; width: 560px; height: 450px;&quot;&gt;
&lt;script type='text/javascript' src='https://spshared.5min.com/Scripts/PlayerSeed.js?sid=281&amp;width=560&amp;height=450&amp;playList=518404209'&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;If you&amp;#39;re interested in running your own CoreOS cluster on DigitalOcean, follow our &lt;a href=&quot;/docs/running-coreos/cloud-providers/digitalocean&quot;&gt;step by step guide&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS Image Now Available On DigitalOcean</title>
   <link href="https://coreos.com/blog/digital-ocean-supports-coreos/"/>
   <updated>2014-09-05T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/digital-ocean-supports-coreos</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/assets/images/media/digital-ocean-launch.png&quot; alt=&quot;CoreOS support on DigitalOcean&quot;&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://digitalocean.uservoice.com/forums/136585-digitalocean/suggestions/4250154-suport-coreos-as-a-deployment-platform&quot;&gt;2,000 of you voted&lt;/a&gt; for CoreOS on DigitalOcean and we&amp;#39;re happy to report that it&amp;#39;s arrived. Starting today, you can head to DigitalOcean, choose the CoreOS image, and start experimenting with containers and all CoreOS has to offer.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/screenshots/DigitalOceanCreate.png&quot; alt=&quot;Screenshot of create screen&quot;&gt;&lt;/p&gt;

&lt;p&gt;In fact, if you want to try out CoreOS on DigitalOcean, use this limited edition promo code, &lt;a href=&quot;https://cloud.digitalocean.com/droplets/new?image=coreos-alpha&amp;amp;utm_medium=partner&amp;amp;utm_source=CoreOS&amp;amp;utm_campaign=launch&amp;amp;utm_content=CoreOS_blog&quot;&gt;SFDOCOREOS25&lt;/a&gt; (expires 9/12/2014) and receive a $25 credit to your DigitalOcean account.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;/docs/running-coreos/cloud-providers/digitalocean&quot;&gt;step by step guide&lt;/a&gt; can get you started with a single droplet.&lt;/p&gt;

&lt;h2 id=&quot;coreos-channels&quot;&gt;CoreOS Channels&lt;/h2&gt;

&lt;p&gt;CoreOS is released into &lt;a href=&quot;/releases/&quot;&gt;alpha, beta, and stable channels&lt;/a&gt; for each provider we support. Today, we’re releasing the first CoreOS alpha image for DigitalOcean at version &lt;a href=&quot;/releases#429.0.0&quot;&gt;429.0.0&lt;/a&gt;. The first beta image will be available on DigitalOcean when an alpha image is upgraded to beta, which happens roughly every two weeks. The stable image will follow the same pattern.&lt;/p&gt;

&lt;p&gt;If you’re interested in booting the alpha image today but would like to track the stable or beta channel for all future updates, you can &lt;a href=&quot;/docs/cluster-management/setup/switching-channels/&quot;&gt;switch your release channel&lt;/a&gt; very easily after boot.&lt;/p&gt;

&lt;h2 id=&quot;get-started-with-coreos-on-digitalocean&quot;&gt;Get Started with CoreOS on DigitalOcean&lt;/h2&gt;

&lt;p&gt;CoreOS is designed to run in clusters and is optimized for running containers. The init system for your cluster is &lt;a href=&quot;/using-coreos/clustering&quot;&gt;fleet&lt;/a&gt;, a cluster-aware tool built on top of systemd. If you’re unfamiliar with systemd, it’s the next-generation init system being adopted by all of the major Linux distributions -- Ubuntu, Fedora, Debian, Red Hat, and more.&lt;/p&gt;

&lt;p&gt;Here’s a collection of guides that will help you get started:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/docs/running-coreos/cloud-providers/digitalocean/&quot;&gt;Running CoreOS on DigitalOcean&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/launching-containers/building/getting-started-with-docker/&quot;&gt;Getting Started with Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/launching-containers/launching/getting-started-with-systemd/&quot;&gt;Getting Started with systemd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/cluster-management/setup/cluster-discovery/&quot;&gt;Starting a CoreOS Cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/docs/launching-containers/launching/launching-containers-fleet/&quot;&gt;Launching Containers with fleet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>Introducing flannel: An etcd backed overlay network for containers</title>
   <link href="https://coreos.com/blog/introducing-rudder/"/>
   <updated>2014-08-28T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/introducing-rudder</id>
   <content type="html">&lt;p&gt;&lt;em&gt;Edit: This post has been updated to reflect the project name change from rudder to flannel&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As we have previously &lt;a href=&quot;https://coreos.com/blog/running-kubernetes-example-on-CoreOS-part-2/&quot;&gt;blogged&lt;/a&gt;, Kubernetes, the container cluster manager, works great with CoreOS to distribute a workload across your entire cluster. To make it easier to find your services, Kubernetes does away with port-mapping and assigns a unique IP address to each pod. This works well on Google Compute where each host is assigned a /24 for use by individual pods. Things are not as easy on other cloud providers where a host cannot get an entire subnet to itself. flannel aims to solve this problem by creating an overlay mesh network that provisions a subnet to each server.&lt;/p&gt;

&lt;p&gt;While flannel was originally designed for Kubernetes, it is a generic overlay network that can be used as a simple alternative to existing software defined networking solutions.&lt;/p&gt;

&lt;h3 id=&quot;how-it-works&quot;&gt;How it works&lt;/h3&gt;

&lt;p&gt;An overlay network is first configured with an IP range and the size of the subnet for each host. For example, one could configure the overlay to use 10.100.0.0/16 and each host to receive a /24 subnet. Host A could then receive 10.100.5.0/24 and host B could get 10.100.18.0/24. flannel uses etcd to maintain a mapping between allocated subnets and real host IP addresses. For the data path, flannel uses UDP to encapsulate IP datagrams to transmit them to the remote host. We chose UDP as the transport protocol for its ease of passing through firewalls. For example, AWS Classic cannot be configured to pass IPoIP or GRE traffic as its security groups only support TCP/UDP/ICMP.&lt;/p&gt;

&lt;h3 id=&quot;getting-flannel&quot;&gt;Getting flannel&lt;/h3&gt;

&lt;p&gt;Download and build flannel from GitHub: &lt;a href=&quot;https://github.com/coreos/flannel&quot;&gt;https://github.com/coreos/flannel&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;technical-details&quot;&gt;Technical details&lt;/h3&gt;

&lt;p&gt;flannel uses etcd for storage of both configuration data and subnet assignments. Upon startup, a flannel daemon will retrieve the configuration and a list of subnet already in use. It will select an available subnet (a randomly picked one) and attempt to register it by creating a key in etcd. For example, consider the following configuration:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;Overlay network range: 10.100.0.0/16
Size of subnet for each host: /24
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;and current registrations stored as keys under /coreos.com/network/subnets:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;10.100.5.0-24
10.100.13.0-24
10.100.17.0-24
10.100.18.0-24
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;flannel might pick 10.100.15.0/24 and format the key as &lt;code&gt;10.100.15.0-24&lt;/code&gt;. It will then attempt to create this key. If it succeeds, it has acquired a subnet lease for 24 hours. flannel uses etcd TTL on keys to enforce lease expirations. Should the key creation fail, it indicates that another host managed to acquire the same subnet first and flannel will retry the registration procedure. An hour before its lease expiration, flannel will extend its lease by doing an update.&lt;/p&gt;

&lt;p&gt;The value stored for each key contains the real IP of the host. flannel keeps an eye (via etcd directory watch) on all entries stored in /coreos.com/network/subnets and uses this information to maintain a routing table. To perform the encapsulation, flannel utilizes Universal TAP/TUN devices (in TUN mode) and proxies the IP fragments between the TUN device and a UDP socket.&lt;/p&gt;

&lt;h3 id=&quot;performance&quot;&gt;Performance&lt;/h3&gt;

&lt;p&gt;To find out how much performance penalty flannel introduces, we ran both latency and bandwidth tests on AWS m3.medium VM. We used &lt;a href=&quot;https://www.openfabrics.org/downloads/qperf/&quot;&gt;qperf&lt;/a&gt; tool to gather the measurements:&lt;/p&gt;

&lt;table&gt;&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Without flannel&lt;/th&gt;
&lt;th&gt;With flannel&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;UDP Latency&lt;/td&gt;
&lt;td&gt;133 us&lt;/td&gt;
&lt;td&gt;201 us&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TCP Bandwidth&lt;/td&gt;
&lt;td&gt;47.8 MB/sec&lt;/td&gt;
&lt;td&gt;47.2 MB/sec&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&lt;br/&gt;
As can be seen from the results, while flannel introduces non-trivial latency penalty, it has almost no affect on the bandwidth.&lt;/p&gt;

&lt;h3 id=&quot;future-direction&quot;&gt;Future direction&lt;/h3&gt;

&lt;p&gt;flannel is still in the early phases of development and should be considered to be in the experimental stage. Apart from stabilizing current functionality, future plans include supporting additional encapsulations such as IPSEC. Moreover, even for those environments where it is feasible for a host to be assigned a routable subnet, we would like to extend flannel to perform the subnet allocation across the cluster.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS Just Got Easier to Try With Panamax</title>
   <link href="https://coreos.com/blog/coreos-just-got-easier-to-try-with-panamax/"/>
   <updated>2014-08-21T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-just-got-easier-to-try-with-panamax</id>
   <content type="html">&lt;p&gt;&lt;em&gt;This is a guest post by Lucas Carlson, Head of CenturyLink Labs&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here at &lt;a href=&quot;http://www.centurylinklabs.com&quot;&gt;CenturyLink Labs&lt;/a&gt;, we help people learn how to adopt new technologies like Docker and CoreOS into their daily lives. This has given us a unique perspective on the Docker ecosystem because we are trying to stay on top of one of the fastest growing open-source projects in history.&lt;/p&gt;

&lt;p&gt;After talking to tens of thousands of developers and ops people, we kept hearing the same thing over and over:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;CoreOS and Docker is the most transformative technology we have seen in years, but it is still really really hard to get started.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;TL;DR: Try Deploying a CoreOS App on &lt;a href=&quot;http://panamax.io/get-panamax/&quot;&gt;Panamax&lt;/a&gt; in Minutes&lt;/p&gt;

&lt;h2 id=&quot;what-is-panamax?&quot;&gt;What is Panamax?&lt;/h2&gt;

&lt;p&gt;Instead of just blogging and podcasting tutorials and interviews (we do that too), we decided to create an open-source project that made the setup and app-creation process for Docker and CoreOS way way easier.&lt;/p&gt;

&lt;p&gt;We call it &lt;a href=&quot;http://panamax.io/&quot;&gt;Panamax&lt;/a&gt;–Docker Management for Humans.&lt;/p&gt;

&lt;p&gt;Panamax starts with a CoreOS installation and adds a few Panamax containers into the CoreOS system that provide a great UX where you can search the entire Docker Hub for any container you want and pull it into your CoreOS system and stitch it together with other containers. &lt;/p&gt;

&lt;p&gt;The Panamax containers don’t get in your way, in fact they just run fleet commands for you but you can always go back and run fleetctl yourself and get under the hood. We just wanted to connect the dots and setup best practices so that to get started you wouldn’t need to spend weeks getting up to speed on new technology.&lt;/p&gt;

&lt;h2 id=&quot;app-template-repository&quot;&gt;App Template Repository&lt;/h2&gt;

&lt;p&gt;The thing we are most excited about with Panamax are the application templates. It is like a Fig specification that can run on top of a clustered CoreOS. Here are just a few we created to seed the community: &lt;a href=&quot;https://github.com/CenturyLinkLabs/panamax-public-templates&quot;&gt;https://github.com/CenturyLinkLabs/panamax-public-templates&lt;/a&gt; and people are building a bunch more right now for a contest we started here: &lt;a href=&quot;https://github.com/CenturyLinkLabs/panamax-contest-templates&quot;&gt;https://github.com/CenturyLinkLabs/panamax-contest-templates&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;There are application templates for setting up CoreOS-based apps in one-click for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Heroku Buildpacks&lt;/li&gt;
&lt;li&gt;Minecraft&lt;/li&gt;
&lt;li&gt;WordPress&lt;/li&gt;
&lt;li&gt;Ghost&lt;/li&gt;
&lt;li&gt;Drupal&lt;/li&gt;
&lt;li&gt;GitLab&lt;/li&gt;
&lt;li&gt;Magento&lt;/li&gt;
&lt;li&gt;Shippable&lt;/li&gt;
&lt;li&gt;Ngrok&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And a bunch more. Most of these templates are built with 12-factor micro-services in mind so they combine multiple containers for you automatically and create the connections for you.&lt;/p&gt;

&lt;h2 id=&quot;build-your-own-apps-on-coreos&quot;&gt;Build Your Own Apps on CoreOS&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://panamax.io/&quot;&gt;Panamax&lt;/a&gt; isn’t just for deploying pre-baked applications, it is also a web gui to help you create your own apps. In fact, if you create an app and contribute it by making a pull request back to the template repository before Tuesday August 26th, 2014, you can have a chance to win one of 30 new Mac Pros or 30 iPad Airs that CenturyLink is giving away to kick-start the Panamax community.&lt;/p&gt;

&lt;h2 id=&quot;what-are-you-waiting-for?&quot;&gt;What Are You Waiting For?&lt;/h2&gt;

&lt;p&gt;Panamax runs on any cloud that supports CoreOS: Amazon, Rackspace, Google, CenturyLink Cloud and even your laptop. The install process on your Mac to try it couldn’t be easier if you have Homebrew installed already:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;brew install http://download.panamax.io/installer/brew/panamax.rb &amp;amp;&amp;amp; panamax init&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you are on Linux, check out the &lt;a href=&quot;https://github.com/CenturyLinkLabs/panamax-ui/wiki/Installing-Panamax&quot;&gt;installation instructions on GitHub&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;If you haven’t used CoreOS yet because you have been intimidated or not sure you were ready to make the commitment yet, now’s the time to give it a try. Panamax will get you up and running with CoreOS is just minutes. Don’t take my word for it, try it yourself!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS Certification and Training</title>
   <link href="https://coreos.com/blog/CoreOS-training-and-certification/"/>
   <updated>2014-08-20T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/CoreOS-training-and-certification</id>
   <content type="html">&lt;p style=&quot;background:#d9edf7; padding: 10px;&quot; class=&quot;text-info&quot;&gt;&lt;strong&gt;Update:&lt;/strong&gt; We've updated a few aspects of our training program and the CoreOS Specialist certification is not offered at this time.&lt;/p&gt;

&lt;p&gt;Today we are excited to bring you more opportunities to &lt;a href=&quot;/training&quot;&gt;learn about CoreOS&lt;/a&gt; - both through the &lt;a href=&quot;http://training.linuxfoundation.org/certification&quot;&gt;Linux Foundation’s Certification Program&lt;/a&gt; that was announced today and through in-person training courses.&lt;/p&gt;

&lt;h2 id=&quot;coreos-certification&quot;&gt;CoreOS Certification&lt;/h2&gt;

&lt;p&gt;In partnership with the Linux Foundation, CoreOS is now offering an online certification class to become a CoreOS specialist.  The online exam is a multiple choice exam designed to test your knowledge of CoreOS components, operating principles and troubleshooting. The CoreOS certification can be attempted with or without taking the CoreOS training course, and rewards you with tangible proof of your CoreOS expertise.   &lt;/p&gt;

&lt;h2 id=&quot;trainings-and-seminars&quot;&gt;Trainings and Seminars&lt;/h2&gt;

&lt;p&gt;In addition to the certification, we also announced in-person training courses on CoreOS.  Individuals can attend five day public training sessions, or work with the CoreOS training team to arrange a custom onsite session tailored to fit company-wide engineering team goals and questions.  At the trainings, you’ll get one-on-one time with a CoreOS team member, an overview of installing, configuring, and managing CoreOS and all of its components, as well as the tools to begin deploying and managing applications at scale. The training will also prepare you to pass the CoreOS certification exam.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Quay.io joins CoreOS, Introducing the CoreOS Enterprise Registry</title>
   <link href="https://coreos.com/blog/CoreOS-enterprise-docker-registry/"/>
   <updated>2014-08-13T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/CoreOS-enterprise-docker-registry</id>
   <content type="html">&lt;p&gt;Today we announced that &lt;a href=&quot;https://quay.io/&quot;&gt;Quay.io&lt;/a&gt; is now part of the CoreOS family. If you are not familiar with Quay.io, it is the first hosted private docker registry. In addition to continuing to invest in Quay.io, we are launching the &lt;a href=&quot;/products/enterprise-registry/&quot;&gt;CoreOS Enterprise Registry&lt;/a&gt; based on Quay.io. Enterprise Registry is a solution for companies that want to run their own docker registry. &lt;/p&gt;

&lt;div class=&quot;graphic&quot;&gt;
  &lt;div class=&quot;screenshot&quot;&gt;
    &lt;img src=&quot;/assets/images/screenshots/Repo-View.png&quot; style=&quot;margin: 0 auto; display: block; max-width: 500px;&quot;&gt;&lt;/img&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;/products/enterprise-registry/&quot;&gt;Enterprise Registry&lt;/a&gt; includes all the bells and whistles, including a rich UI, access control lists, and powerful tools for teams collaborating with containers.  It is similar to GitHub Enterprise, in that CoreOS Enterprise Registry provides tools to group together teams within your organization, and assign permissions to them so they can work together securely.   This all happens behind your firewall and within your datacenter.&lt;/p&gt;

&lt;p&gt;For those of you that want to try it out, you can head over to &lt;a href=&quot;https://quay.io/&quot;&gt;Quay.io&lt;/a&gt; and give the hosted version a shot. For the next 1000 users that sign up, we will be &lt;a href=&quot;https://quay.io/plans/?trial-plan=bus-coreos-trial&quot;&gt;giving away six months of the “Yacht” plan&lt;/a&gt;, i.e. 20 free private docker repositories. We think you’ll be very impressed with what the team has built. &lt;/p&gt;

&lt;p&gt;Finally, CoreOS could not be more proud to welcome our new team members, Jake Moshenko and Joseph Schorr. Jake and Joseph are a very talented team, whom initially worked together on the Google API platform before starting Quay.io. We are very happy to have them joining CoreOS and kicking off our New York City office. &lt;/p&gt;

&lt;p&gt;If you are interested in learning more about &lt;a href=&quot;/products/enterprise-registry/&quot;&gt;Enterprise Registry&lt;/a&gt;, &lt;a href=&quot;https://quay.io/&quot;&gt;Quay.io&lt;/a&gt;, or joining the team in NYC, please reach out to us at &lt;a href=&quot;mailto:sales@coreos.com&quot;&gt;sales@coreos.com&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Running Kubernetes Example on CoreOS, Part 2</title>
   <link href="https://coreos.com/blog/running-kubernetes-example-on-CoreOS-part-2/"/>
   <updated>2014-07-30T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/running-kubernetes-example-on-CoreOS-part-2</id>
   <content type="html">&lt;p&gt;&lt;em&gt;Edit: The most up to date Kubernetes + CoreOS guide can be found on the &lt;a href=&quot;https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/getting-started-guides/coreos.md&quot;&gt;Kubernetes GitHub&lt;/a&gt; project.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In the &lt;a href=&quot;/blog/running-kubernetes-example-on-CoreOS-part-1&quot;&gt;previous post&lt;/a&gt; I outlined how to set up a single node Kubernetes cluster manually. This was a great way to get started and try out the basic Kubernetes examples. Now its time to take it up a notch.&lt;/p&gt;

&lt;p&gt;In this post I will demonstrate how to get Kubernetes installed on a three node CoreOS cluster running on &lt;a href=&quot;http://www.vmware.com/products/fusion&quot;&gt;VMware Fusion&lt;/a&gt;. The goal is to setup an environment that closely mimics a cluster of bare-metal machines supporting the Kubernetes &lt;a href=&quot;https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/networking.md&quot;&gt;networking model&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Before we jump into the tutorial we’ll take a moment to understand what Kubernetes is all about. I tend to think of Kubernetes as a project that builds on the idea that the datacenter is the computer, and Kubernetes provides an API to manage it all.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/k8s-components.png&quot; style=&quot;margin: 0 auto; display: block;&quot;&gt;&lt;/img&gt;&lt;/p&gt;

&lt;p&gt;The deployment workflow provided by Kubernetes allows us to think about the cluster as a whole and less about each individual machine. In the Kubernetes model we don&amp;#39;t deploy containers to specific hosts, instead we describe the containers we want running, and Kubernetes figures out how and where to run them. This declarative style of managing infrastructure opens up the door for large scale deployments and self healing infrastructures. Yeah, welcome to the future.&lt;/p&gt;

&lt;p&gt;But how does it all work?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/k8s-machine.png&quot; style=&quot;margin: 0 auto; display: block;&quot;&gt;&lt;/img&gt;&lt;/p&gt;

&lt;p&gt;Kubernetes introduces the concept of a &lt;a href=&quot;https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/pods.md&quot;&gt;Pod&lt;/a&gt;, which is a group of dependent containers that share networking and a filesystem. Pods are great for applications that benefit from collocating services such as a caching server or log manager. Pods are created within a Kubernetes cluster through specification files that are pushed to the Kubernetes API. Kubernetes then schedules Pod creation on a machine in the cluster.&lt;/p&gt;

&lt;p&gt;At this point the Kubelet service running on the machine kicks in and starts the related containers via the Docker API. It’s the Kubelet’s responsibility to keep the scheduled containers up and running until the Pod is either deleted or scheduled onto another machine.&lt;/p&gt;

&lt;p&gt;Next Kubernetes provides a form of service discovery based on &lt;a href=&quot;https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/labels.md&quot;&gt;labels&lt;/a&gt;. Each collection of Pods can have an arbitrary number of labels which can be used to locate them. For example, to locate the Redis service running in production you could use the following labels to perform a label query:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;&lt;span class=&quot;nv&quot;&gt;service&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;redis,environment&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;production
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Finally, Kubernetes ships with a TCP proxy that runs on every host. The TCP proxy is responsible for mapping service ports to label queries. The idea is that consumers of a service could contact any machine in a Kubernetes cluster on a service port and the request is load balanced across Pods responsible for that service.&lt;/p&gt;

&lt;p&gt;The service proxy works even if the target Pods runs on other hosts. It should also be noted that every Pod in a Kubernetes cluster has its own IP address, and has the ability to communicate with other Pods within the cluster.&lt;/p&gt;

&lt;p&gt;If you are interested in the inter-workings of Kubernetes, be sure to checkout the &lt;a href=&quot;https://github.com/GoogleCloudPlatform/kubernetes/tree/master/docs&quot;&gt;Kubernetes documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now it&amp;#39;s time to build our own Kubernetes cluster.&lt;/p&gt;

&lt;h2 id=&quot;the-environment&quot;&gt;The Environment&lt;/h2&gt;

&lt;p&gt;The examples in this post were testing with VMware Fusion 6 on OS X 10.9.4, but should also work with other virtualization products.&lt;/p&gt;

&lt;h3 id=&quot;the-network&quot;&gt;The Network&lt;/h3&gt;

&lt;p&gt;The Kubernetes networking model aims to provide each Pod (container set) with its own IP address and supports cross host communication. To make this work create a custom VMware network, vmnet2, dedicated for containers. The vmnet2 network should have DHCP and NAT disabled to mimic a basic switch.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/k8s-network-setup.png&quot; alt=&quot;Kubernetes Overview&quot;&gt;&lt;/p&gt;

&lt;p&gt;Next create 3 VMs with the following virtual hardware specs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 CPU&lt;/li&gt;
&lt;li&gt;512 MB RAM&lt;/li&gt;
&lt;li&gt;20 GB HDD&lt;/li&gt;
&lt;li&gt;2 Network Interfaces &lt;/li&gt;
&lt;li&gt;CD ROM (Used for CoreOS installation and &lt;a href=&quot;http://coreos.com/docs/cluster-management/setup/cloudinit-config-drive/&quot;&gt;config-drive&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The second network interface for each VM will be connected to the vmnet2 network and will later become a member of the cbr0 bridge used by Docker.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/k8s-settings-overview.png&quot; alt=&quot;Kubernetes Overview&quot;&gt;&lt;/p&gt;

&lt;p&gt;Each VM plays a specific role in the Kubernetes cluster, either a Master or Minion in Kubernetes terms.  The Master runs the apiserver, controller manager and optionally the kubelet and proxy servers. Minions on the other hand run only the kubelet and proxy servers. While you can have more than one Minion there can only be a single Master per cluster; a Kubernetes limitation that will removed in the near future.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/k8s-vm-library.png&quot; alt=&quot;Kubernetes Overview&quot;&gt;&lt;/p&gt;

&lt;p&gt;Next install CoreOS on each of the VMs. For this environment I followed the &lt;a href=&quot;https://coreos.com/docs/running-coreos/platforms/iso&quot;&gt;ISO installation&lt;/a&gt; method and performed a local install. At this point you should have a clean set of VMs and are ready to install Kubernetes.&lt;/p&gt;

&lt;h2 id=&quot;installing-kubernetes&quot;&gt;Installing Kubernetes&lt;/h2&gt;

&lt;p&gt;The recommend way of setting up Kubernetes on CoreOS is via &lt;a href=&quot;https://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config&quot;&gt;Cloud-Config&lt;/a&gt;. The cloud-config files used for this tutorial can be found on &lt;a href=&quot;https://github.com/kelseyhightower/kubernetes-coreos/tree/master/configs&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There is one cloud-config file for each VM:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;master.yml&lt;/li&gt;
&lt;li&gt;node1.yml&lt;/li&gt;
&lt;li&gt;node2.yml&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using cloud-config files we can automate 100% of the Kubernetes installation and setup process. There are a number of items being setup and configured in each cloud-config file:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set the hostname&lt;/li&gt;
&lt;li&gt;Configure static networking for the primary interface&lt;/li&gt;
&lt;li&gt;Setup the cbr0 bridge and assign it a subnet from the 10.244.0.0/16 range&lt;/li&gt;
&lt;li&gt;Configure iptables to NAT non-container traffic through the primary interface&lt;/li&gt;
&lt;li&gt;Configure Docker to use the cbr0 bridge and disable adding rules to iptables&lt;/li&gt;
&lt;li&gt;Download and install the Kubernetes binaries&lt;/li&gt;
&lt;li&gt;Install the systemd units for each Kubernetes service&lt;/li&gt;
&lt;li&gt;Configure etcd to use a static set of peers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;customize-the-cloud-config-files&quot;&gt;Customize the Cloud-Config Files&lt;/h3&gt;

&lt;p&gt;The cloud-config files should not be used as is; the following changes must be made:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change the static host IP address throughout the cloud-config file.&lt;/li&gt;
&lt;li&gt;Change the SSH authorized key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not excited about updating a bunch of cloud-config files? I figured as much, so I wrote &lt;a href=&quot;https://github.com/kelseyhightower/kubeconfig&quot;&gt;kubeconfig&lt;/a&gt; to help you out. Instead of editing the cloud-configs manually you can use kubeconfig to generate the cloud-config files specifically for your environment.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;wget http://storage.googleapis.com/kubernetes/darwin/kubeconfig -O /usr/local/bin/kubeconfig
chmod +x /usr/local/bin/kubeconfig
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Before we can use kubeconfig we need to gather the following bits of information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Network information to configure static networking on each of the VMs

&lt;ul&gt;
&lt;li&gt;DNS server&lt;/li&gt;
&lt;li&gt;Gateway&lt;/li&gt;
&lt;li&gt;3 IP addresses&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;SSH Public Key&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;gather-3-ip-addresses&quot;&gt;Gather 3 IP Addresses&lt;/h3&gt;

&lt;p&gt;First allocate 3 IP addresses to be used by the primary network interfaces of the VMs. For my setup the primary interfaces are connected to the vmnet8 virtual network.&lt;/p&gt;

&lt;p&gt;To avoid picking IP addresses within the VMware DHCP range for the vmnet8 network, view the DHCP configuration file with the following command:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;cat &lt;span class=&quot;s2&quot;&gt;&amp;quot;/Library/Preferences/VMware Fusion/vmnet8/dhcpd.conf&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On my system I get the following output:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;subnet 192.168.12.0 netmask 255.255.255.0 &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
  range 192.168.12.128 192.168.12.254&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  option broadcast-address 192.168.12.255&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  option domain-name-servers 192.168.12.2&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  option domain-name localdomain&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  default-lease-time 1800&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;                &lt;span class=&quot;c&quot;&gt;# default is 30 minutes&lt;/span&gt;
  max-lease-time 7200&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;                    &lt;span class=&quot;c&quot;&gt;# default is 2 hours&lt;/span&gt;
  option netbios-name-servers 192.168.12.2&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  option routers 192.168.12.2&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;From this output I can see the DHCP range, DNS (domain-name-servers), and Gateway (routers) I should use in my config.yml file. &lt;/p&gt;

&lt;p&gt;In my environment I’ve chosen the following network settings:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;dns: 192.168.12.2
gateway: 192.168.12.2
master_ip: 192.168.12.10
node1_ip: 192.168.12.11
node2_ip: 192.168.12.12
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;gather-the-ssh-authorized-key&quot;&gt;Gather the SSH authorized key&lt;/h3&gt;

&lt;p&gt;Finally set the sshkey key with your own public key. Skipping this step will prevent you from logging into your VMs.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;sshkey: ssh-rsa AAAAB3NzaC1yc2..
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Your final config.yml file should look something like this:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;dns: 192.168.12.2
gateway: 192.168.12.2
master_ip: 192.168.12.10
node1_ip: 192.168.12.11
node2_ip: 192.168.12.12
sshkey: &amp;lt;public ssh key&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To generate the cloud-config files run the following command:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;kubeconfig -c config.yml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;create-configuration-drives&quot;&gt;Create Configuration Drives&lt;/h3&gt;

&lt;p&gt;While we could use the cloud-config files generated by kubeconfig directly, it’s easier to use &lt;a href=&quot;https://github.com/coreos/coreos-cloudinit/blob/master/Documentation/config-drive.md&quot;&gt;config-drives&lt;/a&gt; to expose our cloud-configs to the VMs. Again we can use kubeconfig to automate this process for us.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;kubeconfig -c config.yml -iso
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The result of running the above command is a config-drive for all three VMs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;master.iso&lt;/li&gt;
&lt;li&gt;node1.iso&lt;/li&gt;
&lt;li&gt;node2.iso&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For each VM attach the related config-drive and boot them.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/k8s-attach-drive.png&quot; alt=&quot;Kubernetes Overview&quot;&gt;&lt;/p&gt;

&lt;p&gt;At this point you should be able to login as the core user to each of your VMs. It will take a few minutes for the Kubernetes binaries to download and the related services to start.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/k8s-screenshot.png&quot; alt=&quot;Kubernetes Overview&quot;&gt;&lt;/p&gt;

&lt;p&gt;Use the systemd journal to monitor progress of the VMs after they boot up:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;journalctl -f
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can check the status of each of the Kubernetes components with the following commands&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-sh&quot; data-lang=&quot;sh&quot;&gt;sudo systemctl status apiserver
sudo systemctl status controller-manager
sudo systemctl status kubelet
sudo systemctl status proxy
sudo systemctl status etcd
sudo systemctl status docker
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You are now ready to start running the &lt;a href=&quot;https://github.com/GoogleCloudPlatform/kubernetes#where-to-go-next&quot;&gt;examples&lt;/a&gt; hosted on the Kubernetes GitHub repo.&lt;/p&gt;

&lt;h3 id=&quot;running-kubernetes-examples&quot;&gt;Running Kubernetes Examples&lt;/h3&gt;

&lt;p&gt;You have two choices on running the examples. You can log on to the Master and run the kubecfg command from there. Or you can download the kubecfg command line tool to your local machine and &lt;a href=&quot;https://github.com/kelseyhightower/kubernetes-coreos#running-commands-remotely&quot;&gt;execute commands remotely&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;This post demonstrated how to setup a CoreOS cluster running Kubernetes on virtual hardware that mimics a bare metal infrastructure. Kubernetes consists of many moving parts, but as you can see the installation and setup of everything can be fully automated when using CoreOS with Cloud-Config.&lt;/p&gt;

&lt;p&gt;Kubernetes is still in the early stages and things are rapidly evolving. The good news is you’ll have the ability to help shape the direction of the Kubernetes project by kicking the tires and joining the community. CoreOS will be here to support you by providing the best platform for running Linux containers and hosting projects like Kubernetes.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS Stable Release</title>
   <link href="https://coreos.com/blog/stable-release/"/>
   <updated>2014-07-25T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/stable-release</id>
   <content type="html">&lt;p&gt;First off, &lt;a href=&quot;http://sysadminday.com/&quot;&gt;Happy SysAdmin Day&lt;/a&gt;.  We think we have a pretty good SysAdmin surprise in store for you today as we are announcing the CoreOS stable release channel.   Starting today, you can begin running CoreOS in production.  This version is the most tested, secure and reliable version available for users wanting to run CoreOS. This is a huge milestone for us. Since our first alpha release in August 2013:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;191 releases have been tagged&lt;/li&gt;
&lt;li&gt;Tested on hundreds of thousands of servers on the alpha and beta channels&lt;/li&gt;
&lt;li&gt;Supported on 10+ platforms, ranging from bare metal to being primary images on Rackspace and Google&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is a big day for us here at CoreOS, as we have been working hard to deliver the stable release.  Of course, we couldn’t do this without the community so thank you for all of your support and contributions to the project.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/releases/#367.1.0&quot;&gt;CoreOS 367.1.0&lt;/a&gt;, our first version on the stable channel,  includes the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux 3.15.2&lt;/li&gt;
&lt;li&gt;Docker 1.0.1&lt;/li&gt;
&lt;li&gt;Support on all major cloud providers, including Rackspace Cloud, Amazon EC2 (including HVM), and Google Compute Engine&lt;/li&gt;
&lt;li&gt;Commercial support via &lt;a href=&quot;/products/managed-linux/&quot;&gt;CoreOS Managed Linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a great opportunity to read about our &lt;a href=&quot;/using-coreos/updates/&quot;&gt;Update Philosophy&lt;/a&gt; if you haven&amp;#39;t already done so.&lt;/p&gt;

&lt;p&gt;Please note: The stable release is not including etcd and fleet as stable, this release is only targeted at the base OS and Docker 1.0. etcd/fleet stable support will be in subsequent releases. &lt;/p&gt;

&lt;p&gt;For those of you who want to start running CoreOS in production be sure to review our quick &lt;a href=&quot;/docs/cluster-management/setup/switching-channels/&quot;&gt;Switching Release Channels&lt;/a&gt; guide. As you&amp;#39;re booting new machines, be sure to base them off your desired channel from the beginning.&lt;/p&gt;

&lt;p&gt;Finally, thanks to the community for your support.  We can’t wait to hear your feedback.  For those looking for additional support of running CoreOS in production, be sure to check out our &lt;a href=&quot;/products/managed-linux/&quot;&gt;Managed Linux&lt;/a&gt; offerings, as we have a full support team in place ready to answer any questions you may have.&lt;/p&gt;

&lt;p&gt;Happy SysAdmin Day, and thank you for making the web awesome.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Running Kubernetes Example on CoreOS, Part 1</title>
   <link href="https://coreos.com/blog/running-kubernetes-example-on-CoreOS-part-1/"/>
   <updated>2014-07-10T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/running-kubernetes-example-on-CoreOS-part-1</id>
   <content type="html">&lt;p&gt;&lt;em&gt;Edit: The most up to date Kubernetes + CoreOS guide can be found on the &lt;a href=&quot;https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/getting-started-guides/coreos.md&quot;&gt;Kubernetes GitHub&lt;/a&gt; project.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This post is not kept up to date with the latest developments! The latest documentation can be found at this GitHub repository: &lt;a href=&quot;https://github.com/GoogleCloudPlatform/kubernetes/tree/master/docs/getting-started-guides/coreos/units&quot;&gt;https://github.com/GoogleCloudPlatform/kubernetes/tree/master/docs/getting-started-guides/coreos/units&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/GoogleCloudPlatform/kubernetes&quot;&gt;Kubernetes&lt;/a&gt; is the container cluster manager from Google that offers a unique workflow for managing containers across multiple machines. Kubernetes introduces the concept of a pod, which represents a group of containers that should be deployed as a single logical service. The pod concept tends to fit well with the popular pattern of running a single service per container. Kubernetes makes it easy to run multiple pods on a single machine or across an entire cluster for better resource utilization and high availability. Kubernetes also actively monitors the health of pods to ensure they are always running within the cluster.&lt;/p&gt;

&lt;p&gt;Kubernetes is able to achieve this advanced level of cluster wide orchestration by leveraging the etcd distributed key-value store; a project started and maintained by CoreOS. etcd takes care of storing and replicating data used by Kubernetes across the entire cluster, and thanks to the Raft consensus algorithm etcd can recover from hardware failure and network partitions. The combination of Kubernetes and etcd is even more powerful when deployed on CoreOS, an operating system built for this kinda thing.&lt;/p&gt;

&lt;p&gt;Now lets see Kubernetes in action.&lt;/p&gt;

&lt;p&gt;Feel free to follow along at home as we step through getting Kubernetes installed on CoreOS and bringing up a single pod running a Redis database. First step is to get &lt;a href=&quot;http://coreos.com/docs/quickstart/&quot;&gt;CoreOS up and running&lt;/a&gt;; a single node cluster will work for this tutorial. Take a look at the CoreOS installation docs and choose your favorite platform. Next we need to download the Kubernetes components onto our CoreOS instance.&lt;/p&gt;

&lt;p&gt;For convenience we&amp;#39;ve precompiled all the Kubernetes components including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;apiserver&lt;/li&gt;
&lt;li&gt;controller-manager&lt;/li&gt;
&lt;li&gt;kubecfg&lt;/li&gt;
&lt;li&gt;kubelet&lt;/li&gt;
&lt;li&gt;proxy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Login to your CoreOS instance and run the following commands:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;sudo mkdir -p /opt/kubernetes/bin 
sudo chown -R core: /opt/kubernetes
cd /opt/kubernetes
wget https://github.com/kelseyhightower/kubernetes-coreos/releases/download/v0.0.1/kubernetes-coreos.tar.gz
tar -C bin/ -xvf kubernetes-coreos.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;At this point you should have all the Kubernetes components installed under the /opt/kubernetes/bin directory. Kubernetes also requires Docker and etcd, both ship with CoreOS out of the box so nothing to do here. While CoreOS recommends that you run third party applications via Docker containers, CoreOS does support running Kubernetes directly on the OS. The best way to do that is by creating systemd unit files and starting the Kubernetes components with systemctl. &lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;git clone https://github.com/kelseyhightower/kubernetes-coreos.git
sudo cp kubernetes-coreos/units/* /etc/systemd/system/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Before starting everything, make sure etcd is started:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;sudo systemctl start etcd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;With the systemd units in place we are ready to start the Kubernetes services.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;sudo systemctl start apiserver
sudo systemctl start controller-manager
sudo systemctl start kubelet
sudo systemctl start proxy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Congratulations! You now have Kubernetes up and running on CoreOS. Take a moment and tweet that!&lt;/p&gt;

&lt;h2 id=&quot;creating-a-kubernetes-pod&quot;&gt;Creating a Kubernetes pod&lt;/h2&gt;

&lt;p&gt;Pods are how Kubernetes groups containers and define a logical deployment group. Lets take a look at a simple pod configuration for a Redis database.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;{
  &amp;quot;id&amp;quot;: &amp;quot;redis&amp;quot;,
  &amp;quot;desiredState&amp;quot;: {
    &amp;quot;manifest&amp;quot;: {
      &amp;quot;version&amp;quot;: &amp;quot;v1beta1&amp;quot;,
      &amp;quot;id&amp;quot;: &amp;quot;redis&amp;quot;,
      &amp;quot;containers&amp;quot;: [{
        &amp;quot;name&amp;quot;: &amp;quot;redis&amp;quot;,
        &amp;quot;image&amp;quot;: &amp;quot;dockerfile/redis&amp;quot;,
        &amp;quot;ports&amp;quot;: [{
          &amp;quot;containerPort&amp;quot;: 6379,
          &amp;quot;hostPort&amp;quot;: 6379 
        }]
      }]
    }
  },
  &amp;quot;labels&amp;quot;: {
    &amp;quot;name&amp;quot;: &amp;quot;redis&amp;quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You’ll notice that a pod configuration describes a Docker container and port mapping. Pods also define a label which is used for service discovery. We’ll cover service discovery in more detail in the next post, but for now know that it’s possible for other tools to discover the pods you spin up using Kubernetes.&lt;/p&gt;

&lt;p&gt;Finally we can create the Redis database pod with the kubecfg command line tool and the Redis pod configuration file.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;/opt/kubernetes/bin/kubecfg -h http://127.0.0.1:8080 -c kubernetes-coreos/pods/redis.json create /pods
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;(this command might take a minute to complete depending on how fast the docker pull is)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;At this point the Redis database pod is up and running. We can validate this with a Redis client and connecting to our pod through the docker0 interface.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;docker run -t -i dockerfile/redis /usr/local/bin/redis-cli -h 172.17.42.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can also use the kubecfg command to list running pods.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;/opt/kubernetes/bin/kubecfg -h http://127.0.0.1:8080 list /pods
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Once you are done with a pod you can simply delete it.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;/opt/kubernetes/bin/kubecfg -h http://127.0.0.1:8080 delete /pods/redis
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Hopefully this blog post has demonstrated that Kubernetes can be installed outside of GCE onto just about any Linux platform. CoreOS makes it simple to setup Kubernetes since it ships with Docker, etcd and systemd out of the box. All you have to do is install a few binaries and systemd units then you are ready to go. &lt;/p&gt;

&lt;p&gt;In next post we will take a look at the true power of Kubernetes, which is managing Linux containers across multiple machines, service discovery, and full life cycle management of your Linux containers. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;* All code examples, systemd units, and precompiled binaries can be found at the following github repository: &lt;a href=&quot;https://github.com/kelseyhightower/kubernetes-coreos&quot;&gt;https://github.com/kelseyhightower/kubernetes-coreos&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The CoreOS Epoch</title>
   <link href="https://coreos.com/blog/coreos-epoch/"/>
   <updated>2014-06-30T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-epoch</id>
   <content type="html">&lt;p&gt;CoreOS has a rapidly incrementing version, 197.0.0, 247.0.0, and so on. It is a little known fact, but the version represents the number of days since the CoreOS epoch on July 1, 2013. And we hope to make 365.0.0 a particularly special release. Over the next week this release will go through our alpha and beta channels and, if all goes well, it will be the first version to be promoted to stable. So, watch along with us in the &lt;a href=&quot;/releases&quot;&gt;release channel&lt;/a&gt; to see if this is the one!&lt;/p&gt;

&lt;p&gt;We’ve also used this opportunity to announce our &lt;a href=&quot;http://www.prnewswire.com/news-releases/265191691.html&quot;&gt;Series A funding&lt;/a&gt; and two new products:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/products/managed-linux&quot;&gt;CoreOS Managed Linux&lt;/a&gt; is for companies looking for support as they implement CoreOS in their infrastructure.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/products/coreupdate&quot;&gt;CoreUpdate&lt;/a&gt; is a new product, and provides a dashboard for full control of rolling updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are waiting for etcd and fleet support, keep an eye out as we will be announcing more soon on this front with &lt;a href=&quot;/products&quot;&gt;CoreOS Cluster&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Given all the celebration, we felt it was an appropriate time to send a big thanks to the community, which has grown with us throughout the past year. Some of our highlights over the past year include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Over 150 git contributors to our GitHub projects&lt;/li&gt;
&lt;li&gt;5,000+ GitHub stars collectively on CoreOS projects&lt;/li&gt;
&lt;li&gt;CoreOS has contributed features and fixes to open source projects including: Docker, Linux Kernel, networkd, systemd and more&lt;/li&gt;
&lt;li&gt;Official CoreOS image added to Google Compute Engine, Rackspace, Amazon&lt;/li&gt;
&lt;li&gt;Joining the Docker Governance Board as a Contributing Member&lt;/li&gt;
&lt;li&gt;Today’s most respected technology companies and many Fortune 500 companies are using and testing CoreOS in their environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are in the mood to celebrate the CoreOS epoch this Tuesday and happen to be on either coast, join us for a toast. In San Francisco, we are having our meetup on &lt;a href=&quot;http://www.meetup.com/coreos/events/190998902/&quot;&gt;Tuesday, July 1st, 6-9 pm at Geekdom San Francisco&lt;/a&gt;.  And if you happen to be in New York, Alex Polvi, co-founder and CEO will host a drink up celebration at &lt;a href=&quot;https://www.google.com/maps/dir//5+Spring+St,+New+York,+NY+10012/@40.7212519,-74.0286388,13z/data=!3m1!4b1!4m8!4m7!1m0!1m5!1m1!1s0x89c259861bfae085:0x5df36423384ed90c!2m2!1d-73.994306!2d40.721257&quot;&gt;Sweet and Vicious, 4-7:30 pm, for the USA vs Belgium soccer game&lt;/a&gt;.  First drink is on CoreOS.&lt;/p&gt;

&lt;p&gt;Thanks for your help over the past year and set your timers, the countdown to stable has begun.
Once available the stable channel will be available to all users just like the alpha and beta channels. Users are encouraged to have some machines in each channel to test out changes coming to their infrastructure and to help the community find and fix bugs.   &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS Officially on Rackspace OnMetal Cloud Servers</title>
   <link href="https://coreos.com/blog/coreos-on-rackspace-onmetal-cloud-servers/"/>
   <updated>2014-06-19T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-on-rackspace-onmetal-cloud-servers</id>
   <content type="html">&lt;p&gt;Earlier this morning at Structure, Rackspace announced &lt;a href=&quot;https://www.rackspace.com/blog/onmetal-the-right-way-to-scale/&quot;&gt;OnMetal&lt;/a&gt;, their API-driven, single-tenant infrastructure-as-a-service offering. We are excited to announce that CoreOS will be available at launch!&lt;/p&gt;

&lt;p&gt;Rackspace OnMetal Cloud Servers is the first of its kind. Using OnMetal you create machine instances using OpenStack APIs but, instead of being provisioned a virtual machine, you are provisioned physical hardware.  All of this happens with the speed and ease you’ve come to expect for cloud deployments - on demand.&lt;/p&gt;

&lt;p&gt;If you are tracking upstream OpenStack you may have noticed &lt;a href=&quot;https://github.com/openstack/ironic-python-agent/tree/master/imagebuild/coreos&quot;&gt;commits related to CoreOS&lt;/a&gt;. The OpenStack Ironic project and CoreOS are key components of the technology making OnMetal possible.  Rackspace’s continued development of OpenStack demonstrates their commitment to the open source community and we are grateful to be involved in such a fundamental shift in on-demand computing.  &lt;/p&gt;

&lt;p&gt;Once OnMetal is live, you&amp;#39;ll be able to provision instances on Rackspace&amp;#39;s OnMetal cloud and run CoreOS. This combination gives you the ease of spinning up machines with the click of a mouse, the security of running CoreOS with automatic updates, and the raw horsepower of running on bare metal.&lt;/p&gt;

&lt;p&gt;The CoreOS and Rackspace teams have worked very closely to ensure that CoreOS and OnMetal are a solid combination and we are very excited to make this available to you.  &lt;/p&gt;

&lt;p&gt;If you happen to be at Structure today and have any questions about CoreOS on Rackspace OnMetal, stop by the Rackspace lounge area and ask for Redbeard or tweet at us &lt;a href=&quot;https://twitter.com/coreoslinux&quot;&gt;@coreoslinux&lt;/a&gt;. We are happy to answer any of your questions.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The CoreOS Update Philosophy</title>
   <link href="https://coreos.com/blog/the-coreos-update-philosophy/"/>
   <updated>2014-06-18T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/the-coreos-update-philosophy</id>
   <content type="html">&lt;p&gt;Just a few hours after the Docker team announced Docker 1.0, CoreOS shipped the update to all users on the &lt;a href=&quot;http://coreos.com/blog/docker-1-dot-0&quot;&gt;alpha channel&lt;/a&gt;. If you are using CoreOS Alpha with automatic updates enabled, you were moved to Docker 1.0 seamlessly. The recent &lt;a href=&quot;https://news.ycombinator.com/item?id=7909622&quot;&gt;Docker exploit&lt;/a&gt; is just a small example of a long list of vulnerabilities that have plagued server software since it has existed, and why the CoreOS model is extremely important.&lt;/p&gt;

&lt;p&gt;Running the latest software traditionally meant taking on risks around stability, security, and incompatibility. Times are changing, and our server deployments need to adapt. Software development is now at an arms race against software exploitation. Yet for many organizations the process of patching is still too difficult and time consuming, and is often neglected as a result. CoreOS and our &lt;a href=&quot;http://coreos.com/using-coreos/updates&quot;&gt;Update Philosophy&lt;/a&gt; aims to remove these pain points and enable our users to safely, and easily, always run the latest, most secure, and stable versions of the software we support, without breaking your deployment.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS Videos From Our Inaugural Meetup</title>
   <link href="https://coreos.com/blog/video-from-meetup/"/>
   <updated>2014-06-17T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/video-from-meetup</id>
   <content type="html">&lt;p&gt;At our &lt;a href=&quot;http://www.meetup.com/coreos/events/184860992/&quot;&gt;inaugural meetup here in San Francisco&lt;/a&gt;, our host &lt;a href=&quot;http://geekdomsf.com/&quot;&gt;Geekdom SF&lt;/a&gt;, was kind enough to film and edit our talks for your viewing pleasure.  We know many of you have been asking about the talks so without further ado here are the talks in all their glory.&lt;/p&gt;

&lt;h2 id=&quot;coreos:-anatomy-of-a-coreos-update&quot;&gt;CoreOS: Anatomy of a CoreOS Update&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Presented by Brian Redbeard Harrington&lt;/em&gt;&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/JeICd9XyXfY?list=PLXK8KWNgW1MuLAaHSJ0U3YtP5B4v8669p&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;coreos:-orchestrating-the-fleet&quot;&gt;CoreOS:  Orchestrating the Fleet&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Presented by Brian Waldon&lt;/em&gt;&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/jWeAJOQIjDM?list=PLXK8KWNgW1MuLAaHSJ0U3YtP5B4v8669p&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;running-coreos-outside-of-the-cloud-with-ipxe&quot;&gt;Running CoreOS Outside of the Cloud with iPXE&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Presented by Kelsey Hightower&lt;/em&gt;&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/dRG2ajUaBqs?list=PLXK8KWNgW1MuLAaHSJ0U3YtP5B4v8669p&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;If you would like to hear more about CoreOS or would like to ask us questions in person, you are in luck.   Tomorrow, we will be at the &lt;a href=&quot;http://aws.amazon.com/start-ups/loft/&quot;&gt;AWS Pop-up Loft&lt;/a&gt; here in San Francisco from 6-7:30 pm giving an intro to CoreOS, discussing how startups use CoreOS for infrastructure that scales and going over how to set up CoreOS on EC2.    RSVP on the &lt;a href=&quot;http://www.eventbrite.com/e/behind-the-scenes-with-coreos-tickets-11935632799&quot;&gt;AWS eventbrite&lt;/a&gt; to attend.  &lt;/p&gt;

&lt;p&gt;We are also part of a special announcement this Thursday with Rackspace, and will be attending their party Thursday evening.  If you prefer to hang out with us there, then &lt;a href=&quot;https://www.eventbrite.com/e/rackspace-special-announcement-61914-tickets-11943323803&quot;&gt;RSVP&lt;/a&gt;  to their “Hands On Heavy Metal” party. &lt;/p&gt;

&lt;p&gt;Enjoy the videos and we hope to see you at one of the events this week.  &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Docker 1.0 released to Alpha</title>
   <link href="https://coreos.com/blog/docker-1-dot-0/"/>
   <updated>2014-06-16T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/docker-1-dot-0</id>
   <content type="html">&lt;p&gt;Try Out Docker 1.0 In The CoreOS Alpha Channel! If you&amp;#39;re new to Docker, check out our &lt;a href=&quot;/docs/launching-containers/building/getting-started-with-docker/&quot;&gt;Getting Started with docker guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Last Monday Docker 1.0 was announced at DockerCon, and shortly after Docker 1.0 was made available in the &lt;a href=&quot;/releases/&quot;&gt;CoreOS alpha channel&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;en&quot;&gt;&lt;p&gt;Want to try out Docker 1.0? CoreOS has it in the alpha channel. &lt;a href=&quot;https://t.co/liT6z73pPu&quot;&gt;https://t.co/liT6z73pPu&lt;/a&gt;&lt;/p&gt;&amp;mdash; CoreOS Linux (@coreoslinux) &lt;a href=&quot;https://twitter.com/coreoslinux/statuses/476122775619248128&quot;&gt;June 9, 2014&lt;/a&gt;&lt;/blockquote&gt;

&lt;script async src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;Docker 1.0 is the the stable, production-ready version of Docker.   A fundamental building block of CoreOS is the use of Linux containers, where your applications and code run. A natural choice for Linux containers was Docker due to their expansive ecosystem.  The Docker engine is installed on each CoreOS machine. &lt;/p&gt;

&lt;p&gt;If you want to try out Docker, you can package each component of your application inside of a container (web server, caching, database) and then schedule them to a cluster with fleet. Distributed configuration and locking become trivial additions by connecting all of your components together with etcd.&lt;/p&gt;

&lt;p&gt;If you are interested in trying out Docker 1.0, get to our alpha channel and try it out first hand.  Or if you have questions, join us in &lt;a href=&quot;irc://irc.freenode.org:6667/#coreos&quot;&gt;#coreos on IRC&lt;/a&gt; or &lt;a href=&quot;https://groups.google.com/forum/#!forum/coreos-dev&quot;&gt;email the dev list&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Official CoreOS Meetup in San Francisco June 3rd, 2014</title>
   <link href="https://coreos.com/blog/sf-meetup/"/>
   <updated>2014-05-28T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/sf-meetup</id>
   <content type="html">&lt;p&gt;Join us for our first &lt;a href=&quot;http://www.meetup.com/coreos/events/184860992/&quot;&gt;CoreOS meetup&lt;/a&gt; Tuesday, June 3rd at the &lt;a href=&quot;http://geekdom.com/san-francisco&quot;&gt;San Francisco Geekdom&lt;/a&gt; meeting space.  Come with your questions queued up and ready to learn as we&amp;#39;ll be hosting two separate presentations geared at both beginners and advanced users.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;h3 id=&quot;anatomy-of-a-coreos-update,-a-look-behind-the-curtain-of-your-update-process&quot;&gt;Anatomy of a CoreOS update, a look behind the curtain of your update process&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Brian Harrington&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CoreOS is a self-updating operating system, but &lt;em&gt;someone&lt;/em&gt; produces these updates.  We will take some time to discuss the Omaha protocol, what an update does when it&amp;#39;s downloaded and applied, the benefit of keeping a locksmith on hand, and why you can trust a third party with your data.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;h3 id=&quot;orchestrating-the-fleet,-how-a-systemd-unit-achieves-resilience&quot;&gt;Orchestrating the fleet, how a systemd unit achieves resilience&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Brian Waldon&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fleet is a distributed init toolkit for building resilient systemd units.  We&amp;#39;ll take the time to show you both the ways these processes are resillient (and not), scheduling units across your cluster, and the road ahead for managing your fleet of containers.&lt;/p&gt;

&lt;p&gt;&lt;hr&gt;&lt;/p&gt;

&lt;p&gt;After the main presentations members of the team will be available for birds of a feather sessions to discuss etcd, fleet, and the operating system.  This is a great chance to learn what others are doing and get realtime feedback.  &lt;/p&gt;

&lt;p&gt;Make sure you RSVP &lt;a href=&quot;http://www.meetup.com/coreos/events/184860992/&quot;&gt;here&lt;/a&gt; as space is limited.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Official CoreOS Images on Google Compute Engine</title>
   <link href="https://coreos.com/blog/official-gce-images/"/>
   <updated>2014-05-23T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/official-gce-images</id>
   <content type="html">&lt;p&gt;Today we&amp;#39;re excited to announce that official CoreOS images are available on &lt;a href=&quot;https://cloud.google.com/products/compute-engine/&quot;&gt;Google Compute Engine&lt;/a&gt;. This means it&amp;#39;s now even easier to &lt;a href=&quot;/docs/running-coreos/cloud-providers/google-compute-engine/&quot;&gt;spin up a CoreOS cluster&lt;/a&gt; on GCE using the API or from the command line. Adding an instance is as simple as:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;gcutil addinstance --image=projects/coreos-cloud/global/images/coreos-alpha-317-0-0-v20140515 core1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In the next few days, CoreOS will become available as a default image type in the GCE control panel, making running your first CoreOS cluster on GCE an easy, browser-based experience. They will also become globally available to users via &lt;code&gt;gcutil listimages&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;CoreOS is an ideal host for distributed systems and Google Compute Engine is a perfect base for CoreOS clusters. Google runs industry-leading distributed systems and their expertise shows in the speed and stability of Google Compute Engine. One feature that we were particularly delighted to see was a shared project metadata store that looks very much like our own &lt;a href=&quot;http://coreos.com/using-coreos/etcd/&quot;&gt;etcd&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;GCE platform tools including load balancers and replica pools are supported by the CoreOS GCE images and enable you to efficiently and smoothly scale your cluster. After grabbing user data and SSH keys from GCE, newly-booted CoreOS machines come online and immediately join the cluster, and fleet will automatically begin placing qualified jobs on these new machines.&lt;/p&gt;

&lt;p&gt;For more details, hop over to the &lt;a href=&quot;http://googlecloudplatform.blogspot.com/2014/05/official-coreos-images-are-now-available-on-google-compute-engine.html&quot;&gt;Google Cloud Platform blog&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>etcd 0.4.0 with Standby Mode</title>
   <link href="https://coreos.com/blog/etcd-0.4.0/"/>
   <updated>2014-05-20T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/etcd-0.4.0</id>
   <content type="html">&lt;p&gt;The &lt;a href=&quot;http://github.com/coreos/etcd&quot;&gt;etcd&lt;/a&gt; team has been focused on making it easier to scale and manage larger clusters, and is happy to announce a release with features to help: etcd v0.4.0. This release is an important step in our &lt;a href=&quot;http://coreos.com/blog/etcd-The-Road-to-1.0/&quot;&gt;road to 1.0&lt;/a&gt;. (If you are new to etcd, our &lt;a href=&quot;http://coreos.com/docs/distributed-configuration/getting-started-with-etcd/&quot;&gt;getting started guide&lt;/a&gt; can give you a quick overview of the project).&lt;/p&gt;

&lt;p&gt;This release is will be available in the &lt;a href=&quot;http://coreos.com/releases/&quot;&gt;alpha channel&lt;/a&gt; of CoreOS in the next few days, and will roll out to the beta channel after it has proven solid.&lt;/p&gt;

&lt;h2 id=&quot;what&amp;#39;s-new-in-0.4.0&quot;&gt;What&amp;#39;s New in 0.4.0&lt;/h2&gt;

&lt;h3 id=&quot;cluster-management-api&quot;&gt;Cluster Management API&lt;/h3&gt;

&lt;p&gt;This release introduces a &lt;a href=&quot;https://github.com/coreos/etcd/blob/master/Documentation/api.md#cluster-config&quot;&gt;documented API&lt;/a&gt; for removing machines from a cluster. This gives administrators the ability to remove downed machines from the cluster so that new machines can join.&lt;/p&gt;

&lt;p&gt;This new endpoint also includes options for controlling two important new cluster-wide features: &lt;em&gt;standby mode&lt;/em&gt;, and automatic &lt;em&gt;node promotion/demotion&lt;/em&gt;.&lt;/p&gt;

&lt;h3 id=&quot;standby-mode&quot;&gt;Standby Mode&lt;/h3&gt;

&lt;p&gt;The new &amp;quot;standby mode&amp;quot; adds extra resiliency to etcd. All machines in an etcd cluster are now in one of either two modes: &lt;em&gt;peer mode&lt;/em&gt; or &lt;em&gt;standby mode&lt;/em&gt;. Peers participate in the Raft consensus algorithm; in earlier releases of etcd, every node in a cluster was a peer. Standbys, on the other hand, do not participate in consensus, and instead redirect client requests to participating peers. This setup enables users to have a small number of machines participating in consensus directly while having a much larger number of standbys that are keeping up to date on the cluster members.&lt;/p&gt;

&lt;p&gt;You can find more details about standby mode &lt;a href=&quot;https://github.com/coreos/etcd/blob/master/Documentation/design/standbys.md&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;node-promotion/demotion&quot;&gt;Node Promotion/Demotion&lt;/h3&gt;

&lt;p&gt;To complement standby mode, etcd can automatically reconfigure the cluster by promoting and demoting nodes between standby and peer modes. As part of the cluster configuration, every cluster now has a defined maximum number of participating peers (&lt;code&gt;activeSize&lt;/code&gt;). Any etcd process that attempts to join a cluster greater than or equal to the maximum number of peers will start out as a standby. If the number of peers in the cluster drops below the configured &lt;code&gt;activeSize&lt;/code&gt;, then nodes in standby will automatically be promoted to peers until the &lt;code&gt;activeSize&lt;/code&gt; is reached.&lt;/p&gt;

&lt;p&gt;You can learn more about this feature in the &lt;a href=&quot;https://github.com/coreos/etcd/blob/master/Documentation/api.md#cluster-config&quot;&gt;API documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;head-requests&quot;&gt;HEAD Requests&lt;/h3&gt;

&lt;p&gt;Clients can now use HEAD to check for the existence of a key without a body. This is useful for avoiding unnecessary network costs when the body of the request isn’t required.&lt;/p&gt;

&lt;h3 id=&quot;updated-peer-discovery&quot;&gt;Updated Peer Discovery&lt;/h3&gt;

&lt;p&gt;When an instance starts up, etcd now uses the following sources, in order, to locate other peers in the cluster:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;log data in the &lt;code&gt;-data-dir&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-discovery&lt;/code&gt; endpoints &lt;/li&gt;
&lt;li&gt;a static &lt;code&gt;-peers&lt;/code&gt; list&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This improves on v0.3.0 and promotes the priority of log data before finding peers from other sources. In practice this means it&amp;#39;s easier for an etcd instance to reconnect to a cluster of which it was previously a member.&lt;/p&gt;

&lt;h3 id=&quot;name-ip-migration&quot;&gt;Name IP Migration&lt;/h3&gt;

&lt;p&gt;If a machine&amp;#39;s address is changed, etcd will now accept the new address. This is useful in the case of new DHCP leases or virtual machine migrations.&lt;/p&gt;

&lt;h3 id=&quot;deprecation-of-/mod-modules&quot;&gt;Deprecation of /mod Modules&lt;/h3&gt;

&lt;p&gt;Modules have been a great experimental testing ground for higher level features built on top etcd. Until now, they have seen some use but haven’t had consistent stability. We are focusing on improving the etcd core API and will turn back to these experimental modules in a later future release. It was not an easy decision, but we are sure you will be happy with what results this decision can allow us to produce.&lt;/p&gt;

&lt;h3 id=&quot;minor-fixes-and-improvements&quot;&gt;Minor Fixes and Improvements&lt;/h3&gt;

&lt;p&gt;Along with the features and fixes outlined above we have made a number of smaller improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set logs NOCOW flag when BTRFS is detected to avoid fsync overhead&lt;/li&gt;
&lt;li&gt;Fix all known data races, and pass Go race detector&lt;/li&gt;
&lt;li&gt;Fixed timeouts when using HTTPS&lt;/li&gt;
&lt;li&gt;Improved snapshot stability&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;mailing-list&quot;&gt;Mailing List&lt;/h3&gt;

&lt;p&gt;Please join the &lt;a href=&quot;https://groups.google.com/forum/?hl=en#!forum/etcd-dev&quot;&gt;etcd development mailing list&lt;/a&gt; to discuss etcd with us!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;a href=&quot;https://github.com/coreos/etcd/releases&quot;&gt;0.4.1&lt;/a&gt; has been released.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Zero Downtime Frontend Deploys with Vulcand on CoreOS</title>
   <link href="https://coreos.com/blog/zero-downtime-frontend-deploys-vulcand/"/>
   <updated>2014-05-19T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/zero-downtime-frontend-deploys-vulcand</id>
   <content type="html">&lt;p style=&quot;background:#d9edf7; padding: 10px;&quot; class=&quot;text-info&quot;&gt;&lt;strong&gt;Update:&lt;/strong&gt; Vulcand has been updated since this post was written. Jump to &lt;a href=&quot;http://vulcanproxy.com/&quot;&gt;vulcanproxy.com&lt;/a&gt; for more info. You can follow the concepts of this post, but the commands are no longer up to date.&lt;/p&gt;

&lt;p&gt;Running a distributed system across many machines requires a sophisticated load balancing mechanism that can reconfigure itself quickly and reliably.&lt;/p&gt;

&lt;p&gt;The team over at &lt;a href=&quot;http://mailgun.com&quot;&gt;Mailgun&lt;/a&gt; has built &lt;a href=&quot;https://github.com/mailgun/vulcand&quot;&gt;vulcand&lt;/a&gt;, an etcd-backed load balancer, to serve traffic to different parts of their systems. vulcand has many awesome features such as an HTTP API, a command line utility and the ability for complex routing rules. We&amp;#39;re only going look at a few simple examples in this post, but you can &lt;a href=&quot;https://github.com/mailgun/vulcand#vulcand&quot;&gt;check out the readme&lt;/a&gt; for the complete details.&lt;/p&gt;

&lt;p&gt;Today we&amp;#39;re going to deploy Vulcan on a CoreOS cluster and use it to facilitate two strategies for zero-downtime deployments. These examples were intentionally kept simple for easy comprehension and it&amp;#39;s up to you to decide what strategies you want to use for high availablity, port management, etc.&lt;/p&gt;

&lt;h2 id=&quot;the-set-up&quot;&gt;The Set Up&lt;/h2&gt;

&lt;p&gt;This post is going to cover two common front-end deployment strategies: a rolling-upgrade and a rapid switch to a new software version. We&amp;#39;re going to assume you&amp;#39;re familar with CoreOS, docker and fleet, and also have a 3 node CoreOS cluster to run the examples on. This post was tested on CoreOS 317.0.0 with etcd 0.2 and fleet 0.3.2.&lt;/p&gt;

&lt;p&gt;Our systemd units are going to use containers that are located on the public docker index as &lt;code&gt;coreos/example&lt;/code&gt; and have been tagged as 1.0.0 and 2.0.0. Mailgun has set up a trusted build for vulcand as &lt;code&gt;mailgun/vulcand&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Each unit contains a web server that serves a very simple webpage. To easily tell the difference between versions, 1.0.0 has a red background and 2.0.0 has a blue background.&lt;/p&gt;

&lt;p&gt;Let&amp;#39;s get started.&lt;/p&gt;

&lt;h2 id=&quot;clone-the-example-units-repository&quot;&gt;Clone the Example Units Repository&lt;/h2&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/coreos/unit-examples&quot;&gt;unit-examples&lt;/a&gt; repository contains all of the example units used in our blog posts. Clone it to save yourself from having to copy/paste everything:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;git clone https://github.com/coreos/unit-examples.git
cd unit-examples
cd blog-vulcan-example
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you&amp;#39;re planning on submitting units to the cluster remotely, your local copy of &lt;code&gt;fleetctl&lt;/code&gt; &lt;em&gt;must&lt;/em&gt; match the version of &lt;code&gt;fleet&lt;/code&gt; running on the CoreOS machines. You can find the versions with &lt;code&gt;fleetctl -version&lt;/code&gt; and &lt;code&gt;fleet -version&lt;/code&gt;. Browse the &lt;a href=&quot;https://github.com/coreos/fleet/releases&quot;&gt;tagged releases on GitHub&lt;/a&gt; for both Linux and Mac versions of &lt;code&gt;fleetctl&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;start-vulcan&quot;&gt;Start Vulcan&lt;/h2&gt;

&lt;p&gt;First, start up an instance of vulcand and configure a DNS record to point to it. If you&amp;#39;re using Vagrant, you may need to forward ports on your laptop to Vagrant.&lt;/p&gt;

&lt;p&gt;You&amp;#39;ll need to modify the unit files in this example with the domain/subdomain you&amp;#39;re using in order for vulcan&amp;#39;s routing to work properly. The easiest way to do this is with sed after you&amp;#39;ve cloned the units repository:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;find ./ -type f -exec sed -i -e &amp;#39;s/example.com/vulcan.test.company.com/g&amp;#39; {} \;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;vulcan.service&quot;&gt;vulcan.service&lt;/h4&gt;

&lt;p&gt;We&amp;#39;re going to use the &amp;quot;trusted build&amp;quot; of vulcand on the public index. The trusted build is a container that is built directly from the vulcand repository every time code is commited to master. This ensures that the code you&amp;#39;re running comes directly from Mailgun and is always up to date.&lt;/p&gt;

&lt;p&gt;You can also clone the vulcand repository on your CoreOS machine and build the &lt;code&gt;Dockerfile&lt;/code&gt; manually if you&amp;#39;d prefer. Here&amp;#39;s the unit we&amp;#39;re going to use:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[Unit]
Description=Vulcan
After=docker.service

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill vulcan1
ExecStartPre=-/usr/bin/docker rm vulcan1
ExecStartPre=/usr/bin/docker pull mailgun/vulcand:v0.7.0
ExecStart=/usr/bin/docker run --rm --name vulcan1 -p 80:80 -p 8182:8182 mailgun/vulcand:v0.7.0 /go/bin/vulcand -apiInterface=0.0.0.0 -interface=0.0.0.0 -etcd=http://172.17.42.1:4001 -port=80 -apiPort=8182
ExecStop=/usr/bin/docker kill vulcan1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;-etcd&lt;/code&gt; flag tells vulcand that our etcd cluster can be reached over the docker0 bridge since we&amp;#39;re running vulcand in a container. On Vagrant machines, this IP can be different and you may need to edit the unit. Let&amp;#39;s start it:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ fleetctl start vulcan.service
Job vulcan.service scheduled to f8ea00d4.../10.0.2.15
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To test it out, load up the location in a browser. You should see &lt;code&gt;error: &amp;quot;Bad Gateway&amp;quot;&lt;/code&gt; since we haven&amp;#39;t set up anything to receive traffic. If you don&amp;#39;t see anything, check to see if the units have started successfully:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ fleetctl list-units
UNIT    STATE   LOAD  ACTIVE  SUB DESC  MACHINE
vulcan.service  launched  loaded  active  running Vulcan  7f0e81ab.../10.0.2.15
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If it&amp;#39;s &lt;code&gt;activating&lt;/code&gt; and &lt;code&gt;start-pre&lt;/code&gt; it means that the docker pull from the &lt;code&gt;ExecStartPre&lt;/code&gt; is still running. Check the journal of a unit to confirm this:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ fleetctl journal vulcan.service
May 12 20:59:38 core-01 systemd[1]: Started Vulcan.
May 12 20:59:39 core-01 bash[3268]: 2014/05/12 20:59:39 Error: No such container: vulcan1
May 12 20:59:39 core-01 bash[3268]: Unable to find image &amp;#39;coreos/vulcan&amp;#39; locally
May 12 20:59:39 core-01 bash[3268]: Pulling repository coreos/vulcan
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If your terminal supports split panes, it&amp;#39;s useful to run &lt;code&gt;watch -n 10 fleetctl list-units&lt;/code&gt; in a new pane so you can keep an eye on what&amp;#39;s happeneing. Feel free to read on while the container downloads.&lt;/p&gt;

&lt;h2 id=&quot;how-vulcand-works&quot;&gt;How Vulcand Works&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;vulcand&lt;/code&gt; has two main concepts, locations and upstreams, that are connected together to serve traffic. A location is a combination of a hostname and a path that can be matched with a regular expression. The location is matched up with an upstream, which is a group of endpoints that are qualified to serve a subset of traffic. All of the examples for manuipulating vulcand in this post will be shown using &lt;code&gt;etcdctl&lt;/code&gt;, but an &lt;a href=&quot;https://github.com/#http-api&quot;&gt;HTTP API&lt;/a&gt; and &lt;a href=&quot;https://github.com/mailgun/vulcand#command-line&quot;&gt;command line tool&lt;/a&gt; are also provided.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/vulcan-diagram.png&quot; alt=&quot;Vulcan Diagram&quot;&gt;&lt;/p&gt;

&lt;h3 id=&quot;set-up-the-location&quot;&gt;Set Up the Location&lt;/h3&gt;

&lt;p&gt;Before we can start routing traffic, we need to set up the location. In the provided units, this is done in the registration sidekick in order to create the location if no units are already running. Here&amp;#39;s a breakdown of the commands contained in our registration unit. You don&amp;#39;t have to run any of these, they are just for illustration:&lt;/p&gt;

&lt;p&gt;This will create the hostname &lt;code&gt;example.com&lt;/code&gt; and the path, &lt;code&gt;home&lt;/code&gt;, to be matched by the regular expression &lt;code&gt;/.*&lt;/code&gt;, which should match all paths:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;etcdctl set &amp;quot;/vulcand/hosts/example.com/locations/home/path&amp;quot; &amp;#39;/.*&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Next, we need to register our container as a member of the upstream &lt;code&gt;example&lt;/code&gt;. We&amp;#39;re using the unit name as the unique identifier:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;etcdctl set &amp;quot;/vulcand/upstreams/example/endpoints/mixed-register-v1.0.0-A.service&amp;quot; http://10.10.10.10:8086
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The last step is to tell our location to use our upstream:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;etcdctl set &amp;quot;/vulcand/hosts/example.com/locations/home/upstream&amp;quot; example
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;When one of our containers is stopped we need to deregister it from the upstream:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;etcdctl rm &amp;quot;/vulcand/upstreams/example.com/endpoints/mixed-register-v1.0.0-A.service&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let&amp;#39;s add all of this together into a working example.&lt;/p&gt;

&lt;h2 id=&quot;scenario-1:-rolling-frontend-update&quot;&gt;Scenario 1: Rolling Frontend Update&lt;/h2&gt;

&lt;p&gt;Our first deployment scenario is very common: a rolling upgrade. This strategy is common if the changes that you&amp;#39;re making are hidden through feature flags or aren&amp;#39;t going to harm a user&amp;#39;s experience if they get routed to mixed versions during a session.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/vulcan-1-upstream.png&quot; alt=&quot;Single Vulcan Upstream&quot;&gt;&lt;/p&gt;

&lt;h3 id=&quot;start-version-1.0.0&quot;&gt;Start Version 1.0.0&lt;/h3&gt;

&lt;p&gt;Before we start our containers, let&amp;#39;s take a look and see what they&amp;#39;re doing. We&amp;#39;re running our simple web server in &lt;code&gt;example-v1.0.0-*.service&lt;/code&gt; and a &lt;a href=&quot;/docs/launching-containers/launching/launching-containers-fleet/#run-a-simple-sidekick&quot;&gt;sidekick&lt;/a&gt; registration service in &lt;code&gt;mixed-register-v1.0.0-*.service&lt;/code&gt;:&lt;/p&gt;

&lt;h4 id=&quot;example-v1.0.0-a.service&quot;&gt;example-v1.0.0-A.service&lt;/h4&gt;

&lt;p&gt;In the &lt;code&gt;ExecStartPre&lt;/code&gt; we&amp;#39;re doing a &lt;code&gt;docker pull&lt;/code&gt; in order to prevent the unit from reporting &lt;code&gt;active&lt;/code&gt; until the container download is complete. If we didn&amp;#39;t do this, the registration unit would start before the download is complete. &lt;code&gt;TimeoutStartSec=0&lt;/code&gt; disables systemd&amp;#39;s built-in time out when starting a unit, since our docker container is quite large and takes a few minutes to download.&lt;/p&gt;

&lt;p&gt;Our unit conflicts with the other 1.0.0 example units in order for them to be spread across machines in the cluster.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[Unit]
Description=Example 1.0.0
After=docker.service

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill example-1A
ExecStartPre=-/usr/bin/docker rm example-1A
ExecStartPre=/usr/bin/docker pull coreos/example:1.0.0
ExecStart=/usr/bin/docker run --rm --name example-1A -p 8086:80 coreos/example:1.0.0
ExecStop=/usr/bin/docker kill example-1A

[X-Fleet]
X-Conflicts=example-v1.0.0-*.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;mixed-register-v1.0.0-a.service&quot;&gt;mixed-register-v1.0.0-A.service&lt;/h4&gt;

&lt;p&gt;The registration unit executes the &lt;code&gt;etcdctl&lt;/code&gt; commands covered earlier. Including &lt;code&gt;EnvironmentFile=/etc/environment&lt;/code&gt; allows us to reference &lt;code&gt;$COREOS_PUBLIC_IPV4&lt;/code&gt; and &lt;code&gt;$COREOS_PRIVATE_IPV4&lt;/code&gt; in our unit. This file is populated on platforms in which CoreOS can determine the network environment (cloud providers, vagrant, etc). &lt;code&gt;RemainAfterExit=yes&lt;/code&gt; (&lt;a href=&quot;http://www.freedesktop.org/software/systemd/man/systemd.service.html#RemainAfterExit=&quot;&gt;docs&lt;/a&gt;) will allow this unit to be active even after &lt;code&gt;ExecStart&lt;/code&gt; commands run. If it didn&amp;#39;t our &lt;code&gt;ExecStop&lt;/code&gt; commands would run immediately afterwards.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[Unit]
Description=Register for Example
BindsTo=example-v1.0.0-A.service
After=example-v1.0.0-A.service

[Service]
EnvironmentFile=/etc/environment
RemainAfterExit=yes
ExecStart=/bin/sh -c &amp;quot;/bin/etcdctl set \&amp;quot;/vulcand/upstreams/example/endpoints/mixed-register-v1.0.0-A.service\&amp;quot; http://$COREOS_PUBLIC_IPV4:8085; \
  /bin/etcdctl set \&amp;quot;/vulcand/hosts/example.com/locations/home/path\&amp;quot; &amp;#39;/.*&amp;#39;; \
  /bin/etcdctl set /vulcand/hosts/example.com/locations/home/upstream example&amp;quot;
ExecStop=/bin/sh -c &amp;quot;/bin/etcdctl rm /vulcand/upstreams/example/endpoints/mixed-register-v1.0.0-A.service&amp;quot;

[X-Fleet]
X-ConditionMachineOf=example-v1.0.0-A.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Start the two 1.0.0 units and their sidekicks:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ fleetctl start example-v1.0.0-{A,B}.service mixed-register-v1.0.0-{A,B}.service
Job example-v1.0.0-A.service launched on 7f0e81ab.../10.0.2.15
Job mixed-register-v1.0.0-A.service launched on 7f0e81ab.../10.0.2.15
Job example-v1.0.0-B.service launched on 62b05884.../10.0.2.15
Job mixed-register-v1.0.0-B.service launched on 7f0e81ab.../10.0.2.15
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The registration unit will create the location and the upstream and vulcan will automatically start sending traffic to it.&lt;/p&gt;

&lt;p&gt;When you load the &lt;code&gt;vulcand&lt;/code&gt; container in a browser, you should see a red background and the text &lt;code&gt;1.0.0&lt;/code&gt;. As before, you might need to wait for the container to download.&lt;/p&gt;

&lt;div class=&quot;row&quot;&gt;
  &lt;div class=&quot;col-lg-6 col-lg-push-3 col-md-6 col-md-push-3 col-sm-6 col-sm-push-3 col-xs-12&quot;&gt;&lt;img src=&quot;/assets/images/media/example-v1.png&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h3 id=&quot;start-version-2.0.0&quot;&gt;Start Version 2.0.0&lt;/h3&gt;

&lt;p&gt;Suppose that we&amp;#39;ve just implemented a great new feature (a blue background!) and we&amp;#39;re ready to deploy it. First, build and push the updated image to the docker index. Since we&amp;#39;re using the public index this has already been done for you, but here are the commands used:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;docker build -t coreos/example:2.0.0 .
docker push coreos/example:2.0.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Next, we need to launch units that refer to the &lt;code&gt;2.0.0&lt;/code&gt; tag:&lt;/p&gt;

&lt;h4 id=&quot;example-v2.0.0-a.service&quot;&gt;example-v2.0.0-A.service&lt;/h4&gt;

&lt;p&gt;All references to 1.0.0 have been changed to 2.0.0 and the port has been incremented to allow 1.0.0 and 2.0.0 units to run on the same machine.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[Unit]
Description=Example 2.0.0
After=docker.service

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill example-2A
ExecStartPre=-/usr/bin/docker rm example-2A
ExecStartPre=/usr/bin/docker pull coreos/example:2.0.0
ExecStart=/usr/bin/docker run --rm --name example-2A -p 8086:80 coreos/example:2.0.0
ExecStop=/usr/bin/docker kill example-2A

[X-Fleet]
X-Conflicts=example-v2.0.0-*.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now, start the 2.0.0 units with fleet:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ fleetctl start example-v2.0.0-{A,B}.service mixed-register-v2.0.0-{A,B}.service
Job mixed.example.1.service scheduled to 99375570.../54.81.79.219
Job mixed.example.2.service scheduled to 5dae80fd.../184.73.78.150
Job mixed.register.1.service scheduled to 99375570.../54.81.79.219
Job mixed.register.2.service scheduled to 5dae80fd.../184.73.78.150
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In your browser you should now see the background alternate between red and blue since we&amp;#39;re now running both versions of our container concurrently.&lt;/p&gt;

&lt;div class=&quot;row&quot;&gt;
  &lt;div class=&quot;col-lg-6 col-lg-push-3 col-md-6 col-md-push-3 col-sm-6 col-sm-push-3 col-xs-12&quot;&gt;&lt;img src=&quot;/assets/images/media/example-mixed.gif&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h3 id=&quot;stopping-version-1.0.0&quot;&gt;Stopping Version 1.0.0&lt;/h3&gt;

&lt;p&gt;To complete our deployment, destroy the old units with fleet:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ fleetctl destroy example-v1.0.0-{A,B}.service mixed-register-v1.0.0-{A,B}.service
Destroyed Job example-v1.0.0-A.service
Destroyed Job example-v1.0.0-B.service
Destroyed Job mixed-register-v1.0.0-A.service
Destroyed Job mixed-register-v1.0.0-B.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Load up the browser a few more times and you should only see the blue background. Our deployment from 1.0.0 &amp;rarr; 2.0.0 is now complete. To clean up before our next example, destroy the remaining units and remove all of the state from etcd:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ fleetctl destroy example* mixed-register*
Destroyed Job example-v1.0.0-A.service
Destroyed Job example-v1.0.0-B.service
Destroyed Job example-v2.0.0-A.service
Destroyed Job example-v2.0.0-B.service
Destroyed Job mixed-register-v1.0.0-A.service
Destroyed Job mixed-register-v1.0.0-B.service
Destroyed Job mixed-register-v2.0.0-A.service
Destroyed Job mixed-register-v2.0.0-B.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ etcdctl rm /vulcand --recursive
Cannot print key [/vulcand: Is a directory]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;scenario-2:-rapid-switch-to-new-version&quot;&gt;Scenario 2: Rapid Switch to New Version&lt;/h3&gt;

&lt;p&gt;Another common deployment scenario is the need to rapidly switch from one version of your frontend to another. For this scenario we&amp;#39;re going to use the same primary units, but different registration sidekicks for 2.0.0. Instead of registering to the same endpoint, we&amp;#39;re going to create one with a different name, &lt;code&gt;example2&lt;/code&gt;. Since we need to switch upstreams after our new containers have been deployed, that line has been omitted from our sidekicks.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/vulcan-2-upstreams.png&quot; alt=&quot;Multiple Vulcan Upstreams&quot;&gt;&lt;/p&gt;

&lt;h4 id=&quot;switch-register-v1.0.0-a.service&quot;&gt;switch-register-v1.0.0-A.service&lt;/h4&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[Unit]
Description=Register for Example
BindsTo=example-v1.0.0-A.service
After=example-v1.0.0-A.service

[Service]
EnvironmentFile=/etc/environment
RemainAfterExit=yes
ExecStart=/bin/sh -c &amp;quot;/bin/etcdctl set \&amp;quot;/vulcand/upstreams/example/endpoints/switch-register-v1.0.0-A.service\&amp;quot; http://$COREOS_PUBLIC_IPV4:8085; \
  /bin/etcdctl set \&amp;quot;/vulcand/hosts/example.com/locations/home/path\&amp;quot; &amp;#39;/.*&amp;#39;; \
  /bin/etcdctl set /vulcand/hosts/example.com/locations/home/upstream example&amp;quot;
ExecStop=/bin/sh -c &amp;quot;/bin/etcdctl rm /vulcand/upstreams/example/endpoints/switch-register-v1.0.0-A.service&amp;quot;

[X-Fleet]
X-ConditionMachineOf=example-v1.0.0-A.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;start-version-1.0.0&quot;&gt;Start Version 1.0.0&lt;/h3&gt;

&lt;p&gt;Start the units with fleet:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ fleetctl start example-v1.0.0-{A,B}.service switch-register-v1.0.0-{A,B}.service
Job mixed.example.1.service scheduled to 99375570.../54.81.79.219
Job mixed.example.2.service scheduled to 5dae80fd.../184.73.78.150
Job mixed.register.1.service scheduled to 99375570.../54.81.79.219
Job mixed.register.2.service scheduled to 5dae80fd.../184.73.78.150
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You should see a red background in your browser as the requests are sent to each backend:&lt;/p&gt;

&lt;div class=&quot;row&quot;&gt;
  &lt;div class=&quot;col-lg-6 col-lg-push-3 col-md-6 col-md-push-3 col-sm-6 col-sm-push-3 col-xs-12&quot;&gt;&lt;img src=&quot;/assets/images/media/example-v1.png&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h3 id=&quot;start-version-2.0.0&quot;&gt;Start Version 2.0.0&lt;/h3&gt;

&lt;p&gt;Now start the 2.0.0 units:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ fleetctl start example-v2.0.0-{A,B}.service switch-register-v2.0.0-{A,B}.service
Job mixed.example.1.service scheduled to 99375570.../54.81.79.219
Job mixed.example.2.service scheduled to 5dae80fd.../184.73.78.150
Job mixed.register.1.service scheduled to 99375570.../54.81.79.219
Job mixed.register.2.service scheduled to 5dae80fd.../184.73.78.150
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Since we haven&amp;#39;t switched the upstream yet, you should still see the red background.&lt;/p&gt;

&lt;h3 id=&quot;switch-the-upstream&quot;&gt;Switch the Upstream&lt;/h3&gt;

&lt;p&gt;We need to tell vulcand to reconfigure to use our set of 2.0.0 servers. We do this by switching the upstream by changing the key in etcd. Remember to use the correct hostname:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ etcdctl set /vulcand/hosts/vulcan.test.company.com/locations/home/upstream example2
example2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You should now see a blue background as all traffic is shifted to our new containers. The switch is now complete.&lt;/p&gt;

&lt;div class=&quot;row&quot;&gt;
  &lt;div class=&quot;col-lg-6 col-lg-push-3 col-md-6 col-md-push-3 col-sm-6 col-sm-push-3 col-xs-12&quot;&gt;&lt;img src=&quot;/assets/images/media/example-v2.png&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Clean up the 1.0.0 containers:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ fleetctl destroy example-v1.0.0-{A,B}.service switch-register-v1.0.0-{A,B}.service
Destroyed Job example-v1.0.0-A.service
Destroyed Job example-v1.0.0-B.service
Destroyed Job mixed-register-v1.0.0-A.service
Destroyed Job mixed-register-v1.0.0-B.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;next-steps&quot;&gt;Next Steps&lt;/h2&gt;

&lt;p&gt;If you&amp;#39;re looking to put a system like this into production, it should be possible to achieve high availability with multiple vulcand containers behind a cloud load balancer, round-robin DNS or another common practice. More complex port management is another issue to tackle if you&amp;#39;re running many containers on your cluster.&lt;/p&gt;

&lt;h2 id=&quot;more-information&quot;&gt;More Information&lt;/h2&gt;

&lt;p&gt;To read the complete vulcand documentation, head over to the &lt;a href=&quot;https://github.com/mailgun/vulcand&quot;&gt;GitHub page&lt;/a&gt;. Be aware that the current status is &amp;quot;Moving fast, breaking things. Will be usable soon, though.&amp;quot;. More information about &lt;a href=&quot;/docs/launching-containers/launching/getting-started-with-systemd/#advanced-unit-files&quot;&gt;advanced unit files&lt;/a&gt; and &lt;a href=&quot;/docs/launching-containers/launching/fleet-example-deployment&quot;&gt;example fleet deployments&lt;/a&gt; can be found in the CoreOS docs.&lt;/p&gt;

&lt;p&gt;If you have questions, concerns or improvements to this this vulcand workflow, let us know on the &lt;a href=&quot;https://groups.google.com/forum/#!forum/coreos-user&quot;&gt;CoreOS user mailing list&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS Beta Release</title>
   <link href="https://coreos.com/blog/coreos-beta-release/"/>
   <updated>2014-05-09T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-beta-release</id>
   <content type="html">&lt;p&gt;After 150 releases and 9 months in alpha, we are excited to announce the first CoreOS beta. Starting today, we will be releasing both alpha and beta versions of CoreOS. The beta means you can expect CoreOS itself to not change in any significant way, and it should be considered close to production-ready.&lt;/p&gt;

&lt;p&gt;The beta includes a new feature, Locksmith, giving you control over the CoreOS update process, as well as a variety of bug fixes and feature enhancements.&lt;/p&gt;

&lt;h2 id=&quot;locksmith&quot;&gt;Locksmith&lt;/h2&gt;

&lt;p&gt;Locksmith gives you complete control over when CoreOS is rebooted after an update is applied. The most advanced feature is the ability to acquire a distributed lock using etcd, before a reboot is applied. This means that you can guarantee, thanks to the consensus algorithms in etcd, that only one machine at a time will be upgraded via reboot. This is critical for rolling an update to all your machines without taking down the cluster. If you use &lt;a href=&quot;/docs/launching-containers/launching/launching-containers-fleet/&quot;&gt;fleet&lt;/a&gt; for deploying services, this also means that your processes will be seamlessly migrated around the cluster as the update is performed. Since CoreOS reboots extremely fast (1-2s), you can roll a large cluster in a matter of minutes.&lt;/p&gt;

&lt;h3 id=&quot;configuring-locksmith&quot;&gt;Configuring locksmith&lt;/h3&gt;

&lt;p&gt;The easiest way to configure Locksmith is via &lt;a href=&quot;/docs/cluster-management/setup/cloudinit-cloud-config/&quot;&gt;Cloud-Config&lt;/a&gt;. The &lt;code&gt;reboot-strategy&lt;/code&gt; option determines what action Locksmith takes after an update has been applied to the system. The following strategies are supported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;reboot&lt;/strong&gt;: Reboot immediately after an update is applied. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;etcd-lock&lt;/strong&gt;: Reboot after first taking a distributed lock in etcd. This guarantees that only one host will reboot concurrently and that the cluster will remain available during the update.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;best-effort&lt;/strong&gt; - If etcd is running, &amp;quot;etcd-lock&amp;quot;, otherwise simply &amp;quot;reboot&amp;quot;. (default)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;off&lt;/strong&gt; - Do not reboot after updates are applied.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example &lt;a href=&quot;/docs/cluster-management/setup/cloudinit-cloud-config/&quot;&gt;cloud-config.yml&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;#cloud-config
coreos:
  update:
    reboot-strategy: etcd-lock
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;full-locksmith-documentation&quot;&gt;Full Locksmith Documentation&lt;/h3&gt;

&lt;p&gt;View the &lt;a href=&quot;/docs/cluster-management/setup/update-strategies/&quot;&gt;full Locksmith docs&lt;/a&gt; for more information.&lt;/p&gt;

&lt;h2 id=&quot;how-updates-work-on-coreos&quot;&gt;How Updates Work on CoreOS&lt;/h2&gt;

&lt;p&gt;CoreOS uses update channels, similar to client software applications like the &lt;a href=&quot;http://www.chromium.org/getting-involved/dev-channel&quot;&gt;Chrome browser&lt;/a&gt;. Updates are first shipped to our alpha channel, then if testing is successful, the update is promoted bit-for-bit to the beta channel. Essentially, every alpha is a release candidate for a beta, and every beta is a release candidate for a stable release. &lt;/p&gt;

&lt;p&gt;As an example of this in action, the alpha channel will soon be updated to Docker 0.11. Docker 0.10 is still on the beta channel, but will be promoted to 0.11 once our alpha testing has been completed. In general, we expect beta to lag behind alpha by approximately one week. If you want the latest features, use the alpha. If you want stability and feature completeness, use the beta.&lt;/p&gt;

&lt;h3 id=&quot;switching-channels&quot;&gt;Switching Channels&lt;/h3&gt;

&lt;p&gt;If you&amp;#39;re getting closer to running CoreOS in production (and some of you already are), you&amp;#39;re probably wondering how to switch your alpha channel machines over to the beta channel. It&amp;#39;s really easy and we&amp;#39;ve got a quick &lt;a href=&quot;/docs/cluster-management/setup/switching-channels/&quot;&gt;Switching Release Channels guide&lt;/a&gt; for you. As you&amp;#39;re booting new machines, be sure to base them off your desired channel from the beginning.&lt;/p&gt;

&lt;h2 id=&quot;roadmap-to-stable&quot;&gt;Roadmap to Stable&lt;/h2&gt;

&lt;p&gt;Today&amp;#39;s beta release gets us much closer to a stable, production-ready version of CoreOS. The primary work before the stable release is focused on stability of fleet and etcd. Do not expect any major new features - more likely the removal of unused ones.&lt;/p&gt;

&lt;h2 id=&quot;new-coreos-user-mailing-list&quot;&gt;New coreos-user Mailing List&lt;/h2&gt;

&lt;p&gt;Primary discussion of CoreOS will move to the new &lt;a href=&quot;https://groups.google.com/forum/#!forum/coreos-user&quot;&gt;coreos-user&lt;/a&gt; list, and we invite you to join us there for discussion and questions around using CoreOS. CoreOS development discussion will remain on the existing &lt;a href=&quot;https://groups.google.com/forum/#!forum/coreos-dev&quot;&gt;coreos-dev&lt;/a&gt; list. &lt;/p&gt;

&lt;p&gt;Finally, thank you to the incredible community that has grown with CoreOS. We are committed to making CoreOS the best platform of its kind, and could not do it without the help from all of our alpha testers. &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Clustering CoreOS with Vagrant</title>
   <link href="https://coreos.com/blog/coreos-clustering-with-vagrant/"/>
   <updated>2014-04-24T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-clustering-with-vagrant</id>
   <content type="html">&lt;p&gt;When you&amp;#39;re first exposed to a distributed platform like CoreOS, running a development environment that is complex enough to match production seems like an impossible task. This article is going to show you how convienient it is run a small CoreOS cluster on your local machine with Vagrant that will mirror the way your production machines are set up.&lt;/p&gt;

&lt;p&gt;CoreOS&amp;#39;s implementation of cloud-init, &lt;a href=&quot;https://github.com/coreos/coreos-cloudinit&quot;&gt;coreos-cloudinit&lt;/a&gt;, makes it super easy to bootstrap a cluster of CoreOS machines by providing a mechanism for initial machine configuration. The same file can be used to bootstrap CoreOS on Vagrant, Amazon EC2, Google Compute Engine (GCE), and more, making it easy to share the same configuration locally and in production.&lt;/p&gt;

&lt;p&gt;This article will focus on Vagrant for a fast, simple deploy on your local machine.&lt;/p&gt;

&lt;h2 id=&quot;getting-set-up&quot;&gt;Getting Set Up&lt;/h2&gt;

&lt;p&gt;Before we get started make sure that you have recent versions of &lt;a href=&quot;https://www.virtualbox.org/wiki/Downloads&quot;&gt;Virtualbox&lt;/a&gt;, &lt;a href=&quot;https://www.vagrantup.com/downloads.html&quot;&gt;Vagrant&lt;/a&gt; and &lt;a href=&quot;http://git-scm.com/download&quot;&gt;git&lt;/a&gt; installed on your machine.&lt;/p&gt;

&lt;p&gt;Now that your local machine is set up for Vagrant, let&amp;#39;s grab the CoreOS Vagrant configuration and customize the cloud-config &amp;quot;user-data&amp;quot; file. On OpenStack, EC2 or GCE this would be the same user-data you can provide when starting a virtual machine.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ git clone https://github.com/coreos/coreos-vagrant
$ cd coreos-vagrant
$ cp user-data.sample user-data
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;configure-user-data&quot;&gt;Configure User-Data&lt;/h2&gt;

&lt;p&gt;Now, generate a new etcd discovery URL with the initial size of your cluster. etcd uses this URL to bootstrap your cluster and wire the new machines together. You can read the details on how this works by visiting &lt;a href=&quot;https://discovery.etcd.io&quot;&gt;https://discovery.etcd.io&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ curl https://discovery.etcd.io/new?size=3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;After running this command you will get out a new private discovery URL that looks something like &lt;code&gt;https://discovery.etcd.io/&amp;lt;token&amp;gt;&lt;/code&gt;. Take this token and put it in the relevant section of the user-data file using your favorite text editor. When you are done the top of the user-data file should look like this:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;#cloud-config

coreos:
  etcd:
    discovery: https://discovery.etcd.io/&amp;lt;token&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;start-the-cluster&quot;&gt;Start the Cluster&lt;/h2&gt;

&lt;p&gt;By default, the CoreOS Vagrantfile will start a single machine. To start a cluster, we need to copy and modify the &lt;code&gt;config.rb.sample&lt;/code&gt; file:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;cp config.rb.sample config.rb
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Uncomment the line containing &lt;code&gt;num_instances&lt;/code&gt; and change it to 3 or more. Now we&amp;#39;re ready to start the VMs:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ vagrant up
Bringing machine &amp;#39;core-01&amp;#39; up with &amp;#39;virtualbox&amp;#39; provider...
Bringing machine &amp;#39;core-02&amp;#39; up with &amp;#39;virtualbox&amp;#39; provider...
Bringing machine &amp;#39;core-03&amp;#39; up with &amp;#39;virtualbox&amp;#39; provider...
==&amp;gt; core-01: Box &amp;#39;coreos-alpha&amp;#39; could not be found. Attempting to find and install...
    core-01: Box Provider: virtualbox
    core-01: Box Version: &amp;gt;= 0
==&amp;gt; core-01: Adding box &amp;#39;coreos-alpha&amp;#39; (v0) for provider: virtualbox
    core-01: Downloading: http://storage.core-os.net/coreos/amd64-usr/alpha/coreos_production_vagrant.box
    core-01: Progress: 46% (Rate: 6105k/s, Estimated time remaining: 0:00:16)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Vagrant will now download the latest CoreOS image and configure the VMs. You can ignore the warning about guest additions, everything will work just fine.&lt;/p&gt;

&lt;p&gt;After the vagrant command returns it is time to ssh into one of your instances and try out a few commands. The only trick is that we will want to add the Vagrant key to our ssh-agent using &lt;code&gt;ssh-add&lt;/code&gt;. This allows us to forward our SSH session to other machines in the cluster. You can do this with any key, such as those added via cloud-config, but our vagrant machines will already have the corresponding public key on disk.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ ssh-add ~/.vagrant.d/insecure_private_key
Identity added: /Users/CoreOS/.vagrant.d/insecure_private_key (/Users/CoreOS/.vagrant.d/insecure_private_key)
$ vagrant ssh core-01 -- -A
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;testing-out-the-cluster&quot;&gt;Testing Out the Cluster&lt;/h2&gt;

&lt;p&gt;Now lets make sure that all of our machines came up and are set up with fleet.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ fleetctl list-machines
MACHINE   IP            METADATA
517d1c7d... 172.17.8.101  -
cb35b356... 172.17.8.103  -
17040743... 172.17.8.102  -
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And try setting a key into etcd which will be reflected on another machine in the cluster. We can run commands on other machines in the cluster by using &lt;code&gt;fleetctl ssh&lt;/code&gt; and address them by the ID that is listed from list-machines. Be sure to replace the ID with an actual value from your list-machines:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ etcdctl set first-etcd-key &amp;quot;Hello World&amp;quot;
Hello World
$ fleetctl ssh cb35b356 etcdctl get first-etcd-key
Hello World
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;There is a &lt;a href=&quot;http://coreos.com/docs/launching-containers/launching/launching-containers-fleet/&quot;&gt;ton of functionality&lt;/a&gt; inside of fleet that won&amp;#39;t be covered in this blog, but as our final task of trying out our new cluster let&amp;#39;s schedule a job. Create a file called &lt;code&gt;hello-fleet.service&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ cat &amp;gt; hello-fleet.service
[Service]
ExecStart=/usr/bin/bash -c &amp;quot;while true; do echo &amp;#39;Hello Fleet&amp;#39;; sleep 1; done&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now tell fleet to start this service:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ fleetctl start hello-fleet.service
Job hello-fleet.service scheduled to 517d1c7d.../172.17.8.101
$ fleetctl list-units
UNIT      LOAD  ACTIVE  SUB DESC  MACHINE
hello-fleet.service loaded  active  running - 517d1c7d.../172.17.8.101
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;start-using-your-cluster&quot;&gt;Start Using Your Cluster&lt;/h2&gt;

&lt;p&gt;You now have a powerful little cluster on your laptop, complete with job scheduling, a distributed data store and a self-updating operating system. From here it is a choose-your-adventure of exploring &lt;a href=&quot;http://coreos.com/docs/launching-containers/launching/launching-containers-fleet/&quot;&gt;fleet&lt;/a&gt; and &lt;a href=&quot;http://coreos.com/docs/cluster-management/setup/getting-started-with-etcd/&quot;&gt;etcd&lt;/a&gt; using the guides that we have put together.&lt;/p&gt;

&lt;p&gt;And stay tuned for more blog posts that will outline how to use CoreOS and user-data to bootstrap clusters on other platforms.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>etcd - The Road to 1.0</title>
   <link href="https://coreos.com/blog/etcd-The-Road-to-1.0/"/>
   <updated>2014-04-14T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/etcd-The-Road-to-1.0</id>
   <content type="html">&lt;p&gt;Over the last few months the extent of community involvement and adoption of etcd has surpassed all our expectations. We wanted to take this opportunity to share with the wider community our plan for the ongoing development of etcd.&lt;/p&gt;

&lt;p&gt;We want etcd to be a stable base for you to build distributed systems that are resilient to failures.  Users of etcd should find things consistent and predictable, and client libraries should not need to be updated for years. In short, we need to get to 1.0, and this is clearly not where etcd is today.&lt;/p&gt;

&lt;p&gt;We want to release etcd 1.0 later this year. This will require some significant changes which we have anticipated but, until now, specifically resisted the temptation to implement, so that we could maintain focus on working through complex, bigger picture problems. &lt;/p&gt;

&lt;p&gt;Now that etcd has been baking in many production environments for some time, we’re ready to start forging ahead towards our 1.0 goal.  At CoreOS, we ramped up the development team dedicated to the project. In the coming releases we will be focusing on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Efficiency&lt;/em&gt; - reduce CPU, memory, and network usage&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Scalability&lt;/em&gt; - run an arbitrary number of nodes in a cluster so nodes not participating in consensus can take over for downed peers&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Reliability&lt;/em&gt; - we want etcd to run in many different types of environments while maintaining its guarantees&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Testing&lt;/em&gt; - there is more to do here in terms of simulating network failures and fuzzing our system.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;next-step:-0.4&quot;&gt;Next step: 0.4&lt;/h2&gt;

&lt;p&gt;Our upcoming release, etcd 0.4, adds a new feature, standby mode. It is an important first step in allowing etcd clusters to grow beyond just the peers that participate in consensus. This feature still needs work but we need your help testing it today. Additionally, we have bug fixes and other features that have landed. More details on this release when it ships soon.&lt;/p&gt;

&lt;p&gt;If you have any questions, concerns, or want to participate in the roadmap of etcd 1.0, please get involved on github and join the mailing list where we will be posting regular, detailed updates.&lt;/p&gt;

&lt;p&gt;GitHub:&lt;br/&gt;
&lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;https://github.com/coreos/etcd&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mailing List:&lt;br/&gt;
&lt;a href=&quot;https://groups.google.com/forum/#!forum/etcd-dev&quot;&gt;https://groups.google.com/forum/#!forum/etcd-dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cheers,&lt;br/&gt;
The etcd team @ CoreOS&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Major Update: btrfs, docker 0.9, add users, writable /etc, and more!</title>
   <link href="https://coreos.com/blog/new-filesystem-btrfs-cloud-config/"/>
   <updated>2014-03-27T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/new-filesystem-btrfs-cloud-config</id>
   <content type="html">&lt;p&gt;We locked the CoreTeam in a house for a week to make this release extra special. Here are all the new features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New filesystem layout, writeable &lt;code&gt;/etc/&lt;/code&gt;, read-only &lt;code&gt;/usr/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.docker.io/2014/03/docker-0-9-introducing-execution-drivers-and-libcontainer/&quot;&gt;Docker 0.9&lt;/a&gt; (with btrfs support!)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://btrfs.wiki.kernel.org/index.php/Main_Page&quot;&gt;btrfs&lt;/a&gt; stateful/root filesystem&lt;/li&gt;
&lt;li&gt;Networking configured via &lt;a href=&quot;/blog/intro-to-systemd-networkd/&quot;&gt;networkd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/coreos/coreos-cloudinit/&quot;&gt;CoreOS CloudInit&lt;/a&gt;, which enables boot time configuration of the following:

&lt;ul&gt;
&lt;li&gt;Adding unix users (setting ssh keys, passwords, or import your ssh keys from github!)&lt;/li&gt;
&lt;li&gt;Write and control systemd units (start/stop, add a unit)&lt;/li&gt;
&lt;li&gt;Auto etcd bootstrapping on all platforms&lt;/li&gt;
&lt;li&gt;Write files to arbitrary locations&lt;/li&gt;
&lt;li&gt;Set up networking with networkd&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To date, we&amp;#39;ve successfully pushed 38 versions of CoreOS out via our &lt;a href=&quot;/using-coreos/updates&quot;&gt;update service&lt;/a&gt;. Because of the filesystem switch, it&amp;#39;s not possible to release these changes as an update. We will be providing new images for all platforms and have &lt;a href=&quot;/docs/running-coreos/cloud-providers/ec2&quot;&gt;Amazon EC2&lt;/a&gt; , &lt;a href=&quot;/docs/running-coreos/cloud-providers/google-compute-engine&quot;&gt;Google Compute Engine&lt;/a&gt;, &lt;a href=&quot;/docs/running-coreos/platforms/openstack&quot;&gt;Openstack&lt;/a&gt; and &lt;a href=&quot;/docs/running-coreos/platforms/vagrant&quot;&gt;Vagrant&lt;/a&gt; images available today.&lt;/p&gt;

&lt;p&gt;These new images represent the first release on a path that ends at a stable, production-ready CoreOS. &lt;/p&gt;

&lt;h2 id=&quot;new-filesystem-layout&quot;&gt;New filesystem layout&lt;/h2&gt;

&lt;p&gt;The largest change was modifying our read-only root file system. In the current images, directories like &lt;code&gt;/etc&lt;/code&gt; reside on the read-only partition because they contained parts of the OS that needed to stay in a known state in order to &lt;a href=&quot;/using-coreos/updates&quot;&gt;update them safely&lt;/a&gt;. We undertook a large effort to move all of these files into &lt;code&gt;/usr&lt;/code&gt;, which now contains all of the critical files needed to operate the OS and is the only read-only portion of the filesystem. Every package that expected a hard-coded path to a file in &lt;code&gt;/etc&lt;/code&gt; has been modified and moved into &lt;code&gt;/usr&lt;/code&gt;. If you would like to provide your own version of a file that resided in &lt;code&gt;/etc&lt;/code&gt;, you can now place it there and the OS will use it, instead of the one we provide by default.&lt;/p&gt;

&lt;p&gt;With this change, systemd unit files now live in the standard location in &lt;code&gt;/etc/systemd/system&lt;/code&gt; instead of within &lt;code&gt;/media/state/units&lt;/code&gt;. When creating a unit, you can simply run &lt;code&gt;systemctl enable foo.service&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;docker-0.9-and-btrfs&quot;&gt;Docker 0.9 and btrfs&lt;/h2&gt;

&lt;p&gt;CoreOS now supports &lt;a href=&quot;http://blog.docker.io/2014/03/docker-0-9-introducing-execution-drivers-and-libcontainer/&quot;&gt;Docker 0.9&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;With the switch to a read-only &lt;code&gt;/usr/&lt;/code&gt;, we also switched the rest of the filesystem to btrfs. This means you can now use Docker 0.9 with btrfs (which is much faster!), and any other native btrfs tools you might need (snapshotting, replication, etc). One unfortunate side effect of this change is that all Docker containers will need to be reinitialized on CoreOS (docker pull, or docker build). Docker does not provide any mechanisms to migrate between AUFS and btfs. We do not expect needing to make breaking changes like this again in the future.&lt;/p&gt;

&lt;p&gt;As a result of a read/write &lt;code&gt;/etc/&lt;/code&gt;, you can now easily modify &lt;code&gt;docker.service&lt;/code&gt; to enable the &lt;a href=&quot;/docs/launching-containers/building/customizing-docker&quot;&gt;docker remote api&lt;/a&gt; or tweak any other flags you wish. You can overwrite this file on disk manually or modify it on boot with cloud-config, as introduced below.&lt;/p&gt;

&lt;h2 id=&quot;coreos-cloudinit-and-cloud-config.yml&quot;&gt;CoreOS CloudInit and cloud-config.yml&lt;/h2&gt;

&lt;p&gt;All CoreOS platforms going forward will use &lt;a href=&quot;https://github.com/coreos/coreos-cloudinit/&quot;&gt;CoreOS CloudInit&lt;/a&gt; and the accompanying cloud-config.yml to configure the OS while it boots. Our goal is for you to be able to use the same cloud-config.yml to bootstrap CoreOS on any mix of platforms. &lt;/p&gt;

&lt;p&gt;Example &lt;code&gt;cloud-config.yml&lt;/code&gt; configuration file:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;#cloud-config

coreos:
  etcd:
    # generate a new token for each unique cluster from https://discovery.etcd.io/new?size=3
    # specify the intial size of your cluster with ?size=X
    discovery: https://discovery.etcd.io/&amp;lt;token&amp;gt;
    addr: $private_ipv4:4001
    peer-addr: $private_ipv4:7001
  units:
    - name: etcd.service
      command: start
    - name: fleet.service
      command: start
    - name: my-container.service
      command: start
      content: |
        [Service]
        ExecStart=/usr/bin/docker run busybox /bin/sh -c &amp;quot;while true; do echo Hello World; sleep 1; done&amp;quot;
users:
  - name: core
    ssh-authorized-keys: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0g+ZTxC7weoIJLUafOgrm+h...
  - name: penny
    coreos-ssh-import-github: bcwaldon
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This cloud-config.yml tells &lt;a href=&quot;https://github.com/coreos/coreos-cloudinit/&quot;&gt;CloudInit&lt;/a&gt; to use do the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use given etcd discovery token to auto-bootstrap the etcd cluster (&lt;code&gt;$private_ip&lt;/code&gt; is automatically configured per platform, and swapped out with the real value)&lt;/li&gt;
&lt;li&gt;Set the &amp;quot;core&amp;quot; unix users authorized_keys to the given key&lt;/li&gt;
&lt;li&gt;Start CoreOS distributed &lt;a href=&quot;https://github.com/coreos/fleet&quot;&gt;fleet&lt;/a&gt; service&lt;/li&gt;
&lt;li&gt;Create a systemd unit &amp;quot;my-container.service&amp;quot; and start it&lt;/li&gt;
&lt;li&gt;Create the user &amp;quot;penny&amp;quot; and set the ~/.ssh/authorized_keys to the same public keys as the github user &amp;quot;bcwaldon&amp;quot; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The exact same cloud-config.yml can be specified on any platform that CoreOS supports. For example, on Amazon, you would paste it into your user-data. On OpenStack, you use config-drive, but can place the identical cloud-config.yml you pasted into Amazon user-data. CloudInit also used during our &lt;a href=&quot;/docs/sdk-distributors/distributors/notes-for-distributors&quot;&gt;OEM/distribution process&lt;/a&gt; to &lt;a href=&quot;/docs/cluster-management/setup/network-config-with-networkd/&quot;&gt;configure networking with networkd&lt;/a&gt; and other settings per platform (depricating the &lt;code&gt;/run&lt;/code&gt; convention).&lt;/p&gt;

&lt;p&gt;Learn more about &lt;code&gt;cloud-config.yml&lt;/code&gt;: &lt;a href=&quot;/docs/cluster-management/setup/cloudinit-cloud-config&quot;&gt;Reference docs for all supported cloud-config.yml directives&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The CoreOS alpha will still be a bit bumpy as we slim things down and make final tweaks to the alpha. However, the release puts us on the critical path to a beta, and a subsequent stable release in the next few weeks. We&amp;#39;ll be updating all of the documentation over the next few days and release new images to support for the rest of our platforms.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Dynamic Docker links with an ambassador powered by etcd</title>
   <link href="https://coreos.com/blog/docker-dynamic-ambassador-powered-by-etcd/"/>
   <updated>2014-02-27T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/docker-dynamic-ambassador-powered-by-etcd</id>
   <content type="html">&lt;p&gt;The ambassador pattern is a novel way to deploy sets of containers that are configured at runtime via the &lt;a href=&quot;http://docs.docker.io/en/latest/use/ambassador_pattern_linking/&quot;&gt;Docker Links&lt;/a&gt; feature. &lt;/p&gt;

&lt;p&gt;In this proof of concept demo, we demonstrate deploying a redis instance that is registered with etcd. This demo is similar to the &lt;a href=&quot;http://docs.docker.io/en/latest/use/ambassador_pattern_linking/&quot;&gt;documented redis example for Docker links&lt;/a&gt;, except distributed across multiple hosts. A redis client will be linked with a redis server, regardless of what physical host either is hosted on, using a dynamic proxy that is reading the registration data off of etcd. The end goal is to be able to arbitrary deploy all of these containers using &lt;a href=&quot;https://github.com/coreos/fleet&quot;&gt;fleet&lt;/a&gt; and everything will be configured at runtime. 
&lt;img src=&quot;/assets/images/media/etcd-ambassador-flow.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;p&gt;We will need the following set of containers to make all this happen. &lt;/p&gt;

&lt;p&gt;Host A:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;crosbymichael/redis&lt;/strong&gt; - An off-the-shelf redis server. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;polvi/docker-register&lt;/strong&gt; - A docker/etcd registration container. This container will read off of the docker API and publish data to etcd. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;polvi/simple-amb&lt;/strong&gt; - This is a very simple ambassador that will forward traffic to the configured location passed via an arg. This is used to Link the docker registration container with etcd. This container could be removed on CoreOS, because etcd is at a known location, but is used for the purposes of demonstrating static versus dynamic ambassadors. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Host B:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;polvi/dynamic-etcd-amb&lt;/strong&gt; - This is where the magic happens. This is a dynamic proxy, powered by etcd, that watches a known etcd key and routes traffic to the container registered at the key. The key can change at runtime, and the proxy will update itself. If multiple instances are registered to the key space, the ambassador will start load balancing traffic to both containers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;relateiq/redis-cli&lt;/strong&gt; - This is an off-the-shelf redis client for purposes of demonstrating the etcd powered ambassador. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The net result will look something like this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/etcd-ambassador-hosts.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;

&lt;h2 id=&quot;preparing-for-fleet&quot;&gt;Preparing for fleet&lt;/h2&gt;

&lt;p&gt;In order to deploy these set of containers, we will write a group of &lt;a href=&quot;http://www.freedesktop.org/software/systemd/man/systemd.service.html&quot;&gt;systemd service files&lt;/a&gt; that are &lt;a href=&quot;https://github.com/coreos/fleet&quot;&gt;fleet&lt;/a&gt; aware. This will allow us to deploy a whole set of containers and let them be scheduled arbitrary across the cluster of CoreOS hosts. These service files are re-usable on non-CoreOS systemd distros, assuming that docker is installed. &lt;/p&gt;

&lt;p&gt;The easiest way to test this yourself is to spin up a CoreOS cluster &lt;a href=&quot;http://coreos.com/docs/running-coreos/cloud-providers/ec2/&quot;&gt;on EC2&lt;/a&gt; using our Cloud Formation &amp;quot;launch now&amp;quot; button.&lt;/p&gt;

&lt;h2 id=&quot;example-service-files&quot;&gt;Example service files&lt;/h2&gt;

&lt;p&gt;Below is a set of service files corresponding to the containers mentioned above, to be deployed via fleet, and supervised with systemd.&lt;/p&gt;

&lt;h3 id=&quot;host-a-units&quot;&gt;Host-A units&lt;/h3&gt;

&lt;h4 id=&quot;redis-demo.service&quot;&gt;redis-demo.service&lt;/h4&gt;

&lt;p&gt;An off-the-shelf redis server.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[Service]
ExecStartPre=-/usr/bin/docker kill %n
ExecStartPre=-/usr/bin/docker rm %n
ExecStart=/bin/bash -c &amp;quot;HOST_IP=$(/bin/ifconfig eth0 | awk &amp;#39;/inet /{print $2}&amp;#39;) &amp;amp;&amp;amp; exec /usr/bin/docker run -rm -name %n -p $HOST_IP::6379 crosbymichael/redis&amp;quot;
ExecStop=/usr/bin/docker stop -t 3 %n
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This container uses a bash trick to get the IP from eth0. We need this because we are going to look-up the IP/port combination and register it with etcd using the &lt;code&gt;docker port&lt;/code&gt; command. By default, 0.0.0.0 will be registered if no IP is specified. This will not work as we need to know the network address of the host that is running the container. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: you will need to expose the 49000-50000 port range in your EC2 security group, if you are using our cloud formation.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We use the systemd %n variable to name the container the same as the systemd unit, in this case &lt;code&gt;redis-demo.service&lt;/code&gt;. This is important for the registration of the container with etcd.&lt;/p&gt;

&lt;h4 id=&quot;etcd-amb-redis.service&quot;&gt;etcd-amb-redis.service&lt;/h4&gt;

&lt;p&gt;A simple ambassador needed to give our registration container access to etcd.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[Service]
ExecStartPre=-/usr/bin/docker kill %n
ExecStartPre=-/usr/bin/docker rm %n
ExecStartPre=-/usr/bin/docker pull polvi/simple-amb
ExecStart=/usr/bin/docker run -rm -name %n polvi/simple-amb 172.17.42.1:4001
ExecStop=/usr/bin/docker stop -t 3 %n

[X-Fleet]
X-ConditionMachineOf=redis-demo.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;polvi/simple-amb&lt;/code&gt; will forward all traffic it gets on port 10000 to the argument provided. In this case, 172.17.42.1:4001 is the known address for etcd on every CoreOS instance from inside of a Docker container-- we we simply statically forward all traffic there. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;X-ConditionMachineOf&lt;/code&gt; tells fleet to schedule this systemd unit to the same machine as wherever &lt;code&gt;redis-demo.service&lt;/code&gt; gets scheduled to. You can read more docs on the &lt;code&gt;X-Fleet&lt;/code&gt; section over on the &lt;a href=&quot;https://github.com/coreos/fleet/blob/master/Documentation/scheduling.md&quot;&gt;fleet docs&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id=&quot;redis-docker-reg.service&quot;&gt;redis-docker-reg.service&lt;/h4&gt;

&lt;p&gt;A container that reads port information off the docker API, and heartbeats it to etcd. &lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[Unit]
After=etcd-amb-redis.service

[Service]
ExecStart=/usr/bin/docker run -link etcd-amb-redis.service:etcd -v /var/run/docker.sock:/var/run/docker.sock -rm polvi/docker-register redis-demo.service 6379 redis-A

[X-Fleet]
X-ConditionMachineOf=redis-demo.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This launches the &lt;code&gt;polvi/docker-register&lt;/code&gt; container, as described above, that will read the IP and port information off of the docker API and publish that data to etcd under the service name of &lt;code&gt;redis-A&lt;/code&gt;. There are two important aspect of this container. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It requires an etcd to publish to, so we -link in the simple ambassador pointing to etcd. &lt;/li&gt;
&lt;li&gt;It talks to the host docker instance, so we use a docker volume to bind mount in the host docker.sock into the container. Note, this gives the container full control of the host dockerd! This is a security issue, but required for the container to read and then publish the port that was assigned by docker. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This unit also has a &lt;code&gt;X-ConditionMachineOf&lt;/code&gt; to schedule it to the same machine as &lt;code&gt;redis-demo.service&lt;/code&gt;. Finally, we use the &lt;code&gt;After&lt;/code&gt; systemd directive to make sure the process is started after &lt;code&gt;etcd-amb-redis.service&lt;/code&gt; (on the same machine) to make sure that it has a etcd to talk to when it is launched. &lt;/p&gt;

&lt;h3 id=&quot;host-b-units&quot;&gt;Host-B units&lt;/h3&gt;

&lt;h4 id=&quot;etcd-amb-redis2.service&quot;&gt;etcd-amb-redis2.service&lt;/h4&gt;

&lt;p&gt;A second simple etcd ambassador container, scheduled via fleet on a different host than &lt;code&gt;redis-demo.service&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[Service]
ExecStartPre=-/usr/bin/docker kill %n
ExecStartPre=-/usr/bin/docker rm %n
ExecStart=/usr/bin/docker run -rm -name %n polvi/simple-amb 172.17.42.1:4001
ExecStop=/usr/bin/docker stop -t 3 %n

[X-Fleet]
X-Conflicts=redis-demo.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This unit uses the fleet directive, &lt;code&gt;X-Conflicts&lt;/code&gt;, to make sure that it gets scheduled to a host that is not the same as where &lt;code&gt;redis-demo.service&lt;/code&gt; was scheduled, guaranteeing these containers will be on two different hosts.&lt;/p&gt;

&lt;h4 id=&quot;redis-dyn-amb.service&quot;&gt;redis-dyn-amb.service&lt;/h4&gt;

&lt;p&gt;The etcd powered dynamic ambassador!&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[Unit]
After=etcd-amb-redis2.service

[Service]
ExecStartPre=-/usr/bin/docker kill %n
ExecStartPre=-/usr/bin/docker rm %n
ExecStart=/usr/bin/docker run -link etcd-amb-redis2.service:etcd -rm -name %n -p 127.0.0.1::6379 polvi/dynamic-etcd-amb redis-A 6379
ExecStop=/usr/bin/docker stop -t 3 %n

[X-Fleet]
X-ConditionMachineOf=etcd-amb-redis2.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This tells the proxy to expose port 6379 and point it to the service registered as &lt;code&gt;redis-A&lt;/code&gt; in etcd. &lt;code&gt;X-ConditionMachineOf&lt;/code&gt; is used again to make it it gets deployed to where our second host matching wherever &lt;code&gt;etcd-amb-redis2.service&lt;/code&gt; was deployed. &lt;/p&gt;

&lt;h2 id=&quot;deploying-and-testing-with-fleet&quot;&gt;Deploying and testing with fleet&lt;/h2&gt;

&lt;p&gt;To deploy this with fleet, we simply run &lt;code&gt;fleetctl start *.service&lt;/code&gt; in a directory containing all of these service files. All units will be scheduled across the cluster with our topology requirements in place. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: if you&amp;#39;re deploying from your laptop, you&amp;#39;ll need to use --tunnel, as specified by the &lt;a href=&quot;https://github.com/coreos/fleet/blob/master/Documentation/remote-access.md&quot;&gt;fleet remote access docs&lt;/a&gt;.&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;To test that everything worked as expected, we will ssh to the host that is running the dynamic proxy and manually interact with it using a redis client container, &lt;code&gt;relateiq/redis-cli&lt;/code&gt;, and a docker -link. &lt;/p&gt;

&lt;p&gt;This command will ssh us to the host where that service is running.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;fleetctl ssh -u redis-dyn-amb.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;From there, we launch a docker container with the redis client, on the shell:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ docker run -i -t -link redis-dyn-amb.service:redis relateiq/redis-cli
redis 172.17.0.3:6379&amp;gt; ping
PONG
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Success!&lt;/p&gt;

&lt;p&gt;From here, you would use docker links environment variables to configure your application to point to the dynamic proxy.&lt;/p&gt;

&lt;p&gt;A copy of these service files can be found at &lt;a href=&quot;https://github.com/polvi/fleet-redis-demo&quot;&gt;github.com/polvi/fleet-redis-demo&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Introduction to networkd, network management from systemd</title>
   <link href="https://coreos.com/blog/intro-to-systemd-networkd/"/>
   <updated>2014-02-25T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/intro-to-systemd-networkd</id>
   <content type="html">&lt;p&gt;As of version 210, systemd now includes support for basic network configuration through udev and &lt;a href=&quot;http://www.freedesktop.org/software/systemd/man/systemd-networkd.service.html&quot;&gt;networkd&lt;/a&gt;. CoreOS sponsored the development of networkd. It will soon be available in CoreOS, so we would like to take the opportunity to introduce some of its features.&lt;/p&gt;

&lt;h2 id=&quot;configuring-low-level-network-device-settings&quot;&gt;Configuring low-level network device settings&lt;/h2&gt;

&lt;p&gt;As an alternative to custom udev rules, udev now applies some common low-level configuration to network device as the devices appear. To specify the settings, drop &lt;code&gt;.link&lt;/code&gt; files into &lt;code&gt;/etc/systemd/network/&lt;/code&gt;. Let&amp;#39;s have a look at an example and then go through the options:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[Match]
MACAddress=12:34:56:78:9a:bc
Driver=brcmsmac
Path=pci-0000:02:00.0-*
Type=wlan
Virtualization=no
Host=my-laptop
Architecture=x86-64

[Link]
Name=wireless0
MTUBytes=1450
BitsPerSecond=10M
WakeOnLan=magic
MACAddress=cb:a9:87:65:43:21
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;[Match]&lt;/code&gt; section expresses that this file will match any wireless device with the given MAC address, using the &lt;code&gt;brmsmac&lt;/code&gt; driver and connected to the given pci bus, when running on a non-virtualized 64bit x86 machine with hostname &lt;code&gt;my-laptop&lt;/code&gt;. When such a device appears, the &lt;code&gt;[Link]&lt;/code&gt; section says that udev will rename it to &lt;code&gt;wireless0&lt;/code&gt;, change its MTU, speed and MAC address and enable Wake-On-Lan. All this happens before udev notifies the rest of userspace about the device, to avoid confusion due to, e.g., changing interface name and MAC address.&lt;/p&gt;

&lt;p&gt;Two further keys deserve special mention: When &lt;code&gt;MACAddressPolicy=persistent&lt;/code&gt; is given and the device has a random MAC address set by the kernel at boot, udev will reset it to one which is also random, but guaranteed to be the same for the given device between boots. Conversely, &lt;code&gt;MACAddressPolicy=random&lt;/code&gt; instructs udev to always reset the MAC address to a different random one on each boot. Lastly, &lt;code&gt;NamePolicy&lt;/code&gt; controls how the interface will be assigned a persistent name, if at all. It takes an ordered list of policies, and the first successful one is used to determine the name.&lt;/p&gt;

&lt;p&gt;The default &lt;code&gt;.link&lt;/code&gt; file is &lt;code&gt;/usr/lib/systemd/network/99-default.link&lt;/code&gt;. It applies to all devices and only specifies &lt;code&gt;MACAddressPolicy&lt;/code&gt; and &lt;code&gt;NamePolicy&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Unlike udev rule files, only one &lt;code&gt;.link&lt;/code&gt; file is applied to a given device. Namely the first one (in alphabetical order) that matches according to its &lt;code&gt;[Match]&lt;/code&gt; section.&lt;/p&gt;

&lt;h2 id=&quot;setting-up-network-connections&quot;&gt;Setting up network connections&lt;/h2&gt;

&lt;p&gt;A new system daemon, networkd, supports setting up some basic (and some not so basic) network configurations. The support is mostly aimed at servers and containers, so it is a great fit for CoreOS.&lt;/p&gt;

&lt;p&gt;networkd is configured using .network files, which work similarly to &lt;code&gt;.link&lt;/code&gt; files described above. The same matching logic applies, with one additional option: namely to match on the interface name, using the &lt;code&gt;Name&lt;/code&gt; key. It is worth noting that it is not safe to match on the names given by the kernel (&lt;code&gt;eth0&lt;/code&gt;, &lt;code&gt;eth1&lt;/code&gt;,...) as these may change between reboots. The only exception to warning is if you are matching on all of them with &lt;code&gt;Name=eth*&lt;/code&gt;. Also, we should note that networkd is only made aware of new network devices after udev has applied its low-level settings to them, so we can safely match on the new &lt;code&gt;MACAddress&lt;/code&gt; and &lt;code&gt;Name&lt;/code&gt; that udev has set for our device.&lt;/p&gt;

&lt;p&gt;Lets have a look at a basic &lt;code&gt;.network&lt;/code&gt; file:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[Match]
Name=en*

[Network]
DHCP=yes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This will start DHCP on each interface whose name starts with &lt;code&gt;en&lt;/code&gt;, which is the scheme used by udev&amp;#39;s naming policies to name ethernet devices.&lt;/p&gt;

&lt;p&gt;If you want to set up a static address on a specific device you could use:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[Match]
Name=enp2s0

[Network]
Address=192.168.0.15/24
Gateway=192.168.0.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Lastly, if you want to set up the static address on &lt;code&gt;enp2s0&lt;/code&gt;, and use DHCP for everything else, you would use the two above &lt;code&gt;.network&lt;/code&gt; files, but make sure they are ordered correctly. E.g., name the first one &lt;code&gt;20-dhcp.network&lt;/code&gt; and the second &lt;code&gt;10-static.network&lt;/code&gt;, to make sure the static configuration matches &lt;code&gt;enp2s0&lt;/code&gt; before the dhcp one does. As for &lt;code&gt;.link&lt;/code&gt; files, only the first matching &lt;code&gt;.network&lt;/code&gt; file is applied.&lt;/p&gt;

&lt;h2 id=&quot;bridging,-bonding-and-vlans&quot;&gt;Bridging, bonding and VLANs&lt;/h2&gt;

&lt;p&gt;The last feature of networkd I&amp;#39;d like to highlight is the support for creating and using virtual network devices.&lt;/p&gt;

&lt;p&gt;Virtual network devices are created using &lt;code&gt;.netdev&lt;/code&gt; files, which also support a limited form of the matching logic described above. More precisely, as there is no hardware to match on, they only support matching on their environment, i.e., &lt;code&gt;Virtualization&lt;/code&gt;, &lt;code&gt;Host&lt;/code&gt; and &lt;code&gt;Architecture&lt;/code&gt;. This means that with the same configuration you can get different setups on different machines, or depending on whether or not we are running in a container, etc.&lt;/p&gt;

&lt;h3 id=&quot;bridge&quot;&gt;Bridge&lt;/h3&gt;

&lt;p&gt;Imagine you want to create a bridge and add your ethernet devices to it. You would then drop in a &lt;code&gt;.netdev&lt;/code&gt; file:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[NetDev]
Name=bridge0
Kind=bridge
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And set &lt;code&gt;Bridge=bridge0&lt;/code&gt; in the &lt;code&gt;.network&lt;/code&gt; files applied to your devices. Under this setup, networkd will create &lt;code&gt;bridge0&lt;/code&gt; as soon as it starts, and add all your matching devices to it as they appear.&lt;/p&gt;

&lt;h3 id=&quot;vlan&quot;&gt;VLAN&lt;/h3&gt;

&lt;p&gt;Similarly, if you want to set up two VLAN&amp;#39;s, you&amp;#39;d create two &lt;code&gt;.netdev&lt;/code&gt; files:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[NetDev]
Name=vlan1
Kind=vlan

[VLAN]
Id=1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[NetDev]
Name=vlan2
Kind=vlan

[VLAN]
Id=2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And in your &lt;code&gt;.network&lt;/code&gt; file you would set &lt;code&gt;VLAN=vlan1 vlan2&lt;/code&gt;, to create the VLANs when your device appears.&lt;/p&gt;

&lt;h2 id=&quot;future-plans&quot;&gt;Future plans&lt;/h2&gt;

&lt;p&gt;This is only the beginning! We are hard at work at adding more features, so any suggestions, feature requests or patches are very welcome. In the short-term we are looking forward to adding DHCP6 and IPv4LL support, introspection both via a library and via dbus, and runtime control via dbus and a commandline client.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Cluster-Level Container Deployment with fleet</title>
   <link href="https://coreos.com/blog/cluster-level-container-orchestration/"/>
   <updated>2014-02-18T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/cluster-level-container-orchestration</id>
   <content type="html">&lt;p&gt;Today I&amp;#39;d like to introduce our latest project, &lt;a href=&quot;https://github.com/coreos/fleet&quot;&gt;fleet&lt;/a&gt;. fleet builds on &lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;etcd&lt;/a&gt; and &lt;a href=&quot;http://www.freedesktop.org/wiki/Software/systemd/&quot;&gt;systemd&lt;/a&gt; to provide a distributed, fault-tolerant platform for deploying applications on CoreOS clusters.&lt;/p&gt;

&lt;h2 id=&quot;the-basics&quot;&gt;The Basics&lt;/h2&gt;

&lt;p&gt;With fleet, you can treat your CoreOS cluster as if it shared a single init system. It encourages users to write applications as small, ephemeral units that can easily migrate around a cluster of self-updating CoreOS machines.&lt;/p&gt;

&lt;h3 id=&quot;architecture&quot;&gt;Architecture&lt;/h3&gt;

&lt;p&gt;User job requests kick off a bidding process by the machines in the cluster.
Based on the received bids the engine assigns the job to a machine. 
This process relies on two of etcd&amp;#39;s key features: directory watch events and cluster-level locks.
During the life of a job an event-driven architecture allows the cluster to react to membership changes and service state changes in real-time.&lt;/p&gt;

&lt;p&gt;Read more about the &lt;a href=&quot;https://github.com/coreos/fleet/blob/master/Documentation/architecture.md&quot;&gt;architecture&lt;/a&gt; on GitHub.&lt;/p&gt;

&lt;h3 id=&quot;so...-what-can-it-actually-do?&quot;&gt;So... what can it actually do?&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Deploy docker containers on arbitrary hosts in a cluster&lt;/li&gt;
&lt;li&gt;Distribute services across a cluster using machine-level anti-affinity&lt;/li&gt;
&lt;li&gt;Maintain N instances of a service, re-scheduling on failure&lt;/li&gt;
&lt;li&gt;Discover machines running in the cluster&lt;/li&gt;
&lt;li&gt;Automatically SSH into the machine running a job&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;demo&quot;&gt;Demo&lt;/h2&gt;

&lt;iframe width=&quot;666&quot; height=&quot;375&quot; src=&quot;//www.youtube.com/embed/u91DnN-yaJ8?rel=0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
 

&lt;p&gt;The API keys used in this video were revoked before it was posted &amp;mdash; free AWS isn&amp;#39;t a feature of CoreOS. Below are the systemd units used in the demo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;subgun-http.1.service&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[Unit]
Description=subgun

[Service]
ExecStartPre=-/usr/bin/docker kill subgun-1
ExecStartPre=-/usr/bin/docker rm subgun-1
ExecStart=/usr/bin/docker run -rm -name subgun-1 -e SUBGUN_LISTEN=127.0.0.1:8080 -e SUBGUN_LISTS=recv@sandbox2398.mailgun.org -e SUBGUN_API_KEY=key-779ru4cibbnhfa1qp7a3apyvwkls7ny7 -p 8080:8080 coreos/subgun
ExecStop=/usr/bin/docker kill subgun-1

[X-Fleet]
Conflicts=subgun-http.*.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/coreos/subgun&quot;&gt;GitHub Repo&lt;/a&gt; • &lt;a href=&quot;https://index.docker.io/u/coreos/subgun/&quot;&gt;Docker Index&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;subgun-presence.1.service&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[Unit]
Description=subgun presence service
BindsTo=subgun-http.1.service

[Service]
ExecStartPre=-/usr/bin/docker kill subgun-presence-1
ExecStartPre=-/usr/bin/docker rm subgun-presence-1
ExecStart=/usr/bin/docker run -rm -name subgun-presence-1 -e AWS_ACCESS_KEY=AKIAIBC5MW3ONCW6J2XQ -e AWS_SECRET_KEY=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 -e AWS_REGION=us-east-1 -e ELB_NAME=bcwaldon-fleet-lb coreos/elb-presence
ExecStop=/usr/bin/docker kill subgun-presence-1

[X-Fleet]
MachineOf=subgun-http.1.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/coreos/elb-presence&quot;&gt;GitHub Repo&lt;/a&gt; • &lt;a href=&quot;https://index.docker.io/u/coreos/elb-presence/&quot;&gt;Docker Index&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;get-up-and-running&quot;&gt;Get up and running&lt;/h2&gt;

&lt;p&gt;fleet is available in CoreOS version 231.0.0 and newer. Get an etcd cluster up and running and simply call &lt;code&gt;systemctl start fleet&lt;/code&gt;. You can then interact with your fleet cluster using the &lt;code&gt;fleetctl&lt;/code&gt; &lt;a href=&quot;https://github.com/coreos/fleet/releases/tag/v0.1.2&quot;&gt;command line tool&lt;/a&gt; available from GitHub. Binaries are available for both Linux and OS X.&lt;/p&gt;

&lt;h3 id=&quot;amazon&quot;&gt;Amazon&lt;/h3&gt;

&lt;p&gt;We have an AWS CloudFormation template that uses the new &lt;a href=&quot;/blog/etcd-0.3.0-released/&quot;&gt;etcd cluster discovery&lt;/a&gt; protocol to provide autoscaled CoreOS clusters. Check it out on our &lt;a href=&quot;/docs/running-coreos/cloud-providers/ec2/&quot;&gt;EC2 docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/media/fleet-cloudformation.png&quot; alt=&quot;Fleet + CloudFormation&quot;&gt;
&lt;div class=&quot;caption&quot;&gt;Step 1 of a new CloudFormation stack.&lt;/div&gt;&lt;/p&gt;

&lt;h2 id=&quot;learn-more&quot;&gt;Learn More&lt;/h2&gt;

&lt;p&gt;All documentation is located within the GitHub repo. Learn more about &lt;a href=&quot;https://github.com/coreos/fleet/blob/master/Documentation/using-the-client.md&quot;&gt;using the fleetctl client&lt;/a&gt;, &lt;a href=&quot;https://github.com/coreos/fleet/blob/master/Documentation/deployment.md&quot;&gt;deployment&lt;/a&gt; and &lt;a href=&quot;https://github.com/coreos/fleet/blob/master/Documentation/configuration.md&quot;&gt;configuration&lt;/a&gt;, &lt;a href=&quot;https://github.com/coreos/fleet/blob/master/Documentation/architecture.md&quot;&gt;system architecture&lt;/a&gt; and &lt;a href=&quot;https://github.com/coreos/fleet/blob/master/Documentation&quot;&gt;more&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>etcd 0.3.0 - Improved Cluster Discovery, API Enhancements and Windows Support</title>
   <link href="https://coreos.com/blog/etcd-0.3.0-released/"/>
   <updated>2014-02-07T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/etcd-0.3.0-released</id>
   <content type="html">&lt;p&gt;We&amp;#39;re excited to release version 0.3.0 of &lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;etcd&lt;/a&gt;, a highly-available key value store for shared configuration and service discovery. Read on to learn about the changes in this release or hop over to GitHub to &lt;a href=&quot;https://github.com/coreos/etcd/releases/tag/v0.3.0&quot;&gt;download the latest binaries&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;new-features&quot;&gt;New Features&lt;/h2&gt;

&lt;h3 id=&quot;discovery-api&quot;&gt;Discovery API&lt;/h3&gt;

&lt;p&gt;The Discovery API automates the process of bootstrapping a cluster. In previous releases, a human had to pick a leader, pass a list of &lt;code&gt;-peers&lt;/code&gt; to all of the followers and maintain that list going forward. The Discovery API takes a unique token as an input and fetches a list of peers that have already been registered with that token. If no peers have ever existed, the first peer to use that token will assume leadership of the cluster. Stale peers will be cleaned up automatically to allow you to use the same token as machines come and go.&lt;/p&gt;

&lt;p&gt;Use the publicly-available discovery service at &lt;a href=&quot;https://discovery.etcd.io&quot;&gt;https://discovery.etcd.io&lt;/a&gt;, or run your own. All of the information you need is available in the &lt;a href=&quot;https://coreos.com/docs/cluster-management/setup/etcd-cluster-discovery/&quot;&gt;Discovery API&lt;/a&gt; docs.&lt;/p&gt;

&lt;h3 id=&quot;other-api-additions&quot;&gt;Other API Additions&lt;/h3&gt;

&lt;p&gt;This release does not break the existing v2 API but it does add two new features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CompareAndDelete&lt;/strong&gt;: etcd has let you create and update keys atomically but this
release introduces atomic deletes too. This means that you can delete a key
only if certain prerequisites like its index or value are correct.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;prevNode&lt;/strong&gt;: write requests will now return a prevNode field next to
the existing node field. This entry represents the state of this key before
the write was made and is useful for many uses like using a key as a simple
atomic queue without a GET and PUT.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;improved-logging&quot;&gt;Improved Logging&lt;/h3&gt;

&lt;p&gt;We added an event-based logging system to get details about leader elections
and cluster changes out of the core consensus system of etcd. This gives admins
more clear and helpful information about the cluster state via log files.&lt;/p&gt;

&lt;h3 id=&quot;go-get-and-windows-support&quot;&gt;go get and Windows Support&lt;/h3&gt;

&lt;p&gt;We recently moved to using &lt;code&gt;goven&lt;/code&gt; for dependency management in etcd which means a few things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;go get github.com/coreos/etcd&lt;/code&gt; works and is a fast way to grab master&lt;/li&gt;
&lt;li&gt;Go cross compilation works and etcd now has official Windows builds&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;changes-to-functionality&quot;&gt;Changes to Functionality&lt;/h2&gt;

&lt;h3 id=&quot;goodbye-info-file&quot;&gt;Goodbye info File&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;info&lt;/code&gt; file was removed and is no longer used. This file was a cache of
command line arguments and was causing a lot of confusion and bug reports. If
you have an info file in your etcd data directory you can safely remove it.&lt;/p&gt;

&lt;h3 id=&quot;snapshots-by-default&quot;&gt;Snapshots by Default&lt;/h3&gt;

&lt;p&gt;etcd uses a replicated log that is managed by the Raft consensus protocol. During normal usage, every write causes an entry to be appended to the log. In previous releases, the entire log was stored in memory, which caused memory usage to grow over the life of the cluster.&lt;/p&gt;

&lt;p&gt;In this release we enabled &lt;code&gt;-snapshot=true&lt;/code&gt; by default. This means that
periodically etcd will flush older logs from memory to reduce resource usage.&lt;/p&gt;

&lt;h2 id=&quot;minor-fixes-and-improvements&quot;&gt;Minor Fixes and Improvements&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;/mod/dashboard was refactored to improve the code quality&lt;/li&gt;
&lt;li&gt;tracing options were added to enable use of &lt;a href=&quot;https://github.com/coreos/etcd/blob/master/Documentation/debugging.md&quot;&gt;pprof, graphite and other debugging methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;An &lt;a href=&quot;https://github.com/coreos/etcd/blob/master/Documentation/clients-matrix.md&quot;&gt;etcd client matrix was added&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://coreos.com/docs/distributed-configuration/etcd-api/#statistics&quot;&gt;Statistics APIs&lt;/a&gt; were documented&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;bug-fixes&quot;&gt;Bug Fixes&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Improvements to the goraft locking code and leader step down code&lt;/li&gt;
&lt;li&gt;Fixes to the internal watch datastructures and locks&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>Brandon's etcd presentation at GoSF</title>
   <link href="https://coreos.com/blog/brandons-etcd-presentation-at-gosf/"/>
   <updated>2014-01-16T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/brandons-etcd-presentation-at-gosf</id>
   <content type="html">&lt;p&gt;Our very own &lt;a href=&quot;https://twitter.com/BrandonPhilips&quot;&gt;@BrandonPhilips&lt;/a&gt; gave a talk at &lt;a href=&quot;http://www.meetup.com/golangsf/&quot;&gt;GoSF&lt;/a&gt; on &lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;etcd&lt;/a&gt;. Here are &lt;a href=&quot;https://speakerdeck.com/philips/etcd-at-gosf&quot;&gt;the slides&lt;/a&gt;. &lt;/p&gt;

&lt;div style=&quot;max-width: 500px&quot;&gt;&lt;script async class=&quot;speakerdeck-embed&quot; data-id=&quot;42f883e060f801319dd43a22f70921ad&quot; data-ratio=&quot;1.33333333333333&quot; src=&quot;//speakerdeck.com/assets/embed.js&quot;&gt;&lt;/script&gt;&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Jumpers and the Software Defined Localhost</title>
   <link href="https://coreos.com/blog/Jumpers-and-the-software-defined-localhost/"/>
   <updated>2014-01-13T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/Jumpers-and-the-software-defined-localhost</id>
   <content type="html">&lt;p&gt;The rise of Docker has been great thing for Linux containers and namespaces. Docker’s model of application building and deployment solves a lot of problems. However, one of the more common sticking points still being worked out is how dynamic, cross machine, container-to-container networking and service discovery will work. &lt;/p&gt;

&lt;p&gt;We would like to propose a solution to this, called the &amp;quot;software defined localhost”. &lt;/p&gt;

&lt;p&gt;Here is how it works, and it is pretty simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Containers hardcode a localhost port in their configuration (127.0.0.1:3306, for mysql, for example)&lt;/li&gt;
&lt;li&gt;The container runtime presents a “jumper” (an open port) on the containers 127.0.0.1:3306, automatically and transparently connecting it to the configured remote container.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The net result is a system similar to &lt;a href=&quot;https://github.com/airbnb/synapse&quot;&gt;synapse&lt;/a&gt; but on a container per container level. &lt;/p&gt;

&lt;p&gt;We’re using the term &lt;em&gt;“jumper”&lt;/em&gt; to refer to the tool that does this style of network namespace proxying.&lt;/p&gt;

&lt;p&gt;For the sake of demonstration, we wrote a simple jumper called &lt;a href=&quot;https://github.com/coreos/go-namespaces#go-namespaces&quot;&gt;nspipe&lt;/a&gt; that will allow you to bind in one Linux network namespace, but do networking in another. &lt;/p&gt;

&lt;p&gt;Terminal 1: Start a container and check for listening ports (currently none open)&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ docker run -t -i polvi/ubuntu-netstat /bin/bash
root@b202508907b0:/# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
root@b202508907b0:/# 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Terminal 2: Start nspipe and attach a port on localhost:80 for b202508907b0&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ PID=$(./get-leader-pid b202508907b0)
$ sudo ./nspipe -t $PID -l 127.0.0.1:80 -r www.google.com:80
PROXY: targetPid:8231 targetAddr:localhost:80 remoteAddr:www.google.com:80
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Terminal 1: Check if port is listening and test it&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;root@b202508907b0:/# netstat -lntup
Active Internet connections (only servers)
tcp        0      0 127.0.0.1:80            0.0.0.0:*               LISTEN      -   
root@b202508907b0:/# curl localhost:80
&amp;lt;HTML&amp;gt;&amp;lt;HEAD&amp;gt;&amp;lt;meta http-equiv=&amp;quot;content-type” content=&amp;quot;text/html;charset=utf-8&amp;quot;&amp;gt;
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Tada! We attached a port on localhost that forwards all traffic to google.com. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: &lt;a href=&quot;https://gist.github.com/polvi/5f89db1c8609b06437e8&quot;&gt;./get-leader-pid&lt;/a&gt; is a simple script that takes a docker container id and returns the first child process in the containers namespace. Using the &lt;a href=&quot;http://man7.org/linux/man-pages/man2/setns.2.html&quot;&gt;setns&lt;/a&gt; system call requires directly poking the proc filesystem, and thus we need the pid. &lt;/p&gt;

&lt;p&gt;A few more examples of this in action:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;An etcd powered jumper that round-robin load balances to any services that are registered with etcd: &lt;a href=&quot;https://github.com/coreos/nsproxy&quot;&gt;https://github.com/coreos/nsproxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A patched &lt;a href=&quot;https://www.tarsnap.com/spiped.html&quot;&gt;spiped&lt;/a&gt; (stunnel alternative) to securely encrypt all traffic that goes across the jumper, point to point. &lt;a href=&quot;https://github.com/polvi/spiped&quot;&gt;https://github.com/polvi/spiped&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Finally, it&amp;#39;s possible to setup the available networking before the container is started. In this example &lt;a href=&quot;http://www.freedesktop.org/software/systemd/man/systemd-nspawn.html&quot;&gt;systemd-nspawn&lt;/a&gt; is a lightweight container manager that is bundled with systemd (and CoreOS), but it could be swapped out for the docker based lxc tools.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;# create a fresh network namespace using iproute2
$ sudo ip netns add foo
# This sets up the jumper as a daemonized service via systemd
$ sudo systemd-run nspipe -p /var/run/netns/foo -l 127.0.0.1:80 -r www.google.com:80

$ sudo ip netns exec foo /usr/bin/systemd-nspawn -D busybox /bin/sh 
/ # ifconfig -a
lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B) 
/ # netstat -l
Active Internet connections (only servers)
tcp        0      0 127.0.0.1:80            0.0.0.0:*               LISTEN      -  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;A number of benefits are unlocked with this approach:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Networking is fully abstracted from the container, and always consistent (localhost always has what you need/specify). No dynamic IPs. &lt;/li&gt;
&lt;li&gt;Application configuration can be static (just hardcode localhost:3306 for your DB, for example). &lt;/li&gt;
&lt;li&gt;The jumper could transparently do things like dynamic service discovery, encrypting all traffic, starting other containers, without the container needing to implement anything. &lt;/li&gt;
&lt;li&gt;Could follow the ambassador pattern for chaining services together, or just directly connect point to point, load balance, etc, let the platform decide.&lt;/li&gt;
&lt;li&gt;The container could have no networking at all (only a loopback, no NAT), only given access to the services it needs (better security/isolation/consistency). &lt;/li&gt;
&lt;li&gt;Convert the proxy to a load balancer, and you can start doing sophisticated things like rolling migration to a new service without needing to reconfigure existing clients. &lt;/li&gt;
&lt;li&gt;Combined with systemd socket activation, the service receiving the connection on the other side of the proxy could be activated on demand. For example, you could bind 3306 into a container, and the mysql database container will provisioned on first connection. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Disadvantages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;All traffic needs to be ran through a proxy. At high load, this probably will not work. This could be overcome by having your application talk directly to whatever service discovery tool you would want to use, instead of having the runtime do it for you. &lt;/li&gt;
&lt;li&gt;Implementing this requires directly fiddling with the kernel namespaces. This would have to be done natively in LXC to avoid races, or after a container is started with a helper tool similar in nature to &lt;a href=&quot;https://github.com/jpetazzo/pipework&quot;&gt;pipework&lt;/a&gt; (but this would race at start-up. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We&amp;#39;d love to continue the discuss on &lt;a href=&quot;https://groups.google.com/forum/#!forum/coreos-dev&quot;&gt;coreos-dev&lt;/a&gt; and/or &lt;a href=&quot;https://groups.google.com/forum/#!forum/docker-user&quot;&gt;docker-user&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>etcd 0.2.0 - new API, new modules and tons of improvements</title>
   <link href="https://coreos.com/blog/etcd-0.2.0-released/"/>
   <updated>2013-12-27T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/etcd-0.2.0-released</id>
   <content type="html">&lt;p&gt;Today we released etcd 0.2.0 which introduces major features including an improved v2 API, two new modules for fair locking and leader election, and tons of new features.&lt;/p&gt;

&lt;h2 id=&quot;major-changes&quot;&gt;Major Changes&lt;/h2&gt;

&lt;h3 id=&quot;v2-api&quot;&gt;v2 API&lt;/h3&gt;

&lt;p&gt;etcd 0.2.0 introduces a new API endpoint at &lt;code&gt;/v2&lt;/code&gt;.
This API has been built on all of the feedback we have gotten from the community of users who have been building projects on etcd.
The major features of the new API include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simplified and consistent response format (&lt;a href=&quot;https://github.com/coreos/etcd#setting-the-value-to-a-key&quot;&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Compare-and-Swap (CAS) operations are now available so you can conditionally set values on keys (&lt;a href=&quot;https://github.com/coreos/etcd#atomic-compare-and-swap-cas&quot;&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Directories can be created and have a time-to-live (&lt;a href=&quot;https://github.com/coreos/etcd#using-a-directory-ttl&quot;&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Recursive GET requests to retrieve all data within a directory. (&lt;a href=&quot;https://github.com/coreos/etcd#listing-a-directory&quot;&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The previous API from the 0.1 series of releases still works and can be found at &lt;code&gt;/v1&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;new-modules&quot;&gt;New Modules&lt;/h3&gt;

&lt;p&gt;One of the goals of etcd is to make building consistent and correct distributed systems easier for developers.
In this release we have added two new modules that offer simple HTTP APIs to fair locks and leader elections.&lt;/p&gt;

&lt;p&gt;The fair lock API can be used for things like ensuring only a single machine is running a cron job at a given time, for locking transactions across disparate data stores or as a building block for a larger distributed data structure.
And you can do this from any language that can talk http:&lt;/p&gt;

&lt;p&gt;On machine1 in your cluster you can protect job1:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;curl -X POST &amp;#39;http://127.0.0.1:4001/mod/v2/lock/job1?ttl=180?value=machine1&amp;#39;
# Do your work on job1
curl -X DELETE &amp;#39;http://127.0.0.1:4001/mod/v2/lock/job1?value=machine1&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And on another machine you can protect job1:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;curl -X POST &amp;#39;http://127.0.0.1:4001/mod/v2/lock/job1?ttl=180&amp;amp;value=machine2&amp;#39;
# Do your work on job1 after machine1 has finished or timed out
curl -X DELETE &amp;#39;http://127.0.0.1:4001/mod/v2/lock/job1?value=machine2&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Full docs for the lock are &lt;a href=&quot;https://github.com/coreos/etcd/#lock&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The leader election module builds on top of the lock to provide a mechanism for doing a leader election on a set of candidate machines.
We will do a blog post on how to wire this up to databases like Postgres for automatic failover.
In the meantime you can find the docs &lt;a href=&quot;https://github.com/coreos/etcd/#leader-election&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;etcdctl-improvements&quot;&gt;etcdctl improvements&lt;/h3&gt;

&lt;p&gt;etcdctl is a command line tool designed for use in scripts or for exploring the key space interactively and it has seen lots of improvements in this release.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;exec-watch&lt;/code&gt; will execute a script everytime a key changes (&lt;a href=&quot;https://github.com/coreos/etcdctl#watching-for-changes&quot;&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;etcdctl ls&lt;/code&gt; can list directories recursively (&lt;a href=&quot;https://github.com/coreos/etcdctl#listing-a-directory&quot;&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-o extended&lt;/code&gt; format for get/set for simple parsing from scripts (&lt;a href=&quot;https://github.com/coreos/etcdctl#retrieving-a-key-value&quot;&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;service-features&quot;&gt;Service Features&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Configuration via command line, through environment variables, or by loading a configuration file.&lt;/li&gt;
&lt;li&gt;Versioning of the internal protocol will allow you to run multiple versions of etcd in a cluster and perform rolling upgrades.&lt;/li&gt;
&lt;li&gt;Bug fixes, internal refactoring and lots of tests added.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;getting-started&quot;&gt;Getting Started&lt;/h2&gt;

&lt;p&gt;We will roll out 0.2.0 of etcd into CoreOS today.
If you want to try it out in a Docker container or grab binary releases for Linux and OSX instruction are on the &lt;a href=&quot;https://github.com/coreos/etcd/releases&quot;&gt;releases&lt;/a&gt; page.&lt;/p&gt;

&lt;p&gt;Once you have etcd running the next step is reading through the extensive &lt;a href=&quot;https://github.com/coreos/etcd/#etcd&quot;&gt;etcd manual&lt;/a&gt; and joining the mailing list or IRC channel.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Running etcd in Docker Containers</title>
   <link href="https://coreos.com/blog/Running-etcd-in-Containers/"/>
   <updated>2013-12-13T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/Running-etcd-in-Containers</id>
   <content type="html">&lt;p style=&quot;background:#d9edf7; padding: 10px;&quot; class=&quot;text-info&quot;&gt;&lt;strong&gt;Update:&lt;/strong&gt; This blog post refers to functionality in an older version of etcd, 0.4.x. Check out the &lt;a href=&quot;https://coreos.com/etcd/docs/latest/docker_guide.html&quot;&gt;updated Docker guide&lt;/a&gt; for up-to-date information.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;etcd&lt;/a&gt; is a highly-available key value store for shared configuration and service discovery. Running etcd within a docker container is a convenient way to deploy etcd or test out a sample cluster. Etcd containers are very easy to run &amp;mdash; you just need to manipulate a few of the flags to make the networking work correctly. You can grab the &lt;a href=&quot;https://quay.io/repository/coreos/etcd&quot;&gt;etcd container&lt;/a&gt; or have docker download it automatically.&lt;/p&gt;

&lt;h3 id=&quot;start-containers&quot;&gt;Start Containers&lt;/h3&gt;

&lt;p&gt;We&amp;#39;re going to start three containers that use port &lt;code&gt;500x&lt;/code&gt; for the client communication and port &lt;code&gt;800x&lt;/code&gt; for the intra-cluster/raft communication. A few of the flags need to be modified per container:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;-name&lt;/code&gt; needs to be unique&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;-peer-addr&lt;/code&gt; and &lt;code&gt;-addr&lt;/code&gt; need to contain the IP where the machine can be reached on the outside of the container and a unique port number&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;-peers&lt;/code&gt; needs to contain a list of current members of the cluster and the port for server/raft communication (&lt;code&gt;800x&lt;/code&gt;). The first container doesn&amp;#39;t need the &lt;code&gt;-peers&lt;/code&gt; list since it will be the master.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this example, all three of these containers will be running on the same machine. Here are the three docker run commands that will get the cluster up and running. First, export a variable with your public IP address:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;export PUBLIC_IP=54.196.167.255
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And then start up our leader + two followers:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;docker run -d -p 8001:8001 -p 5001:5001 quay.io/coreos/etcd:v0.4.6 -peer-addr ${PUBLIC_IP}:8001 -addr ${PUBLIC_IP}:5001 -name etcd-node1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;docker run -d -p 8002:8002 -p 5002:5002 quay.io/coreos/etcd:v0.4.6 -peer-addr ${PUBLIC_IP}:8002 -addr ${PUBLIC_IP}:5002 -name etcd-node2 -peers ${PUBLIC_IP}:8001,${PUBLIC_IP}:8002,${PUBLIC_IP}:8003
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;docker run -d -p 8003:8003 -p 5003:5003 quay.io/coreos/etcd:v0.4.6 -peer-addr ${PUBLIC_IP}:8003 -addr ${PUBLIC_IP}:5003 -name etcd-node3 -peers ${PUBLIC_IP}:8001,${PUBLIC_IP}:8002,${PUBLIC_IP}:8003
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;testing-the-cluster&quot;&gt;Testing the Cluster&lt;/h3&gt;

&lt;p&gt;You should be able to test the cluster by curling any of the machines in the cluster or viewing the dashboard in a browser. Let&amp;#39;s request &lt;code&gt;/stats/leader&lt;/code&gt; which should indicate that all of our followers connected successfully:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;curl -L 54.196.167.255:5001/v2/stats/leader
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You should see something that looks like:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;{&amp;quot;leader&amp;quot;:&amp;quot;etcd-node1&amp;quot;,&amp;quot;followers&amp;quot;:{&amp;quot;etcd-node2&amp;quot;:{&amp;quot;latency&amp;quot;:{&amp;quot;current&amp;quot;:1.33342,&amp;quot;average&amp;quot;:1.6575929235264224,&amp;quot;standardDeviation&amp;quot;:0.8596793375097724,&amp;quot;minimum&amp;quot;:1.034932,&amp;quot;maximum&amp;quot;:27.428239},&amp;quot;counts&amp;quot;:{&amp;quot;fail&amp;quot;:4,&amp;quot;success&amp;quot;:3936}},&amp;quot;etcd-node3&amp;quot;:{&amp;quot;latency&amp;quot;:{&amp;quot;current&amp;quot;:1.448973,&amp;quot;average&amp;quot;:1.7457679780163597,&amp;quot;standardDeviation&amp;quot;:2.3964311316740465,&amp;quot;minimum&amp;quot;:1.063433,&amp;quot;maximum&amp;quot;:86.745084},&amp;quot;counts&amp;quot;:{&amp;quot;fail&amp;quot;:14,&amp;quot;success&amp;quot;:3912}}}}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;As you can see, &lt;code&gt;etcd-node1&lt;/code&gt; is the current leader and &lt;code&gt;etcd-node2&lt;/code&gt; and &lt;code&gt;etcd-node3&lt;/code&gt; are successfully connected as followers. You can check out the dashboard module at &lt;code&gt;/mod/dashboard&lt;/code&gt; but you&amp;#39;ll need to launch etcd with &lt;code&gt;-cors=&amp;#39;*&amp;#39;&lt;/code&gt; to make the cross-origin requests work.&lt;/p&gt;

&lt;h3 id=&quot;flags&quot;&gt;Flags&lt;/h3&gt;

&lt;p&gt;Below is a quick description of the flags we used in this example and some other common ones:&lt;/p&gt;

&lt;table&gt;&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Flag&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;peers&lt;/td&gt;
&lt;td&gt;Comma-separated list of cluster members. Any valid IP address will work. Use server/raft port for each member.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;peers-file&lt;/td&gt;
&lt;td&gt;A file containing the list of cluster members&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;name&lt;/td&gt;
&lt;td&gt;The unique name of the node.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;addr&lt;/td&gt;
&lt;td&gt;Address that the etcd clients will connect to.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bind-addr&lt;/td&gt;
&lt;td&gt;Interface that the etcd server will listen for client connections.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;peer-addr&lt;/td&gt;
&lt;td&gt;Address that the etcd server will advertise for intra-cluster/raft communication.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;peer-bind-addr&lt;/td&gt;
&lt;td&gt;Interface that the etcd server will listen for intra-cluster/raft connections.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;data-dir&lt;/td&gt;
&lt;td&gt;Path to the directory that stores data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ca-file&lt;/td&gt;
&lt;td&gt;Path to a CA file. Used for SSL client certificates.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cert-file&lt;/td&gt;
&lt;td&gt;Path to a certificate file. Used for SSL client certificates.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;key-file&lt;/td&gt;
&lt;td&gt;Path to a key file. Used for SSL client certificates.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;peer-ca-file&lt;/td&gt;
&lt;td&gt;Path to a CA file. Used for intra-cluster SSL communication.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;peer-cert-file&lt;/td&gt;
&lt;td&gt;Path to a certificate file. Used for intra-cluster SSL communication.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;peer-key-file&lt;/td&gt;
&lt;td&gt;Path to a key file. Used for intra-cluster SSL communication.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cors&lt;/td&gt;
&lt;td&gt;White-listed addresses that cross-origin requests are allowed from .&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS alpha updates</title>
   <link href="https://coreos.com/blog/CoreOS-alpha-updates/"/>
   <updated>2013-12-09T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/CoreOS-alpha-updates</id>
   <content type="html">&lt;p&gt;Just a few updates on the CoreOS alpha for you. The latest release (160.0.1) includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dotcloud/docker/blob/master/CHANGELOG.md#071-2013-12-05&quot;&gt;Docker 0.7.1&lt;/a&gt; went out with todays update, so you should already have it!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://coreos.com/docs/rackspace/&quot;&gt;Support for Rackspace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://coreos.com/docs/google-compute-engine/&quot;&gt;Support for Google Compute Engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;We posted a &lt;a href=&quot;http://coreos.com/blog/running-a-utility-cluster-on-coreos/&quot;&gt;short tutorial&lt;/a&gt; for setting up an IRC bouncer on CoreOS&lt;/li&gt;
&lt;li&gt;We’ve added Infiniband and RealTek ethernet driver support to our kernel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lastly, we have a few big changes to CoreOS and etcd that we’d like to make sure everyone knows is coming down the pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We intend tweak the read-only root filesystem to only be read-only on /usr/.  This will allow you to overwrite configs by placing them on the filesystem where you might expect.&lt;br&gt;&lt;/li&gt;
&lt;li&gt;etcd 0.2.0 is nearly complete, including a &lt;a href=&quot;https://github.com/coreos/etcd#etcd&quot;&gt;new API&lt;/a&gt;. If you have not already, please be testing with etcd master on github. We are ironing out the major kinks, but consider etcd 0.2.0 the way of the future. We will be shipping it inside of CoreOS in the coming weeks. &lt;/li&gt;
&lt;/ol&gt;
</content>
 </entry>
 
 <entry>
   <title>Running a Utility Cluster on CoreOS</title>
   <link href="https://coreos.com/blog/running-a-utility-cluster-on-coreos/"/>
   <updated>2013-12-04T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/running-a-utility-cluster-on-coreos</id>
   <content type="html">&lt;p&gt;CoreOS is designed to deliver high-density compute resources. The best way to take advantage of this concept on a small scale is run a personal utility cluster (or single machine) to run various utilities like IRC bouncers and the handful of websites that you inevitably end up hosting. CoreOS is a small, efficient operating system, which means you get more bang for your buck even on small cloud instances.&lt;/p&gt;

&lt;p&gt;I&amp;#39;m going to walk through setting up &lt;a href=&quot;http://znc.in&quot;&gt;ZNC&lt;/a&gt;, an IRC bouncer, on a CoreOS cluster. The basic process is to boot a CoreOS server, download a pre-made ZNC container and run the container via &lt;a href=&quot;/using-coreos/systemd&quot;&gt;systemd&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;booting-your-coreos-machine(s)&quot;&gt;Booting Your CoreOS Machine(s)&lt;/h3&gt;

&lt;p&gt;CoreOS runs on most cloud providers &amp;mdash; &lt;a href=&quot;/docs/ec2&quot;&gt;Amazon EC2&lt;/a&gt;, &lt;a href=&quot;/docs/rackspace&quot;&gt;Rackspace&lt;/a&gt;, &lt;a href=&quot;/docs/google-compute-engine&quot;&gt;Google Compute Engine&lt;/a&gt; and &lt;a href=&quot;/docs/&quot;&gt;more&lt;/a&gt; &amp;mdash; so pick your favorite and follow the very short setup process. If you have any extra physical servers laying around, CoreOS can also be &lt;a href=&quot;/docs/pxe&quot;&gt;booted via PXE&lt;/a&gt; or virtualized under &lt;a href=&quot;/docs/qemu&quot;&gt;KVM/QEMU&lt;/a&gt;, &lt;a href=&quot;/docs/vmware&quot;&gt;VMware&lt;/a&gt; and &lt;a href=&quot;/docs/&quot;&gt;more&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;login-to-the-machine&quot;&gt;Login to the Machine&lt;/h3&gt;

&lt;p&gt;You must login to a CoreOS machine with SSH keys &amp;mdash; passwords are not supported at all. We&amp;#39;re only supporting good habits! To connect run:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;ssh core@your_ip_address
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;set-up-the-znc-container&quot;&gt;Set up the ZNC Container&lt;/h3&gt;

&lt;p&gt;Let&amp;#39;s pull down the container onto the CoreOS machine. It&amp;#39;s worth noting that docker will do this for you if it can&amp;#39;t find the image locally, but we&amp;#39;re including it explicitly so you can understand what&amp;#39;s going on.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;docker pull coreos/znc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now we need to run through the intial set up process provided by ZNC. To do this, we need to run a bash prompt inside the container:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;docker run -t -i coreos/znc /bin/bash
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;After the container starts, we need to run the setup command. Since ZNC doesn&amp;#39;t allow you to run it as root, we need to specify a different user (&lt;code&gt;irc&lt;/code&gt;)to run the command with &lt;code&gt;su&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;su - irc -c &amp;#39;znc --makeconf&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Follow the steps when prompted to completely set up ZNC. I suggest listening on port 6000, don&amp;#39;t use SSL and enabling all of the default modules. Refer to &lt;a href=&quot;http://wiki.znc.in/Configuration&quot;&gt;ZNC&amp;#39;s configuration guide&lt;/a&gt; if you run into any issues. When it completes, we need to &lt;code&gt;exit&lt;/code&gt; to stop the container so we can commit our changes.&lt;/p&gt;

&lt;h3 id=&quot;commit-the-container-changes&quot;&gt;Commit the Container Changes&lt;/h3&gt;

&lt;p&gt;Grab the container ID from &lt;code&gt;docker ps -a&lt;/code&gt; (at the top of the list) and insert it into:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;docker commit container_id yourusername/znc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You&amp;#39;re customized ZNC container is now saved locally on your CoreOS machine. Now we need to run it. This time we need to forward the port you selected into the container. In my examples I&amp;#39;ll be using &lt;code&gt;6000&lt;/code&gt;. Instead of starting ZNC from our bash prompt, we can start it directly by telling docker to run ZNC in the foreground. Running in the foreground is important because our container will stop running when the command it runs is completed.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;docker run -d -p 6000:6000 yourusername/znc su - irc -c &amp;#39;znc --foreground&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;connect-via-irc-client&quot;&gt;Connect via IRC Client&lt;/h3&gt;

&lt;p&gt;Connect to your ZNC server by using the public IP address, port and other configuration options you set up. You may have to debug as necessary.&lt;/p&gt;

&lt;h3 id=&quot;write-the-unit-file&quot;&gt;Write the Unit File&lt;/h3&gt;

&lt;p&gt;CoreOS uses systemd to manage containers that get run by the operating system. For your ZNC container to restart after an automatic update, we need to write a unit file to manage it. These files are pretty straightforward and you can read about more complex examples in our &lt;a href=&quot;/docs/guides/systemd&quot;&gt;Getting Started with systemd&lt;/a&gt; guide.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[Unit]
Description=ZNC IRC Service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker run --rm -p 6000:6000 yourusername/znc su - znc -c &amp;#39;znc --foreground&amp;#39;

[Install]
WantedBy=local.target
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;--rm&lt;/code&gt; flag will remove old copies of this container when they stop. This prevents the disk from filling up with containers that we don&amp;#39;t want to ever run again.&lt;/p&gt;

&lt;h3 id=&quot;next-steps&quot;&gt;Next Steps&lt;/h3&gt;

&lt;p&gt;You should now have a fully set up utility cluster (or server) running a single container. Next steps would include setting up a simple static site hosted within a container or construct your own container that runs another utility. Check out our guides for &lt;a href=&quot;/docs/guides/docker&quot;&gt;Getting Started with docker&lt;/a&gt; and &lt;a href=&quot;/docs/guides/etcd&quot;&gt;Getting Started with etcd&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS on Google Compute Engine</title>
   <link href="https://coreos.com/blog/support-for-google-compute-engine/"/>
   <updated>2013-12-02T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/support-for-google-compute-engine</id>
   <content type="html">&lt;p&gt;&lt;img src=&quot;/assets/images/partners/google_compute2.png&quot; alt=&quot;Google Compute Engine&quot; class=&quot;image-center&quot;&gt;&lt;/p&gt;

&lt;p&gt;CoreOS can now be run on Google Compute Engine! We&amp;#39;re working hard to support all of the awesome unique features of GCE, but for now CoreOS functions the same as our other supported platforms.&lt;/p&gt;

&lt;p&gt;You can find &lt;a href=&quot;/docs/google-compute-engine/&quot;&gt;docs on how to get up and running on Compute Engine&lt;/a&gt; on our &lt;a href=&quot;/docs/&quot;&gt;documentation site&lt;/a&gt; and then follow our &lt;a href=&quot;/docs/guides/&quot;&gt;CoreOS Quickstart Guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you&amp;#39;re interested in more, we have guides that dive deeper into &lt;a href=&quot;/docs/guides/etcd&quot;&gt;etcd&lt;/a&gt;, &lt;a href=&quot;/docs/guides/docker&quot;&gt;docker&lt;/a&gt;, and &lt;a href=&quot;/docs/guides/systemd&quot;&gt;systemd&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>etcd v0.1.2 with a new dashboard and bugfixes</title>
   <link href="https://coreos.com/blog/etcd-v0.1.2-new-dashboard-and-bugfixes/"/>
   <updated>2013-10-10T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/etcd-v0.1.2-new-dashboard-and-bugfixes</id>
   <content type="html">&lt;p&gt;This etcd release, v0.1.2, is putting some final polish on the 0.1 series of releases.
The big feature is a new dashboard designed to visualize the latency of the followers in the network and give you the ability to browse and edit the keyspace.
Checkout this &lt;a href=&quot;http://www.youtube.com/watch?v=F_yeAx0l5T0&quot;&gt;Youtube&lt;/a&gt; video for details.&lt;/p&gt;

&lt;h3 id=&quot;latency-chart&quot;&gt;Latency Chart&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/etcd/v0.1.2/latency-chart.png&quot; alt=&quot;latency chart&quot;&gt;&lt;/p&gt;

&lt;p&gt;This chart shows the latency of the cluster from the master&amp;#39;s point of view&lt;/p&gt;

&lt;h3 id=&quot;keyspace-browser&quot;&gt;Keyspace Browser&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/etcd/v0.1.2/adding-a-key.png&quot; alt=&quot;chart&quot;&gt;&lt;/p&gt;

&lt;p&gt;The key space browser lets you explore, modify, add and delete keys&lt;/p&gt;

&lt;h3 id=&quot;changelog&quot;&gt;Changelog&lt;/h3&gt;

&lt;p&gt;And here is the the full list of changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New dashboard available at &lt;code&gt;/etcd/mod/dashboard&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Introduced &lt;code&gt;/v1/stats/leader&lt;/code&gt; and &lt;code&gt;/v1/stats/self&lt;/code&gt; endpoints&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/v1/keys&lt;/code&gt; accepts PUT and POST&lt;/li&gt;
&lt;li&gt;New community created libraries for Clojure, Java, Python, C&lt;/li&gt;
&lt;li&gt;cross-origin resource sharing whitelist via the &lt;code&gt;-cors&lt;/code&gt; flag&lt;/li&gt;
&lt;li&gt;Systemd journal support&lt;/li&gt;
&lt;li&gt;Several bug fixes related to timeouts, testAndSet, and more&lt;/li&gt;
&lt;li&gt;Powershell build scripts were added&lt;/li&gt;
&lt;li&gt;Instructions on contributing to etcd added to CONTRIBUTING.md&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;v2-api-pre-release&quot;&gt;v2 API Pre-Release&lt;/h3&gt;

&lt;p&gt;We will continue to merge bug fixes into the master branch for the 0.1 series.
Most development work has shifted towards the 0.2 branch as we finalize the big pieces needed for the v2 API.
This new API adds atomic sets based on index, improved handling of directories, and plenty of other fixes based on the communities feedback.
We will have a pre-release version out soon so you can start working against the new API to make sure we get it right.
All of the old clients should work too in the &lt;code&gt;/v1/&lt;/code&gt; namespace.&lt;/p&gt;

&lt;h3 id=&quot;getting-started&quot;&gt;Getting Started&lt;/h3&gt;

&lt;p&gt;As always trying out etcd is as easy as downloading one of the binaries below and extracting it and then running:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;./etcd
./etcdctl set hello-world &amp;quot;This is my first key&amp;quot;
./etcdctl get hello-world
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Binary releases: &lt;a href=&quot;https://github.com/coreos/etcd/releases/download/v0.1.2/etcd-v0.1.2-Darwin-x86_64.tar.gz&quot;&gt;OSX 64-bit&lt;/a&gt;, &lt;a href=&quot;https://github.com/coreos/etcd/releases/download/v0.1.2/etcd-v0.1.2-Linux-x86_64.tar.gz&quot;&gt;Linux amd64&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub repo: &lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;github.com/coreos/etcd&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you to all of the contributors in this release:&lt;/p&gt;

&lt;p&gt;Andrew Hobden, AndyPook, Antonio Terreno, Brandon Philips, David Fisher, Deniz Adrian, Derek Chiang (Enchi Jiang), Diwaker Gupta, Evan, Fabrizio (Misto) Milo, Fatih Arslan, Geoff Hayes, Yifan Gu, Jose Plana, Michael Burns, Michael Marineau, Michael Stillwell, Rob Szumski, Roberto Aguilar, Theo Hultberg, Xiang Li, kelseyhightower&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Boot on Bare Metal with PXE</title>
   <link href="https://coreos.com/blog/boot-on-bare-metal-with-pxe/"/>
   <updated>2013-09-11T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/boot-on-bare-metal-with-pxe</id>
   <content type="html">&lt;p&gt;There have been a lot of requests from all of you about running CoreOS on physical gear.
You want to use all of the features of CoreOS like atomic system upgrades, distributed configuration and Docker containers with the increased speed, flexibility and simplicity of bare metal.
It makes a lot of sense to us too and we have been working to get the pieces in place for you to get CoreOS on your bare metal.&lt;/p&gt;

&lt;h3 id=&quot;run-from-ram&quot;&gt;Run from RAM&lt;/h3&gt;

&lt;p&gt;This first version of bare metal CoreOS boots over PXE.
If you aren&amp;#39;t familiar PXE is a way to do network boots and is a common way to bring up installers.&lt;/p&gt;

&lt;p&gt;But, we didn&amp;#39;t want to force people to install CoreOS on disk and by default the PXE image runs completely out of RAM.
This means you can use all of the features of CoreOS with zero on-disk installation.
Plus, the image takes an ssh public key on the commandline passed from the PXE server so that you can log right in using your existing keypair.&lt;/p&gt;

&lt;p&gt;The process simply becomes: boot up a machine, ssh in, and start running containers without touching storage.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;# pxe boot and wait
ssh core@10.0.2.15
docker run -i -t busybox /bin/sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To get started with this new feature checkout our guide on &lt;a href=&quot;/docs/pxe/&quot;&gt;PXE Booting CoreOS&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;or-install-to-disk&quot;&gt;Or Install to Disk&lt;/h3&gt;

&lt;p&gt;Of course if you want to have data persistant over reboots that is easily done.
You can configure CoreOS to use a partition as it&amp;#39;s STATE partition.
The CoreOS image and root filesystem comes from PXE still but all of your data stays on disk.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;mkfs.ext4 -L STATE /dev/sda1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Or even install CoreOS completely to disk.
This will make everything on bare metal behave similarly to the current VM images.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;coreos-install -d /dev/sda -V 72.0.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;hardware-support&quot;&gt;Hardware Support&lt;/h3&gt;

&lt;p&gt;Give it a shot, but we are still working on the full set of hardware that we will be supporting.
We have most of the common hardware working.
If you run into issues ping on us &lt;a href=&quot;irc://irc.freenode.org:6667/#coreos&quot;&gt;#coreos&lt;/a&gt; or &lt;a href=&quot;mailto:carly.stoughton+pxehardware@coreos.com&quot;&gt;email Carly&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>OpenStack, VMware and KVM images available</title>
   <link href="https://coreos.com/blog/openstack-vmware-and-kvm-images-available/"/>
   <updated>2013-08-28T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/openstack-vmware-and-kvm-images-available</id>
   <content type="html">&lt;p&gt;We just uploaded images for &lt;a href=&quot;/docs/openstack/&quot;&gt;OpenStack&lt;/a&gt;,
&lt;a href=&quot;/docs/vmware/&quot;&gt;VMware&lt;/a&gt; and &lt;a href=&quot;/docs/qemu/&quot;&gt;KVM&lt;/a&gt; to make it easy for more of you to
be involved in the CoreOS developer alpha. These images come fresh from our
build system and we would love your feedback on what is working and what isn&amp;#39;t.&lt;/p&gt;

&lt;h3 id=&quot;vmware&quot;&gt;VMware&lt;/h3&gt;

&lt;p&gt;We have been testing under VMware Fusion but these images should work
under other VMware products too. If you give it a go on ESXi or another VMware
platform let us know! The docs for this image are available
&lt;a href=&quot;/docs/vmware/&quot;&gt;over here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A new Vagrant box with VMware support has been uploaded too. If you are using
Hashicorp&amp;#39;s VMware provider you can enjoy the speed and stability of
vmware+vagrant by following our &lt;a href=&quot;/docs/vagrant/&quot;&gt;updated vagrant docs&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;qemu/kvm&quot;&gt;QEMU/KVM&lt;/h3&gt;

&lt;p&gt;QEMU/KVM is Linux&amp;#39;s workhorse full virtualization tool and is used on desktops
and servers. CoreOS has been booting on QEM/KVM since the start but the
production images we uploaded today includes tools to easily add your ssh
public keys without mounting the image and futzing around with the filesystem.
To get started with KVM checkout the &lt;a href=&quot;/docs/qemu/&quot;&gt;docs here&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;openstack&quot;&gt;OpenStack&lt;/h3&gt;

&lt;p&gt;OpenStack is an open source cloud platform that can be used on top of a variety
of hypervisors. It has alot of flexibililty and we might have missed things in
this first release. So, boot CoreOS up and let us know if we support your
stack. Details and links in the &lt;a href=&quot;/docs/openstack/&quot;&gt;OpenStack Guide&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;feedback&quot;&gt;Feedback&lt;/h3&gt;

&lt;p&gt;We want to make it easy for every developer to get involved in the CoreOS alpha
and we will be making more images available soon. If the platform you want
CoreOS on isn&amp;#39;t currently supported &lt;a href=&quot;https://coreos.wufoo.com/forms/z7x4m1/&quot;&gt;let us know&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;And if you have feedback or questions about these new image types join our &lt;a href=&quot;irc://irc.freenode.org:6667/#coreos&quot;&gt;IRC
channel&lt;/a&gt; or send an email to the &lt;a href=&quot;https://groups.google.com/forum/#!forum/coreos-dev&quot;&gt;mailing list&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>etcd v0.1.0 release</title>
   <link href="https://coreos.com/blog/etcd-v0.1.0-release/"/>
   <updated>2013-08-11T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/etcd-v0.1.0-release</id>
   <content type="html">&lt;p&gt;etcd is ready for its first release!
We just marked &lt;a href=&quot;https://github.com/coreos/etcd/releases&quot;&gt;v0.1.0&lt;/a&gt; and uploaded binaries for Linux and OSX.&lt;/p&gt;

&lt;p&gt;These are the major features in this release:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple: curl&amp;#39;able user facing API (HTTP+JSON)&lt;/li&gt;
&lt;li&gt;Secure: optional SSL client cert authentication&lt;/li&gt;
&lt;li&gt;Fast: benchmarked 1000s of writes/s per instance&lt;/li&gt;
&lt;li&gt;Reliable: properly distributed using Raft&lt;/li&gt;
&lt;li&gt;Persistent: cluster failure is recoverable from disk&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out the &lt;a href=&quot;https://github.com/coreos/etcd#etcd&quot;&gt;full etcd guide&lt;/a&gt; for details on what etcd is, how to setup clustering, configuring client cert authentication and more.&lt;/p&gt;

&lt;h3 id=&quot;community&quot;&gt;Community&lt;/h3&gt;

&lt;p&gt;A number of people in the etcd community have helped out with this release:
Several bugs were fixed by Fabrizio Milo, Cong Ding and many others &lt;a href=&quot;https://github.com/coreos/etcd/graphs/contributors&quot;&gt;others&lt;/a&gt;.
Set commands were added to &lt;a href=&quot;https://github.com/coreos/etcdctl#etcdctl&quot;&gt;etcdctl&lt;/a&gt; by Emil Stenqvist.&lt;/p&gt;

&lt;h3 id=&quot;etcd-projects&quot;&gt;etcd projects&lt;/h3&gt;

&lt;p&gt;A number of independent etcd projects have been started as well:
A dynamic reverse proxy written in Go and built on top of the Go etcd client library was started by &lt;a href=&quot;https://github.com/calavera/active-proxy&quot;&gt;calavera&lt;/a&gt;.
Three Ruby bindings have been created by &lt;a href=&quot;https://github.com/iconara/etcd-rb&quot;&gt;iconara&lt;/a&gt;, &lt;a href=&quot;https://github.com/jpfuentes2/etcd-ruby&quot;&gt;jpfuentes2&lt;/a&gt; and &lt;a href=&quot;https://github.com/ranjib/etcd-ruby&quot;&gt;ranjib&lt;/a&gt;.
And a Chef cookbook was written by &lt;a href=&quot;https://github.com/spheromak/etcd-cookbook&quot;&gt;spheromak&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;onward-to-v0.2.0&quot;&gt;Onward to v0.2.0&lt;/h3&gt;

&lt;p&gt;We are just getting started with this release and have started planning for v0.2.0.
Some of the features we want to build include: TTLs on entire directories, improved log snapshot scheduling and client access control.
Kick the tires on this release and join the &lt;a href=&quot;https://github.com/coreos/etcd/issues?milestone=1&amp;amp;state=open&quot;&gt;discussion&lt;/a&gt; about the next version.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>CoreOS Vagrant Images</title>
   <link href="https://coreos.com/blog/coreos-vagrant-images/"/>
   <updated>2013-08-02T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/coreos-vagrant-images</id>
   <content type="html">&lt;p&gt;Our first vagrant images are ready to try. If you are new to vagrant checkout our &lt;a href=&quot;/docs/vagrant/&quot;&gt;vagrant guide&lt;/a&gt; for install instructions. Already have vagrant? Then it is as simple as:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;git clone https://github.com/coreos/coreos-vagrant/
cd coreos-vagrant
vagrant up
vagrant ssh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Thanks to @&lt;a href=&quot;https://twitter.com/mitchellh&quot;&gt;mitchellh&lt;/a&gt; (vagrant creator) for helping us get this going.&lt;/p&gt;

&lt;p&gt;Please give it a shot and let us know how it goes! If you run into a bug, please file it in the &lt;a href=&quot;https://github.com/coreos/coreos-vagrant&quot;&gt;github repo&lt;/a&gt;. Here are some &lt;a href=&quot;/docs/using-coreos/&quot;&gt;getting started tips&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We think it&amp;#39;d be really cool to have multiple vagrant instances performing service disovery together via etcd (think: your own docker cloud distributed across laptops!). If this is something you&amp;#39;d want to help figure out, jump in #coreos on freenode!&lt;/p&gt;

&lt;p&gt;Up next: We&amp;#39;re testing CoreOS with a few companies on their physical servers. If that is interesting to you, please send me the output of these commands from servers that you&amp;#39;d like to test:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;udevadm info --export-db
lspci -vv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Update: This only works on VirtualBox at the moment. We will add VMware soon.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Distributed configuration data with etcd</title>
   <link href="https://coreos.com/blog/distributed-configuration-with-etcd/"/>
   <updated>2013-07-23T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/distributed-configuration-with-etcd</id>
   <content type="html">&lt;p&gt;Today we would like to announce &lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;etcd&lt;/a&gt;, a highly available key value store for shared configuration data. CoreOS built etcd to solve the problem of shared configuration and service discovery. etcd is inspired by projects like Zookeeper, or doozer, but is a completely new piece of software. Some of the key design features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple: curl&amp;#39;able user facing API (HTTP+JSON)&lt;/li&gt;
&lt;li&gt;Secure: optional SSL client cert authentication&lt;/li&gt;
&lt;li&gt;Fast: benchmarked 1000s of writes/s per instance&lt;/li&gt;
&lt;li&gt;Reliable: Properly distributed and replicated log using raft&lt;/li&gt;
&lt;li&gt;Open source: Active, well maintained, open source project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;etcd uses the raft algorithm; a consensus algorithm for replicated logs. The CoreOS team has been heavy contributors to the &lt;a href=&quot;https://github.com/benbjohnson/go-raft&quot;&gt;go-raft&lt;/a&gt; implementation, which is maintained by &lt;a href=&quot;https://github.com/benbjohnson/go-raft&quot;&gt;benbjohnson&lt;/a&gt;. We have our own &lt;a href=&quot;https://github.com/coreos/go-raft&quot;&gt;implementation&lt;/a&gt;, but it is mainly a staging repo before being merged upstream. Thank you to Ben for his awesome contributions to date!&lt;/p&gt;

&lt;p&gt;etcd is written in Go.&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href=&quot;https://github.com/coreos/etcd&quot;&gt;documentation on github&lt;/a&gt; for many examples of how to use etcd to share configuration data, watching for changes on particular keys, or perform master election.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Recoverable System Upgrades</title>
   <link href="https://coreos.com/blog/recoverable-system-upgrades/"/>
   <updated>2013-07-16T00:00:00+00:00</updated>
   <id>https://coreos.com/blog/recoverable-system-upgrades</id>
   <content type="html">&lt;p&gt;System upgrades can introduce problems, and when upgrades go bad, manual steps need to be taken to get machines back up. The problem is compounded on public cloud infrastructure since you often have large numbers of machines, and getting to a recovery console can take a while.&lt;/p&gt;

&lt;p&gt;We believe in tight release cycles. CoreOS is designed to keep your servers secure against the latest exploits and to give you access to the latest features and fixes in weeks or months, not years. So, how do we balance tight release cycles with a need for stability? We built some systems and technology into CoreOS to help balance it all out.&lt;/p&gt;

&lt;h3 id=&quot;enabling-consistency-and-rollback&quot;&gt;Enabling consistency and rollback&lt;/h3&gt;

&lt;p&gt;Upgrading CoreOS is a bit different than the usual distros. Our update system is based on ChromeOS. The big difference is that we have two root partitions, which we&amp;#39;ll call root A and root B. Initially, your system is booted into the root A partition, and CoreOS begins talking to the update service to find out about new updates. If there is an update available it is downloaded and installed to root B. And to ensure we don&amp;#39;t disrupt your application we rate limit the disk and network I/O this process is allowed to use by using Linux &lt;a href=&quot;http://en.wikipedia.org/wiki/Cgroups&quot;&gt;cgroups&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Using this dual-root scheme is an improvement on the existing workflow of yum or apt-get. Often when upgrading using these tools you can find that the package manager will kick daemons to get them using new libraries or move configuration files around. And because of that you should treat system upgrades as a deploy: taking machines out of load balancers and clusters.&lt;/p&gt;

&lt;p&gt;But, on CoreOS, since the root partition your application is running on top of isn&amp;#39;t modified in place, your server is never in an unstable or partially upgraded state. To complete the upgrade, simply reboot the machine, and in a few seconds you will start running on root B with a freshly updated system.&lt;/p&gt;

&lt;h3 id=&quot;what-happens-when-things-go-wrong?&quot;&gt;What happens when things go wrong?&lt;/h3&gt;

&lt;p&gt;To further protect against a bad upgrade, CoreOS has an automated system for rollback. If a machine fails to come up after an upgrade, simply reboot the machine and it will revert to the previous root partition. &lt;/p&gt;

&lt;p&gt;This works by setting some metadata on the partition table. When root B gets its upgrade it has a &amp;quot;tries&amp;quot; counter that is set to 1, telling our boot system that we should attempt to use this root once, and if it fails to come up, then on the next boot revert to using root A.&lt;/p&gt;

&lt;p&gt;The end result is that CoreOS gives you frequent, consistent updates to the core system that your applications rely on, while giving you automated tools to reduce the risks involved.&lt;/p&gt;
</content>
 </entry>
 

</feed>
