Skip to content

Instantly share code, notes, and snippets.

@bketelsen
Last active March 20, 2024 07:10
Show Gist options
  • Star 17 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save bketelsen/a2d353d0318736c9fa23 to your computer and use it in GitHub Desktop.
Save bketelsen/a2d353d0318736c9fa23 to your computer and use it in GitHub Desktop.
This gist represents all the manifests you'll need to run a redundant and fault-tolerant NSQ cluster on Kubernetes. NSQ Admin's http interface is available on port 14171 on any node. There's an issue with NSQ Admin if you're running more than one lookupd service, so I recommend running just one lookupd until I figure it out.
{
"id": "nsqadmin-http",
"kind": "Service",
"apiVersion": "v1beta1",
"port": 14171,
"protocol": "TCP",
"selector": { "name": "nsqadmin" }
}
{
"id": "nsqadminController",
"kind": "ReplicationController",
"apiVersion": "v1beta1",
"desiredState": {
"replicas": 1,
"replicaSelector": {"name": "nsqadmin"},
"podTemplate": {
"desiredState": {
"manifest": {
"version": "v1beta1",
"id": "nsqadmin",
"containers": [{
"name": "nsqd",
"image": "bketelsen/nsqadmin",
"ports": [{"containerPort": 4171}],
}]
}
},
"labels": {"name": "nsqadmin"}
}},
"labels": {"name": "nsqadmin"}
}
{
"id": "nsqd-http",
"kind": "Service",
"apiVersion": "v1beta1",
"port": 14151,
"containerPort": 4151,
"protocol": "TCP",
"selector": { "name": "nsqd" }
}
{
"id": "nsqd-tcp",
"kind": "Service",
"apiVersion": "v1beta1",
"port": 14150,
"containerPort": 4150,
"protocol": "TCP",
"selector": { "name": "nsqd" }
}
{
"id": "nsqdController",
"kind": "ReplicationController",
"apiVersion": "v1beta1",
"desiredState": {
"replicas": 5,
"replicaSelector": {"name": "nsqd"},
"podTemplate": {
"desiredState": {
"manifest": {
"version": "v1beta1",
"id": "nsqd",
"volumes": {["name": "nsqdpersistence"]},
"containers": [{
"name": "nsqd",
"image": "bketelsen/nsqd:latest",
"volumes": {["name":"nsqdpersistence","mountPath":"/data"]},
"ports": [{"containerPort": 4150},
{"containerPort":4151}]
}]
}
},
"labels": {"name": "nsqd"}
}},
"labels": {"name": "nsqd"}
}
{
"id": "nsqlookupd-http",
"kind": "Service",
"apiVersion": "v1beta1",
"port": 14161,
"containerPort": 4161,
"protocol": "TCP",
"selector": { "name": "nsqlookupd" }
}
{
"id": "nsqlookupd-tcp",
"kind": "Service",
"apiVersion": "v1beta1",
"port": 14160,
"containerPort": 4160,
"protocol": "TCP",
"selector": { "name": "nsqlookupd" }
}
{
"id": "nsqlookupdController",
"kind": "ReplicationController",
"apiVersion": "v1beta1",
"desiredState": {
"replicas": 3,
"replicaSelector": {"name": "nsqlookupd"},
"podTemplate": {
"desiredState": {
"manifest": {
"version": "v1beta1",
"id": "nsqlookupdController",
"containers": [{
"name": "nsqlookupd",
"image": "nsqio/nsqlookupd",
"ports": [{"containerPort": 4160},
{"containerPort":4161}]
}]
}
},
"labels": {"name": "nsqlookupd"}
}},
"labels": {"name": "nsqlookupd"}
}
@bketelsen
Copy link
Author

see @smreeds fork for updates to Kubernetes 0.5

@gravis
Copy link

gravis commented Oct 13, 2015

Hey, I really don't get how this could work with several replicas. Could you explain how you managed to notify all the (3 replicas of) nslookupd when nsqd is starting?
Also pod IPs are considered ephemeral, what IP do the 5 replicas of nsqd register? If it's the ip of the service, what's the point of having nslookupd?
Finally, the 5 nsqd replicas are sharing a single PV, this will lead to io error as soon as 2 servers will write at the same place, how do you handle that?
Thanks for your insights.

@joeblew99
Copy link

Also found this:
https://github.com/tallstreet/nsq-kubernetes

I have not had a chance to try it.

@antonio-piha
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment