#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

## A reference of https://github.com/apache/incubator-pulsar/blob/master/kubernetes/google-container-engine/bookie.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: bookie-config
data:
  BK_BOOKIE_EXTRA_OPTS: "\"-Xms1g -Xmx1g -XX:MaxDirectMemorySize=1g -XX:+UseG1GC  -XX:MaxGCPauseMillis=10 -XX:+ParallelRefProcEnabled -XX:+UnlockExperimentalVMOptions -XX:+AggressiveOpts -XX:+DoEscapeAnalysis -XX:ParallelGCThreads=32 -XX:ConcGCThreads=32 -XX:G1NewSizePercent=50 -XX:+DisableExplicitGC -XX:-ResizePLAB\""
  BK_bookiePort: "3181"
  BK_journalDirectory: "/bookkeeper/data/journal"
  BK_ledgerDirectories: "/bookkeeper/data/ledgers"
  BK_indexDirectories: "/bookkeeper/data/ledgers" 
  BK_zkServers: zookeeper
  # TODO: Issue 458: https://github.com/apache/bookkeeper/issues/458
  #BK_statsProviderClass: org.apache.bookkeeper.stats.PrometheusMetricsProvider
---

## BookKeeper servers need to access the local disks and the pods
## cannot be moved across different nodes.
## For this reason, we run BK as a daemon set, one for each node in the
## cluster, unless restricted by label selectors
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: bookie
  labels:
    app: bookkeeper
    component: bookie
spec:
  selector:
    matchLabels:
      app: bookkeeper
      component: bookie
      cluster: bookkeeper
  template:
    metadata:
      labels:
        app: bookkeeper
        component: bookie
        # Specify cluster to allow aggregation by cluster in
        # the metrics
        cluster: bookkeeper
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "8000"

    spec:
      containers:
        - name: bookie
          image: apache/bookkeeper:4.7.3
          resources:
            requests:
              memory: "3Gi"
              cpu: "1000m"
            limits:
              memory: "5Gi"
              cpu: "2000m"
          command: [ "/bin/bash", "/opt/bookkeeper/scripts/entrypoint.sh" ]
          args: ["/opt/bookkeeper/bin/bookkeeper", "bookie"]
          ports:
            - name: client
              containerPort: 3181
              # we are using `status.hostIP` for the bookie's advertised address. export 3181 as the hostPort,
              # so that the containers are able to access the host port
              hostPort: 3181
          envFrom:
            - configMapRef:
                name: bookie-config
          env:
            - name: BK_advertisedAddress
              valueFrom:
                fieldRef:
                  fieldPath: status.hostIP
    
          volumeMounts:
            - name: journal-disk
              mountPath: /bookkeeper/data/journal
            - name: ledgers-disk
              mountPath: /bookkeeper/data/ledgers

      volumes:
          # Mount local disks
        - name: journal-disk
          hostPath:
            path: /mnt/disks/ssd0
        - name: ledgers-disk
          hostPath:
            path: /mnt/disks/ssd1

---

##
## Define the Bookie headless service
## In practice, in this case, it is only useful to have a view of
## all the bookie pods that are present
##
apiVersion: v1
kind: Service
metadata:
  name: bookie
  labels:
    app: bookkeeper
    component: bookie
spec:
  ports:
  - port: 3181
    name: server
  clusterIP: None
  selector:
    app: bookkeeper
    component: bookie

---
##
## Run BookKeeper auto-recovery from a different set of containers
## Auto-Recovery makes sure to restore the replication factor when any bookie
## crashes and it's not recovering on its own.
##
apiVersion: apps/v1
kind: Deployment
metadata:
  name: bookie-autorecovery
spec:
  selector:
    matchLabels:
      app: bookkeeper
      component: bookkeeper-replication
  replicas: 2
  template:
    metadata:
      labels:
        app: bookkeeper
        component: bookkeeper-replication
    spec:
      containers:
        - name: replication-worker
          image: apache/bookkeeper:4.7.3
          command: [ "/bin/bash", "/opt/bookkeeper/scripts/entrypoint.sh" ]
          args: ["/opt/bookkeeper/bin/bookkeeper", "autorecovery"]
          envFrom:
            - configMapRef:
                name: bookie-config

