2016-02-24 21:47:57 +00:00
|
|
|
---
|
|
|
|
---
|
2016-03-07 02:29:06 +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
|
2016-03-29 21:17:36 +00:00
|
|
|
the cluster. Once deployed the cluster can easily scale up with one command
|
2016-03-07 02:29:06 +00:00
|
|
|
to increase the cluster size.
|
|
|
|
|
2016-03-29 21:17:36 +00:00
|
|
|
The Juju Kubernetes work is curated by a very small group of community members.
|
|
|
|
Let us know how we are doing. If you find any problems please open an
|
|
|
|
[issue at the kubernetes project](https://github.com/kubernetes/kubernetes/issues)
|
|
|
|
and tag the issue with "juju" so we can find them.
|
|
|
|
|
|
|
|
|
2016-02-26 11:54:48 +00:00
|
|
|
* TOC
|
2016-03-07 02:29:06 +00:00
|
|
|
{:toc}
|
|
|
|
|
|
|
|
## Prerequisites
|
|
|
|
|
|
|
|
> 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:
|
2016-03-30 13:38:23 +00:00
|
|
|
> [Launch a Kubernetes Cluster](#launch-a-kubernetes-cluster)
|
2016-03-07 02:29:06 +00:00
|
|
|
|
|
|
|
### On Ubuntu
|
|
|
|
|
2016-03-29 14:54:35 +00:00
|
|
|
[Install the Juju client](https://jujucharms.com/get-started)
|
|
|
|
|
2016-03-30 13:38:23 +00:00
|
|
|
> This documentation focuses on the Juju 2.0 release which will be
|
|
|
|
> promoted to stable during the April 2016 release cycle.
|
2016-03-29 14:54:35 +00:00
|
|
|
|
2016-03-30 13:38:23 +00:00
|
|
|
To paraphrase, on your local Ubuntu system:
|
2016-03-07 02:29:06 +00:00
|
|
|
|
|
|
|
```shell
|
2016-03-29 14:54:35 +00:00
|
|
|
sudo add-apt-repository ppa:juju/devel
|
2016-03-07 02:29:06 +00:00
|
|
|
sudo apt-get update
|
2016-03-29 14:54:35 +00:00
|
|
|
sudo apt-get install juju2
|
2016-03-07 02:29:06 +00:00
|
|
|
```
|
|
|
|
|
2016-03-29 14:54:35 +00:00
|
|
|
If you are using another distro/platform - please consult the
|
|
|
|
[getting started guide](https://jujucharms.com/get-started) to install the
|
|
|
|
Juju dependencies for your platform.
|
|
|
|
|
2016-03-07 02:29:06 +00:00
|
|
|
### With Docker
|
|
|
|
|
2016-03-29 16:12:14 +00:00
|
|
|
If you are not using Ubuntu or prefer the isolation of Docker, you may
|
|
|
|
run the following:
|
|
|
|
|
2016-03-29 14:54:35 +00:00
|
|
|
> While this is a common target, the charmbox flavors of images are
|
2016-03-30 13:38:23 +00:00
|
|
|
> unofficial, and should be treated as experimental. If you encounter any issues
|
2016-03-29 14:54:35 +00:00
|
|
|
> turning up the Kubernetes cluster with charmbox, please file a bug on the
|
2016-03-30 13:38:23 +00:00
|
|
|
> [charmbox issue tracker](https://github.com/juju-solutions/charmbox/issues).
|
2016-03-29 14:54:35 +00:00
|
|
|
|
2016-03-07 02:29:06 +00:00
|
|
|
```shell
|
2016-03-29 14:54:35 +00:00
|
|
|
mkdir ~/.juju2
|
|
|
|
sudo docker run -v ~/.juju2:/home/ubuntu/.local/share/juju -ti jujusolutions/charmbox:devel
|
2016-03-07 02:29:06 +00:00
|
|
|
```
|
|
|
|
|
2016-03-29 16:12:14 +00:00
|
|
|
### Configure Juju to point a cloud
|
2016-03-07 02:29:06 +00:00
|
|
|
|
2016-03-29 21:17:36 +00:00
|
|
|
At this point you have access to the Juju client. Before you can deploy a
|
|
|
|
cluster you have to configure the credentials for the Juju cloud provider.
|
2016-03-07 02:29:06 +00:00
|
|
|
|
2016-03-29 21:17:36 +00:00
|
|
|
Juju [supports a wide variety of public clouds](#Cloud-compatibility) to set
|
|
|
|
up the credentials for your chosen cloud see the
|
2016-03-29 16:12:14 +00:00
|
|
|
[cloud setup page](https://jujucharms.com/docs/devel/getting-started#2.-choose-a-cloud).
|
|
|
|
|
|
|
|
After configuration is complete test your setup with a `juju bootstrap`
|
|
|
|
command:
|
|
|
|
`juju bootstrap $cloudname $cloudtype` you are ready to launch the
|
|
|
|
Kubernetes cluster.
|
2016-03-07 02:29:06 +00:00
|
|
|
|
2016-03-30 13:38:23 +00:00
|
|
|
## Launch a Kubernetes cluster
|
2016-03-07 02:29:06 +00:00
|
|
|
|
|
|
|
You will need to export the `KUBERNETES_PROVIDER` environment variable before
|
|
|
|
bringing up the cluster.
|
|
|
|
|
|
|
|
```shell
|
|
|
|
export KUBERNETES_PROVIDER=juju
|
2016-02-26 11:54:48 +00:00
|
|
|
cluster/kube-up.sh
|
2016-03-07 02:29:06 +00:00
|
|
|
```
|
|
|
|
|
2016-03-29 14:54:35 +00:00
|
|
|
If this is your first time running the `kube-up.sh` script, it will attempt to
|
|
|
|
install the required dependencies to get started with Juju.
|
2016-03-07 02:29:06 +00:00
|
|
|
|
2016-03-30 13:38:23 +00:00
|
|
|
Next it will deploy two nodes of Kubernetes, 1 unit of etcd, and network
|
|
|
|
the units so containers on different hosts can communicate with each other.
|
2016-03-07 02:29:06 +00:00
|
|
|
|
|
|
|
## Exploring the cluster
|
|
|
|
|
|
|
|
The `juju status` command provides information about each unit in the cluster:
|
|
|
|
|
|
|
|
```shell
|
2016-03-29 16:12:14 +00:00
|
|
|
$ juju status
|
2016-03-29 14:54:35 +00:00
|
|
|
|
2016-03-29 16:12:14 +00:00
|
|
|
... (omitted for brevity)
|
2016-03-29 14:54:35 +00:00
|
|
|
|
|
|
|
[Units]
|
|
|
|
ID WORKLOAD-STATE AGENT-STATE VERSION MACHINE PORTS PUBLIC-ADDRESS MESSAGE
|
|
|
|
etcd/0 active idle 2.0-beta2 1 54.146.50.29 Etcd leader running
|
|
|
|
kubernetes/0 active idle 2.0-beta2 2 6443/tcp,8088/tcp 54.205.204.227 Kubernetes follower running
|
|
|
|
kubernetes/1 active idle 2.0-beta2 3 6443/tcp,8088/tcp 54.145.57.114 Kubernetes leader running
|
|
|
|
|
2016-03-29 16:12:14 +00:00
|
|
|
... (omitted for brevity)
|
2016-03-07 02:29:06 +00:00
|
|
|
```
|
|
|
|
|
2016-03-29 14:54:35 +00:00
|
|
|
## Run some containers!
|
|
|
|
|
2016-03-29 16:12:14 +00:00
|
|
|
The `kubectl` file, the TLS certificates along with the configuration are
|
|
|
|
all available on the Kubernetes leader unit. Fetch the kubectl package so you
|
|
|
|
can run commands on the new Kuberntetes cluster.
|
2016-03-29 14:54:35 +00:00
|
|
|
|
2016-03-29 16:12:14 +00:00
|
|
|
Use the `juju status` command to figure out which Kubernetes unit is the leader
|
|
|
|
and copy the file from the leader:
|
2016-03-07 02:29:06 +00:00
|
|
|
|
|
|
|
```shell
|
2016-03-29 14:54:35 +00:00
|
|
|
juju scp kubernetes/1:kubectl_package.tar.gz .
|
|
|
|
tar xvfz kubectl_package.tar.gz
|
2016-03-29 21:17:36 +00:00
|
|
|
kubectl --kubeconfig config get pods
|
2016-03-07 02:29:06 +00:00
|
|
|
```
|
|
|
|
|
2016-03-29 16:12:14 +00:00
|
|
|
If you are not on a Linux amd64 host system, you will need to find or build a
|
|
|
|
kubectl binary package for your architecture.
|
2016-03-07 02:29:06 +00:00
|
|
|
|
2016-03-29 16:12:14 +00:00
|
|
|
Put the config file in the home directory so you don't have to specify it on
|
|
|
|
the command line each time. The default location is `${HOME}/.kube/config`.
|
2016-03-07 02:29:06 +00:00
|
|
|
|
|
|
|
No pods will be available before starting a container:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
kubectl get pods
|
|
|
|
NAME READY STATUSRESTARTS AGE
|
|
|
|
|
|
|
|
kubectl get replicationcontrollers
|
2016-02-26 11:54:48 +00:00
|
|
|
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS
|
2016-03-07 02:29:06 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
We'll follow the aws-coreos example. Create a pod manifest: `pod.json`
|
|
|
|
|
2016-02-26 11:54:48 +00:00
|
|
|
```json
|
2016-03-07 02:29:06 +00:00
|
|
|
{
|
|
|
|
"apiVersion": "v1",
|
|
|
|
"kind": "Pod",
|
|
|
|
"metadata": {
|
|
|
|
"name": "hello",
|
|
|
|
"labels": {
|
|
|
|
"name": "hello",
|
|
|
|
"environment": "testing"
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"spec": {
|
|
|
|
"containers": [{
|
|
|
|
"name": "hello",
|
|
|
|
"image": "quay.io/kelseyhightower/hello",
|
|
|
|
"ports": [{
|
|
|
|
"containerPort": 80,
|
|
|
|
"hostPort": 80
|
|
|
|
}]
|
|
|
|
}]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2016-03-30 13:38:23 +00:00
|
|
|
Create the pod with kubectl:
|
2016-03-07 02:29:06 +00:00
|
|
|
|
|
|
|
```shell
|
|
|
|
kubectl create -f pod.json
|
|
|
|
```
|
|
|
|
|
2016-03-30 13:38:23 +00:00
|
|
|
Get info on the pod:
|
2016-03-07 02:29:06 +00:00
|
|
|
|
|
|
|
```shell
|
|
|
|
kubectl get pods
|
|
|
|
```
|
|
|
|
|
|
|
|
To test the hello app, we need to locate which node is hosting
|
2016-03-29 16:12:14 +00:00
|
|
|
the container. We can use `juju run` and `juju status` commands to find
|
2016-03-07 02:29:06 +00:00
|
|
|
our hello app.
|
|
|
|
|
|
|
|
Exit out of our ssh session and run:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
juju run --unit kubernetes/0 "docker ps -n=1"
|
|
|
|
...
|
|
|
|
juju run --unit kubernetes/1 "docker ps -n=1"
|
|
|
|
CONTAINER IDIMAGE COMMAND CREATED STATUS PORTS NAMES
|
|
|
|
02beb61339d8quay.io/kelseyhightower/hello:latest /hello About an hour ago Up About an hourk8s_hello....
|
|
|
|
```
|
|
|
|
|
2016-03-30 13:38:23 +00:00
|
|
|
We see "kubernetes/1" has our container, expose the kubernetes charm and open
|
|
|
|
port 80:
|
2016-03-07 02:29:06 +00:00
|
|
|
|
|
|
|
```shell
|
|
|
|
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)
|
|
|
|
```
|
|
|
|
|
2016-03-30 13:38:23 +00:00
|
|
|
Finally delete the pod:
|
2016-03-07 02:29:06 +00:00
|
|
|
|
|
|
|
```shell
|
2016-03-29 14:54:35 +00:00
|
|
|
juju ssh kubernetes/0
|
2016-03-07 02:29:06 +00:00
|
|
|
kubectl delete pods hello
|
|
|
|
```
|
2016-03-29 21:17:36 +00:00
|
|
|
## Scale up cluster
|
|
|
|
|
2016-03-30 13:38:23 +00:00
|
|
|
Want larger Kubernetes nodes? It is easy to request different sizes of cloud
|
2016-03-29 21:17:36 +00:00
|
|
|
resources from Juju by using **constraints**. You can increase the amount of
|
|
|
|
CPU or memory (RAM) in any of the systems requested by Juju. This allows you
|
2016-03-30 13:38:23 +00:00
|
|
|
to fine tune th Kubernetes cluster to fit your workload. Use flags on the
|
|
|
|
bootstrap command or as a separate `juju constraints` command. Look to the
|
|
|
|
[Juju documentation for machine constraints](https://jujucharms.com/docs/devel/charms-constraints)
|
|
|
|
details.
|
2016-03-07 02:29:06 +00:00
|
|
|
|
|
|
|
## Scale out cluster
|
|
|
|
|
2016-03-30 13:38:23 +00:00
|
|
|
Need more clusters? Juju makes it easy to add units of a charm:
|
2016-03-07 02:29:06 +00:00
|
|
|
|
|
|
|
```shell
|
2016-03-29 14:54:35 +00:00
|
|
|
juju add-unit kubernetes
|
2016-03-07 02:29:06 +00:00
|
|
|
```
|
|
|
|
|
2016-03-30 13:38:23 +00:00
|
|
|
Or multiple units at one time:
|
2016-03-29 16:12:14 +00:00
|
|
|
|
|
|
|
```shell
|
|
|
|
juju add-unit -n3 kubernetes
|
|
|
|
```
|
|
|
|
|
2016-03-07 02:29:06 +00:00
|
|
|
## Tear down cluster
|
|
|
|
|
2016-03-29 16:12:14 +00:00
|
|
|
We recommend that you use the `kube-down.sh` command when you are done using
|
|
|
|
the cluster, as it properly brings down the cloud and removes some of the
|
|
|
|
build directories.
|
|
|
|
|
2016-03-07 02:29:06 +00:00
|
|
|
```shell
|
2016-02-26 11:54:48 +00:00
|
|
|
./kube-down.sh
|
2016-03-07 02:29:06 +00:00
|
|
|
```
|
|
|
|
|
2016-03-30 13:38:23 +00:00
|
|
|
Alternately if you want stop the servers you can destroy your current Juju
|
|
|
|
environment. Use the `juju env` command to get the current environment name:
|
2016-02-26 11:54:48 +00:00
|
|
|
|
2016-03-07 02:29:06 +00:00
|
|
|
```shell
|
2016-03-29 21:17:36 +00:00
|
|
|
juju kill-controller `juju env`
|
2016-03-07 02:29:06 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
## More Info
|
|
|
|
|
2016-03-29 16:28:14 +00:00
|
|
|
Juju works with charms and bundles to deploy solutions. The code that stands up
|
|
|
|
a Kubernetes cluster is done in the charm code. The charm is built from using
|
|
|
|
a layered approach to keep the code smaller and more focused on the operations
|
|
|
|
of Kubernetes.
|
|
|
|
|
|
|
|
The Kubernetes layer and bundles can be found in the `kubernetes`
|
2016-03-30 13:38:23 +00:00
|
|
|
project on github.com:
|
2016-03-07 02:29:06 +00:00
|
|
|
|
2016-03-29 16:28:14 +00:00
|
|
|
- [Bundle location](https://github.com/kubernetes/kubernetes/tree/master/cluster/juju/bundles)
|
|
|
|
- [Kubernetes charm layer location](https://github.com/kubernetes/kubernetes/tree/master/cluster/juju/layers/kubernetes)
|
2016-03-07 02:29:06 +00:00
|
|
|
- [More about Juju](https://jujucharms.com)
|
|
|
|
|
|
|
|
|
|
|
|
### Cloud compatibility
|
|
|
|
|
|
|
|
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).
|
|
|
|
|
2016-03-29 16:28:14 +00:00
|
|
|
If you do not see your favorite cloud provider listed many clouds with ssh
|
|
|
|
access can be configured for
|
|
|
|
[manual provisioning](https://jujucharms.com/docs/stable/config-manual).
|
2016-05-22 22:23:47 +00:00
|
|
|
|
|
|
|
## Support Level
|
|
|
|
|
|
|
|
|
|
|
|
IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level
|
|
|
|
-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ----------------------------
|
|
|
|
AWS | Juju | Ubuntu | flannel | [docs](/docs/getting-started-guides/juju) | | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) )
|
2016-05-22 22:25:15 +00:00
|
|
|
OpenStack/HPCloud | Juju | Ubuntu | flannel | [docs](/docs/getting-started-guides/juju) | | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) )
|
|
|
|
Joyent | Juju | Ubuntu | flannel | [docs](/docs/getting-started-guides/juju) | | [Community](https://github.com/whitmo/bundle-kubernetes) ( [@whit](https://github.com/whitmo), [@matt](https://github.com/mbruzek), [@chuck](https://github.com/chuckbutler) )
|
|
|
|
|
2016-05-22 22:23:47 +00:00
|
|
|
|
|
|
|
|
|
|
|
For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart.
|
|
|
|
|
|
|
|
|