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/ubuntu.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-06-22 19:39:35 +00:00
|
|
|
|
Kubernetes Deployment On Bare-metal Ubuntu Nodes
|
|
|
|
|
------------------------------------------------
|
2015-06-22 18:56:19 +00:00
|
|
|
|
|
2015-06-22 19:39:35 +00:00
|
|
|
|
- [Introduction](#introduction)
|
|
|
|
|
- [Prerequisites](#prerequisites)
|
2015-08-27 04:57:56 +00:00
|
|
|
|
- [Starting a Cluster](#starting-a-cluster)
|
|
|
|
|
- [Download binaries](#download-binaries)
|
|
|
|
|
- [Configure and start the kubernetes cluster](#configure-and-start-the-kubernetes-cluster)
|
|
|
|
|
- [Test it out](#test-it-out)
|
|
|
|
|
- [Deploy addons](#deploy-addons)
|
|
|
|
|
- [Trouble shooting](#trouble-shooting)
|
2015-06-22 18:56:19 +00:00
|
|
|
|
|
|
|
|
|
## Introduction
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
This document describes how to deploy kubernetes on ubuntu nodes, 1 master and 3 nodes involved
|
|
|
|
|
in the given examples. You can scale to **any number of nodes** by changing some settings with ease.
|
|
|
|
|
The original idea was heavily inspired by @jainvipin 's ubuntu single node
|
|
|
|
|
work, which has been merge into this document.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-05-21 14:52:06 +00:00
|
|
|
|
[Cloud team from Zhejiang University](https://github.com/ZJU-SEL) will maintain this work.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-06-22 19:39:35 +00:00
|
|
|
|
## Prerequisites
|
2015-07-17 22:35:41 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
1. The nodes have installed docker version 1.2+ and bridge-utils to manipulate linux bridge.
|
|
|
|
|
2. All machines can communicate with each other, no need to connect Internet (should use
|
|
|
|
|
private docker registry in this case).
|
|
|
|
|
3. These guide is tested OK on Ubuntu 14.04 LTS 64bit server, but it can not work with
|
|
|
|
|
Ubuntu 15 which use systemd instead of upstart. We are working around fixing this.
|
|
|
|
|
4. Dependencies of this guide: etcd-2.0.12, flannel-0.4.0, k8s-1.0.3, may work with higher versions.
|
|
|
|
|
5. All the remote servers can be ssh logged in without a password by using key authentication.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
|
|
|
|
|
2015-06-22 19:39:35 +00:00
|
|
|
|
### Starting a Cluster
|
2015-07-17 22:35:41 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
#### Download binaries
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
First clone the kubernetes github repo
|
2015-07-16 03:03:20 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
``` console
|
2015-09-03 14:10:11 +00:00
|
|
|
|
$ git clone https://github.com/kubernetes/kubernetes.git
|
2015-08-27 04:57:56 +00:00
|
|
|
|
```
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
Then download all the needed binaries into given directory (cluster/ubuntu/binaries)
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
``` console
|
|
|
|
|
$ cd kubernetes/cluster/ubuntu
|
|
|
|
|
$ ./build.sh
|
|
|
|
|
```
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
You can customize your etcd version, flannel version, k8s version by changing corresponding variables
|
|
|
|
|
`ETCD_VERSION` , `FLANNEL_VERSION` and `K8S_VERSION` in build.sh, by default etcd version is 2.0.12,
|
|
|
|
|
flannel version is 0.4.0 and k8s version is 1.0.3.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
Make sure that the involved binaries are located properly in the binaries/master
|
|
|
|
|
or binaries/minion directory before you go ahead to the next step .
|
|
|
|
|
|
|
|
|
|
Note that we use flannel here to set up overlay network, yet it's optional. Actually you can build up k8s
|
|
|
|
|
cluster natively, or use flannel, Open vSwitch or any other SDN tool you like.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-07-20 20:45:36 +00:00
|
|
|
|
#### Configure and start the Kubernetes cluster
|
2015-07-17 22:35:41 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
An example cluster is listed below:
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
| IP Address | Role |
|
|
|
|
|
|-------------|----------|
|
2015-07-07 17:37:40 +00:00
|
|
|
|
|10.10.103.223| node |
|
|
|
|
|
|10.10.103.162| node |
|
|
|
|
|
|10.10.103.250| both master and node|
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
|
|
|
|
First configure the cluster information in cluster/ubuntu/config-default.sh, below is a simple sample.
|
|
|
|
|
|
2015-07-19 01:51:52 +00:00
|
|
|
|
```sh
|
2015-04-10 08:12:00 +00:00
|
|
|
|
export nodes="vcap@10.10.103.250 vcap@10.10.103.162 vcap@10.10.103.223"
|
|
|
|
|
|
2015-07-16 03:03:20 +00:00
|
|
|
|
export role="ai i i"
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
|
|
|
|
export NUM_MINIONS=${NUM_MINIONS:-3}
|
|
|
|
|
|
2015-07-16 03:03:20 +00:00
|
|
|
|
export SERVICE_CLUSTER_IP_RANGE=192.168.3.0/24
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
|
|
|
|
export FLANNEL_NET=172.16.0.0/16
|
|
|
|
|
```
|
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
The first variable `nodes` defines all your cluster nodes, MASTER node comes first and
|
|
|
|
|
separated with blank space like `<user_1@ip_1> <user_2@ip_2> <user_3@ip_3> `
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
Then the `role` variable defines the role of above machine in the same order, "ai" stands for machine
|
|
|
|
|
acts as both master and node, "a" stands for master, "i" stands for node.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-07-29 05:57:14 +00:00
|
|
|
|
The `NUM_MINIONS` variable defines the total number of nodes.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
The `SERVICE_CLUSTER_IP_RANGE` variable defines the kubernetes service IP range. Please make sure
|
|
|
|
|
that you do have a valid private ip range defined here, because some IaaS provider may reserve private ips.
|
|
|
|
|
You can use below three private network range according to rfc1918. Besides you'd better not choose the one
|
|
|
|
|
that conflicts with your own private network range.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
|
|
|
|
10.0.0.0 - 10.255.255.255 (10/8 prefix)
|
|
|
|
|
|
|
|
|
|
172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
|
|
|
|
|
|
2015-07-24 21:52:18 +00:00
|
|
|
|
192.168.0.0 - 192.168.255.255 (192.168/16 prefix)
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
The `FLANNEL_NET` variable defines the IP range used for flannel overlay network,
|
|
|
|
|
should not conflict with above `SERVICE_CLUSTER_IP_RANGE`.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-07-29 05:57:14 +00:00
|
|
|
|
After all the above variables being set correctly, we can use following command in cluster/ directory to bring up the whole cluster.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-07-24 21:52:18 +00:00
|
|
|
|
`$ KUBERNETES_PROVIDER=ubuntu ./kube-up.sh`
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
The scripts automatically scp binaries and config files to all the machines and start the k8s service on them.
|
|
|
|
|
The only thing you need to do is to type the sudo password when promoted.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-07-19 01:51:52 +00:00
|
|
|
|
```console
|
2015-04-10 08:12:00 +00:00
|
|
|
|
Deploying minion on machine 10.10.103.223
|
|
|
|
|
...
|
|
|
|
|
[sudo] password to copy files and start minion:
|
|
|
|
|
```
|
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
If all things goes right, you will see the below message from console indicating the k8s is up.
|
|
|
|
|
|
|
|
|
|
```console
|
|
|
|
|
Cluster validation succeeded
|
|
|
|
|
```
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
#### Test it out
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
You can use `kubectl` command to check if the newly created k8s is working correctly.
|
|
|
|
|
The `kubectl` binary is under the `cluster/ubuntu/binaries` directory.
|
|
|
|
|
You can make it available via PATH, then you can use the below command smoothly.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
For example, use `$ kubectl get nodes` to see if all of your nodes are ready.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-07-19 01:51:52 +00:00
|
|
|
|
```console
|
2015-08-27 04:57:56 +00:00
|
|
|
|
$ kubectl get nodes
|
2015-05-30 02:19:47 +00:00
|
|
|
|
NAME LABELS STATUS
|
|
|
|
|
10.10.103.162 kubernetes.io/hostname=10.10.103.162 Ready
|
|
|
|
|
10.10.103.223 kubernetes.io/hostname=10.10.103.223 Ready
|
|
|
|
|
10.10.103.250 kubernetes.io/hostname=10.10.103.250 Ready
|
2015-04-10 08:12:00 +00:00
|
|
|
|
```
|
|
|
|
|
|
2015-07-20 20:45:36 +00:00
|
|
|
|
Also you can run Kubernetes [guest-example](../../examples/guestbook/) to build a redis backend cluster on the k8s.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
|
|
|
|
|
2015-06-22 19:39:35 +00:00
|
|
|
|
#### Deploy addons
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
Assuming you have a starting cluster now, this section will tell you how to deploy addons like DNS
|
|
|
|
|
and UI onto the existing cluster.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-12 03:08:45 +00:00
|
|
|
|
The configuration of DNS is configured in cluster/ubuntu/config-default.sh.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-07-19 01:51:52 +00:00
|
|
|
|
```sh
|
2015-07-23 08:25:06 +00:00
|
|
|
|
ENABLE_CLUSTER_DNS="${KUBE_ENABLE_CLUSTER_DNS:-true}"
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
|
|
|
|
DNS_SERVER_IP="192.168.3.10"
|
|
|
|
|
|
2015-07-15 18:30:27 +00:00
|
|
|
|
DNS_DOMAIN="cluster.local"
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
|
|
|
|
DNS_REPLICAS=1
|
|
|
|
|
```
|
2015-07-17 02:01:02 +00:00
|
|
|
|
|
2015-08-07 12:05:20 +00:00
|
|
|
|
The `DNS_SERVER_IP` is defining the ip of dns server which must be in the `SERVICE_CLUSTER_IP_RANGE`.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
The `DNS_REPLICAS` describes how many dns pod running in the cluster.
|
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
By default, we also take care of kube-ui addon.
|
2015-08-12 03:08:45 +00:00
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
ENABLE_CLUSTER_UI="${KUBE_ENABLE_CLUSTER_UI:-true}"
|
|
|
|
|
```
|
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
After all the above variables have been set, just type the following command.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-07-19 01:51:52 +00:00
|
|
|
|
```console
|
2015-04-10 08:12:00 +00:00
|
|
|
|
$ cd cluster/ubuntu
|
|
|
|
|
$ KUBERNETES_PROVIDER=ubuntu ./deployAddons.sh
|
|
|
|
|
```
|
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
After some time, you can use `$ kubectl get pods --namespace=kube-system` to see the DNS and UI pods are running in the cluster.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-07-13 05:36:48 +00:00
|
|
|
|
#### On going
|
|
|
|
|
|
|
|
|
|
We are working on these features which we'd like to let everybody know:
|
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
1. Run kubernetes binaries in Docker using [kube-in-docker](https://github.com/ZJU-SEL/kube-in-docker/tree/baremetal-kube),
|
|
|
|
|
to eliminate OS-distro differences.
|
2015-07-13 05:36:48 +00:00
|
|
|
|
2. Tearing Down scripts: clear and re-create the whole stack by one click.
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
#### Trouble shooting
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
Generally, what this approach does is quite simple:
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
2015-06-11 05:11:44 +00:00
|
|
|
|
1. Download and copy binaries and configuration files to proper directories on every node
|
2015-07-24 21:52:18 +00:00
|
|
|
|
2. Configure `etcd` using IPs based on input from user
|
2015-04-10 08:12:00 +00:00
|
|
|
|
3. Create and start flannel network
|
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
So if you encounter a problem, **check etcd configuration first**
|
2015-04-10 08:12:00 +00:00
|
|
|
|
|
|
|
|
|
Please try:
|
|
|
|
|
|
2015-07-24 21:52:18 +00:00
|
|
|
|
1. Check `/var/log/upstart/etcd.log` for suspicious etcd log
|
2015-04-10 08:12:00 +00:00
|
|
|
|
2. Check `/etc/default/etcd`, as we do not have much input validation, a right config should be like:
|
2015-07-17 02:01:02 +00:00
|
|
|
|
|
2015-07-19 01:51:52 +00:00
|
|
|
|
```sh
|
2015-04-10 08:12:00 +00:00
|
|
|
|
ETCD_OPTS="-name infra1 -initial-advertise-peer-urls <http://ip_of_this_node:2380> -listen-peer-urls <http://ip_of_this_node:2380> -initial-cluster-token etcd-cluster-1 -initial-cluster infra1=<http://ip_of_this_node:2380>,infra2=<http://ip_of_another_node:2380>,infra3=<http://ip_of_another_node:2380> -initial-cluster-state new"
|
|
|
|
|
```
|
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
3. You may find following commands useful, the former one to bring down the cluster, while
|
|
|
|
|
the latter one could start it again.
|
|
|
|
|
|
|
|
|
|
```console
|
|
|
|
|
$ KUBERNETES_PROVIDER=ubuntu ./kube-down.sh
|
|
|
|
|
$ KUBERNETES_PROVIDER=ubuntu ./kube-up.sh
|
|
|
|
|
```
|
2015-07-24 21:52:18 +00:00
|
|
|
|
|
2015-08-27 04:57:56 +00:00
|
|
|
|
4. You can also customize your own settings in `/etc/default/{component_name}`.
|
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/ubuntu.md?pixel)]()
|
2015-07-14 00:13:09 +00:00
|
|
|
|
<!-- END MUNGE: GENERATED_ANALYTICS -->
|