Skip to content

Commit

Permalink
Merge pull request kubernetes#4597 from whitmo/juju-getting-started
Browse files Browse the repository at this point in the history
A getting started guide for juju
  • Loading branch information
erictune committed Mar 5, 2015
2 parents 2c286fe + 88e5b41 commit aea9876
Show file tree
Hide file tree
Showing 2 changed files with 198 additions and 0 deletions.
8 changes: 8 additions & 0 deletions docs/getting-started-guides/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ Ovirt | | | [docs](../../docs/getting-started-guide
Rackspace | CoreOS | CoreOS | [docs](../../docs/getting-started-guides/rackspace.md) | Inactive |
Bare-metal | custom | CentOS | [docs](../../docs/getting-started-guides/centos/centos_manual_config.md) | Community(@coolsvap) | Uses K8s v0.9.1
libvirt/KVM | CoreOS | CoreOS | [docs](../../docs/getting-started-guides/libvirt-coreos.md) | Community (@lhuard1A) |
Bare-metal | custom | CentOS | [docs](../../docs/getting-started-guides/centos/centos_manual_config.md) | Community(@coolsvap) | Uses K8s v0.9.1
AWS | Juju | Ubuntu | [docs](../../docs/getting-started-guides/juju.md) | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) ) | [Tested](http://reports.vapour.ws/charm-tests-by-charm/kubernetes) K8s v0.8.1
OpenStack/HPCloud | Juju | Ubuntu | [docs](../../docs/getting-started-guides/juju.md) | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) ) | [Tested](http://reports.vapour.ws/charm-tests-by-charm/kubernetes) K8s v0.8.1
Joyent | Juju | Ubuntu | [docs](../../docs/getting-started-guides/juju.md) | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) ) | [Tested](http://reports.vapour.ws/charm-tests-by-charm/kubernetes) K8s v0.8.1




Definition of columns:
- **IaaS Provider** is who/what provides the virtual or physical machines (nodes) that Kubernetes runs on.
- **OS** is the base operating system of the nodes.
Expand Down
190 changes: 190 additions & 0 deletions docs/getting-started-guides/juju.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
## Getting start with Juju

Juju handles provisioning machines and deploying complex systems to a
wide number of clouds.



### Prerequisites

#### On Ubuntu

[Install the Juju client](https://juju.ubuntu.com/install) on your
local ubuntu system:

sudo add-apt-repository ppa:juju/stable
sudo apt-get update
sudo apt-get install juju-core juju-quickstart


#### With Docker

If you are not using ubuntu or prefer the isolation of docker, you may
run the following:

mkdir ~/.juju
sudo docker run -v ~/.juju:/home/ubuntu/.juju -ti whitmo/jujubox:latest

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

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

juju quickstart https://raw.githubusercontent.com/whitmo/bundle-kubernetes/master/bundles.yaml

First this command will start a curses based gui allowing you to set
up credentials and other environmental settings for several different
providers including Azure and AWS.

Next it will deploy the kubernetes master, etcd, 2 minions with flannel networking.


## Exploring the cluster

Juju status provides information about each unit in the cluster:

juju status --format=oneline

- etcd/0: 52.0.74.109 (started)
- flannel/0: 52.0.149.150 (started)
- flannel/1: 52.0.185.81 (started)
- juju-gui/0: 52.1.150.81 (started)
- kubernetes/0: 52.0.149.150 (started)
- kubernetes/1: 52.0.185.81 (started)
- kubernetes-master/0: 52.1.120.142 (started)

You can use `juju ssh` to access any of the units:

juju ssh kubernetes-master/0


## Run some containers!

`kubectl` is available on the kubernetes master node. We'll ssh in to
launch some containers, but one could use kubectl locally setting
KUBERNETES_MASTER to point at the ip of `kubernetes-master/0`.

No pods will be available before starting a container:

kubectl get pods
POD CONTAINER(S) IMAGE(S) HOST LABELS STATUS

kubectl get replicationControllers
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS

We'll follow the aws-coreos example. Create a pod manifest: `pod.json`

```
{
"id": "hello",
"kind": "Pod",
"apiVersion": "v1beta1",
"desiredState": {
"manifest": {
"version": "v1beta1",
"id": "hello",
"containers": [{
"name": "hello",
"image": "quay.io/kelseyhightower/hello",
"ports": [{
"containerPort": 80,
"hostPort": 80
}]
}]
}
},
"labels": {
"name": "hello",
"environment": "testing"
}
}
```

Create the pod with kubectl:

kubectl create -f pod.json


Get info on the pod:

kubectl get pods


To test the hello app, we'll need to locate which minion is hosting
the container. Better tooling for using juju to introspect container
is in the works but for let'suse `juju run` and `juju status` to find
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....


We see `kubernetes/1` has our container, we can open port 80:

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

We can add minion units like so:

juju add-unit flannel # creates unit flannel/2
juju add-unit kubernetes --to flannel/2


## Tear down cluster

juju destroy-environment --force `juju env`


## More Info

Kubernetes Bundle on Github

- [Bundle Repository](https://github.com/whitmo/bundle-kubernetes)
* [Kubernetes master charm](https://github.com/whitmo/charm-kubernetes-master)
* [Kubernetes mininion charm](https://github.com/whitmo/charm-kubernetes)
- [Bundle Documentation](http://whitmo.github.io/bundle-kubernetes)
- [More about Juju](https://juju.ubuntu.com)


### Cloud compatibility

Juju runs natively against a variety of cloud providers and can be
made to work against many more using a generic manual provider.



Provider | v0.8.1
-------------- | -------
AWS | [Pass](http://reports.vapour.ws/charm-test-details/charm-bundle-test-parent-136)
HPCloud | [Pass](http://reports.vapour.ws/charm-test-details/charm-bundle-test-parent-136)
OpenStack | [Pass](http://reports.vapour.ws/charm-test-details/charm-bundle-test-parent-136)
Joyent | [Pass](http://reports.vapour.ws/charm-test-details/charm-bundle-test-parent-136)
Azure | TBD
Digital Ocean | TBD
MAAS (bare metal) | TBD
GCE | TBD

0 comments on commit aea9876

Please sign in to comment.