apiVersion: v1
kind: Service
metadata:
  name: eventstore
  namespace: dev
  labels:
    app: eventstore
spec:
  ports:
  - name: int-http-port
    port: 2112
    protocol: TCP    
  - name: ext-http-port
    port: 2113    
    protocol: TCP 
  - name: int-tcp-port
    port: 1112    
    protocol: TCP
  - name: ext-tcp-port
    port: 1113    
    protocol: TCP
  clusterIP: None
  selector:
    app: eventstore
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: eventstore
  namespace: dev
  labels:
spec:
  serviceName: "eventstore"
  updateStrategy:  
    type: RollingUpdate      
  replicas: 3
  selector:
    matchLabels:
      app: eventstore
  template:
    metadata:
      labels:
        app: eventstore
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                    - eventstore
              topologyKey: "kubernetes.io/hostname"      
      containers:
      - name: eventstore
        image: eventstore/eventstore:release-4.1.1-hotfix1
        imagePullPolicy: Always
        ports:
        - containerPort: 2112
          name: int-http-port
        - containerPort: 2113
          name: ext-http-port
        - containerPort: 1112
          name: int-tcp-port
        - containerPort: 1113
          name: ext-tcp-port 
        volumeMounts:
        - name: data
          mountPath: /var/lib/eventstore
        env:
        - name: EVENTSTORE_CLUSTER_SIZE
          value: "3"
        - name: EVENTSTORE_DISCOVER_VIA_DNS
          value: "True"
        - name: EVENTSTORE_CLUSTER_DNS
          value: eventstore.dev.svc.cluster.local
        - name: EVENTSTORE_EXT_IP_ADVERTISE_AS
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: EVENTSTORE_INT_IP_ADVERTISE_AS
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: EVENTSTORE_MAX_MEM_TABLE_SIZE
          value: "250000"
        - name: EVENTSTORE_STATS_PERIOD_SEC 
          value: "3600"
        - name: EVENTSTORE_SKIP_DB_VERIFY 
          value: "true"
        - name: EVENTSTORE_GOSSIP_TIMEOUT_MS
          value: "750"          
        # livenessProbe:
        #   httpGet:
        #     path: /stats
        #     port: 2112
        #   initialDelaySeconds: 5
        #   timeoutSeconds: 5
        #   periodSeconds: 15
        # readinessProbe:
        #   httpGet:
        #     path: /stats
        #     port: 2112
        #   initialDelaySeconds: 5
        #   timeoutSeconds: 5
        #   periodSeconds: 15
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "managed-premium"
      resources:
        requests:
          storage: "10Gi"