Deploying Spinnaker to Kubernetes using Helm chart

Introduction

The recommended way to deploy Spinnaker is in a Kubernetes environment. In this tutorial, we will show you how easy it is to setup a Spinnaker instance in Kubernetes using helm charts. You can have a Spinnaker up and running in less than 20 minutes. To be successful, the Kubernetes cluster needs to support:

  • 18G of memory and 6 CPU cores
  • persistent storage volumes
  • loadbalancers

Pre-requisites

  • You have kubernetes cluster ready and kubectl can connect to that cluster
  • You have helm v3 installed

Deploy Spinnaker

Note: if you are using Openshift, you can replace kubectl with oc commands

Note: In Openshift, you may need to grant additional permission to the service account. For example, if you are installing the helm chart below using name mychart, you should grant the following to the service account mychart-spinnaker-halyard

oc adm policy add-scc-to-user anyuid -z mychart-spinnaker-halyard

We will install Spinnaker using the published stable Helm chart. If you want to customize the installation, get the values,yaml file and customize it.

wget https://raw.githubusercontent.com/helm/charts/master/stable/spinnaker/values.yaml

Run helm commands to setup Spinnaker (the -f values.yaml is required if you are customizing your installation).

helm repo add stable https://kubernetes-charts.storage.googleapis.com/
helm install spinnaker stable/spinnaker [-f values.yaml]

Give it some time. Once all the pods are running, your Spinnaker is deployed and ready to use.

$ kubectl get pods
NAME                                READY   STATUS      RESTARTS   AGE
spin-clouddriver-749d9c9589-wg49j   1/1     Running     0          11m
spin-deck-775cdfccff-shzcb          1/1     Running     0          11m
spin-echo-5fd76b8f79-fkdm9          1/1     Running     0          11m
spin-front50-597b4ff46d-72kxr       1/1     Running     0          11m
spin-gate-7dc88df658-xl8nm          1/1     Running     0          11m
spin-igor-67b9b4c66-zs28q           1/1     Running     0          11m
spin-orca-7d5958f8d6-c6w7x          1/1     Running     0          11m
spin-rosco-67847b657b-gx5vc         1/1     Running     0          11m
spinnaker-install-using-hal-mdt4q   0/1     Completed   0          14m
spinnaker-minio-5c994565d6-fjdkm    1/1     Running     0          14m
spinnaker-redis-master-0            1/1     Running     0          14m
spinnaker-spinnaker-halyard-0       1/1     Running     0          14m

Your Spinnaker is deployed but how do you access it? You could always create port-forwards as mentioned in the output of the helm install used to deploy Spinnaker. But that works when you are using your local laptop. If your Kubernetes cluster supports loadbalancer services, it is easier to create a loadbalancer and access Spinnaker. This best option to make it available to everyone.

Create a file spinsvcs.yml to create the loadbalancer service to Spinnaker.

apiVersion: v1
kind: Service
metadata:
  labels:
    app: spin
    stack: deck
  name: spin-deck-ui
spec:
  type: LoadBalancer
  ports:
  -  name: http
     port: 9000
     protocol: TCP
  selector:
    cluster: "spin-deck"

Run the commands to create the service.

kubectl apply -f spinsvcs.yml

To get the hostname to connect to Spinnaker run,

$ kubectl get service spin-deck-ui
NAME           TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)          AGE
spin-deck-ui   LoadBalancer   172.30.16.45   52.147.219.48   9000:31544/TCP   12m

Once you have the EXTERNAL-IP address, you can connect to Spinnaker using the value of the EXTERNAL-IP. For example, using the above output,

http://52.147.219.48:9000

Tagged

1 thought on “Deploying Spinnaker to Kubernetes using Helm chart

  1. I tried deploying it in EKS cluster using helm charts, but when s3 is enabled it times out and fails otherwise it gets deployed fine.

    S3 section:

    s3:
    enabled: true
    bucket: “spinnaker”
    rootFolder: “front50”
    region: “us-east-1”
    # endpoint: “”
    # accessKey: “”
    # secretKey: “”
    assumeRole: “arn::::::myrolename”
    ## Here you can pass extra arguments to configure s3 storage options
    extraArgs: []
    # – “–path-style-access true”

    It throws error unexpected key value or it times out.

    Here i tried to attach the IAM role to pods but it doesn’t work either and says unexpected value.

    ## You can use it to add annotations for pods, override the image, etc.
    additionalServiceSettings: {}
    deck.yml:
    artifactId: gcr.io/spinnaker-marketplace/deck:2.9.0-20190412012808
    kubernetes:
    podAnnotations:
    iam.amazonaws.com/role: arn:aws:iam::1234567:role/SpintestInt
    clouddriver.yml:
    kubernetes:
    podAnnotations:
    iam.amazonaws.com/role: arn:aws:iam::1234567:role/SpintestInt

Leave a Reply

Your email address will not be published. Required fields are marked *