Research into k8s and NATS with some experimental work. Eventually, charts here will be checked into Kubernetes.
Note that this is a WORK IN PROGRESS; much of what you see here may change, drastically. Feedback is welcome though.
minicube start
TBD
There are charts for core NATS and NATS streaming in the charts
directory.
To use the charts, helm is required. Follow the installation instructions there.
cd charts
The Core NATS server installation can be installed via:
helm install nats-server
$ helm list
NAME REVISION UPDATED STATUS CHART NAMESPACE
eponymous-worm 1 Wed Dec 6 14:51:15 2017 DEPLOYED nats-server-0.1.0 default
If you are using NATS streaming, be sure to locally update your dependencies, otherwise installation will fail with the message Error: found in requirements.yaml, but missing in charts/ directory: nats-server
.
helm dependency build nats-streaming-server
Now you can install nats streaming server:
helm install nats-streaming-server
$ helm list
NAME REVISION UPDATED STATUS CHART NAMESPACE
yellow-pika 1 Wed Dec 6 15:20:10 2017 DEPLOYED nats-streaming-server-0.1.0 default
At this time, either install core NATS or nats streaming.
There are a few hacky manual tests for sanity checking the NATS server and NATS streaming server installations. Tests are run as jobs in your Kubernetes cluster.
If using minikube, run . ./scripts/use_minikube_docker.sh
to use the local minikube docker repo. Otherwise, setup the appropriate docker repository for your environment. If you haven't installed docker this won't go well.
./images/nats-bench/build.sh
./images/stan-bench/build.sh
Make sure you are using a version of docker that support multi-stage builds.
Single Pub/Sub App
There is a basic pub/sub test, that sends 10M messages through a single server.
kubectl create -f manual_tests/job-nats-bench-pubsub.yaml
Seperate publisher and subscriber applications
You can do one pub to one sub. These may or may not connect to different servers in your cluster.
kubectl create -f manual_tests/job-nats-bench-sub.yaml
Wait for it to start and subscribe, then launch the publisher.
kubectl create -f manual_tests/job-nats-bench-pub.yaml
Seperate publisher to many subscriber applications
For fanout, and to more confidently test the NATS server service, you can run one pub to five subs.
kubectl create -f manual_tests/job-nats-bench-sub-5.yaml
Wait for it to start and subscribe, then launch the publisher.
kubectl create -f manual_tests/job-nats-bench-pub.yaml
Use this pub/sub benchmark to sanity check the streaming server.
kubectl create -f manual_tests/job-stan-bench-pubsub.yaml
You can create a NATS server deployment and service directly; check out the files in the ./example_objects
directory.
./example_objects/setup.sh
- TLS options
- Encrypt passwords
- Annotations (service, controllers, etc)
- Configuration files on a pvc
- Do not solicit routes on a single server NATS deployment
- Chart READMEs
- LoadBalancerIP value
- Add NATS streaming file store parameters
- Monitoring (Prometheus)
- Support conditional install of NATS in NATS streaming.