I can use some help to fine tune the nomad job spec I have below to install redpanda on a 3 node nomad cluster. I used their docker compose file and tried to translate it to a nomad job spec. I am using a csi storage volume for this. My cluster also has consul for service discovery.
My questions:
- Can I install this as a system job? How does consul service discovery change this confguration? They are installing 3 different services and getting them to talk to each other with rpc, I think.
- if setting it up as a system job, do I need to do redpanda-1, 2 and 3? Perhaps I need just redpanda-1 ?
- What is the best network mode for this? bridge or host?
job "redpanda-cluster" {
datacenters = ["your-datacenter"]
group "redpanda-group" {
network {
mode = "bridge"
}
volume "redpanda-csi" {
type = "csi"
read_only = false
source = "redpanda-csi-volume-nfs"
access_mode = "multi-node-multi-writer"
attachment_mode = "file-system"
}
task "redpanda-0" {
driver = "docker"
volume_mount {
volume = "redpanda-csi"
destination = "/redpanda-0"
read_only = false
}
config {
image = "docker.redpanda.com/redpandadata/redpanda:v23.2.17"
command = ["redpanda", "start",
"--kafka-addr", "internal://0.0.0.0:9092,external://0.0.0.0:19092",
"--advertise-kafka-addr", "internal://redpanda-0:9092,external://localhost:19092",
"--pandaproxy-addr", "internal://0.0.0.0:8082,external://0.0.0.0:18082",
"--advertise-pandaproxy-addr", "internal://redpanda-0:8082,external://localhost:18082",
"--schema-registry-addr", "internal://0.0.0.0:8081,external://0.0.0.0:18081",
"--rpc-addr", "redpanda-0:33145",
"--advertise-rpc-addr", "redpanda-0:33145",
"--smp", "1",
"--memory", "1G",
"--mode", "dev-container",
"--default-log-level=debug"]
}
resources {
network {
port "http" { static = 18081}
port "pandaproxy" { static = 18082}
port "kafka" {static = 19092}
port "rpc" {static = 19644}
}
}
volumes = [
"redpanda-0:/var/lib/redpanda/data",
]
env {
# Add any necessary environment variables here
}
}
task "redpanda-1" {
driver = "docker"
volume_mount {
volume = "redpanda-csi"
destination = "/redpanda-1"
read_only = false
}
config {
image = "docker.redpanda.com/redpandadata/redpanda:v23.2.17"
command = ["redpanda", "start",
"--kafka-addr", "internal://0.0.0.0:9092,external://0.0.0.0:29092",
"--advertise-kafka-addr", "internal://redpanda-1:9092,external://localhost:29092",
"--pandaproxy-addr", "internal://0.0.0.0:8082,external://0.0.0.0:28082",
"--advertise-pandaproxy-addr", "internal://redpanda-1:8082,external://localhost:28082",
"--schema-registry-addr", "internal://0.0.0.0:8081,external://0.0.0.0:28081",
"--rpc-addr", "redpanda-1:33145",
"--advertise-rpc-addr", "redpanda-1:33145",
"--smp", "1",
"--memory", "1G",
"--mode", "dev-container",
"--default-log-level=debug",
"--seeds", "redpanda-0:33145"]
}
resources {
network {
port "http" { static = 28081}
port "pandaproxy" {static = 28082}
port "kafka" {static = 29092}
port "rpc" {static = 29644}
}
}
volumes = [
"redpanda-1:/var/lib/redpanda/data",
]
env {
# Add any necessary environment variables here
}
depends_on = ["redpanda-0"]
}
task "redpanda-2" {
driver = "docker"
volume_mount {
volume = "redpanda-csi"
destination = "/redpanda-2"
read_only = false
}
config {
image = "docker.redpanda.com/redpandadata/redpanda:v23.2.17"
command = ["redpanda", "start",
"--kafka-addr", "internal://0.0.0.0:9092,external://0.0.0.0:39092",
"--advertise-kafka-addr", "internal://redpanda-2:9092,external://localhost:39092",
"--pandaproxy-addr", "internal://0.0.0.0:8082,external://0.0.0.0:38082",
"--advertise-pandaproxy-addr", "internal://redpanda-2:8082,external://localhost:38082",
"--schema-registry-addr", "internal://0.0.0.0:8081,external://0.0.0.0:38081",
"--rpc-addr", "redpanda-2:33145",
"--advertise-rpc-addr", "redpanda-2:33145",
"--smp", "1",
"--memory", "1G",
"--mode", "dev-container",
"--default-log-level=debug",
"--seeds", "redpanda-0:33145"]
}
resources {
network {
port "http" {static = 38081}
port "pandaproxy" {static = 38082}
port "kafka" {static = 39092}
port "rpc" {static = 39644}
}
}
volumes = [
"redpanda-2:/var/lib/redpanda/data",
]
env {
# Add any necessary environment variables here
}
depends_on = ["redpanda-0"]
}
task "console" {
driver = "docker"
config {
image = "docker.redpanda.com/redpandadata/console:v2.3.8"
entrypoint = ["/bin/sh", "-c"]
command = 'echo "$$CONSOLE_CONFIG_FILE" > /tmp/config.yml; /app/console'
}
resources {
network {
port "http" {static = 8080}
}
}
volumes = []
env {
CONFIG_FILEPATH = "/tmp/config.yml"
CONSOLE_CONFIG_FILE = <<EOF
kafka:
brokers: ["redpanda-0:9092"]
schemaRegistry:
enabled: true
urls: ["http://redpanda-0:8081"]
redpanda:
adminApi:
enabled: true
urls: ["http://redpanda-0:9644"]
EOF
}
depends_on = ["redpanda-0"]
}
}
}