2015-07-12 04:04:52 +00:00
|
|
|
<!-- BEGIN MUNGE: UNVERSIONED_WARNING -->
|
|
|
|
|
|
|
|
<!-- BEGIN STRIP_FOR_RELEASE -->
|
|
|
|
|
2015-07-16 17:02:26 +00:00
|
|
|
<img src="http://kubernetes.io/img/warning.png" alt="WARNING"
|
|
|
|
width="25" height="25">
|
|
|
|
<img src="http://kubernetes.io/img/warning.png" alt="WARNING"
|
|
|
|
width="25" height="25">
|
|
|
|
<img src="http://kubernetes.io/img/warning.png" alt="WARNING"
|
|
|
|
width="25" height="25">
|
|
|
|
<img src="http://kubernetes.io/img/warning.png" alt="WARNING"
|
|
|
|
width="25" height="25">
|
|
|
|
<img src="http://kubernetes.io/img/warning.png" alt="WARNING"
|
|
|
|
width="25" height="25">
|
|
|
|
|
|
|
|
<h2>PLEASE NOTE: This document applies to the HEAD of the source tree</h2>
|
|
|
|
|
|
|
|
If you are using a released version of Kubernetes, you should
|
|
|
|
refer to the docs that go with that version.
|
|
|
|
|
|
|
|
<strong>
|
|
|
|
The latest 1.0.x release of this document can be found
|
|
|
|
[here](http://releases.k8s.io/release-1.0/docs/getting-started-guides/juju.md).
|
|
|
|
|
|
|
|
Documentation for other releases can be found at
|
|
|
|
[releases.k8s.io](http://releases.k8s.io).
|
|
|
|
</strong>
|
|
|
|
--
|
2015-07-13 22:15:35 +00:00
|
|
|
|
2015-07-12 04:04:52 +00:00
|
|
|
<!-- END STRIP_FOR_RELEASE -->
|
|
|
|
|
|
|
|
<!-- END MUNGE: UNVERSIONED_WARNING -->
|
2015-07-20 19:43:51 +00:00
|
|
|
|
2015-06-22 19:39:35 +00:00
|
|
|
Getting started with Juju
|
|
|
|
-------------------------
|
2015-02-18 19:42:28 +00:00
|
|
|
|
2015-07-20 19:43:51 +00:00
|
|
|
[Juju](https://jujucharms.com/docs/stable/about-juju) makes it easy to deploy
|
|
|
|
Kubernetes by provisioning, installing and configuring all the systems in
|
|
|
|
the cluster. Once deployed the cluster can easily scale up with one command
|
|
|
|
to increase the cluster size.
|
|
|
|
|
2015-02-18 19:42:28 +00:00
|
|
|
|
2015-06-22 19:39:35 +00:00
|
|
|
**Table of Contents**
|
2015-06-22 18:56:19 +00:00
|
|
|
|
2015-06-23 15:20:31 +00:00
|
|
|
- [Prerequisites](#prerequisites)
|
|
|
|
- [On Ubuntu](#on-ubuntu)
|
|
|
|
- [With Docker](#with-docker)
|
|
|
|
- [Launch Kubernetes cluster](#launch-kubernetes-cluster)
|
|
|
|
- [Exploring the cluster](#exploring-the-cluster)
|
|
|
|
- [Run some containers!](#run-some-containers)
|
|
|
|
- [Scale out cluster](#scale-out-cluster)
|
|
|
|
- [Launch the "k8petstore" example app](#launch-the-k8petstore-example-app)
|
|
|
|
- [Tear down cluster](#tear-down-cluster)
|
|
|
|
- [More Info](#more-info)
|
|
|
|
- [Cloud compatibility](#cloud-compatibility)
|
2015-06-22 18:56:19 +00:00
|
|
|
|
2015-03-03 16:44:54 +00:00
|
|
|
|
2015-06-22 19:39:35 +00:00
|
|
|
## Prerequisites
|
2015-02-18 19:42:28 +00:00
|
|
|
|
2015-07-20 19:43:51 +00:00
|
|
|
> Note: If you're running kube-up, on Ubuntu - all of the dependencies
|
2015-04-20 22:19:45 +00:00
|
|
|
> will be handled for you. You may safely skip to the section:
|
|
|
|
> [Launch Kubernetes Cluster](#launch-kubernetes-cluster)
|
|
|
|
|
2015-06-22 19:39:35 +00:00
|
|
|
### On Ubuntu
|
2015-02-18 19:42:28 +00:00
|
|
|
|
2015-07-20 19:43:51 +00:00
|
|
|
[Install the Juju client](https://jujucharms.com/get-started) on your
|
|
|
|
local Ubuntu system:
|
2015-02-18 19:42:28 +00:00
|
|
|
|
|
|
|
sudo add-apt-repository ppa:juju/stable
|
|
|
|
sudo apt-get update
|
|
|
|
sudo apt-get install juju-core juju-quickstart
|
|
|
|
|
|
|
|
|
2015-06-22 19:39:35 +00:00
|
|
|
### With Docker
|
2015-02-18 19:42:28 +00:00
|
|
|
|
2015-07-20 19:43:51 +00:00
|
|
|
If you are not using Ubuntu or prefer the isolation of Docker, you may
|
2015-02-18 19:42:28 +00:00
|
|
|
run the following:
|
|
|
|
|
|
|
|
mkdir ~/.juju
|
2015-07-20 19:43:51 +00:00
|
|
|
sudo docker run -v ~/.juju:/home/ubuntu/.juju -ti jujusolutions/jujubox:latest
|
2015-02-18 19:42:28 +00:00
|
|
|
|
|
|
|
At this point from either path you will have access to the `juju
|
|
|
|
quickstart` command.
|
|
|
|
|
|
|
|
To set up the credentials for your chosen cloud run:
|
|
|
|
|
|
|
|
juju quickstart --constraints="mem=3.75G" -i
|
|
|
|
|
2015-07-20 19:43:51 +00:00
|
|
|
> The `constraints` flag is optional, it changes the size of virtual machines
|
|
|
|
> that Juju will generate when it requests a new machine. Larger machines
|
|
|
|
> will run faster but cost more money than smaller machines.
|
|
|
|
|
2015-02-18 19:42:28 +00:00
|
|
|
Follow the dialogue and choose `save` and `use`. Quickstart will now
|
|
|
|
bootstrap the juju root node and setup the juju web based user
|
|
|
|
interface.
|
|
|
|
|
|
|
|
|
|
|
|
## Launch Kubernetes cluster
|
|
|
|
|
2015-07-20 19:43:51 +00:00
|
|
|
You will need to export the `KUBERNETES_PROVIDER` environment variable before
|
|
|
|
bringing up the cluster.
|
2015-07-14 23:16:50 +00:00
|
|
|
|
2015-04-20 22:19:45 +00:00
|
|
|
export KUBERNETES_PROVIDER=juju
|
|
|
|
cluster/kube-up.sh
|
2015-02-18 19:42:28 +00:00
|
|
|
|
2015-04-20 22:19:45 +00:00
|
|
|
If this is your first time running the `kube-up.sh` script, it will install
|
2015-07-20 19:43:51 +00:00
|
|
|
the required dependencies to get started with Juju, additionally it will
|
2015-04-20 22:19:45 +00:00
|
|
|
launch a curses based configuration utility allowing you to select your cloud
|
|
|
|
provider and enter the proper access credentials.
|
2015-02-18 19:42:28 +00:00
|
|
|
|
2015-07-20 19:43:51 +00:00
|
|
|
Next it will deploy the kubernetes master, etcd, 2 nodes with flannel based
|
|
|
|
Software Defined Networking (SDN) so containers on different hosts can
|
|
|
|
communicate with each other.
|
2015-02-18 19:42:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
## Exploring the cluster
|
|
|
|
|
2015-07-20 19:43:51 +00:00
|
|
|
The `juju status` command provides information about each unit in the cluster:
|
2015-02-18 19:42:28 +00:00
|
|
|
|
2015-07-20 19:43:51 +00:00
|
|
|
$ juju status --format=oneline
|
2015-04-20 22:19:45 +00:00
|
|
|
- docker/0: 52.4.92.78 (started)
|
|
|
|
- flannel-docker/0: 52.4.92.78 (started)
|
|
|
|
- kubernetes/0: 52.4.92.78 (started)
|
|
|
|
- docker/1: 52.6.104.142 (started)
|
|
|
|
- flannel-docker/1: 52.6.104.142 (started)
|
|
|
|
- kubernetes/1: 52.6.104.142 (started)
|
|
|
|
- etcd/0: 52.5.216.210 (started) 4001/tcp
|
|
|
|
- juju-gui/0: 52.5.205.174 (started) 80/tcp, 443/tcp
|
|
|
|
- kubernetes-master/0: 52.6.19.238 (started) 8080/tcp
|
2015-02-18 19:42:28 +00:00
|
|
|
|
|
|
|
You can use `juju ssh` to access any of the units:
|
|
|
|
|
|
|
|
juju ssh kubernetes-master/0
|
|
|
|
|
|
|
|
|
|
|
|
## Run some containers!
|
|
|
|
|
2015-07-20 20:45:36 +00:00
|
|
|
`kubectl` is available on the Kubernetes master node. We'll ssh in to
|
2015-07-20 19:43:51 +00:00
|
|
|
launch some containers, but one could use `kubectl` locally by setting
|
|
|
|
`KUBERNETES_MASTER` to point at the ip address of "kubernetes-master/0".
|
2015-02-18 19:42:28 +00:00
|
|
|
|
|
|
|
No pods will be available before starting a container:
|
|
|
|
|
|
|
|
kubectl get pods
|
2015-07-08 18:24:24 +00:00
|
|
|
NAME READY STATUS RESTARTS AGE
|
2015-02-18 19:42:28 +00:00
|
|
|
|
2015-05-21 00:17:01 +00:00
|
|
|
kubectl get replicationcontrollers
|
2015-02-18 19:42:28 +00:00
|
|
|
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
|
|
|
|
|
|
|
|
We'll follow the aws-coreos example. Create a pod manifest: `pod.json`
|
|
|
|
|
2015-07-19 01:58:18 +00:00
|
|
|
```json
|
2015-02-18 19:42:28 +00:00
|
|
|
{
|
2015-06-05 19:47:15 +00:00
|
|
|
"apiVersion": "v1",
|
2015-02-18 19:42:28 +00:00
|
|
|
"kind": "Pod",
|
2015-05-28 22:25:10 +00:00
|
|
|
"metadata": {
|
|
|
|
"name": "hello",
|
|
|
|
"labels": {
|
|
|
|
"name": "hello",
|
|
|
|
"environment": "testing"
|
2015-02-18 19:42:28 +00:00
|
|
|
}
|
|
|
|
},
|
2015-05-28 22:25:10 +00:00
|
|
|
"spec": {
|
|
|
|
"containers": [{
|
|
|
|
"name": "hello",
|
|
|
|
"image": "quay.io/kelseyhightower/hello",
|
|
|
|
"ports": [{
|
|
|
|
"containerPort": 80,
|
|
|
|
"hostPort": 80
|
|
|
|
}]
|
|
|
|
}]
|
2015-02-18 19:42:28 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
Create the pod with kubectl:
|
|
|
|
|
|
|
|
kubectl create -f pod.json
|
|
|
|
|
|
|
|
|
|
|
|
Get info on the pod:
|
|
|
|
|
|
|
|
kubectl get pods
|
|
|
|
|
|
|
|
|
2015-07-07 17:37:40 +00:00
|
|
|
To test the hello app, we need to locate which node is hosting
|
2015-07-20 19:43:51 +00:00
|
|
|
the container. Better tooling for using Juju to introspect container
|
2015-06-11 05:11:44 +00:00
|
|
|
is in the works but we can use `juju run` and `juju status` to find
|
2015-02-18 19:42:28 +00:00
|
|
|
our hello app.
|
|
|
|
|
|
|
|
Exit out of our ssh session and run:
|
|
|
|
|
|
|
|
juju run --unit kubernetes/0 "docker ps -n=1"
|
|
|
|
...
|
|
|
|
juju run --unit kubernetes/1 "docker ps -n=1"
|
|
|
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
|
|
|
02beb61339d8 quay.io/kelseyhightower/hello:latest /hello About an hour ago Up About an hour k8s_hello....
|
|
|
|
|
|
|
|
|
2015-07-20 19:43:51 +00:00
|
|
|
We see "kubernetes/1" has our container, we can open port 80:
|
2015-02-18 19:42:28 +00:00
|
|
|
|
|
|
|
juju run --unit kubernetes/1 "open-port 80"
|
|
|
|
juju expose kubernetes
|
|
|
|
sudo apt-get install curl
|
|
|
|
curl $(juju status --format=oneline kubernetes/1 | cut -d' ' -f3)
|
|
|
|
|
|
|
|
Finally delete the pod:
|
|
|
|
|
|
|
|
juju ssh kubernetes-master/0
|
|
|
|
kubectl delete pods hello
|
|
|
|
|
|
|
|
|
|
|
|
## Scale out cluster
|
|
|
|
|
2015-07-07 17:37:40 +00:00
|
|
|
We can add node units like so:
|
2015-02-18 19:42:28 +00:00
|
|
|
|
2015-04-20 22:19:45 +00:00
|
|
|
juju add-unit docker # creates unit docker/2, kubernetes/2, docker-flannel/2
|
2015-02-18 19:42:28 +00:00
|
|
|
|
2015-06-09 12:53:11 +00:00
|
|
|
## Launch the "k8petstore" example app
|
2015-02-18 19:42:28 +00:00
|
|
|
|
2015-07-10 01:02:10 +00:00
|
|
|
The [k8petstore example](../../examples/k8petstore/) is available as a
|
2015-05-19 14:47:08 +00:00
|
|
|
[juju action](https://jujucharms.com/docs/devel/actions).
|
|
|
|
|
|
|
|
juju action do kubernetes-master/0
|
|
|
|
|
2015-07-20 19:43:51 +00:00
|
|
|
> Note: this example includes curl statements to exercise the app, which
|
|
|
|
> automatically generates "petstore" transactions written to redis, and allows
|
|
|
|
> you to visualize the throughput in your browser.
|
2015-05-19 14:47:08 +00:00
|
|
|
|
2015-02-18 19:42:28 +00:00
|
|
|
## Tear down cluster
|
|
|
|
|
2015-05-19 14:47:08 +00:00
|
|
|
./kube-down.sh
|
|
|
|
|
2015-07-20 19:43:51 +00:00
|
|
|
or destroy your current Juju environment (using the `juju env` command):
|
2015-05-19 14:47:08 +00:00
|
|
|
|
2015-02-18 19:42:28 +00:00
|
|
|
juju destroy-environment --force `juju env`
|
|
|
|
|
2015-07-20 19:43:51 +00:00
|
|
|
|
2015-02-18 19:42:28 +00:00
|
|
|
## More Info
|
|
|
|
|
2015-07-20 19:43:51 +00:00
|
|
|
The Kubernetes charms and bundles can be found in the `kubernetes` project on
|
|
|
|
github.com:
|
2015-02-18 19:42:28 +00:00
|
|
|
|
2015-07-20 19:43:51 +00:00
|
|
|
- [Bundle Repository](http://releases.k8s.io/HEAD/cluster/juju/bundles)
|
|
|
|
* [Kubernetes master charm](../../cluster/juju/charms/trusty/kubernetes-master/)
|
|
|
|
* [Kubernetes node charm](../../cluster/juju/charms/trusty/kubernetes/)
|
|
|
|
- [More about Juju](https://jujucharms.com)
|
2015-02-18 19:42:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
### Cloud compatibility
|
|
|
|
|
2015-07-20 19:43:51 +00:00
|
|
|
Juju runs natively against a variety of public cloud providers. Juju currently
|
|
|
|
works with [Amazon Web Service](https://jujucharms.com/docs/stable/config-aws),
|
|
|
|
[Windows Azure](https://jujucharms.com/docs/stable/config-azure),
|
|
|
|
[DigitalOcean](https://jujucharms.com/docs/stable/config-digitalocean),
|
|
|
|
[Google Compute Engine](https://jujucharms.com/docs/stable/config-gce),
|
|
|
|
[HP Public Cloud](https://jujucharms.com/docs/stable/config-hpcloud),
|
|
|
|
[Joyent](https://jujucharms.com/docs/stable/config-joyent),
|
|
|
|
[LXC](https://jujucharms.com/docs/stable/config-LXC), any
|
|
|
|
[OpenStack](https://jujucharms.com/docs/stable/config-openstack) deployment,
|
|
|
|
[Vagrant](https://jujucharms.com/docs/stable/config-vagrant), and
|
|
|
|
[Vmware vSphere](https://jujucharms.com/docs/stable/config-vmware).
|
|
|
|
|
|
|
|
If you do not see your favorite cloud provider listed many clouds can be
|
2015-07-24 21:52:18 +00:00
|
|
|
configured for [manual provisioning](https://jujucharms.com/docs/stable/config-manual).
|
2015-07-20 19:43:51 +00:00
|
|
|
|
|
|
|
The Kubernetes bundle has been tested on GCE and AWS and found to work with
|
2015-07-24 21:52:18 +00:00
|
|
|
version 1.0.0.
|
2015-05-14 22:12:45 +00:00
|
|
|
|
|
|
|
|
2015-07-14 00:13:09 +00:00
|
|
|
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
|
2015-05-14 22:12:45 +00:00
|
|
|
[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/getting-started-guides/juju.md?pixel)]()
|
2015-07-14 00:13:09 +00:00
|
|
|
<!-- END MUNGE: GENERATED_ANALYTICS -->
|