kubernetes

module
v0.0.0-...-54d1e7e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 12, 2014 License: Apache-2.0

README

Kubernetes

Kubernetes is an open source implementation of container cluster management.

Kubernetes Design Document

Kubernetes can run anywhere!

However, initial development was done on GCE and so our instructions and scripts are built around that. If you make it work on other infrastructure please let us know and contribute instructions/code.

Getting started on Google Compute Engine

Prerequisites
  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.

  3. Ensure that your gcloud components are up-to-date by running gcloud components update.

  4. Get the Kubernetes source:

     git clone https://github.com/GoogleCloudPlatform/kubernetes.git
    
  5. Setting up a cluster requires the htpasswd tool in order to hash a randomly generated password for accessing the API server. This is already installed on recent version of Mac OS X but on Linux you need to install it yourself. On Debian/Ubuntu you can do this with:

     sudo apt-get update
     sudo apt-get install apache2-utils
    
Setup

The setup script builds Kubernetes, then creates Google Compute Engine instances, firewall rules, and routes:

cd kubernetes
hack/dev-build-and-up.sh
Running a container (simple version)

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 and with port 80 mapped to 8080:

cd kubernetes
hack/build-go.sh
cluster/cloudcfg.sh -p 8080:80 run dockerfile/nginx 2 myNginx

To stop the containers:

cluster/cloudcfg.sh stop myNginx

To delete the containers:

cluster/cloudcfg.sh rm myNginx
Running a container (more complete version)

Assuming you've run hack/dev-build-and-up.sh and hack/build-go.sh:

cd kubernetes
cluster/cloudcfg.sh -c api/examples/pod.json create /pods

Where pod.json contains something like:

{
  "ID": "nginx",
  "desiredState": {
    "image": "dockerfile/nginx",
    "networkPorts": [{
      "containerPort": 80,
      "hostPort": 8080
    }]
  },
  "labels": {
    "name": "foo"
  }
}

Look in api/examples/ for more examples

Tearing down the cluster
cd kubernetes
cluster/kube-down.sh

Running locally

In a separate tab of your terminal, run:

cd kubernetes
hack/local-up.sh

This will build and start a lightweight local cluster, consisting of a master and a single minion. Type Control-C to shut it down. While it's running, you can use hack/localcfg.sh in place of cluster/cloudcfg.sh to talk to it.

Where to go next?

Detailed example application

Or fork and start hacking!

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. We also have the google-containers Google Groups mailing list.

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. and we'll be in touch.

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
hack/test-go.sh
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
hack/integration-test.sh
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, npm, and raml2html, then run:

cd kubernetes/api
raml2html kubernetes.raml > kubernetes.html

Directories

Path Synopsis
cmd
apiserver
apiserver is the main api server and master for the cluster.
apiserver is the main api server and master for the cluster.
controller-manager
The controller manager is responsible for monitoring replication controllers, and creating corresponding pods to achieve the desired state.
The controller manager is responsible for monitoring replication controllers, and creating corresponding pods to achieve the desired state.
integration
A basic integration test for the service.
A basic integration test for the service.
localkube
An all-in-one binary for standing up a fake Kubernetes cluster on your local machine.
An all-in-one binary for standing up a fake Kubernetes cluster on your local machine.
pkg
api
Package api includes all types used to communicate between the various parts of the Kubernetes system.
Package api includes all types used to communicate between the various parts of the Kubernetes system.
apiserver
Package apiserver contains the code that provides a RESTful api service
Package apiserver contains the code that provides a RESTful api service
client
A client for the Kubernetes cluster management API There are three fundamental objects Pod - A co-scheduled set of running containers ReplicationController - A manager for replicating Pods Service - A discoverable load balancer Copyright 2014 Google Inc.
A client for the Kubernetes cluster management API There are three fundamental objects Pod - A co-scheduled set of running containers ReplicationController - A manager for replicating Pods Service - A discoverable load balancer Copyright 2014 Google Inc.
cloudcfg
Package cloudcfg is ...
Package cloudcfg is ...
kubelet
Package kubelet is ...
Package kubelet is ...
proxy/config
Config provides decoupling between various configuration sources (etcd, files,...) and the pieces that actually care about them (loadbalancer, proxy).
Config provides decoupling between various configuration sources (etcd, files,...) and the pieces that actually care about them (loadbalancer, proxy).
third_party
bitbucket.org/kardianos/osext
Extensions to the standard "os" package.
Extensions to the standard "os" package.
github.com/coreos/go-systemd/journal
Package journal provides write bindings to the systemd journal
Package journal provides write bindings to the systemd journal
github.com/fsouza/go-dockerclient
Package docker provides a client for the Docker remote API.
Package docker provides a client for the Docker remote API.
github.com/fsouza/go-dockerclient/testing
Package testing provides a fake implementation of the Docker API, useful for testing purpose.
Package testing provides a fake implementation of the Docker API, useful for testing purpose.
gonuts.org/v1/yaml
Package yaml implements YAML support for the Go language.
Package yaml implements YAML support for the Go language.
gopkg.in/v1/yaml
Package yaml implements YAML support for the Go language.
Package yaml implements YAML support for the Go language.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL