2014-06-06 23:40:48 +00:00
# Kubernetes
2014-06-09 23:46:16 +00:00
Kubernetes is an open source implementation of container cluster management.
2014-06-06 23:40:48 +00:00
2014-06-09 06:17:59 +00:00
[Kubernetes Design Document ](https://github.com/GoogleCloudPlatform/kubernetes/blob/master/DESIGN.md )
2014-06-09 06:17:14 +00:00
2014-06-06 23:40:48 +00:00
## Getting started on Google Compute Engine
### Prerequisites
2014-06-09 03:05:26 +00:00
1. You need a Google Cloud Platform account with billing enabled. Visit [http://cloud.google.com/console]() for more details
2. You must have Go installed: [www.golang.org ](http://www.golang.org ).
2014-06-06 23:40:48 +00:00
3. Ensure that your `gcloud` components are up-to-date by running `gcloud components update` .
2014-06-09 03:05:26 +00:00
4. Get the Kubernetes source:
git clone https://github.com/GoogleCloudPlatform/kubernetes.git
2014-06-06 23:40:48 +00:00
### Setup
2014-06-09 03:05:26 +00:00
The setup script builds Kubernetes, then creates Google Compute Engine instances, firewall rules, and routes:
2014-06-06 23:40:48 +00:00
```
cd kubernetes
2014-06-07 04:38:37 +00:00
hack/dev-build-and-up.sh
2014-06-06 23:40:48 +00:00
```
### Running a container (simple version)
2014-06-09 03:05:26 +00:00
Once you have your instances up and running, the `build-go.sh` script sets up
your Go workspace and builds the Go components.
The `cloudcfg.sh` script spins up two containers, running [Nginx ](http://nginx.org/en/ ) and with port 80 mapped to 8080:
2014-06-06 23:40:48 +00:00
```
cd kubernetes
2014-06-07 04:38:37 +00:00
hack/build-go.sh
cluster/cloudcfg.sh -p 8080:80 run dockerfile/nginx 2 myNginx
2014-06-06 23:40:48 +00:00
```
2014-06-09 03:05:26 +00:00
To stop the containers:
2014-06-06 23:40:48 +00:00
```
2014-06-07 04:38:37 +00:00
cluster/cloudcfg.sh stop myNginx
2014-06-06 23:40:48 +00:00
```
2014-06-09 03:05:26 +00:00
To delete the containers:
2014-06-06 23:40:48 +00:00
```
2014-06-07 04:38:37 +00:00
cluster/cloudcfg.sh rm myNginx
2014-06-06 23:40:48 +00:00
```
### Running a container (more complete version)
2014-06-09 03:05:26 +00:00
Assuming you've run `hack/dev-build-and-up.sh` and `hack/build-go.sh` :
2014-06-06 23:40:48 +00:00
```
cd kubernetes
2014-06-09 03:05:26 +00:00
cluster/cloudcfg.sh -c api/examples/task.json create /tasks
2014-06-06 23:40:48 +00:00
```
Where task.json contains something like:
2014-06-09 03:05:26 +00:00
2014-06-06 23:40:48 +00:00
```
{
"ID": "nginx",
"desiredState": {
"image": "dockerfile/nginx",
"networkPorts": [{
"containerPort": 80,
"hostPort": 8080
}]
},
"labels": {
"name": "foo"
}
}
```
2014-06-09 03:05:26 +00:00
Look in `api/examples/` for more examples
2014-06-06 23:40:48 +00:00
### Tearing down the cluster
```
cd kubernetes
2014-06-07 04:38:37 +00:00
cluster/kube-down.sh
2014-06-06 23:40:48 +00:00
```
2014-06-09 06:19:33 +00:00
## Where to go next?
[Detailed example application ](https://github.com/GoogleCloudPlatform/kubernetes/blob/master/examples/guestbook/guestbook.md )
Or fork and start hacking!
2014-06-09 23:46:16 +00:00
## Community, discussion and support
If you have questions or want to start contributing please reach out. We don't bite!
The Kubernetes team is hanging out on IRC on the [#google-containers room on freenode.net ](http://webchat.freenode.net/?channels=google-containers ). We also have the [google-containers Google Groups mailing list ](https://groups.google.com/forum/#!forum/google-containers ).
If you are a company and are looking for a more formal engagement with Google around Kubernetes and containers at Google as a whole, please fill out [this form ](https://docs.google.com/a/google.com/forms/d/1_RfwC8LZU4CKe4vKq32x5xpEJI5QZ-j0ShGmZVv9cm4/viewform ). and we'll be in touch.
2014-06-06 23:40:48 +00:00
## Development
### Hooks
```
# Before committing any changes, please link/copy these hooks into your .git
# directory. This will keep you from accidentally committing non-gofmt'd
# go code.
cd kubernetes
ln -s "../../hooks/prepare-commit-msg" .git/hooks/prepare-commit-msg
ln -s "../../hooks/commit-msg" .git/hooks/commit-msg
```
### Unit tests
```
cd kubernetes
2014-06-07 04:38:37 +00:00
hack/test-go.sh
2014-06-06 23:40:48 +00:00
```
### Coverage
```
cd kubernetes
go tool cover -html=target/c.out
```
### Integration tests
```
# You need an etcd somewhere in your path.
# To get from head:
go get github.com/coreos/etcd
go install github.com/coreos/etcd
sudo ln -s "$GOPATH/bin/etcd" /usr/bin/etcd
# Or just use the packaged one:
sudo ln -s "$REPO_ROOT/target/bin/etcd" /usr/bin/etcd
```
```
cd kubernetes
2014-06-07 04:38:37 +00:00
hack/integration-test.sh
2014-06-06 23:40:48 +00:00
```
### Keeping your development fork in sync
One time after cloning your forked repo:
```
git remote add upstream https://github.com/GoogleCloudPlatform/kubernetes.git
```
Then each time you want to sync to upstream:
```
git fetch upstream
git rebase upstream/master
```
### Regenerating the documentation
Install [nodejs ](http://nodejs.org/download/ ), [npm ](https://www.npmjs.org/ ), and
[raml2html ](https://github.com/kevinrenskers/raml2html ), then run:
```
cd kubernetes/api
raml2html kubernetes.raml > kubernetes.html
```
2014-06-09 23:46:16 +00:00