Skip to content

Instantly share code, notes, and snippets.

@rocketraman
Created October 4, 2017 00:07
Show Gist options
  • Save rocketraman/e58113d43ee48eac91f080b681a9fda3 to your computer and use it in GitHub Desktop.
Save rocketraman/e58113d43ee48eac91f080b681a9fda3 to your computer and use it in GitHub Desktop.
Kubernetes service and deployment descriptor for Zookeeper
apiVersion: v1
kind: Service
metadata:
name: zk
labels:
app: zk
tier: backend
spec:
# Lookup: dig -t srv _client._tcp.zk.default.svc.cluster.local
ports:
- port: 2181
name: client
- port: 2888
name: server
- port: 3888
name: leader-election
# Make the service headless (expose individual pods to DNS)
clusterIP: None
selector:
app: zk
tier: backend
---
apiVersion: v1
kind: ConfigMap
metadata:
name: zk-config
labels:
app: zk
tier: backend
data:
jvm.heap: "512M"
tick: "2000"
init: "10"
sync: "5"
client.cnxns: "20"
snap.retain: "3"
purge.interval: "1"
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: zk-budget
spec:
selector:
matchLabels:
app: zk
tier: backend
minAvailable: 2
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: zk
labels:
app: zk
tier: backend
spec:
serviceName: zk
replicas: 3
template:
metadata:
labels:
app: zk
tier: backend
annotations:
pod.alpha.kubernetes.io/initialized: "true"
scheduler.alpha.kubernetes.io/affinity: >
{
"podAntiAffinity": {
"requiredDuringSchedulingIgnoredDuringExecution": [{
"labelSelector": {
"matchExpressions": [{
"key": "app",
"operator": "In",
"values": ["zk"]
}]
},
"topologyKey": "kubernetes.io/hostname"
}]
}
}
spec:
containers:
- name: k8szk
image: gcr.io/google_samples/k8szk:v2
resources:
requests:
memory: "1Gi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "500m"
ports:
- containerPort: 2181
name: client
- containerPort: 2888
name: server
- containerPort: 3888
name: leader-election
env:
- name : ZK_REPLICAS
value: "3"
- name : ZK_HEAP_SIZE
valueFrom:
configMapKeyRef:
name: zk-config
key: jvm.heap
- name : ZK_TICK_TIME
valueFrom:
configMapKeyRef:
name: zk-config
key: tick
- name : ZK_INIT_LIMIT
valueFrom:
configMapKeyRef:
name: zk-config
key: init
- name : ZK_SYNC_LIMIT
valueFrom:
configMapKeyRef:
name: zk-config
key: tick
- name : ZK_MAX_CLIENT_CNXNS
valueFrom:
configMapKeyRef:
name: zk-config
key: client.cnxns
- name: ZK_SNAP_RETAIN_COUNT
valueFrom:
configMapKeyRef:
name: zk-config
key: snap.retain
- name: ZK_PURGE_INTERVAL
valueFrom:
configMapKeyRef:
name: zk-config
key: purge.interval
- name: ZK_CLIENT_PORT
value: "2181"
- name: ZK_SERVER_PORT
value: "2888"
- name: ZK_ELECTION_PORT
value: "3888"
command:
- sh
- -c
- zkGenConfig.sh && zkServer.sh start-foreground
readinessProbe:
exec:
command:
- "zkOk.sh"
initialDelaySeconds: 15
timeoutSeconds: 5
livenessProbe:
exec:
command:
- "zkOk.sh"
initialDelaySeconds: 15
timeoutSeconds: 5
volumeMounts:
- name: data
mountPath: /var/lib/zookeeper
securityContext:
runAsUser: 1000
fsGroup: 1000
volumeClaimTemplates:
- metadata:
name: data
annotations:
volume.beta.kubernetes.io/storage-class: managed-standard
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 5Gi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment