You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by vi...@apache.org on 2016/03/17 21:47:19 UTC

svn commit: r1735499 [1/2] - in /mesos/site/publish: ./ blog/mesos-0-27-2-released/ documentation/container-image/ documentation/latest/container-image/ downloads/

Author: vinodkone
Date: Thu Mar 17 20:47:18 2016
New Revision: 1735499

URL: http://svn.apache.org/viewvc?rev=1735499&view=rev
Log:
Updated site for 0.28.0.

Added:
    mesos/site/publish/blog/mesos-0-27-2-released/
    mesos/site/publish/blog/mesos-0-27-2-released/index.html
    mesos/site/publish/documentation/container-image/
    mesos/site/publish/documentation/container-image/index.html
    mesos/site/publish/documentation/latest/container-image/
    mesos/site/publish/documentation/latest/container-image/index.html
Modified:
    mesos/site/publish/downloads/index.html
    mesos/site/publish/index.html
    mesos/site/publish/sitemap.xml

Added: mesos/site/publish/blog/mesos-0-27-2-released/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/blog/mesos-0-27-2-released/index.html?rev=1735499&view=auto
==============================================================================
--- mesos/site/publish/blog/mesos-0-27-2-released/index.html (added)
+++ mesos/site/publish/blog/mesos-0-27-2-released/index.html Thu Mar 17 20:47:18 2016
@@ -0,0 +1,164 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <title>Apache Mesos 0.27.2 Released</title>
+		    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+		    <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
+		    <link rel="alternate" type="application/atom+xml" title="Apache Mesos Blog" href="/blog/feed.xml">
+		    
+		    <link href="../../assets/css/main.css" media="screen" rel="stylesheet" type="text/css" />
+				
+		    
+			
+			<!-- Google Analytics Magic -->
+			<script type="text/javascript">
+			  var _gaq = _gaq || [];
+			  _gaq.push(['_setAccount', 'UA-20226872-1']);
+			  _gaq.push(['_setDomainName', 'apache.org']);
+			  _gaq.push(['_trackPageview']);
+
+			  (function() {
+			    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+			    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+			    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+			  })();
+			</script>
+    </head>
+    <body>
+			<!-- magical breadcrumbs -->
+			<div class="topnav">
+			<ul class="breadcrumb">
+			  <li>
+					<div class="dropdown">
+					  <a data-toggle="dropdown" href="#">Apache Software Foundation <span class="caret"></span></a>
+					  <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
+							<li><a href="http://www.apache.org">Apache Homepage</a></li>
+							<li><a href="http://www.apache.org/licenses/">License</a></li>
+					  	<li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>  
+					  	<li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+							<li><a href="http://www.apache.org/security/">Security</a></li>
+					  </ul>
+					</div>
+				</li>
+				<li><a href="http://mesos.apache.org">Apache Mesos</a></li>
+				
+				
+					<li><a href="/blog
+/">Blog
+</a></li>
+				
+				
+			</ul><!-- /breadcrumb -->
+			</div>
+			
+			<!-- navbar excitement -->
+	    <div class="navbar navbar-static-top" role="navigation">
+	      <div class="navbar-inner">
+	        <div class="container">
+						<a href="/" class="logo"><img src="/assets/img/mesos_logo.png" alt="Apache Mesos logo" /></a>
+					<div class="nav-collapse">
+						<ul class="nav nav-pills navbar-right">
+						  <li><a href="/gettingstarted/">Getting Started</a></li>
+						  <li><a href="/documentation/latest/">Documentation</a></li>
+						  <li><a href="/downloads/">Downloads</a></li>
+						  <li><a href="/community/">Community</a></li>
+						</ul>
+					</div>
+	        </div>
+	      </div>
+	    </div><!-- /.navbar -->
+
+      <div class="container">
+
+			<div class="row">
+
+<div class="col-md-3">
+	<div class="meta">
+		<span class="author">
+			
+			  <img src="http://www.gravatar.com/avatar/2ab9cab3a7cf782261c583c1f48a81b0?s=80" class="author_gravatar">
+			
+			<span class="author_contact">
+			  <p><strong>Michael Park</strong></p>
+			  <p><a href="http://twitter.com/mcypark">@mcypark</a></p>
+			</span>
+		</span>
+		<p><em>Posted March  7, 2016</em></p>
+	</div>
+	
+	<div class="share">
+		<span class="social-share-button"><a href="https://twitter.com/share" class="twitter-share-button" data-via="apachemesos">Tweet</a></span>
+		
+		<span><script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script></span>
+
+		<span><div class="g-plusone" data-size="medium"></div></span>
+
+		<!-- Place this tag after the last +1 button tag. -->
+		<script type="text/javascript">
+		  (function() {
+		    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
+		    po.src = 'https://apis.google.com/js/plusone.js';
+		    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
+		  })();
+		</script>
+		
+		<script src="//platform.linkedin.com/in.js" type="text/javascript">
+		 lang: en_US
+		</script>
+		<script type="IN/Share" data-counter="right"></script>
+	</div>
+</div>
+
+<div class="post col-md-9">
+	<h1>Apache Mesos 0.27.2 Released</h1>
+	
+	<p>The latest Mesos release, 0.27.2, is now available for <a href="http://mesos.apache.org/downloads">download</a>.
+This release includes fixes and improvements for the following:</p>
+
+<ul>
+<li><a href="https://issues.apache.org/jira/browse/MESOS-4693">MESOS-4693</a> - Variable shadowing in HookManager::slavePreLaunchDockerHook.</li>
+<li><a href="https://issues.apache.org/jira/browse/MESOS-4711">MESOS-4711</a> - Race condition in libevent poll implementation causes crash.</li>
+<li><a href="https://issues.apache.org/jira/browse/MESOS-4754">MESOS-4754</a> - The &ldquo;executors&rdquo; field is exposed under a backwards incompatible schema.</li>
+<li><a href="https://issues.apache.org/jira/browse/MESOS-4687">MESOS-4687</a> - Implement reliable floating point for scalar resources.</li>
+</ul>
+
+
+<p>Full release notes are available in the release <a href="https://git-wip-us.apache.org/repos/asf?p=mesos.git;a=blob_plain;f=CHANGELOG;hb=0.27.2">CHANGELOG</a>.</p>
+
+<h3>Upgrades</h3>
+
+<p>Rolling upgrades from a Mesos 0.27.1 cluster to Mesos 0.27.2 are straightforward.
+Please refer to the <a href="http://mesos.apache.org/documentation/latest/upgrades/">upgrade guide</a> for detailed information on upgrading to Mesos 0.27.2.</p>
+
+<h3>Try it out</h3>
+
+<p>We encourage you to try out this release and let us know what you think.
+If you run into any issues, please let us know on the <a href="https://mesos.apache.org/community">user mailing list and IRC</a>.</p>
+
+<h3>Thanks!</h3>
+
+<p>Thanks to the 4 contributors who made 0.27.2 possible:</p>
+
+<p>Alexander Rojas, Kevin Devroede, Michael Park, Neil Conway</p>
+
+</div>
+</div>
+
+			
+	      <hr>
+
+				<!-- footer -->
+	      <div class="footer">
+	        <p>&copy; 2012-2015 <a href="http://apache.org">The Apache Software Foundation</a>.
+	        Apache Mesos, the Apache feather logo, and the Apache Mesos project logo are trademarks of The Apache Software Foundation.<p>
+	      </div><!-- /footer -->
+
+	    </div> <!-- /container -->
+
+	    <!-- JS -->
+	    <script src="//code.jquery.com/jquery-1.11.0.min.js" type="text/javascript"></script>
+			<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js" type="text/javascript"></script>
+    </body>
+</html>

Added: mesos/site/publish/documentation/container-image/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/container-image/index.html?rev=1735499&view=auto
==============================================================================
--- mesos/site/publish/documentation/container-image/index.html (added)
+++ mesos/site/publish/documentation/container-image/index.html Thu Mar 17 20:47:18 2016
@@ -0,0 +1,440 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <title>Apache Mesos - Supporting Container Images in Mesos Containerizer</title>
+		    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+		    <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
+		    <link rel="alternate" type="application/atom+xml" title="Apache Mesos Blog" href="/blog/feed.xml">
+		    
+		    <link href="../../assets/css/main.css" media="screen" rel="stylesheet" type="text/css" />
+				
+		    
+			
+			<!-- Google Analytics Magic -->
+			<script type="text/javascript">
+			  var _gaq = _gaq || [];
+			  _gaq.push(['_setAccount', 'UA-20226872-1']);
+			  _gaq.push(['_setDomainName', 'apache.org']);
+			  _gaq.push(['_trackPageview']);
+
+			  (function() {
+			    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+			    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+			    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+			  })();
+			</script>
+    </head>
+    <body>
+			<!-- magical breadcrumbs -->
+			<div class="topnav">
+			<ul class="breadcrumb">
+			  <li>
+					<div class="dropdown">
+					  <a data-toggle="dropdown" href="#">Apache Software Foundation <span class="caret"></span></a>
+					  <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
+							<li><a href="http://www.apache.org">Apache Homepage</a></li>
+							<li><a href="http://www.apache.org/licenses/">License</a></li>
+					  	<li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>  
+					  	<li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+							<li><a href="http://www.apache.org/security/">Security</a></li>
+					  </ul>
+					</div>
+				</li>
+				<li><a href="http://mesos.apache.org">Apache Mesos</a></li>
+				
+				
+					<li><a href="/documentation
+/">Documentation
+</a></li>
+				
+				
+			</ul><!-- /breadcrumb -->
+			</div>
+			
+			<!-- navbar excitement -->
+	    <div class="navbar navbar-static-top" role="navigation">
+	      <div class="navbar-inner">
+	        <div class="container">
+						<a href="/" class="logo"><img src="/assets/img/mesos_logo.png" alt="Apache Mesos logo" /></a>
+					<div class="nav-collapse">
+						<ul class="nav nav-pills navbar-right">
+						  <li><a href="/gettingstarted/">Getting Started</a></li>
+						  <li><a href="/documentation/latest/">Documentation</a></li>
+						  <li><a href="/downloads/">Downloads</a></li>
+						  <li><a href="/community/">Community</a></li>
+						</ul>
+					</div>
+	        </div>
+	      </div>
+	    </div><!-- /.navbar -->
+
+      <div class="container">
+
+			<div class="row-fluid">
+	<div class="col-md-4">
+		<h4>If you're new to Mesos</h4>
+		<p>See the <a href="/gettingstarted/">getting started</a> page for more information about downloading, building, and deploying Mesos.</p>
+		
+		<h4>If you'd like to get involved or you're looking for support</h4>
+		<p>See our <a href="/community/">community</a> page for more details.</p>
+	</div>
+	<div class="col-md-8">
+		<h1>Supporting Container Images in <a href="/documentation/latest/./mesos-containerizer/">Mesos Containerizer</a></h1>
+
+<h2>Motivation</h2>
+
+<p>Mesos currently supports several <a href="/documentation/latest/./containerizer/">containerizers</a>,
+notably the Mesos containerizer and the Docker containerizer. Mesos
+containerizer uses native OS features directly to provide isolation
+between containers, while Docker containerizer delegates container
+management to the Docker engine.</p>
+
+<p>Maintaining two containerizers is hard. For instance, when we add new
+features to Mesos (e.g., persistent volumes, disk isolation), it
+becomes a burden to update both containerizers. Even worse, sometimes
+the isolation on some resources (e.g., network handles on an agent)
+requires coordination between two containerizers, which is very hard
+to implement in practice. In addition, we found that extending and
+customizing isolation for containers launched by Docker engine is
+difficult, mainly because we do not have a way to inject logics during
+the life cycle of a container.</p>
+
+<p>Therefore, we made an effort to unify containerizers in Mesos
+(<a href="https://issues.apache.org/jira/browse/MESOS-2840">MESOS-2840</a>,
+a.k.a. the Unified Containerizer). We improved Mesos containerizer so
+that it now supports launching containers that specify container
+images (e.g., Docker/Appc images).</p>
+
+<h2>Getting Started</h2>
+
+<p>To support container images, we introduced a new component in Mesos
+containerizer, called image provisioner. Image provisioner is
+responsible for pulling, caching and preparing container root
+filesystems. It also extracts runtime configurations from container
+images which will then be passed to the corresponding isolators for
+proper isolation.</p>
+
+<p>There are a few container image specifications, notably
+<a href="/documentation/latest/./https://github.com/docker/docker/blob/master/image/spec/v1/">Docker</a>,
+<a href="/documentation/latest/./https://github.com/appc/spec/blob/master/SPEC/">Appc</a>, and
+<a href="https://github.com/opencontainers/specs">OCI</a> (future). Currently, we
+support Docker and Appc images. More details about what features are
+supported or not can be found in the following sections.</p>
+
+<p><strong>NOTE</strong>: container image is only supported on Linux currently.</p>
+
+<h3>Configure the agent</h3>
+
+<p>To enable container image support in Mesos containerizer, the operator
+will need to specify the <code>--image_providers</code> agent flag which tells
+Mesos containerizer what types of container images are allowed. For
+example, setting <code>--image_providers=docker</code> allow containers to use
+Docker images. The operators can also specify multiple container image
+types. For instance, <code>--image_providers=docker,appc</code> allows both
+Docker and Appc container images.</p>
+
+<p>A few isolators need to be turned on in order to provide proper
+isolation according to the runtime configurations specified in the
+container image. The operator needs to add the following isolators to
+the <code>--isolation</code> flag.</p>
+
+<ul>
+<li><p><code>filesystem/linux</code>: This is needed because supporting container
+images involves changing filesystem root, and only <code>filesystem/linux</code>
+support that currently. Note that this isolator requires root
+permission.</p></li>
+<li><p><code>docker/runtime</code>: This is used to provide support for runtime
+configurations specified in Docker images (e.g., Entrypoint/Cmd,
+environment variables, etc.). See more details about this isolator in
+<a href="/documentation/latest/./mesos-containerizer/">Mesos containerizer doc</a>. Note that if this
+isolator is not specified and <code>--image_providers</code> contains <code>docker</code>,
+the agent will refuse to start.</p></li>
+</ul>
+
+
+<p>In summary, to enable container image support in Mesos containerizer,
+please specify the following agent flags:</p>
+
+<pre><code>$ sudo mesos-slave \
+  --containerizers=mesos \
+  --image_providers=appc,docker \
+  --isolation=filesystem/linux,docker/runtime
+</code></pre>
+
+<h3>Framework API</h3>
+
+<p>We introduced a new protobuf message <code>Image</code> which allow frameworks to
+specify container images for their containers. It has two types right
+now: <code>APPC</code> and <code>DOCKER</code>, representing Appc and Docker images
+respectively.</p>
+
+<p>For Appc images, the <code>name</code> and <code>labels</code> are what described in the
+<a href="/documentation/latest/./https://github.com/appc/spec/blob/master/spec/aci/#image-manifest-schema">spec</a>.</p>
+
+<p>For Docker images, the <code>name</code> is the Docker image reference in the
+following form (the same format expected by <code>docker pull</code>):
+<code>[REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG|@DIGEST]</code></p>
+
+<pre><code>message Image {
+  enum Type {
+    APPC = 1;
+    DOCKER = 2;
+  }
+
+  message Appc {
+    required string name = 1;
+    optional Labels labels = 3;
+  }
+
+  message Docker {
+    required string name = 1;
+  }
+
+  required Type type = 1;
+
+  // Only one of the following image messages should be set to match
+  // the type.
+  optional Appc appc = 2;
+  optional Docker docker = 3;
+}
+</code></pre>
+
+<p>The framework needs to specify <code>MesosInfo</code> in <code>ContainerInfo</code> in order
+to launch containers with container images. In other words, the
+framework needs to set the type to <code>ContainerInfo.MESOS</code>, indicating
+that it wants to use the Mesos containerizer. If <code>MesosInfo.image</code> is
+not specified, the container will use the host filesystem. If
+<code>MesosInfo.image</code> is specified, it will be used as the container
+image when launching the container.</p>
+
+<pre><code>message ContainerInfo {
+  enum Type {
+    DOCKER = 1;
+    MESOS = 2;
+  }
+
+  message MesosInfo {
+    optional Image image = 1;
+  }
+
+  required Type type = 1;
+  optional MesosInfo mesos = 5;
+}
+</code></pre>
+
+<h3>Test it out!</h3>
+
+<p>First, start the Mesos master:</p>
+
+<pre><code>$ sudo sbin/mesos-master --work_dir=/tmp/mesos/master
+</code></pre>
+
+<p>Then, start the Mesos agent:</p>
+
+<pre><code>$ sudo GLOG_v=1 sbin/mesos-slave \
+  --master=&lt;MASTER_IP&gt;:5050 \
+  --isolation=docker/runtime,filesystem/linux \
+  --work_dir=/tmp/mesos/slave \
+  --image_providers=docker \
+  --executor_environment_variables="{}"
+</code></pre>
+
+<p>Now, use Mesos CLI (i.e., mesos-execute) to launch a Docker container
+(e.g., redis). Note that <code>--shell=false</code> tells Mesos to use the
+default entrypoint and cmd specified in the Docker image.</p>
+
+<pre><code>$ sudo bin/mesos-execute \
+  --master=&lt;MASTER_IP&gt;:5050 \
+  --name=test \
+  --docker_image=library/redis \
+  --shell=false
+</code></pre>
+
+<p>Verify if your container is running by launching a redis client:</p>
+
+<pre><code>$ sudo docker run -ti --net=host redis redis-cli
+127.0.0.1:6379&gt; ping
+PONG
+127.0.0.1:6379&gt;
+</code></pre>
+
+<h2>Docker Support and Current Limitations</h2>
+
+<p>Image provisioner uses <a href="https://docs.docker.com/registry/spec/api/">Docker v2 registry
+API</a> to fetch Docker
+images/layers. The fetching is based on <code>curl</code>, therefore SSL is
+automatically handled. For private registries, the operator needs to
+configure <code>curl</code> accordingly so that it knows where to find the
+additional certificate files. Fetching requiring authentication is
+currently not supported yet (coming soon).</p>
+
+<p>Private registry is supported through the <code>--docker_registry</code> agent
+flag. Specifying private registry for each container using
+<code>Image.Docker.name</code> is not supported yet (coming soon).</p>
+
+<p>If the <code>--docker_registry</code> agent flag points to a local directory
+(e.g., <code>/tmp/mesos/images/docker</code>), the provisioner will pull Docker
+images from local filesystem, assuming Docker archives (result of
+<code>docker save</code>) are stored there based on the image name and tag.  For
+example, the operator can put a <code>busybox:latest.tar</code> (the result of
+<code>docker save -o busybox:latest.tar busybox</code>) under
+<code>/tmp/mesos/images/docker</code> and launch the agent by specifying
+<code>--docker_registry=/tmp/mesos/images/docker</code>. Then the framework can
+launch a Docker container by specifying <code>busybox:latest</code> as the name
+of the Docker image.</p>
+
+<p>If the <code>--switch_user</code> flag is set on the agent and the framework
+specifies a user (either <code>CommandInfo.user</code> or <code>FrameworkInfo.user</code>),
+we expect that user exists in the container image and its uid and gids
+matches that on the host. User namespace and capabilities are not
+supported yet.</p>
+
+<p>Only host network is supported. We will add bridge network support
+soon using CNI support in Mesos
+(<a href="https://issues.apache.org/jira/browse/MESOS-4641">MESOS-4641</a>).</p>
+
+<h3>More agent flags</h3>
+
+<p><code>--docker_registry</code>: The default URL for pulling Docker images. It
+could either be a Docker registry server URL (i.e:
+<code>https://registry.docker.io</code>), or a local path (i.e:
+<code>/tmp/docker/images</code>) in which Docker image archives (result of
+<code>docker save</code>) are stored. The default value is
+<code>https://registry-1.docker.io</code>.</p>
+
+<p><code>--docker_store_dir</code>: Directory the Docker provisioner will store
+images in. All the Docker images are cached under this directory. The
+default value is <code>/tmp/mesos/store/docker</code>.</p>
+
+<h2>Appc Support and Current Limitations</h2>
+
+<p>Currently, only the root filesystem specified in the Appc image is
+supported. Other runtime configurations like environment variables,
+exec, working directory are not supported yet (coming soon).</p>
+
+<p>For image discovery, we current support a simple discovery mechanism.
+We allow operators to specify a URI prefix which will be prepend to
+the URI template <code>{name}-{version}-{os}-{arch}.{ext}</code>. For example, if
+the URI prefix is <code>file:///tmp/appc/</code> and the Appc image name is
+<code>example.com/reduce-worker</code> with <code>version:1.0.0</code>, we will fetch the
+image at <code>file:///tmp/appc/example.com/reduce-worker-1.0.0.aci</code>.</p>
+
+<h3>More agent flags</h3>
+
+<p><code>appc_simple_discovery_uri_prefix</code>: URI prefix to be used for simple
+discovery of appc images, e.g., <code>http://</code>, <code>https://</code>,
+<code>hdfs://&lt;hostname&gt;:9000/user/abc/cde</code>. The default value is <code>http://</code>.</p>
+
+<p><code>appc_store_dir</code>: Directory the appc provisioner will store images in.
+All the Appc images are cached under this directory. The default value
+is <code>/tmp/mesos/store/appc</code>.</p>
+
+<h2>Provisioner Backends</h2>
+
+<p>A provisioner backend takes a set of filesystem layers and stacks them
+into a root filesystem. The following backends are supported
+currently.</p>
+
+<h3>Copy</h3>
+
+<p>The Copy backend simply copies all the layers into a target root
+directory to create a root filesystem.</p>
+
+<h3>Bind</h3>
+
+<p>This is a specialized backend that may be useful for deployments using
+large (multi-GB) single-layer images <em>and</em> where more recent kernel
+features such as overlayfs are not available. For small images (10&rsquo;s
+to 100&rsquo;s of MB) the copy backend may be sufficient. Bind backend is
+faster than Copy as it requires nearly zero IO.</p>
+
+<p>The bind backend currently has these two limitations:</p>
+
+<ol>
+<li><p>The bind backend supports only a single layer. Multi-layer images will
+fail to provision and the container will fail to launch!</p></li>
+<li><p>The filesystem is read-only because all containers using this image
+share the source. Select writable areas can be achieved by mounting
+read-write volumes to places like <code>/tmp</code>, <code>/var/tmp</code>, <code>/home</code>, etc.
+using the <code>ContainerInfo</code>. These can be relative to the executor work
+directory. Since the filesystem is read-only, <code>--sandbox_directory</code>
+must already exist within the filesystem because the filesystem
+isolator is unable to create it (e.g., either the image writer needs
+to create the mount point in the image, or the operator needs to set
+agent flag <code>--sandbox_directory</code> properly).</p></li>
+</ol>
+
+
+<h3>Overlay</h3>
+
+<p>The reson overlay backend was introduced is because the copy backend
+will waste IO and space while the bind backend can only deal with one
+layer. The overlay backend allows containizer to utilize the
+filesystem to merge multiple filesystems into one efficiently.</p>
+
+<p>As the overlay backend request multiple lower layers support, the
+version of linux kernel should be greater than 4.0, refer
+<a href="https://github.com/manjaro/manjaro-tools-iso-profiles/issues/40">here</a>
+for more detail.</p>
+
+<p>For more information of overlayfs, please refer to
+<a href="https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt">here</a>.</p>
+
+<p>The overlay backend currently has these two limitations:</p>
+
+<ol>
+<li><p>The overlay backend only supports more than one single layer. One
+single layer images will fail to provision and the container will fail
+to launch! This limitation will be solved soon.</p></li>
+<li><p>Similar to the bind backend, the filesystem will be read-only.
+Please refer to the second limitation of the bind backend for more
+details. We will resolve this limitation soon.</p></li>
+</ol>
+
+
+<h2>Executor Dependencies in a Container Image</h2>
+
+<p>Mesos has this concept of executors. All tasks are launched by an
+executor. For a general purpose executor (e.g., thermos) of a
+framework (e.g., Aurora), requiring it and all its dependencies to be
+present in all possible container images that a user might use is
+not trivial.</p>
+
+<p>In order to solve this issue, we propose a solution where we allow the
+executor to run on the host filesystem (without a container image).
+Instead, it can specify a <code>volume</code> whose source is an <code>Image</code>. Mesos
+containerizer will provision the <code>image</code> specified in the <code>volume</code>,
+and mount it under the sandbox directory. The executor can perform
+<code>pivot_root</code> or <code>chroot</code> itself to enter the container root
+filesystem. This is how we solve the command executor issue, avoiding
+the requirement that it has to exist in all container images.</p>
+
+<h2>References</h2>
+
+<p>For more information on the Mesos containerizer filesystem, namespace,
+and isolator features, visit <a href="/documentation/latest/./mesos-containerizer/">Mesos
+Containerizer</a>.  For more information on
+launching Docker containers through the Docker containerizer, visit
+<a href="/documentation/latest/./docker-containerizer/">Docker Containerizer</a>.</p>
+
+	</div>
+</div>
+
+			
+	      <hr>
+
+				<!-- footer -->
+	      <div class="footer">
+	        <p>&copy; 2012-2015 <a href="http://apache.org">The Apache Software Foundation</a>.
+	        Apache Mesos, the Apache feather logo, and the Apache Mesos project logo are trademarks of The Apache Software Foundation.<p>
+	      </div><!-- /footer -->
+
+	    </div> <!-- /container -->
+
+	    <!-- JS -->
+	    <script src="//code.jquery.com/jquery-1.11.0.min.js" type="text/javascript"></script>
+			<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js" type="text/javascript"></script>
+    </body>
+</html>

Added: mesos/site/publish/documentation/latest/container-image/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/documentation/latest/container-image/index.html?rev=1735499&view=auto
==============================================================================
--- mesos/site/publish/documentation/latest/container-image/index.html (added)
+++ mesos/site/publish/documentation/latest/container-image/index.html Thu Mar 17 20:47:18 2016
@@ -0,0 +1,440 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <title>Apache Mesos - Supporting Container Images in Mesos Containerizer</title>
+		    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+		    <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
+		    <link rel="alternate" type="application/atom+xml" title="Apache Mesos Blog" href="/blog/feed.xml">
+		    
+		    <link href="../../../assets/css/main.css" media="screen" rel="stylesheet" type="text/css" />
+				
+		    
+			
+			<!-- Google Analytics Magic -->
+			<script type="text/javascript">
+			  var _gaq = _gaq || [];
+			  _gaq.push(['_setAccount', 'UA-20226872-1']);
+			  _gaq.push(['_setDomainName', 'apache.org']);
+			  _gaq.push(['_trackPageview']);
+
+			  (function() {
+			    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+			    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+			    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+			  })();
+			</script>
+    </head>
+    <body>
+			<!-- magical breadcrumbs -->
+			<div class="topnav">
+			<ul class="breadcrumb">
+			  <li>
+					<div class="dropdown">
+					  <a data-toggle="dropdown" href="#">Apache Software Foundation <span class="caret"></span></a>
+					  <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
+							<li><a href="http://www.apache.org">Apache Homepage</a></li>
+							<li><a href="http://www.apache.org/licenses/">License</a></li>
+					  	<li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>  
+					  	<li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+							<li><a href="http://www.apache.org/security/">Security</a></li>
+					  </ul>
+					</div>
+				</li>
+				<li><a href="http://mesos.apache.org">Apache Mesos</a></li>
+				
+				
+					<li><a href="/documentation
+/">Documentation
+</a></li>
+				
+				
+			</ul><!-- /breadcrumb -->
+			</div>
+			
+			<!-- navbar excitement -->
+	    <div class="navbar navbar-static-top" role="navigation">
+	      <div class="navbar-inner">
+	        <div class="container">
+						<a href="/" class="logo"><img src="/assets/img/mesos_logo.png" alt="Apache Mesos logo" /></a>
+					<div class="nav-collapse">
+						<ul class="nav nav-pills navbar-right">
+						  <li><a href="/gettingstarted/">Getting Started</a></li>
+						  <li><a href="/documentation/latest/">Documentation</a></li>
+						  <li><a href="/downloads/">Downloads</a></li>
+						  <li><a href="/community/">Community</a></li>
+						</ul>
+					</div>
+	        </div>
+	      </div>
+	    </div><!-- /.navbar -->
+
+      <div class="container">
+
+			<div class="row-fluid">
+	<div class="col-md-4">
+		<h4>If you're new to Mesos</h4>
+		<p>See the <a href="/gettingstarted/">getting started</a> page for more information about downloading, building, and deploying Mesos.</p>
+		
+		<h4>If you'd like to get involved or you're looking for support</h4>
+		<p>See our <a href="/community/">community</a> page for more details.</p>
+	</div>
+	<div class="col-md-8">
+		<h1>Supporting Container Images in <a href="/documentation/latest/./mesos-containerizer/">Mesos Containerizer</a></h1>
+
+<h2>Motivation</h2>
+
+<p>Mesos currently supports several <a href="/documentation/latest/./containerizer/">containerizers</a>,
+notably the Mesos containerizer and the Docker containerizer. Mesos
+containerizer uses native OS features directly to provide isolation
+between containers, while Docker containerizer delegates container
+management to the Docker engine.</p>
+
+<p>Maintaining two containerizers is hard. For instance, when we add new
+features to Mesos (e.g., persistent volumes, disk isolation), it
+becomes a burden to update both containerizers. Even worse, sometimes
+the isolation on some resources (e.g., network handles on an agent)
+requires coordination between two containerizers, which is very hard
+to implement in practice. In addition, we found that extending and
+customizing isolation for containers launched by Docker engine is
+difficult, mainly because we do not have a way to inject logics during
+the life cycle of a container.</p>
+
+<p>Therefore, we made an effort to unify containerizers in Mesos
+(<a href="https://issues.apache.org/jira/browse/MESOS-2840">MESOS-2840</a>,
+a.k.a. the Unified Containerizer). We improved Mesos containerizer so
+that it now supports launching containers that specify container
+images (e.g., Docker/Appc images).</p>
+
+<h2>Getting Started</h2>
+
+<p>To support container images, we introduced a new component in Mesos
+containerizer, called image provisioner. Image provisioner is
+responsible for pulling, caching and preparing container root
+filesystems. It also extracts runtime configurations from container
+images which will then be passed to the corresponding isolators for
+proper isolation.</p>
+
+<p>There are a few container image specifications, notably
+<a href="/documentation/latest/./https://github.com/docker/docker/blob/master/image/spec/v1/">Docker</a>,
+<a href="/documentation/latest/./https://github.com/appc/spec/blob/master/SPEC/">Appc</a>, and
+<a href="https://github.com/opencontainers/specs">OCI</a> (future). Currently, we
+support Docker and Appc images. More details about what features are
+supported or not can be found in the following sections.</p>
+
+<p><strong>NOTE</strong>: container image is only supported on Linux currently.</p>
+
+<h3>Configure the agent</h3>
+
+<p>To enable container image support in Mesos containerizer, the operator
+will need to specify the <code>--image_providers</code> agent flag which tells
+Mesos containerizer what types of container images are allowed. For
+example, setting <code>--image_providers=docker</code> allow containers to use
+Docker images. The operators can also specify multiple container image
+types. For instance, <code>--image_providers=docker,appc</code> allows both
+Docker and Appc container images.</p>
+
+<p>A few isolators need to be turned on in order to provide proper
+isolation according to the runtime configurations specified in the
+container image. The operator needs to add the following isolators to
+the <code>--isolation</code> flag.</p>
+
+<ul>
+<li><p><code>filesystem/linux</code>: This is needed because supporting container
+images involves changing filesystem root, and only <code>filesystem/linux</code>
+support that currently. Note that this isolator requires root
+permission.</p></li>
+<li><p><code>docker/runtime</code>: This is used to provide support for runtime
+configurations specified in Docker images (e.g., Entrypoint/Cmd,
+environment variables, etc.). See more details about this isolator in
+<a href="/documentation/latest/./mesos-containerizer/">Mesos containerizer doc</a>. Note that if this
+isolator is not specified and <code>--image_providers</code> contains <code>docker</code>,
+the agent will refuse to start.</p></li>
+</ul>
+
+
+<p>In summary, to enable container image support in Mesos containerizer,
+please specify the following agent flags:</p>
+
+<pre><code>$ sudo mesos-slave \
+  --containerizers=mesos \
+  --image_providers=appc,docker \
+  --isolation=filesystem/linux,docker/runtime
+</code></pre>
+
+<h3>Framework API</h3>
+
+<p>We introduced a new protobuf message <code>Image</code> which allow frameworks to
+specify container images for their containers. It has two types right
+now: <code>APPC</code> and <code>DOCKER</code>, representing Appc and Docker images
+respectively.</p>
+
+<p>For Appc images, the <code>name</code> and <code>labels</code> are what described in the
+<a href="/documentation/latest/./https://github.com/appc/spec/blob/master/spec/aci/#image-manifest-schema">spec</a>.</p>
+
+<p>For Docker images, the <code>name</code> is the Docker image reference in the
+following form (the same format expected by <code>docker pull</code>):
+<code>[REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG|@DIGEST]</code></p>
+
+<pre><code>message Image {
+  enum Type {
+    APPC = 1;
+    DOCKER = 2;
+  }
+
+  message Appc {
+    required string name = 1;
+    optional Labels labels = 3;
+  }
+
+  message Docker {
+    required string name = 1;
+  }
+
+  required Type type = 1;
+
+  // Only one of the following image messages should be set to match
+  // the type.
+  optional Appc appc = 2;
+  optional Docker docker = 3;
+}
+</code></pre>
+
+<p>The framework needs to specify <code>MesosInfo</code> in <code>ContainerInfo</code> in order
+to launch containers with container images. In other words, the
+framework needs to set the type to <code>ContainerInfo.MESOS</code>, indicating
+that it wants to use the Mesos containerizer. If <code>MesosInfo.image</code> is
+not specified, the container will use the host filesystem. If
+<code>MesosInfo.image</code> is specified, it will be used as the container
+image when launching the container.</p>
+
+<pre><code>message ContainerInfo {
+  enum Type {
+    DOCKER = 1;
+    MESOS = 2;
+  }
+
+  message MesosInfo {
+    optional Image image = 1;
+  }
+
+  required Type type = 1;
+  optional MesosInfo mesos = 5;
+}
+</code></pre>
+
+<h3>Test it out!</h3>
+
+<p>First, start the Mesos master:</p>
+
+<pre><code>$ sudo sbin/mesos-master --work_dir=/tmp/mesos/master
+</code></pre>
+
+<p>Then, start the Mesos agent:</p>
+
+<pre><code>$ sudo GLOG_v=1 sbin/mesos-slave \
+  --master=&lt;MASTER_IP&gt;:5050 \
+  --isolation=docker/runtime,filesystem/linux \
+  --work_dir=/tmp/mesos/slave \
+  --image_providers=docker \
+  --executor_environment_variables="{}"
+</code></pre>
+
+<p>Now, use Mesos CLI (i.e., mesos-execute) to launch a Docker container
+(e.g., redis). Note that <code>--shell=false</code> tells Mesos to use the
+default entrypoint and cmd specified in the Docker image.</p>
+
+<pre><code>$ sudo bin/mesos-execute \
+  --master=&lt;MASTER_IP&gt;:5050 \
+  --name=test \
+  --docker_image=library/redis \
+  --shell=false
+</code></pre>
+
+<p>Verify if your container is running by launching a redis client:</p>
+
+<pre><code>$ sudo docker run -ti --net=host redis redis-cli
+127.0.0.1:6379&gt; ping
+PONG
+127.0.0.1:6379&gt;
+</code></pre>
+
+<h2>Docker Support and Current Limitations</h2>
+
+<p>Image provisioner uses <a href="https://docs.docker.com/registry/spec/api/">Docker v2 registry
+API</a> to fetch Docker
+images/layers. The fetching is based on <code>curl</code>, therefore SSL is
+automatically handled. For private registries, the operator needs to
+configure <code>curl</code> accordingly so that it knows where to find the
+additional certificate files. Fetching requiring authentication is
+currently not supported yet (coming soon).</p>
+
+<p>Private registry is supported through the <code>--docker_registry</code> agent
+flag. Specifying private registry for each container using
+<code>Image.Docker.name</code> is not supported yet (coming soon).</p>
+
+<p>If the <code>--docker_registry</code> agent flag points to a local directory
+(e.g., <code>/tmp/mesos/images/docker</code>), the provisioner will pull Docker
+images from local filesystem, assuming Docker archives (result of
+<code>docker save</code>) are stored there based on the image name and tag.  For
+example, the operator can put a <code>busybox:latest.tar</code> (the result of
+<code>docker save -o busybox:latest.tar busybox</code>) under
+<code>/tmp/mesos/images/docker</code> and launch the agent by specifying
+<code>--docker_registry=/tmp/mesos/images/docker</code>. Then the framework can
+launch a Docker container by specifying <code>busybox:latest</code> as the name
+of the Docker image.</p>
+
+<p>If the <code>--switch_user</code> flag is set on the agent and the framework
+specifies a user (either <code>CommandInfo.user</code> or <code>FrameworkInfo.user</code>),
+we expect that user exists in the container image and its uid and gids
+matches that on the host. User namespace and capabilities are not
+supported yet.</p>
+
+<p>Only host network is supported. We will add bridge network support
+soon using CNI support in Mesos
+(<a href="https://issues.apache.org/jira/browse/MESOS-4641">MESOS-4641</a>).</p>
+
+<h3>More agent flags</h3>
+
+<p><code>--docker_registry</code>: The default URL for pulling Docker images. It
+could either be a Docker registry server URL (i.e:
+<code>https://registry.docker.io</code>), or a local path (i.e:
+<code>/tmp/docker/images</code>) in which Docker image archives (result of
+<code>docker save</code>) are stored. The default value is
+<code>https://registry-1.docker.io</code>.</p>
+
+<p><code>--docker_store_dir</code>: Directory the Docker provisioner will store
+images in. All the Docker images are cached under this directory. The
+default value is <code>/tmp/mesos/store/docker</code>.</p>
+
+<h2>Appc Support and Current Limitations</h2>
+
+<p>Currently, only the root filesystem specified in the Appc image is
+supported. Other runtime configurations like environment variables,
+exec, working directory are not supported yet (coming soon).</p>
+
+<p>For image discovery, we current support a simple discovery mechanism.
+We allow operators to specify a URI prefix which will be prepend to
+the URI template <code>{name}-{version}-{os}-{arch}.{ext}</code>. For example, if
+the URI prefix is <code>file:///tmp/appc/</code> and the Appc image name is
+<code>example.com/reduce-worker</code> with <code>version:1.0.0</code>, we will fetch the
+image at <code>file:///tmp/appc/example.com/reduce-worker-1.0.0.aci</code>.</p>
+
+<h3>More agent flags</h3>
+
+<p><code>appc_simple_discovery_uri_prefix</code>: URI prefix to be used for simple
+discovery of appc images, e.g., <code>http://</code>, <code>https://</code>,
+<code>hdfs://&lt;hostname&gt;:9000/user/abc/cde</code>. The default value is <code>http://</code>.</p>
+
+<p><code>appc_store_dir</code>: Directory the appc provisioner will store images in.
+All the Appc images are cached under this directory. The default value
+is <code>/tmp/mesos/store/appc</code>.</p>
+
+<h2>Provisioner Backends</h2>
+
+<p>A provisioner backend takes a set of filesystem layers and stacks them
+into a root filesystem. The following backends are supported
+currently.</p>
+
+<h3>Copy</h3>
+
+<p>The Copy backend simply copies all the layers into a target root
+directory to create a root filesystem.</p>
+
+<h3>Bind</h3>
+
+<p>This is a specialized backend that may be useful for deployments using
+large (multi-GB) single-layer images <em>and</em> where more recent kernel
+features such as overlayfs are not available. For small images (10&rsquo;s
+to 100&rsquo;s of MB) the copy backend may be sufficient. Bind backend is
+faster than Copy as it requires nearly zero IO.</p>
+
+<p>The bind backend currently has these two limitations:</p>
+
+<ol>
+<li><p>The bind backend supports only a single layer. Multi-layer images will
+fail to provision and the container will fail to launch!</p></li>
+<li><p>The filesystem is read-only because all containers using this image
+share the source. Select writable areas can be achieved by mounting
+read-write volumes to places like <code>/tmp</code>, <code>/var/tmp</code>, <code>/home</code>, etc.
+using the <code>ContainerInfo</code>. These can be relative to the executor work
+directory. Since the filesystem is read-only, <code>--sandbox_directory</code>
+must already exist within the filesystem because the filesystem
+isolator is unable to create it (e.g., either the image writer needs
+to create the mount point in the image, or the operator needs to set
+agent flag <code>--sandbox_directory</code> properly).</p></li>
+</ol>
+
+
+<h3>Overlay</h3>
+
+<p>The reson overlay backend was introduced is because the copy backend
+will waste IO and space while the bind backend can only deal with one
+layer. The overlay backend allows containizer to utilize the
+filesystem to merge multiple filesystems into one efficiently.</p>
+
+<p>As the overlay backend request multiple lower layers support, the
+version of linux kernel should be greater than 4.0, refer
+<a href="https://github.com/manjaro/manjaro-tools-iso-profiles/issues/40">here</a>
+for more detail.</p>
+
+<p>For more information of overlayfs, please refer to
+<a href="https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt">here</a>.</p>
+
+<p>The overlay backend currently has these two limitations:</p>
+
+<ol>
+<li><p>The overlay backend only supports more than one single layer. One
+single layer images will fail to provision and the container will fail
+to launch! This limitation will be solved soon.</p></li>
+<li><p>Similar to the bind backend, the filesystem will be read-only.
+Please refer to the second limitation of the bind backend for more
+details. We will resolve this limitation soon.</p></li>
+</ol>
+
+
+<h2>Executor Dependencies in a Container Image</h2>
+
+<p>Mesos has this concept of executors. All tasks are launched by an
+executor. For a general purpose executor (e.g., thermos) of a
+framework (e.g., Aurora), requiring it and all its dependencies to be
+present in all possible container images that a user might use is
+not trivial.</p>
+
+<p>In order to solve this issue, we propose a solution where we allow the
+executor to run on the host filesystem (without a container image).
+Instead, it can specify a <code>volume</code> whose source is an <code>Image</code>. Mesos
+containerizer will provision the <code>image</code> specified in the <code>volume</code>,
+and mount it under the sandbox directory. The executor can perform
+<code>pivot_root</code> or <code>chroot</code> itself to enter the container root
+filesystem. This is how we solve the command executor issue, avoiding
+the requirement that it has to exist in all container images.</p>
+
+<h2>References</h2>
+
+<p>For more information on the Mesos containerizer filesystem, namespace,
+and isolator features, visit <a href="/documentation/latest/./mesos-containerizer/">Mesos
+Containerizer</a>.  For more information on
+launching Docker containers through the Docker containerizer, visit
+<a href="/documentation/latest/./docker-containerizer/">Docker Containerizer</a>.</p>
+
+	</div>
+</div>
+
+			
+	      <hr>
+
+				<!-- footer -->
+	      <div class="footer">
+	        <p>&copy; 2012-2015 <a href="http://apache.org">The Apache Software Foundation</a>.
+	        Apache Mesos, the Apache feather logo, and the Apache Mesos project logo are trademarks of The Apache Software Foundation.<p>
+	      </div><!-- /footer -->
+
+	    </div> <!-- /container -->
+
+	    <!-- JS -->
+	    <script src="//code.jquery.com/jquery-1.11.0.min.js" type="text/javascript"></script>
+			<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js" type="text/javascript"></script>
+    </body>
+</html>

Modified: mesos/site/publish/downloads/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/downloads/index.html?rev=1735499&r1=1735498&r2=1735499&view=diff
==============================================================================
--- mesos/site/publish/downloads/index.html (original)
+++ mesos/site/publish/downloads/index.html Thu Mar 17 20:47:18 2016
@@ -73,6 +73,8 @@
     <h4>Previous Releases</h4>
 
     <ul>
+      <li><a href="http://archive.apache.org/dist/mesos/0.27.2/">0.27.2</a>
+           (<a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12311242&version=12334913">Release Notes</a>)</li>
       <li><a href="http://archive.apache.org/dist/mesos/0.27.1/">0.27.1</a>
            (<a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12311242&version=12334748">Release Notes</a>)</li>
       <li><a href="http://archive.apache.org/dist/mesos/0.27.0/">0.27.0</a>

Modified: mesos/site/publish/index.html
URL: http://svn.apache.org/viewvc/mesos/site/publish/index.html?rev=1735499&r1=1735498&r2=1735499&view=diff
==============================================================================
--- mesos/site/publish/index.html (original)
+++ mesos/site/publish/index.html Thu Mar 17 20:47:18 2016
@@ -71,7 +71,7 @@
     <h1>Program against your datacenter like it’s a single pool of resources</h1>
     <p class="lead">Apache Mesos abstracts CPU, memory, storage, and other compute resources away from machines (physical or virtual), enabling fault-tolerant and elastic distributed systems to easily be built and run effectively.</p>
 
-        <p> <a href="downloads/"><span class="glyphicon glyphicon-download"></span> Download Mesos 0.27.2</a> or learn how to <a href="gettingstarted/">get started</a></p>
+        <p> <a href="downloads/"><span class="glyphicon glyphicon-download"></span> Download Mesos 0.28.0</a> or learn how to <a href="gettingstarted/">get started</a></p>
     </div>
 </div>
 
@@ -101,6 +101,8 @@
   <div class="col-md-5">
     <h3>News</h3>
       <ul>
+      <li><em>March 7, 2016</em> - Mesos 0.28.0 is released! See the <a href="https://git-wip-us.apache.org/repos/asf?p=mesos.git;a=blob_plain;f=CHANGELOG;hb=0.28.0">CHANGELOG</a> and <a href="/blog/mesos-0-28-0-released/">blog post</a> for details.</li>
+      <li><em>February 22, 2016</em> - Mesos 0.27.1 is released! See the <a href="https://git-wip-us.apache.org/repos/asf?p=mesos.git;a=blob_plain;f=CHANGELOG;hb=0.27.1">CHANGELOG</a> and <a href="/blog/mesos-0-27-1-released/">blog post</a> for details.</li>
       <li><em>March 7, 2016</em> - Mesos 0.27.2 is released! See the <a href="https://git-wip-us.apache.org/repos/asf?p=mesos.git;a=blob_plain;f=CHANGELOG;hb=0.27.2">CHANGELOG</a> and <a href="/blog/mesos-0-27-2-released/">blog post</a> for details.</li>
       <li><em>February 22, 2016</em> - Mesos 0.27.1 is released! See the <a href="https://git-wip-us.apache.org/repos/asf?p=mesos.git;a=blob_plain;f=CHANGELOG;hb=0.27.1">CHANGELOG</a> and <a href="/blog/mesos-0-27-1-released/">blog post</a> for details.</li>
       <li><em>February 12, 2016</em> - MesosCon 2016 CFP is now open!  See the <a href="/blog/mesoscon-2016-cfp-is-now-open/">blog post</a> for details.</li>