deploy/kubernetes/gke/bookkeeper.yaml (103 lines of code) (raw):

# # 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:+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 #BK_statsProviderClass: org.apache.bookkeeper.stats.prometheus.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: extensions/v1beta1 kind: DaemonSet metadata: name: bookie labels: app: bookkeeper component: bookie spec: template: metadata: labels: app: bookkeeper component: bookie # Specify cluster to allow aggregation by cluster in # the metrics cluster: bookkeeper-gke annotations: prometheus.io/scrape: "true" prometheus.io/port: "8000" spec: containers: - name: bookie image: apache/bookkeeper:latest resources: requests: memory: "3Gi" cpu: "1000m" limits: memory: "5Gi" cpu: "2000m" command: [ "/bin/bash", "/opt/bookkeeper/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/v1beta1 kind: Deployment metadata: name: bookie-autorecovery spec: replicas: 2 template: metadata: labels: app: bookkeeper component: bookkeeper-replication spec: containers: - name: replication-worker image: apache/bookkeeper:latest command: [ "/bin/bash", "/opt/bookkeeper/entrypoint.sh" ] args: ["/opt/bookkeeper/bin/bookkeeper", "autorecovery"] envFrom: - configMapRef: name: bookie-config