diff --git a/cmd/helm/init.go b/cmd/helm/init.go index d368945ec..805af84cb 100644 --- a/cmd/helm/init.go +++ b/cmd/helm/init.go @@ -139,6 +139,7 @@ func newInitCmd(out io.Writer) *cobra.Command { f.VarP(&i.opts.Output, "output", "o", "skip installation and output Tiller's manifest in specified format (json or yaml)") f.StringArrayVar(&i.opts.Values, "override", []string{}, "override values for the Tiller Deployment manifest (can specify multiple or separate values with commas: key1=val1,key2=val2)") + f.IntVar(&i.opts.ProbeServerPort, "probe-server-port", 0, "overrides the default probe server port for Tiller") return cmd } diff --git a/cmd/helm/installer/install.go b/cmd/helm/installer/install.go index becf412a1..3c33f8baa 100644 --- a/cmd/helm/installer/install.go +++ b/cmd/helm/installer/install.go @@ -197,7 +197,7 @@ func generateDeployment(opts *Options) (*v1beta1.Deployment, error) { ImagePullPolicy: opts.pullPolicy(), Ports: []v1.ContainerPort{ {ContainerPort: 44134, Name: "tiller"}, - {ContainerPort: 44135, Name: "http"}, + {ContainerPort: opts.probeServerPort(), Name: "http"}, }, Env: []v1.EnvVar{ {Name: "TILLER_NAMESPACE", Value: opts.Namespace}, @@ -207,7 +207,7 @@ func generateDeployment(opts *Options) (*v1beta1.Deployment, error) { Handler: v1.Handler{ HTTPGet: &v1.HTTPGetAction{ Path: "/liveness", - Port: intstr.FromInt(44135), + Port: intstr.FromInt(int(opts.probeServerPort())), }, }, InitialDelaySeconds: 1, @@ -217,7 +217,7 @@ func generateDeployment(opts *Options) (*v1beta1.Deployment, error) { Handler: v1.Handler{ HTTPGet: &v1.HTTPGetAction{ Path: "/readiness", - Port: intstr.FromInt(44135), + Port: intstr.FromInt(int(opts.probeServerPort())), }, }, InitialDelaySeconds: 1, diff --git a/cmd/helm/installer/options.go b/cmd/helm/installer/options.go index 13cf43dcc..ae5157eb2 100644 --- a/cmd/helm/installer/options.go +++ b/cmd/helm/installer/options.go @@ -94,6 +94,11 @@ type Options struct { // Set merges additional values into the Tiller Deployment manifest. Values []string + + // ProbeServerPort sets the Readiness/Liveness Probes container port for Tiller + // + // Less than or equal to 0 means it will continue to the use the default 44135. + ProbeServerPort int } func (opts *Options) selectImage() string { @@ -134,6 +139,14 @@ func (opts *Options) valuesMap(m map[string]interface{}) (map[string]interface{} return m, nil } +func (opts *Options) probeServerPort() int32 { + probeServerPort := int32(44135) + if opts.ProbeServerPort > 0 { + probeServerPort = int32(opts.ProbeServerPort) + } + return probeServerPort +} + // OutputFormat defines valid values for init output (json, yaml) type OutputFormat string diff --git a/cmd/tiller/tiller.go b/cmd/tiller/tiller.go index 5d2db3816..bc300fe8c 100644 --- a/cmd/tiller/tiller.go +++ b/cmd/tiller/tiller.go @@ -63,7 +63,6 @@ const ( storageConfigMap = "configmap" storageSecret = "secret" - probeAddr = ":44135" traceAddr = ":44136" // defaultMaxHistory sets the maximum number of releases to 0: unlimited @@ -72,6 +71,8 @@ const ( var ( grpcAddr = flag.String("listen", ":44134", "address:port to listen on") + probeAddr = flag.String("probe-address", ":44135", "address:port to listen on for probe server") + probeEnable = flag.Bool("probe", true, "enable probe server") enableTracing = flag.Bool("trace", false, "enable rpc tracing") store = flag.String("storage", storageConfigMap, "storage driver to use. One of 'configmap', 'memory', or 'secret'") remoteReleaseModules = flag.Bool("experimental-release", false, "enable experimental release modules") @@ -182,7 +183,13 @@ func start() { logger.Printf("Starting Tiller %s (tls=%t)", version.GetVersion(), *tlsEnable || *tlsVerify) logger.Printf("GRPC listening on %s", *grpcAddr) - logger.Printf("Probes listening on %s", probeAddr) + + if *probeEnable { + logger.Printf("Probes listening on %s", *probeAddr) + } else { + logger.Printf("Probes disabled") + } + logger.Printf("Storage driver is %s", env.Releases.Name()) logger.Printf("Max history per release is %d", *maxHistory) @@ -201,17 +208,20 @@ func start() { } }() - go func() { - mux := newProbesMux() + if *probeEnable { + go func() { + mux := newProbesMux() - // Register gRPC server to prometheus to initialized matrix - goprom.Register(rootServer) - addPrometheusHandler(mux) + // Register gRPC server to prometheus to initialized matrix + goprom.Register(rootServer) + addPrometheusHandler(mux) - if err := http.ListenAndServe(probeAddr, mux); err != nil { - probeErrCh <- err - } - }() + if err := http.ListenAndServe(*probeAddr, mux); err != nil { + probeErrCh <- err + } + }() + + } healthSrv.SetServingStatus("Tiller", healthpb.HealthCheckResponse_SERVING)