How to configure solace helm chart for use on a kubeadm cluster

8/7/2019

We have a private kubernetes cluster. We are trying to follow these quick start instructions to install solace. https://github.com/SolaceProducts/solace-kubernetes-quickstart

The solace helm chart installation steps were as follows:

git clone https://github.com/SolaceProducts/solace-kubernetes-quickstart.git
cd solace-kubernetes-quickstart/solace  
../scripts/configure.sh -p admin
helm install . -f values.yaml

The default yaml is the one drawn from the clone https://github.com/SolaceProducts/solace-kubernetes-quickstart/blob/master/solace/values.yaml

The install was largely successful.

[root@togo solace]# kubectl get pods
NAME                                          READY   STATUS      RESTARTS   AGE
brawny-walrus-solace-0                        1/1     Running     0          41m
[root@togo solace]# kubectl get statefulsets
NAME                   READY   AGE
brawny-walrus-solace   1/1     42m

However the default set of services includes a loadbalancer with a pending external-ip

[root@togo solace]# kubectl get services
NAME                             TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                                                                AGE
brawny-walrus-solace             LoadBalancer   10.101.58.127   <pending>     22:31475/TCP,8080:30940/TCP,55555:30575/TCP,55003:32142/TCP,55443:32096/TCP,943:30133/TCP,80:32276/TCP,443:30643/TCP   43m
brawny-walrus-solace-discovery   ClusterIP      None            <none>        8080/TCP                                                                                                               43m

A quick stack search seems to suggest this is because the loadbalancer expects to work inside a cloud, with an external load balancer:

kubernetes service external ip pending

Furthermore one of the answers suggests using an Ingress Controller when using a custom kubeadm cluster (which is our case).

https://stackoverflow.com/a/44112285/2025407

Solace provides a variety of example "values.yaml".. though a first glance at these does not suggest how to get solace working on a kubeadm cluster.

https://github.com/SolaceProducts/solace-kubernetes-quickstart/tree/master/solace/values-examples

So my simple question for the Solace and/or Kubernetes experts is ... what is the simplest way for me to update my helm chart configuration file (values.yaml) in order to expose ports such as the solace admin port (8080 - i believe) in a fashion that is accessible?

If the helm chart does not support this configuration (which I think it must), then I can also create the appropriate service or services to expose the solace resources properly.. however this would not be the best way to get my solace chart working.

Thanks in advance for any help on this.

-- Dave Sargrad
kubernetes
solace

1 Answer

2/26/2020

You can set the service.type parameter to NodePort.

Here is an simple example to demonstrate NodePort being used.

helm repo add solacecharts https://solaceproducts.github.io/pubsubplus-kubernetes-quickstart/helm-charts
helm install my-release solacecharts/pubsubplus-dev --set service.type=NodePort,storage.persistent=false

Follow the instructions in helm status my-release to figure out the ports.

Example:

$ echo -e "\nProtocol\tAddress\n"`kubectl get svc --namespace default my-release-pubsubplus-dev -o jsonpath="{range .spec.ports[*]}{.name}\t<NodeIP>:{.nodePort}\n"`

Protocol        Address
ssh     <NodeIP>:31359
semp    <NodeIP>:30522
semptls <NodeIP>:30891
smf     <NodeIP>:30019
smfcomp <NodeIP>:32518
smftls  <NodeIP>:30791
web     <NodeIP>:31568
webtls  <NodeIP>:30087
amqp    <NodeIP>:32427
mqtt    <NodeIP>:32060
rest    <NodeIP>:30746

Note that is just an example and isn't suitable for production. For example, persistent storage is not in use, which means that all spooled messages can be lost.

Refer to https://github.com/SolaceProducts/pubsubplus-kubernetes-quickstart for more details about the Solace Kubernetes quickstart.

-- Russell Sim
Source: StackOverflow