k3s/docs/getting-started-guides/juju.md

274 lines
8.5 KiB
Markdown
Raw Normal View History

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
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
**Table of Contents**
- [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)
## 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
> will be handled for you. You may safely skip to the section:
> [Launch Kubernetes Cluster](#launch-kubernetes-cluster)
### 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
### 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.
export KUBERNETES_PROVIDER=juju
cluster/kube-up.sh
2015-02-18 19:42:28 +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
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
- 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!
`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
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`
```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",
"metadata": {
"name": "hello",
"labels": {
"name": "hello",
"environment": "testing"
2015-02-18 19:42:28 +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
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
juju add-unit docker # creates unit docker/2, kubernetes/2, docker-flannel/2
2015-02-18 19:42:28 +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
[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-02-18 19:42:28 +00:00
## Tear down cluster
./kube-down.sh
2015-07-20 19:43:51 +00:00
or destroy your current Juju environment (using the `juju env` command):
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-07-14 00:13:09 +00:00
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
[![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 -->