<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ivan Font</title><link>http://ivanfont.com/</link><description>Ivan Font</description><atom:link href="http://ivanfont.com/rss.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><lastBuildDate>Mon, 11 Feb 2019 04:49:48 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Pac-Man Application Using Kubernetes Federation</title><link>http://ivanfont.com/posts/pac-man-application-using-kubernetes-federation/</link><dc:creator>Ivan Font</dc:creator><description>&lt;div&gt;&lt;h3&gt;Pac-Man Microservices Architecture Game Update&lt;/h3&gt;
&lt;p&gt;Previously I discussed the next phase of the
&lt;a href="http://ivanfont.com/posts/pacman-nginx-app/"&gt;Pac-Man + NGINX + PHP + MongoDB Kubernetes reference application&lt;/a&gt;
was to deploy the application using a
&lt;a href="https://kubernetes.io/docs/user-guide/federation/"&gt;Kubernetes Federation&lt;/a&gt;.
This was accomplished and you can
&lt;a href="https://github.com/font/k8s-example-apps/blob/master/pacman-nginx-app/docs/pacman-nginx-app-federated-cluster.md"&gt;read about the details here&lt;/a&gt;.
But in general, federation made it really easy to
manage multiple Kubernetes clusters through one pane of glass by deploying the Pac-Man Kubernetes
resources onto the clusters that are part of the federation. It automatically added the necessary
DNS entries for the services deployed to provide a load balanced application across all of the
clusters. This turned the Pac-Man microservices architecture game into a fully scalable
high-availability game.&lt;/p&gt;
&lt;h3&gt;New Features&lt;/h3&gt;
&lt;h5&gt;MongoDB Replica Set&lt;/h5&gt;
&lt;p&gt;Part of moving to a federation required a data replication strategy so your application's data could
scale horizontally as well. This required setting up a
&lt;a href="https://docs.mongodb.com/manual/replication/"&gt;MongoDB Replica Set&lt;/a&gt;. Unfortunately, MongoDB requires
many operations to only be performed on the primary. For example, MongoDB allows reading from many
instances, but only the primary can receive writes. In addition, adding replica set members can only
be done on the primary. Unfortunately this, combined with the fact that federation at the time of
this writing does not yet support things like
&lt;a href="https://kubernetes.io/docs/concepts/abstractions/controllers/statefulsets/"&gt;StatefulSets&lt;/a&gt;,
involved a bit of manual intervention to bootstrap the MongoDB replica set than I would like.&lt;/p&gt;
&lt;h5&gt;Pac-Man Zone&lt;/h5&gt;
&lt;p&gt;Once the application was deployed in the federation, I modified it to add a &lt;code&gt;Zone:&lt;/code&gt; field that would
retrieve the zone of the Pac-Man game instance you were connecting to via the load balanced DNS.
That is, the federated DNS was updated to resolve to the set of IP addresses of the Pac-Man
game service in each of the federated zones to provide load balancing. Multiple refreshes of
the game would continually update the zone you were connecting to and display that for you
above your score. Once you were done playing and saved your high score, the zone
information was also saved along with it.&lt;/p&gt;
&lt;h3&gt;Learnings&lt;/h3&gt;
&lt;p&gt;At first, I was creating the
&lt;a href="https://github.com/font/kubernetes-cluster-federation/tree/v1.5.3"&gt;Kubernetes federation manually&lt;/a&gt;
but this became cumbersome and time consuming so I moved to use
&lt;a href="https://kubernetes.io/docs/admin/federation/kubefed/"&gt;kubefed&lt;/a&gt; which really helped speed up
the process of creating a federated cluster.
&lt;a href="https://github.com/font/k8s-example-apps/blob/master/pacman-nginx-app/docs/kubernetes-cluster-federation.md"&gt;Steps for doing that are captured here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In addition, I learned about some limitations with MongoDB and not having StatefulSets that may pose
problems as the application evolves.&lt;/p&gt;
&lt;h3&gt;Next Steps&lt;/h3&gt;
&lt;p&gt;I'd like to see about performing coordinated migrations of the application as well as handling
failover. What would make those tests more interesting is having a larger volume of transactions
happening in the game, such as updating more data points on a regular interval defined in the game,
while performing those tests. In order to increase complexity in the game I've contemplated
migrating the backend to something more adept at handling that task. In any event, doing failover
tests may bump up against limitations of MongoDB and the lack of Statefulsets. Time will tell.&lt;/p&gt;
&lt;h3&gt;GitHub Link&lt;/h3&gt;
&lt;p&gt;You can read all about the
&lt;a href="https://github.com/font/k8s-example-apps/blob/master/pacman-nginx-app/docs/pacman-nginx-app-federated-cluster.md"&gt;details of how to set up the Pac-Man microservices architecture game here&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;</description><category>game</category><category>gce</category><category>google compute engine</category><category>kubernetes</category><category>mongodb</category><category>nginx</category><category>pacman</category><guid>http://ivanfont.com/posts/pac-man-application-using-kubernetes-federation/</guid><pubDate>Sat, 11 Mar 2017 01:33:34 GMT</pubDate></item><item><title>bash-it: an alternative to oh-my-zsh</title><link>http://ivanfont.com/posts/bash-it-an-alternative-to-oh-my-zsh/</link><dc:creator>Ivan Font</dc:creator><description>&lt;div&gt;&lt;h3&gt;Trying out zsh&lt;/h3&gt;
&lt;p&gt;I have noticed that many people seem to be switching shells to &lt;code&gt;zsh&lt;/code&gt;. In fact, I even tried it myself to see what the hype was all about. :)&lt;/p&gt;
&lt;p&gt;So for a while there I was actually feeling just as good using &lt;code&gt;zsh&lt;/code&gt; as &lt;code&gt;bash&lt;/code&gt;. That was until I started discovering some idiosyncrasies with &lt;code&gt;zsh&lt;/code&gt; that were different from &lt;code&gt;bash&lt;/code&gt;.
It appeared that &lt;code&gt;zsh&lt;/code&gt; was not quite as backwards compatible with &lt;code&gt;bash&lt;/code&gt;. Even though it seems to support the same features, it does so with similar but
different syntax. This made it quite painful because every system I work on has &lt;code&gt;bash&lt;/code&gt; installed and used by default, but not necessarily &lt;code&gt;zsh&lt;/code&gt;. Also,
many scripts out there in repositories are all coded to use &lt;code&gt;bash&lt;/code&gt;. Now of course you can specify the shebang to make sure the scripts use &lt;code&gt;bash&lt;/code&gt;, but why would I want to use a different shell
than the scripts or systems I'm working with use themselves? I would then have to learn and maintain scripts for two different shells depending on what
I'm working on.&lt;/p&gt;
&lt;h4&gt;oh-my-zsh&lt;/h4&gt;
&lt;p&gt;I'll also add that the most promising feature of switching to &lt;code&gt;zsh&lt;/code&gt; was the awesome &lt;a href="https://github.com/robbyrussell/oh-my-zsh"&gt;&lt;code&gt;oh-my-zsh&lt;/code&gt;&lt;/a&gt; GitHub project that gives you a highly customizable framework.
This seemed to clearly be lacking in &lt;code&gt;bash&lt;/code&gt; and so it was this that made it quite compelling for me at first. In addition, I agree that &lt;code&gt;zsh&lt;/code&gt;
does have some nice features that work right out of the gate, but it felt like it was more to do with &lt;code&gt;oh-my-zsh&lt;/code&gt; than &lt;code&gt;zsh&lt;/code&gt; itself.
Therefore, nothing was really compelling enough that you couldn't do with &lt;code&gt;bash&lt;/code&gt;, albiet with some customizations.&lt;/p&gt;
&lt;h3&gt;Moving back to bash&lt;/h3&gt;
&lt;h4&gt;bash-it&lt;/h4&gt;
&lt;p&gt;This is where I stumbled upon &lt;a href="https://github.com/Bash-it/bash-it"&gt;bash-it&lt;/a&gt;. It literally promotes itself as being a
shameless ripoff of &lt;a href="https://github.com/robbyrussell/oh-my-zsh"&gt;oh-my-zsh&lt;/a&gt;. Finally, this seemed to be the piece that was missing from &lt;code&gt;bash&lt;/code&gt; that one was able to get
with &lt;code&gt;zsh&lt;/code&gt; quite easily. I immediately started using it and enjoyed bashing again.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/Bash-it/bash-it"&gt;bash-it&lt;/a&gt; has all of the benefits of a framework with support for plugins, aliases, completions,
custom scripts and functions, themes, updates, search, etc. Here is a quick summary of some help options:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;bash-it show aliases        # shows installed and available aliases
bash-it show completions    # shows installed and available completions
bash-it show plugins        # shows installed and available plugins
bash-it help aliases        # shows help for installed aliases
bash-it help completions    # shows help for installed completions
bash-it help plugins        # shows help for installed plugins
&lt;/pre&gt;


&lt;p&gt;I even stumbled upon a few issues and feature requests myself, which I proceeded to contribute back as time allowed.
I have most recently created and contributed my own &lt;a href="https://github.com/Bash-it/bash-it/blob/master/themes/font/font.theme.bash"&gt;font theme&lt;/a&gt;.
It supports the following prompt features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;time&lt;/li&gt;
&lt;li&gt;Python virtual environment&lt;/li&gt;
&lt;li&gt;user&lt;/li&gt;
&lt;li&gt;host&lt;/li&gt;
&lt;li&gt;path&lt;/li&gt;
&lt;li&gt;git repo&lt;/li&gt;
&lt;li&gt;git branch&lt;/li&gt;
&lt;li&gt;git dirty/not dirty&lt;/li&gt;
&lt;li&gt;return code status of last command&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here is a &lt;a href="https://github.com/font/bash-it/tree/font_theme/themes/font#screenshot"&gt;screenshot&lt;/a&gt; of it in action.&lt;/p&gt;
&lt;p&gt;Check it out and let me know how you like it!&lt;/p&gt;&lt;/div&gt;</description><guid>http://ivanfont.com/posts/bash-it-an-alternative-to-oh-my-zsh/</guid><pubDate>Tue, 28 Feb 2017 21:56:50 GMT</pubDate></item><item><title>Pac-Man NGINX PHP MongoDB Application</title><link>http://ivanfont.com/posts/pacman-nginx-app/</link><dc:creator>Ivan Font</dc:creator><description>&lt;div&gt;&lt;h3&gt;Intro&lt;/h3&gt;
&lt;p&gt;I've started working on a Kubernetes reference application for demonstration purposes. This reference application will continue to evolve
to also work with cloud federation capabilities in Kubernetes. I will provide updates as the application evolves.&lt;/p&gt;
&lt;h3&gt;Pac-Man Game Architecture Brief Overview&lt;/h3&gt;
&lt;h4&gt;Pac-Man&lt;/h4&gt;
&lt;p&gt;The Pac-Man game is a slightly modified version of the open source Pac-Man game written in HTML5 with Javascript. You can get the modified
&lt;a href="https://github.com/font/pacman-canvas"&gt;Pac-Man game source code here&lt;/a&gt;. The modifications are particularly around the backend PHP API. The original
game used SQLite3 as the storage backend for reading and writing high scores. This change replaces SQLite3 with &lt;a href="https://www.mongodb.com/"&gt;MongoDB&lt;/a&gt;
as the storage mechanism.&lt;/p&gt;
&lt;h4&gt;NGINX + PHP FPM&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://www.nginx.com/"&gt;NGINX&lt;/a&gt; is used as the web server to host the Pac-Man game application. It is configured with &lt;a href="https://php-fpm.org/"&gt;PHP FPM&lt;/a&gt; support for the backend PHP API.&lt;/p&gt;
&lt;h4&gt;PHP&lt;/h4&gt;
&lt;p&gt;PHP FPM is used for the PHP API to receive read and write requests from clients and perform database operations. The
&lt;a href="http://php.net/manual/en/set.mongodb.php"&gt;PHP MongoDB driver extension&lt;/a&gt; contains the minimal API for core driver functionality. In addition, the
&lt;a href="http://php.net/manual/en/mongodb.tutorial.library.php"&gt;PHP library for MongoDB&lt;/a&gt; provides the higher level APIs. Both are needed.&lt;/p&gt;
&lt;h4&gt;MongoDB&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://www.mongodb.com/"&gt;MongoDB&lt;/a&gt; is used as the backend database to store the Pac-Man game's high score user data.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;For a detailed overview of the Kubernetes reference application and how to set it up yourself, see the
&lt;a href="https://github.com/font/k8s-example-apps/tree/master/pacman-nginx-app"&gt;README&lt;/a&gt; in the repository.&lt;/p&gt;
&lt;h4&gt;Have fun!&lt;/h4&gt;
&lt;p&gt;&lt;img src="http://ivanfont.com/images/pacman.png"&gt;&lt;/p&gt;&lt;/div&gt;</description><category>game</category><category>gce</category><category>google compute engine</category><category>kubernetes</category><category>mongodb</category><category>nginx</category><category>pacman</category><guid>http://ivanfont.com/posts/pacman-nginx-app/</guid><pubDate>Tue, 07 Feb 2017 00:35:14 GMT</pubDate></item><item><title>Deploying Containerized Ceph on a Kubernetes Cluster Using Google Compute Engine</title><link>http://ivanfont.com/posts/ceph-on-gce-kubernetes-cluster/</link><dc:creator>Ivan Font</dc:creator><description>&lt;div&gt;&lt;h3&gt;Quick Summary&lt;/h3&gt;
&lt;p&gt;Recently we've been hard at work trying to set up dynamic provisioning of Ceph Rados
Block Device storage on a Kubernetes cluster. This required:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes version &amp;gt;= 1.5&lt;/li&gt;
&lt;li&gt;The ability to install Ceph and RBD packages on all host nodes i.e. master and slaves&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unfortunately we could not use Google Container Engine (GKE) for this because
at first, it did not support version 1.5 since it was too new.
Google quickly resolved that and has been really
good at keeping up-to-date with the latest Kubernetes releases. However, the
subsequent problem is that we needed to install Ceph and RBD packages on all host
nodes. Even though Google does provide a &lt;code&gt;CONTAINER_VM&lt;/code&gt; image that is able to
install packages, GKE does not provide access to the master to install the necessary
packages. This seems like a limitation with GKE. So it was decided to move towards
a manual deployment of a Kubernetes cluster. For the manual deployment we used
Google Compute Engine and followed the nice example Kelsey Hightower provides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kelseyhightower/kubernetes-the-hard-way"&gt;Kubernetes the Hard Way&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At first, I was hitting a DNS problem until I realized that there was a firewall rule missing for
the POD CIDR that was being used. See &lt;a href="https://github.com/kelseyhightower/kubernetes-the-hard-way/issues/88"&gt;issue 88&lt;/a&gt; and the &lt;a href="https://github.com/kelseyhightower/kubernetes-the-hard-way/pull/117"&gt;pull request&lt;/a&gt; that resolves it for more details. It was also nice to script the deployment
so we created some scripts for that as well but they have not yet been merged. In the
meantime you can get them here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/font/kubernetes-the-hard-way/tree/scripts"&gt;https://github.com/font/kubernetes-the-hard-way/tree/scripts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the end it was good to understand how the different components of Kubernetes
fit together and be able to debug it a bit.&lt;/p&gt;
&lt;p&gt;After Kubernetes was deployed we deployed Ceph and went about testing CephFS and RBD
volume mounts, static provisioning of CephFS and RBD persistent volume claims, as
well as dynamic provisioning of RBD persistent volume claims and they all worked great!&lt;/p&gt;
&lt;h3&gt;Documentation&lt;/h3&gt;
&lt;p&gt;If you're interested you can get the detailed documentation here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ceph/ceph-docker/tree/master/examples/kubernetes/gce"&gt;https://github.com/ceph/ceph-docker/tree/master/examples/kubernetes/gce&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Video Demonstration&lt;/h4&gt;
&lt;p&gt;In the documentation you'll also find a link to this video demonstration that walks through those
steps:&lt;/p&gt;
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/ic38-19wIGY" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;h4&gt;Enjoy!&lt;/h4&gt;&lt;/div&gt;</description><category>ceph</category><category>cloud</category><category>gce</category><category>google compute engine</category><category>kubernetes</category><category>storage</category><guid>http://ivanfont.com/posts/ceph-on-gce-kubernetes-cluster/</guid><pubDate>Fri, 03 Feb 2017 19:38:03 GMT</pubDate></item><item><title>Creating custom Kubernetes cluster using Google Compute Engine (GCE)</title><link>http://ivanfont.com/posts/creating-custom-kubernetes-cluster-using-google-compute-engine-gce/</link><dc:creator>Ivan Font</dc:creator><description>&lt;div&gt;&lt;h3&gt;Overview&lt;/h3&gt;
&lt;p&gt;If you're looking to get started with &lt;a href="http://kubernetes.io/"&gt;Kubernetes&lt;/a&gt;, there are 3 ways as of this writing:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Prebuilt Binary Release&lt;/li&gt;
&lt;li&gt;Building from source&lt;ul&gt;
&lt;li&gt;Note that if you're cloning Kubernetes from source, you will need to build
a release in order to generate the necessary binaries in an archive for
deployment. Building can take some time - so take a break.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Download Kubernetes and automatically set up a default cluster&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We'll be discussing how to download any version of &lt;a href="http://kubernetes.io/"&gt;Kubernetes&lt;/a&gt;
and automatically set up a default cluster as that's the quickest, most configurable
option. Particularly, we'll be focusing on downloading Kubernetes and creating
a customized deployment on &lt;a href="https://cloud.google.com/compute/"&gt;Google Compute Engine (GCE)&lt;/a&gt;.
However, there are also numerous others e.g. gke, aws, azure, vagrant, etc.&lt;/p&gt;
&lt;p&gt;So, if you're looking to create a Kubernetes cluster on Google Compute Engine (GCE),
then an easy way to get started is by following the
&lt;a href="http://kubernetes.io/docs/getting-started-guides/gce/"&gt;getting-started-guide&lt;/a&gt; for
GCE which we'll walk through briefly here.&lt;/p&gt;
&lt;h3&gt;Prerequisites&lt;/h3&gt;
&lt;p&gt;Make sure to pay attention to the prereqs discussed
&lt;a href="http://kubernetes.io/docs/getting-started-guides/gce/#prerequisites"&gt;here&lt;/a&gt; as they discuss making
sure that you have your Google Cloud Platform setup and configured properly for an
automatic deployment. Particularly, you'll want to make sure you can access the &lt;a href="https://developers.google.com/console/help/new/#activatingapis"&gt;Compute
Engine Instance Group Manager API&lt;/a&gt;,
make sure that &lt;code&gt;gcloud&lt;/code&gt; is set to use the Google Cloud Platform project you want, and that
&lt;code&gt;gcloud&lt;/code&gt; has the proper credentials. A good test for this is to run some &lt;code&gt;gcloud&lt;/code&gt; commands to test
that you can create an instance and SSH into it:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;$ gcloud compute instances create example-instance --image-family ubuntu-1604-lts --image-project ubuntu-os-cloud
Created &lt;span class="o"&gt;[&lt;/span&gt;https://www.googleapis.com/compute/v1/projects/gce-kube-cluster/zones/us-west1-a/instances/example-instance&lt;span class="o"&gt;]&lt;/span&gt;.
NAME              ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP     STATUS
example-instance  us-west1-a  n1-standard-1               &lt;span class="m"&gt;10&lt;/span&gt;.138.0.2   &lt;span class="m"&gt;104&lt;/span&gt;.196.227.36  RUNNING
gcloud compute ssh example-instance
Updating project ssh metadata...&lt;span class="p"&gt;|&lt;/span&gt;Updated &lt;span class="o"&gt;[&lt;/span&gt;https://www.googleapis.com/compute/v1/projects/gce-kube-cluster&lt;span class="o"&gt;]&lt;/span&gt;.
Updating project ssh metadata...done.
Warning: Permanently added &lt;span class="s1"&gt;'compute.2723409803693978954'&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;ECDSA&lt;span class="o"&gt;)&lt;/span&gt; to the list of known hosts.
Welcome to Ubuntu &lt;span class="m"&gt;16&lt;/span&gt;.04.1 LTS &lt;span class="o"&gt;(&lt;/span&gt;GNU/Linux &lt;span class="m"&gt;4&lt;/span&gt;.4.0-53-generic x86_64&lt;span class="o"&gt;)&lt;/span&gt;

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

&lt;span class="m"&gt;0&lt;/span&gt; packages can be updated.
&lt;span class="m"&gt;0&lt;/span&gt; updates are security updates.


To run a &lt;span class="nb"&gt;command&lt;/span&gt; as administrator &lt;span class="o"&gt;(&lt;/span&gt;user &lt;span class="s2"&gt;"root"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;, use &lt;span class="s2"&gt;"sudo &amp;lt;command&amp;gt;"&lt;/span&gt;.
See &lt;span class="s2"&gt;"man sudo_root"&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; details.

test@example-instance:~$
&lt;/pre&gt;


&lt;h3&gt;Starting a cluster with default configuration&lt;/h3&gt;
&lt;p&gt;Now we're ready for an automatic download and deployment of the Kubernetes cluster in
our GCE project. Kubernetes allows automatic download and deployment of the cluster onto
one of many providers using the &lt;code&gt;KUBERNETES_PROVIDER&lt;/code&gt; variable:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;$ &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;KUBERNETES_PROVIDER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gce
&lt;/pre&gt;


&lt;p&gt;If this variable is not specified, it uses &lt;code&gt;gce&lt;/code&gt;, Google's Compute Engine, by default.&lt;/p&gt;
&lt;p&gt;If you're ready to just accept the default options for instantiating the cluster using
the latest version of Kubernetes you can just run:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;$ curl -sS https://get.k8s.io &lt;span class="p"&gt;|&lt;/span&gt; bash
&lt;/pre&gt;


&lt;p&gt;or&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;$ wget -q -O - https://get.k8s.io &lt;span class="p"&gt;|&lt;/span&gt; bash
&lt;/pre&gt;


&lt;h3&gt;Starting a cluster with custom configuration&lt;/h3&gt;
&lt;p&gt;However, sometimes you'd like to download a different version of Kubernetes and/or modify
some of the available GCE configuration options depending on your needs.
In order to do this, we want to allow the automated download of a specific version
of the Kubernetes binaries, but allow us to modify
parameters before the automated deployment. This is achieved by downloading the script
and saving it to a file:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;$ curl -sS https://get.k8s.io -o kube.sh
&lt;/pre&gt;


&lt;p&gt;or&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;$ wget -q https://get.k8s.io -O kube.sh
&lt;/pre&gt;


&lt;p&gt;Then setting:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;$ &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;KUBERNETES_RELEASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;v1.5.1
$ &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;KUBERNETES_SKIP_CREATE_CLUSTER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/pre&gt;


&lt;p&gt;Feel free to set any version of Kubernetes that you'd like. Then run&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;$ bash kube.sh
&lt;/pre&gt;


&lt;p&gt;After some interactive prompts, which can be avoided by setting &lt;code&gt;KUBERNETES_SKIP_CONFIRM=true&lt;/code&gt;,
Kubernetes is downloaded and we can start to modify some parameters in the &lt;code&gt;cluster/gce/config-default.sh&lt;/code&gt; file.&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; kubernetes
$ grep -E &lt;span class="s1"&gt;'(\w)+='&lt;/span&gt; cluster/gce/config-default.sh
&lt;span class="nv"&gt;KUBE_ROOT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;dirname &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;BASH_SOURCE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;/../..
&lt;span class="nv"&gt;GCLOUD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gcloud
&lt;span class="nv"&gt;ZONE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_GCE_ZONE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;us&lt;/span&gt;&lt;span class="p"&gt;-central1-b&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;REGION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZONE&lt;/span&gt;&lt;span class="p"&gt;%-*&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;RELEASE_REGION_FALLBACK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;RELEASE_REGION_FALLBACK&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;false&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;REGIONAL_KUBE_ADDONS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;REGIONAL_KUBE_ADDONS&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;true&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;NODE_SIZE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NODE_SIZE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;n1&lt;/span&gt;&lt;span class="p"&gt;-standard-2&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;NUM_NODES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NUM_NODES&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;3&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;MASTER_SIZE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;MASTER_SIZE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;n1&lt;/span&gt;&lt;span class="p"&gt;-standard-&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;get-master-size&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;MASTER_DISK_TYPE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pd-ssd
&lt;span class="nv"&gt;MASTER_DISK_SIZE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;MASTER_DISK_SIZE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;20GB&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;NODE_DISK_TYPE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NODE_DISK_TYPE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;-standard&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;NODE_DISK_SIZE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NODE_DISK_SIZE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;100GB&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;REGISTER_MASTER_KUBELET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;REGISTER_MASTER&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;true&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;PREEMPTIBLE_NODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PREEMPTIBLE_NODE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;false&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;PREEMPTIBLE_MASTER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PREEMPTIBLE_MASTER&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;false&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;KUBE_DELETE_NODES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_DELETE_NODES&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;true&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;KUBE_DELETE_NETWORK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_DELETE_NETWORK&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;false&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;MASTER_OS_DISTRIBUTION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_MASTER_OS_DISTRIBUTION&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_OS_DISTRIBUTION&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;gci&lt;/span&gt;&lt;span class="si"&gt;}}&lt;/span&gt;
&lt;span class="nv"&gt;NODE_OS_DISTRIBUTION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_NODE_OS_DISTRIBUTION&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_OS_DISTRIBUTION&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;debian&lt;/span&gt;&lt;span class="si"&gt;}}&lt;/span&gt;
&lt;span class="nv"&gt;CVM_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;container-vm-v20161208
&lt;span class="nv"&gt;GCI_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"gci-dev-56-8977-0-0"&lt;/span&gt;
&lt;span class="nv"&gt;MASTER_IMAGE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_GCE_MASTER_IMAGE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;MASTER_IMAGE_PROJECT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_GCE_MASTER_PROJECT&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;google&lt;/span&gt;&lt;span class="p"&gt;-containers&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;NODE_IMAGE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_GCE_NODE_IMAGE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CVM_VERSION&lt;/span&gt;&lt;span class="si"&gt;}}&lt;/span&gt;
&lt;span class="nv"&gt;NODE_IMAGE_PROJECT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_GCE_NODE_PROJECT&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;google&lt;/span&gt;&lt;span class="p"&gt;-containers&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;CONTAINER_RUNTIME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_CONTAINER_RUNTIME&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;docker&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;RKT_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_RKT_VERSION&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.14.0&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;RKT_STAGE1_IMAGE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_RKT_STAGE1_IMAGE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;coreos&lt;/span&gt;&lt;span class="p"&gt;.com/rkt/stage1-coreos&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;NETWORK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_GCE_NETWORK&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;default&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;INSTANCE_PREFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_GCE_INSTANCE_PREFIX&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;kubernetes&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;CLUSTER_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER_NAME&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;INSTANCE_PREFIX&lt;/span&gt;&lt;span class="si"&gt;}}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;MASTER_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;INSTANCE_PREFIX&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;-master"&lt;/span&gt;
&lt;span class="nv"&gt;INITIAL_ETCD_CLUSTER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;MASTER_NAME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;ETCD_QUORUM_READ&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENABLE_ETCD_QUORUM_READ&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;false&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;MASTER_TAG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;INSTANCE_PREFIX&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;-master"&lt;/span&gt;
&lt;span class="nv"&gt;NODE_TAG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;INSTANCE_PREFIX&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;-minion"&lt;/span&gt;
&lt;span class="nv"&gt;MASTER_IP_RANGE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;MASTER_IP_RANGE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.246.0.0/24&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;CLUSTER_IP_RANGE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER_IP_RANGE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.244.0.0/14&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="nv"&gt;NODE_SCOPES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NODE_SCOPES&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;compute&lt;/span&gt;&lt;span class="p"&gt;-rw,monitoring,logging-write,storage-ro,https://www.googleapis.com/auth/ndev.clouddns.readwrite&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="nv"&gt;NODE_SCOPES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NODE_SCOPES&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;compute&lt;/span&gt;&lt;span class="p"&gt;-rw,monitoring,logging-write,storage-ro&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;EXTRA_DOCKER_OPTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;EXTRA_DOCKER_OPTS&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;SERVICE_CLUSTER_IP_RANGE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;SERVICE_CLUSTER_IP_RANGE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.0.0.0/16&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# formerly PORTAL_NET&lt;/span&gt;
&lt;span class="nv"&gt;ALLOCATE_NODE_CIDRS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;
&lt;span class="nv"&gt;ENABLE_DOCKER_REGISTRY_CACHE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;
&lt;span class="nv"&gt;ENABLE_L7_LOADBALANCING&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_ENABLE_L7_LOADBALANCING&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;glbc&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;ENABLE_CLUSTER_MONITORING&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_ENABLE_CLUSTER_MONITORING&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;influxdb&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;ENABLE_NODE_LOGGING&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_ENABLE_NODE_LOGGING&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;true&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;LOGGING_DESTINATION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_LOGGING_DESTINATION&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;gcp&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;# options: elasticsearch, gcp&lt;/span&gt;
&lt;span class="nv"&gt;ENABLE_CLUSTER_LOGGING&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_ENABLE_CLUSTER_LOGGING&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;true&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;ELASTICSEARCH_LOGGING_REPLICAS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
  &lt;span class="nv"&gt;EXTRA_DOCKER_OPTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;EXTRA_DOCKER_OPTS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; --insecure-registry 10.0.0.0/8"&lt;/span&gt;
&lt;span class="nv"&gt;RUNTIME_CONFIG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_RUNTIME_CONFIG&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;FEATURE_GATES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_FEATURE_GATES&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;ENABLE_CLUSTER_DNS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_ENABLE_CLUSTER_DNS&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;true&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;DNS_SERVER_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_DNS_SERVER_IP&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.0.0.10&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;DNS_DOMAIN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_DNS_DOMAIN&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;.local&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;ENABLE_DNS_HORIZONTAL_AUTOSCALER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_ENABLE_DNS_HORIZONTAL_AUTOSCALER&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;true&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;ENABLE_CLUSTER_REGISTRY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_ENABLE_CLUSTER_REGISTRY&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;false&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;CLUSTER_REGISTRY_DISK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER_REGISTRY_PD&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;INSTANCE_PREFIX&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;-kube-system-kube-registry&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;CLUSTER_REGISTRY_DISK_SIZE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER_REGISTRY_DISK_SIZE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;200GB&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;CLUSTER_REGISTRY_DISK_TYPE_GCE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;CLUSTER_REGISTRY_DISK_TYPE_GCE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;-standard&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;ENABLE_CLUSTER_UI&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_ENABLE_CLUSTER_UI&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;true&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;ENABLE_NODE_PROBLEM_DETECTOR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_ENABLE_NODE_PROBLEM_DETECTOR&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;true&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;ENABLE_CLUSTER_AUTOSCALER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_ENABLE_CLUSTER_AUTOSCALER&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;false&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="nv"&gt;AUTOSCALER_MIN_NODES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_AUTOSCALER_MIN_NODES&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="nv"&gt;AUTOSCALER_MAX_NODES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_AUTOSCALER_MAX_NODES&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="nv"&gt;AUTOSCALER_ENABLE_SCALE_DOWN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_AUTOSCALER_ENABLE_SCALE_DOWN&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;true&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;ENABLE_RESCHEDULER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_ENABLE_RESCHEDULER&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;true&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;ADMISSION_CONTROL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,ResourceQuota
&lt;span class="nv"&gt;KUBE_UP_AUTOMATIC_CLEANUP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_UP_AUTOMATIC_CLEANUP&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;false&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;STORAGE_BACKEND&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;STORAGE_BACKEND&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;NETWORK_PROVIDER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NETWORK_PROVIDER&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;kubenet&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;# none, opencontrail, kubenet&lt;/span&gt;
&lt;span class="nv"&gt;OPENCONTRAIL_TAG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;OPENCONTRAIL_TAG&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;R2&lt;/span&gt;&lt;span class="p"&gt;.20&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;OPENCONTRAIL_KUBERNETES_TAG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;OPENCONTRAIL_KUBERNETES_TAG&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;master&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;OPENCONTRAIL_PUBLIC_SUBNET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;OPENCONTRAIL_PUBLIC_SUBNET&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.1.0.0/16&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;NETWORK_POLICY_PROVIDER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NETWORK_POLICY_PROVIDER&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;none&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;# calico&lt;/span&gt;
&lt;span class="nv"&gt;HAIRPIN_MODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HAIRPIN_MODE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;promiscuous&lt;/span&gt;&lt;span class="p"&gt;-bridge&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;# promiscuous-bridge, hairpin-veth, none&lt;/span&gt;
&lt;span class="nv"&gt;E2E_STORAGE_TEST_ENVIRONMENT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;KUBE_E2E_STORAGE_TEST_ENVIRONMENT&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;false&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="nv"&gt;EVICTION_HARD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;EVICTION_HARD&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.available&amp;lt;250Mi,nodefs.available&amp;lt;10%,nodefs.inodesFree&amp;lt;5%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;SCHEDULING_ALGORITHM_PROVIDER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;SCHEDULING_ALGORITHM_PROVIDER&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;ENABLE_DEFAULT_STORAGE_CLASS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ENABLE_DEFAULT_STORAGE_CLASS&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;true&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;SOFTLOCKUP_PANIC&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;SOFTLOCKUP_PANIC&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;false&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;# true, false&lt;/span&gt;
&lt;/pre&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;You can see there are many options. You can either edit the variables directly in the file or export the
environment variable that is used to set the default. Some of the more interesting options include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ZONE&lt;/code&gt;, &lt;code&gt;REGION&lt;/code&gt; - for you zone and region snobs. Export the &lt;code&gt;KUBE_GCE_ZONE&lt;/code&gt; environment
  variable to edit these settings.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NODE_SIZE&lt;/code&gt; - the default of &lt;code&gt;n1-standard-2&lt;/code&gt; is generally good for my use.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NUM_NODES&lt;/code&gt; - the default of 3 nodes plus a master is probably okay for many tests.
  But for anything with higher demands such as a Ceph cluster, you may want to increase
  this.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MASTER_OS_DISTRIBUTION&lt;/code&gt; and &lt;code&gt;NODE_OS_DISTRIBUTION&lt;/code&gt; - This should match the name of the
  subdirectory within the &lt;code&gt;cluster/gce&lt;/code&gt; directory. As of this writing only coreos, debian, gci,
  and trusty are available. In order to edit these settings you'll want to export
  &lt;code&gt;KUBE_MASTER_OS_DISTRIBUTION&lt;/code&gt; and &lt;code&gt;KUBE_NODE_OS_DISTRIBUTION&lt;/code&gt; to one of the available
  subdirectory options.&lt;ul&gt;
&lt;li&gt;NOTE: it appears that the trusty distribution is not currently working due to
   &lt;a href="https://github.com/kubernetes/kubernetes/issues/39127"&gt;this issue&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MASTER_IMAGE&lt;/code&gt;, &lt;code&gt;MASTER_IMAGE_PROJECT&lt;/code&gt; and &lt;code&gt;NODE_IMAGE&lt;/code&gt;, &lt;code&gt;NODE_IMAGE_PROJECT&lt;/code&gt;- Default for
  the master is the &lt;code&gt;gci&lt;/code&gt; image while nodes use &lt;code&gt;container-vm&lt;/code&gt;, defined by the &lt;code&gt;GCI_VERSION&lt;/code&gt;
  and &lt;code&gt;CVM_VERSION&lt;/code&gt; variables respectively. To get a list of available images to use execute
  &lt;code&gt;gcloud compute images list&lt;/code&gt;. To edit these settings export the &lt;code&gt;KUBE_GCE_MASTER_IMAGE&lt;/code&gt;,
  &lt;code&gt;KUBE_GCE_MASTER_PROJECT&lt;/code&gt;, &lt;code&gt;KUBE_GCE_NODE_IMAGE&lt;/code&gt;, and &lt;code&gt;KUBE_GCE_NODE_PROJECT&lt;/code&gt; to match the
  image name and project that corresponds to the image you want to use.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Edit to your hearts content, then follow it with:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;$ ./cluster/kube-up.sh
&lt;/pre&gt;


&lt;p&gt;If things go south or you want to correct some things, &lt;code&gt;ctrl-c&lt;/code&gt; the execution and run:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;$ ./cluster/kube-down.sh
&lt;/pre&gt;


&lt;p&gt;Make your changes and re-launch.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;This is a pretty easy and quick way to get a custom Kubernetes cluster downloaded and
deployed onto Google Compute Engine (GCE) without much hassle. This is great if you find that you want
a particular version of Kubernetes with the ability to set some GCE configuration options.&lt;/p&gt;
&lt;hr&gt;&lt;/div&gt;</description><category>gce</category><category>kubernetes</category><guid>http://ivanfont.com/posts/creating-custom-kubernetes-cluster-using-google-compute-engine-gce/</guid><pubDate>Fri, 16 Dec 2016 01:11:31 GMT</pubDate></item><item><title>Hello World</title><link>http://ivanfont.com/posts/hello-world/</link><dc:creator>Ivan Font</dc:creator><description>&lt;p&gt;Hello world! This is my first post.&lt;/p&gt;</description><category>tech</category><guid>http://ivanfont.com/posts/hello-world/</guid><pubDate>Sat, 27 Aug 2016 00:40:01 GMT</pubDate></item></channel></rss>