Skip to content

Instantly share code, notes, and snippets.

@rocketraman
Created October 4, 2017 00:05
Show Gist options
  • Save rocketraman/6726ec0a26026a4ccc98c77966bb9030 to your computer and use it in GitHub Desktop.
Save rocketraman/6726ec0a26026a4ccc98c77966bb9030 to your computer and use it in GitHub Desktop.
Kubernetes deployment and service descriptor for Kafka
apiVersion: v1
kind: Service
metadata:
name: kafka
labels:
app: kafka
tier: backend
spec:
# Lookup: dig -t srv _kafka._tcp.kafka.default.svc.cluster.local
ports:
- port: 9092
name: kafka
- port: 1099
name: jmx
# Make the service headless (expose individual pods to DNS)
clusterIP: None
selector:
app: kafka
tier: backend
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: kafka-budget
spec:
selector:
matchLabels:
app: kafka
tier: backend
minAvailable: 2
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: kafka
labels:
app: kafka
tier: backend
spec:
serviceName: kafka
replicas: 3
template:
metadata:
labels:
app: kafka
tier: backend
annotations:
pod.alpha.kubernetes.io/initialized: "true"
scheduler.alpha.kubernetes.io/affinity: >
{
"podAntiAffinity": {
"requiredDuringSchedulingIgnoredDuringExecution": [{
"labelSelector": {
"matchExpressions": [{
"key": "app",
"operator": "In",
"values": ["kafka"]
}]
},
"topologyKey": "kubernetes.io/hostname"
}]
}
}
spec:
containers:
- name: kafka
image: solsson/kafka:0.11.0.0
ports:
- containerPort: 1099
name: jms
- containerPort: 9092
name: kafka
resources:
requests:
memory: "2Gi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "1"
env:
- name: KAFKA_JMX_OPTS
value: "-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.rmi.port=1099"
command:
- sh
- -c
- "JMX_PORT=1099 KAFKA_JMX_OPTS=\"$KAFKA_JMX_OPTS -Djava.rmi.server.hostname=${HOSTNAME}.kafka\" ./bin/kafka-server-start.sh config/server.properties --override zookeeper.connect=zk:2181/ --override broker.id=${HOSTNAME##*-} --override log.dirs=/tmp/kafka-logs/data"
readinessProbe:
exec:
command:
- bin/kafka-topics.sh
- --zookeeper
- "zk:2181"
- --list
initialDelaySeconds: 30
timeoutSeconds: 5
livenessProbe:
exec:
command:
- bin/kafka-topics.sh
- --zookeeper
- "zk:2181"
- --list
initialDelaySeconds: 30
timeoutSeconds: 5
volumeMounts:
- name: data
mountPath: "/tmp/kafka-logs"
volumeClaimTemplates:
- metadata:
name: data
annotations:
volume.beta.kubernetes.io/storage-class: managed-premium
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 30Gi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment