2014-06-06 23:40:48 +00:00
|
|
|
# Kubernetes
|
|
|
|
|
|
|
|
Kubernetes is an open source reference implementation of container cluster management.
|
|
|
|
|
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
|
|
|
```
|
|
|
|
|
|
|
|
## 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
|
|
|
|
```
|