2. Helm Installation

Spring Cloud DataFlow offers a Helm Chart for deploying the Spring Cloud Data Flow server and its required services to a Kubernetes Cluster.

[Note]Note

The helm chart is currenlty only available for the 1.2 GA version of Data Flow for Kubernetes.

The following instructions cover how to initialize Helm and install Spring Cloud Data Flow on a Kubernetes cluster.

  1. Installing Helm

    Helm is comprised of 2 components: one is the client (Helm) the other is the server (Tiller). The Helm client is run on your local machine and can be installed using the following instructions found here. If Tiller has not been installed on your cluster, execute the following Helm client command:

    $ helm init
    [Note]Note

    To verify that the Tiller pod is running execute the following command: kubectl get pod --namespace kube-system and you should see the Tiller pod running.

  2. Installing the Spring Cloud Data Flow Server and required services.

    Before we can run the Spring Cloud Data Flow Chart, we need to access the incubator repository where it currently resides. To add this repository to our Helm install, execute the following commands:

    helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com
    helm repo update

    To install Spring Cloud Data Flow and its required services execute the following:

    helm install --name my-release incubator/spring-cloud-data-flow
    [Note]Note

    If you are running on a cluster without a load balancer, such as Minikube, then you should override the service type to use NodePort. Add the --set server.service.type=NodePort override:

    helm install --name my-release --set server.service.type=NodePort \
        incubator/spring-cloud-data-flow

    If you wish specify a different version of Spring Cloud Data Flow besides the current release, you can set the server.version as shown below:

    helm install --name my-release incubator/spring-cloud-data-flow --set server.version=<version-you-want>
    [Note]Note

    To see all of the settings that can be configured on the Spring Cloud Data Flow chart, check out the README.

    You should see the following output:

    NAME:   my-release
    LAST DEPLOYED: Tue Oct  3 10:33:50 2017
    NAMESPACE: default
    STATUS: DEPLOYED
    
    RESOURCES:
    ==> v1/ConfigMap
    NAME                         DATA  AGE
    my-release-data-flow-server  1     2s
    
    ==> v1/PersistentVolumeClaim
    NAME                 STATUS   VOLUME    CAPACITY  ACCESSMODES  STORAGECLASS  AGE
    my-release-mysql     Pending  standard  2s
    my-release-rabbitmq  Pending  standard  2s
    my-release-redis     Pending  standard  2s
    
    ==> v1/Service
    NAME                          CLUSTER-IP     EXTERNAL-IP  PORT(S)                                AGE
    my-release-mysql              10.59.247.118  <none>       3306/TCP                               2s
    my-release-rabbitmq           10.59.249.211  <none>       4369/TCP,5672/TCP,25672/TCP,15672/TCP  2s
    my-release-redis              10.59.242.108  <none>       6379/TCP                               2s
    my-release-data-flow-metrics  10.59.247.121  <none>       80/TCP                                 2s
    my-release-data-flow-server   10.59.249.224  <pending>    80:30859/TCP                           2s
    
    ==> v1beta1/Deployment
    NAME                          DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
    my-release-mysql              1        1        1           0          2s
    my-release-rabbitmq           1        1        1           0          2s
    my-release-redis              1        1        1           0          2s
    my-release-data-flow-metrics  1        1        1           0          2s
    my-release-data-flow-server   1        1        1           0          1s
    
    ==> v1/Secret
    NAME                  TYPE    DATA  AGE
    my-release-mysql      Opaque  2     2s
    my-release-rabbitmq   Opaque  2     2s
    my-release-redis      Opaque  1     2s
    my-release-data-flow  Opaque  2     2s
    
    
    NOTES:
    1. Get the application URL by running these commands:
         NOTE: It may take a few minutes for the LoadBalancer IP to be available.
               You can watch the status of the server by running 'kubectl get svc -w my-release-data-flow-server'
      export SERVICE_IP=$(kubectl get svc --namespace default my-release-data-flow-server -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
      echo http://$SERVICE_IP:80

    You have just created a new release in the default namespace of your Kubernetes cluster. The notes section gives instructions for connecting to the newly installed server. It takes a couple of minutes for the application and its required services to start up. You can check on the status by issuing a kubectl get pod -w command. Wait for the READY column to show "1/1" for all pods. Once that is done, you can connect to the Data Flow server using the external ip listed via a kubectl get svc my-release-data-flow-server command. The default username is user, and the password is password.

    [Note]Note

    If you are running on Minikube then you can use the following command to get the URL for the server:

    minikube service --url my-release-data-flow-server

    To see what Helm releases you have running, you can use the helm list command. When it is time to delete the release, run helm delete my-release. This removes any resources created for the release but keeps release information so you can rollback any changes using a helm rollback my-release 1 command. To completely delete the release and purge any release metadata, use helm delete my-release --purge.

    [Important]Important

    There is an issue with generated secrets used for the required services getting rotated on chart upgrades. To avoid this set the password for these services when installing the chart. You can use:

    helm install --name my-release \
        --set rabbitmq.rabbitmqPassword=rabbitpwd \
        --set mysql.mysqlRootPassword=mysqlpwd \
        --set redis.redisPassword=redispwd incubator/spring-cloud-data-flow