2015-07-12 04:04:52 +00:00
<!-- BEGIN MUNGE: UNVERSIONED_WARNING -->
2016-06-10 23:46:46 +00:00
<!-- BEGIN STRIP_FOR_RELEASE -->
2016-07-15 09:44:58 +00:00
< img src = "http://kubernetes.io/kubernetes/img/warning.png" alt = "WARNING"
2016-06-10 23:46:46 +00:00
width="25" height="25">
2016-07-15 09:44:58 +00:00
< img src = "http://kubernetes.io/kubernetes/img/warning.png" alt = "WARNING"
2016-06-10 23:46:46 +00:00
width="25" height="25">
2016-07-15 09:44:58 +00:00
< img src = "http://kubernetes.io/kubernetes/img/warning.png" alt = "WARNING"
2016-06-10 23:46:46 +00:00
width="25" height="25">
2016-07-15 09:44:58 +00:00
< img src = "http://kubernetes.io/kubernetes/img/warning.png" alt = "WARNING"
2016-06-10 23:46:46 +00:00
width="25" height="25">
2016-07-15 09:44:58 +00:00
< img src = "http://kubernetes.io/kubernetes/img/warning.png" alt = "WARNING"
2016-06-10 23:46:46 +00:00
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.
<!-- TAG RELEASE_LINK, added by the munger automatically -->
< strong >
The latest release of this document can be found
2016-06-13 19:24:34 +00:00
[here ](http://releases.k8s.io/release-1.3/docs/devel/running-locally.md ).
2016-06-10 23:46:46 +00:00
Documentation for other releases can be found at
[releases.k8s.io ](http://releases.k8s.io ).
< / strong >
--
<!-- END STRIP_FOR_RELEASE -->
2015-07-12 04:04:52 +00:00
<!-- END MUNGE: UNVERSIONED_WARNING -->
2015-06-22 19:39:35 +00:00
Getting started locally
-----------------------
2014-08-03 19:44:33 +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
- [Requirements ](#requirements )
- [Linux ](#linux )
- [Docker ](#docker )
- [etcd ](#etcd )
- [go ](#go )
2016-02-17 16:01:22 +00:00
- [OpenSSL ](#openssl )
2015-11-20 04:07:19 +00:00
- [Clone the repository ](#clone-the-repository )
2015-06-23 15:20:31 +00:00
- [Starting the cluster ](#starting-the-cluster )
- [Running a container ](#running-a-container )
- [Running a user defined pod ](#running-a-user-defined-pod )
- [Troubleshooting ](#troubleshooting )
- [I cannot reach service IPs on the network. ](#i-cannot-reach-service-ips-on-the-network )
- [I cannot create a replication controller with replica size greater than 1! What gives? ](#i-cannot-create-a-replication-controller-with-replica-size-greater-than-1--what-gives )
- [I changed Kubernetes code, how do I run it? ](#i-changed-kubernetes-code-how-do-i-run-it )
- [kubectl claims to start a container but `get pods` and `docker ps` don't show it. ](#kubectl-claims-to-start-a-container-but-get-pods-and-docker-ps-dont-show-it )
- [The pods fail to connect to the services by host names ](#the-pods-fail-to-connect-to-the-services-by-host-names )
2015-06-22 18:56:19 +00:00
2014-11-03 01:13:43 +00:00
### Requirements
2014-08-16 01:28:49 +00:00
2014-09-11 20:10:49 +00:00
#### Linux
2014-08-16 01:28:49 +00:00
2015-12-30 19:39:57 +00:00
Not running Linux? Consider running Linux in a local virtual machine with [Vagrant ](../getting-started-guides/vagrant.md ), or on a cloud provider like [Google Compute Engine ](../getting-started-guides/gce.md ).
2014-08-16 01:28:49 +00:00
2014-09-11 20:10:49 +00:00
#### Docker
2015-02-12 22:05:26 +00:00
At least [Docker ](https://docs.docker.com/installation/#installation )
1.3+. Ensure the Docker daemon is running and can be contacted (try `docker
2015-07-20 20:45:36 +00:00
ps`). Some of the Kubernetes components need to run as root, which normally
2015-02-12 22:05:26 +00:00
works fine with docker.
2014-09-11 20:10:49 +00:00
#### etcd
2015-02-14 08:48:16 +00:00
You need an [etcd ](https://github.com/coreos/etcd/releases ) in your path, please make sure it is installed and in your ``$PATH``.
2014-09-11 20:10:49 +00:00
2014-11-25 15:53:51 +00:00
#### go
2015-12-30 19:39:57 +00:00
You need [go ](https://golang.org/doc/install ) in your path (see [here ](development.md#go-versions ) for supported versions), please make sure it is installed and in your ``$PATH``.
2014-11-25 15:53:51 +00:00
2016-02-17 16:01:22 +00:00
#### OpenSSL
You need [OpenSSL ](https://www.openssl.org/ ) installed. If you do not have the `openssl` command available, you may see the following error in `/tmp/kube-apiserver.log` :
```
server.go:333] Invalid Authentication Config: open /tmp/kube-serviceaccount.key: no such file or directory
```
2015-11-20 04:07:19 +00:00
### Clone the repository
In order to run kubernetes you must have the kubernetes code on the local machine. Cloning this repository is sufficient.
```$ git clone --depth=1 https://github.com/kubernetes/kubernetes.git```
The `--depth=1` parameter is optional and will ensure a smaller download.
2014-09-11 20:10:49 +00:00
### Starting the cluster
2015-07-20 20:45:36 +00:00
In a separate tab of your terminal, run the following (since one needs sudo access to start/stop Kubernetes daemons, it is easier to run the entire script as root):
2014-08-03 19:44:33 +00:00
2015-07-19 01:55:43 +00:00
```sh
2014-08-03 19:44:33 +00:00
cd kubernetes
2014-12-22 13:59:06 +00:00
hack/local-up-cluster.sh
2014-08-03 19:44:33 +00:00
```
2014-10-13 03:09:20 +00:00
This will build and start a lightweight local cluster, consisting of a master
2015-07-07 17:37:40 +00:00
and a single node. Type Control-C to shut it down.
2014-08-03 19:44:33 +00:00
2015-02-12 23:04:00 +00:00
You can use the cluster/kubectl.sh script to interact with the local cluster. hack/local-up-cluster.sh will
print the commands to run to point kubectl at the local cluster.
2014-08-11 15:49:04 +00:00
### Running a container
Your cluster is running, and you want to start running containers!
2015-02-05 07:06:03 +00:00
You can now use any of the cluster/kubectl.sh commands to interact with your local setup.
2014-10-13 03:09:20 +00:00
2015-07-19 01:55:43 +00:00
```sh
2014-12-04 22:56:40 +00:00
cluster/kubectl.sh get pods
cluster/kubectl.sh get services
2015-05-21 00:17:01 +00:00
cluster/kubectl.sh get replicationcontrollers
2015-05-21 20:53:10 +00:00
cluster/kubectl.sh run my-nginx --image=nginx --replicas=2 --port=80
2014-08-11 15:49:04 +00:00
## begin wait for provision to complete, you can monitor the docker pull by opening a new terminal
sudo docker images
2015-04-16 16:11:47 +00:00
## you should see it pulling the nginx image, once the above command returns it
2014-08-11 15:49:04 +00:00
sudo docker ps
## you should see your container running!
exit
## end wait
2015-07-20 20:45:36 +00:00
## introspect Kubernetes!
2014-12-04 22:56:40 +00:00
cluster/kubectl.sh get pods
cluster/kubectl.sh get services
2015-05-21 00:17:01 +00:00
cluster/kubectl.sh get replicationcontrollers
2014-08-11 15:49:04 +00:00
```
2015-02-10 22:46:22 +00:00
### Running a user defined pod
2015-07-14 16:37:37 +00:00
Note the difference between a [container ](../user-guide/containers.md )
2015-07-20 20:45:36 +00:00
and a [pod ](../user-guide/pods.md ). Since you only asked for the former, Kubernetes will create a wrapper pod for you.
2015-06-09 12:53:11 +00:00
However you cannot view the nginx start page on localhost. To verify that nginx is running you need to run `curl` within the docker container (try `docker exec` ).
2015-02-10 22:46:22 +00:00
You can control the specifications of a pod via a user defined manifest, and reach nginx through your browser on the port specified therein:
2015-07-19 01:55:43 +00:00
```sh
2015-07-15 17:42:59 +00:00
cluster/kubectl.sh create -f docs/user-guide/pod.yaml
2015-02-10 22:46:22 +00:00
```
2014-08-11 15:49:04 +00:00
Congratulations!
### Troubleshooting
2015-06-09 12:53:11 +00:00
#### I cannot reach service IPs on the network.
2014-10-13 03:09:20 +00:00
Some firewall software that uses iptables may not interact well with
2015-06-09 12:53:11 +00:00
kubernetes. If you have trouble around networking, try disabling any
firewall or other iptables-using systems, first. Also, you can check
if SELinux is blocking anything by running a command such as `journalctl --since yesterday | grep avc` .
2014-10-13 03:09:20 +00:00
2015-05-23 20:41:11 +00:00
By default the IP range for service cluster IPs is 10.0.*.* - depending on your
2014-10-13 03:09:20 +00:00
docker installation, this may conflict with IPs for containers. If you find
containers running with IPs in this range, edit hack/local-cluster-up.sh and
2015-05-24 05:17:55 +00:00
change the service-cluster-ip-range flag to something else.
2014-10-13 03:09:20 +00:00
2014-08-11 15:49:04 +00:00
#### I cannot create a replication controller with replica size greater than 1! What gives?
2015-07-07 17:37:40 +00:00
You are running a single node setup. This has the limitation of only supporting a single replica of a given pod. If you are interested in running with larger replica sizes, we encourage you to try the local vagrant setup or one of the cloud providers.
2014-08-11 15:49:04 +00:00
#### I changed Kubernetes code, how do I run it?
2015-07-19 01:55:43 +00:00
```sh
2014-08-11 15:49:04 +00:00
cd kubernetes
2016-05-24 15:40:44 +00:00
make
2014-08-11 15:49:04 +00:00
hack/local-up-cluster.sh
2014-08-16 01:28:49 +00:00
```
2015-02-10 22:46:22 +00:00
#### kubectl claims to start a container but `get pods` and `docker ps` don't show it.
2015-11-10 13:01:27 +00:00
One or more of the Kubernetes daemons might've crashed. Tail the logs of each in /tmp.
2015-04-12 06:40:52 +00:00
#### The pods fail to connect to the services by host names
2015-07-17 22:35:41 +00:00
2015-12-30 22:48:00 +00:00
To start the DNS service, you need to set the following variables:
```sh
KUBE_ENABLE_CLUSTER_DNS=true
KUBE_DNS_SERVER_IP="10.0.0.10"
KUBE_DNS_DOMAIN="cluster.local"
KUBE_DNS_REPLICAS=1
```
2016-05-27 19:05:24 +00:00
To know more on DNS service you can look [here ](http://issue.k8s.io/6667 ). Related documents can be found [here ](../../build/kube-dns/#how-do-i-configure-it )
2015-05-14 22:12:45 +00:00
2015-07-14 00:13:09 +00:00
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
2015-12-30 19:39:57 +00:00
[![Analytics ](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/docs/devel/running-locally.md?pixel )]()
2015-07-14 00:13:09 +00:00
<!-- END MUNGE: GENERATED_ANALYTICS -->