The Kubernetes Package Manager
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Go to file
Adam Reese a17d56ab2d
fix(Makefile): remove -f on docker tag
9 years ago
cmd Make manager initialization use dynamic services 9 years ago
docs Reenable empty project and remove legacy variable 9 years ago
examples Merge pull request #573 from jackgr/pluggable-services 9 years ago
expansion Fix expandybird Python importing to be lazy 9 years ago
hack Update push and get-install.sh 9 years ago
pkg Streamline service lookup 9 years ago
rootfs fix(Makefile): remove -f on docker tag 9 years ago
scripts Make startup script use dynamic services 9 years ago
.gitignore test(e2e): add start script for kubernetes 9 years ago
CONTRIBUTING.md chore(CONTIBUTING.md): note go ver 1.6 for tests 9 years ago
LICENSE Initial commit for DeploymentManager on k8s. 9 years ago
MAINTAINERS.md Removed collaborator terminology 9 years ago
Makefile Update push and get-install.sh 9 years ago
README.md ref(readme): Intro user to concept of deployment 9 years ago
circle.yml fix(circleci): add Go 1.6 9 years ago
get-install.sh Update push and get-install.sh 9 years ago
glide.lock JSONschema support 9 years ago
glide.yaml JSONschema support 9 years ago

README.md

Helm

Circle CI Go Report Card

Helm makes it easy to create, describe, update and delete Kubernetes resources using declarative configuration. A configuration is just a YAML file that configures Kubernetes resources or supplies parameters to templates.

Helm Manager runs server side, in your Kubernetes cluster, so it can tell you what templates you've instantiated there, what resources they created, and even how the resources are organized. So, for example, you can ask questions like:

  • What Redis instances are running in this cluster?
  • What Redis master and slave services are part of this Redis instance?
  • What pods are part of this Redis slave?

The official Helm repository of charts is available in the kubernetes/charts repository.

Please hang out with us in the Slack chat room.

Installing Helm

Note: if you're exploring or using the project, you'll probably want to pull the latest release, since there may be undiscovered or unresolved issues at HEAD.

From a Linux or Mac OS X client:

$ git clone https://github.com/kubernetes/helm.git
$ cd helm
$ make build
$ bin/helm server install

That's it. You can now use kubectl to see Helm running in your cluster like this:

$ kubectl get pod,rc,service --namespace=helm
NAME                    READY        STATUS        RESTARTS   AGE
expandybird-rc-e0whp    1/1          Running       0          35m
expandybird-rc-zdp8w    1/1          Running       0          35m
manager-rc-bl4i4        1/1          Running       0          35m
resourcifier-rc-21clg   1/1          Running       0          35m
resourcifier-rc-i2zhi   1/1          Running       0          35m
NAME                    CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
expandybird-service     10.0.0.248   <none>        8081/TCP   35m
manager-service         10.0.0.49    <none>        8080/TCP   35m
resourcifier-service    10.0.0.184   <none>        8082/TCP   35m
NAME                    DESIRED      CURRENT       AGE
expandybird-rc          2            2             35m
manager-rc              1            1             35m
resourcifier-rc         2            2             35m

If you see expandybird, manager and resourcifier services, as well as expandybird, manager and resourcifier replication controllers with pods that are READY, then Helm is up and running!

Using Helm

Run a Kubernetes proxy to allow the Helm client to connect to the remote cluster:

kubectl proxy --port=8001 &

Configure the HELM_HOST environment variable to let the local Helm client talk to the Helm manager service running in your remote Kubernetes cluster using the proxy.

export HELM_HOST=http://localhost:8001/api/v1/proxy/namespaces/helm/services/manager-service:manager

Installing Charts

To quickly deploy a chart, you can use the Helm command line tool.

Currently here is the step by step guide.

First add a respository of Charts used for testing:

$ bin/helm repo add kubernetes-charts-testing gs://kubernetes-charts-testing

Then deploy a Chart from this repository. For example to start a Redis cluster:

$ bin/helm deploy --name test --properties "workers=2" gs://kubernetes-charts-testing/redis-2.tgz

The command above will create a helm "deployment" called test using the redis-2.tgz chart stored in the google storage bucket kubernetes-charts-testing.

$ bin/helm deployment describe test will allow you to see the status of the resources you just created using the redis-v2.tgz chart. You can also use kubectl to see the the same resources. It'll look like this:

$ kubectl get pods,svc,rc
NAME                    READY        STATUS        RESTARTS   AGE
barfoo-barfoo           5/5          Running       0          45m
redis-master-rc-8wrqt   1/1          Running       0          41m
redis-slave-rc-6ptx6    1/1          Running       0          41m
redis-slave-rc-yc12q    1/1          Running       0          41m
NAME                    CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
kubernetes              10.0.0.1     <none>        443/TCP    45m
redis-master            10.0.0.67    <none>        6379/TCP   41m
redis-slave             10.0.0.168   <none>        6379/TCP   41m
NAME                    DESIRED      CURRENT       AGE
redis-master-rc         1            1             41m
redis-slave-rc          2            2             41m

To connect to your Redis master with a local redis-cli just use kubectl port-forward in a similar manner to:

$ kubectl port-forward redis-master-rc-8wrqt 6379:639 &
$ redis-cli
127.0.0.1:6379> info
...
role:master
connected_slaves:2
slave0:ip=172.17.0.10,port=6379,state=online,offset=925,lag=0
slave1:ip=172.17.0.11,port=6379,state=online,offset=925,lag=1

Once you are done, you can delete your deployment with

$ bin/helm deployment list
test
$ bin/helm deployment rm test

Uninstalling Helm from Kubernetes

You can uninstall Helm entirely using the following command:

$ bin/helm server uninstall

This command will remove everything in the Helm namespace being used.

Design of Helm

There is a more detailed design document available.

Status of the Project

This project is still under active development, so you might run into issues. If you do, please don't be shy about letting us know, or better yet, contribute a fix or feature.

Contributing

Your contributions are welcome.

We use the same workflow, License and Contributor License Agreement as the main Kubernetes repository.

Relationship to Google Cloud Platform's Deployment Manager and Deis's Helm

Kubernetes Helm represent a merge of Google's Deployment Manager (DM) and the original Helm from Deis. Kubernetes Helm uses many of the same concepts and languages as Google Cloud Deployment Manager, but creates resources in Kubernetes clusters, not in Google Cloud Platform projects. It also brings several concepts from the original Helm such as Charts.