Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save patsevanton/a8abf9af71ece54f1a72973b0802f64a to your computer and use it in GitHub Desktop.
Save patsevanton/a8abf9af71ece54f1a72973b0802f64a to your computer and use it in GitHub Desktop.

Revisions

  1. patsevanton created this gist Nov 5, 2022.
    444 changes: 444 additions & 0 deletions Helm template loggenerator for pre-install hook-weight hook
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,444 @@
    ---
    # Source: loggenerator/templates/serviceaccount.yaml
    apiVersion: v1
    kind: ServiceAccount
    metadata:
    name: loggenerat-loggenerator
    labels:
    helm.sh/chart: loggenerator-0.1.0
    app.kubernetes.io/name: loggenerator
    app.kubernetes.io/instance: loggenerat
    app.kubernetes.io/managed-by: Helm
    ---
    # Source: loggenerator/templates/service.yaml
    apiVersion: v1
    kind: Service
    metadata:
    name: loggenerat-loggenerator
    labels:
    helm.sh/chart: loggenerator-0.1.0
    app.kubernetes.io/name: loggenerator
    app.kubernetes.io/instance: loggenerat
    app.kubernetes.io/managed-by: Helm
    spec:
    type: ClusterIP
    ports:
    - port: 80
    targetPort: http
    protocol: TCP
    name: http
    selector:
    app.kubernetes.io/name: loggenerator
    app.kubernetes.io/instance: loggenerat
    ---
    # Source: loggenerator/templates/deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: loggenerat-loggenerator
    labels:
    helm.sh/chart: loggenerator-0.1.0
    app.kubernetes.io/name: loggenerator
    app.kubernetes.io/instance: loggenerat
    app.kubernetes.io/managed-by: Helm
    spec:
    replicas: 1
    selector:
    matchLabels:
    app.kubernetes.io/name: loggenerator
    app.kubernetes.io/instance: loggenerat
    template:
    metadata:
    labels:
    app.kubernetes.io/name: loggenerator
    app.kubernetes.io/instance: loggenerat
    spec:
    serviceAccountName: loggenerat-loggenerator
    securityContext:
    {}
    containers:
    - name: loggenerator
    securityContext:
    {}
    image: "liubin/loggenerator:latest"
    imagePullPolicy: IfNotPresent
    env:
    - name: MAX
    value: "9"
    - name: SPEED
    value: "9"
    ports:
    - name: http
    containerPort: 80
    protocol: TCP
    resources:
    {}
    ---
    # Source: loggenerator/charts/cassandra/templates/serviceaccount.yaml
    apiVersion: v1
    kind: ServiceAccount
    metadata:
    name: loggenerat-cassandra
    namespace: "loggenerator"
    labels:
    app.kubernetes.io/name: cassandra
    helm.sh/chart: cassandra-9.7.3
    app.kubernetes.io/instance: loggenerat
    app.kubernetes.io/managed-by: Helm
    annotations:
    helm.sh/hook: pre-upgrade,pre-install
    helm.sh/hook-weight: "-10"
    automountServiceAccountToken: true
    ---
    # Source: loggenerator/charts/cassandra/templates/cassandra-secret.yaml
    apiVersion: v1
    kind: Secret
    metadata:
    name: loggenerat-cassandra
    namespace: "loggenerator"
    labels:
    app.kubernetes.io/name: cassandra
    helm.sh/chart: cassandra-9.7.3
    app.kubernetes.io/instance: loggenerat
    app.kubernetes.io/managed-by: Helm
    annotations:
    helm.sh/hook: pre-upgrade,pre-install
    helm.sh/hook-weight: "-10"
    type: Opaque
    data:
    cassandra-password: "SFFJUFBVeVFlcg=="
    ---
    # Source: loggenerator/charts/cassandra/templates/metrics-configmap.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: loggenerat-cassandra-metrics-conf
    namespace: "loggenerator"
    labels:
    app.kubernetes.io/name: cassandra
    helm.sh/chart: cassandra-9.7.3
    app.kubernetes.io/instance: loggenerat
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/part-of: cassandra
    app.kubernetes.io/component: cassandra-exporter
    annotations:
    helm.sh/hook: pre-upgrade,pre-install
    helm.sh/hook-weight: "-10"
    data:
    config.yml: |-
    host: localhost:5555
    ssl: False
    user:
    password:
    listenPort: 8080
    blacklist:
    # To profile the duration of jmx call you can start the program with the following options
    # > java -Dorg.slf4j.simpleLogger.defaultLogLevel=trace -jar cassandra_exporter.jar config.yml --oneshot
    #
    # To get intuition of what is done by cassandra when something is called you can look in cassandra
    # https://github.com/apache/cassandra/tree/trunk/src/java/org/apache/cassandra/metrics
    # Please avoid to scrape frequently those calls that are iterating over all sstables

    # Unaccessible metrics (not enough privilege)
    - java:lang:memorypool:.*usagethreshold.*

    # Leaf attributes not interesting for us but that are presents in many path
    - .*:999thpercentile
    - .*:95thpercentile
    - .*:fifteenminuterate
    - .*:fiveminuterate
    - .*:durationunit
    - .*:rateunit
    - .*:stddev
    - .*:meanrate
    - .*:mean
    - .*:min

    # Path present in many metrics but uninterresting
    - .*:viewlockacquiretime:.*
    - .*:viewreadtime:.*
    - .*:cas[a-z]+latency:.*
    - .*:colupdatetimedeltahistogram:.*

    # Mostly for RPC, do not scrap them
    - org:apache:cassandra:db:.*

    # columnfamily is an alias for Table metrics
    # https://github.com/apache/cassandra/blob/8b3a60b9a7dbefeecc06bace617279612ec7092d/src/java/org/apache/cassandra/metrics/TableMetrics.java#L162
    - org:apache:cassandra:metrics:columnfamily:.*

    # Should we export metrics for system keyspaces/tables ?
    - org:apache:cassandra:metrics:[^:]+:system[^:]*:.*

    # Don't scrap us
    - com:criteo:nosql:cassandra:exporter:.*

    maxScrapFrequencyInSec:
    50:
    - .*

    # Refresh those metrics only every hour as it is costly for cassandra to retrieve them
    3600:
    - .*:snapshotssize:.*
    - .*:estimated.*
    - .*:totaldiskspaceused:.*
    ---
    # Source: loggenerator/charts/cassandra/templates/headless-svc.yaml
    apiVersion: v1
    kind: Service
    metadata:
    name: loggenerat-cassandra-headless
    namespace: "loggenerator"
    labels:
    app.kubernetes.io/name: cassandra
    helm.sh/chart: cassandra-9.7.3
    app.kubernetes.io/instance: loggenerat
    app.kubernetes.io/managed-by: Helm
    annotations:
    helm.sh/hook: pre-upgrade,pre-install
    helm.sh/hook-weight: "-10"
    spec:
    clusterIP: None
    publishNotReadyAddresses: true
    ports:
    - name: intra
    port: 7000
    targetPort: intra
    - name: tls
    port: 7001
    targetPort: tls
    - name: jmx
    port: 7199
    targetPort: jmx
    - name: cql
    port: 9042
    targetPort: cql
    selector:
    app.kubernetes.io/name: cassandra
    app.kubernetes.io/instance: loggenerat
    ---
    # Source: loggenerator/charts/cassandra/templates/service.yaml
    apiVersion: v1
    kind: Service
    metadata:
    name: loggenerat-cassandra
    namespace: "loggenerator"
    labels:
    app.kubernetes.io/name: cassandra
    helm.sh/chart: cassandra-9.7.3
    app.kubernetes.io/instance: loggenerat
    app.kubernetes.io/managed-by: Helm
    annotations:
    helm.sh/hook: pre-upgrade,pre-install
    helm.sh/hook-weight: "-10"
    spec:
    type: ClusterIP
    sessionAffinity: None
    ports:
    - name: cql
    port: 9042
    targetPort: cql
    nodePort: null
    - name: metrics
    port: 8080
    nodePort: null
    selector:
    app.kubernetes.io/name: cassandra
    app.kubernetes.io/instance: loggenerat
    ---
    # Source: loggenerator/templates/tests/test-connection.yaml
    apiVersion: v1
    kind: Pod
    metadata:
    name: "loggenerat-loggenerator-test-connection"
    labels:
    helm.sh/chart: loggenerator-0.1.0
    app.kubernetes.io/name: loggenerator
    app.kubernetes.io/instance: loggenerat
    app.kubernetes.io/managed-by: Helm
    annotations:
    "helm.sh/hook": test
    spec:
    containers:
    - name: wget
    image: busybox
    command: ['wget']
    args: ['loggenerat-loggenerator:80']
    restartPolicy: Never
    ---
    # Source: loggenerator/charts/cassandra/templates/statefulset.yaml
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
    name: loggenerat-cassandra
    namespace: "loggenerator"
    labels:
    app.kubernetes.io/name: cassandra
    helm.sh/chart: cassandra-9.7.3
    app.kubernetes.io/instance: loggenerat
    app.kubernetes.io/managed-by: Helm
    annotations:
    helm.sh/hook: pre-upgrade,pre-install
    helm.sh/hook-weight: "-10"
    spec:
    selector:
    matchLabels:
    app.kubernetes.io/name: cassandra
    app.kubernetes.io/instance: loggenerat
    serviceName: loggenerat-cassandra-headless
    podManagementPolicy: OrderedReady
    replicas: 1
    updateStrategy:
    type: RollingUpdate
    template:
    metadata:
    labels:
    app.kubernetes.io/name: cassandra
    helm.sh/chart: cassandra-9.7.3
    app.kubernetes.io/instance: loggenerat
    app.kubernetes.io/managed-by: Helm
    spec:

    serviceAccountName: loggenerat-cassandra
    affinity:
    podAffinity:

    podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - podAffinityTerm:
    labelSelector:
    matchLabels:
    app.kubernetes.io/name: cassandra
    app.kubernetes.io/instance: loggenerat
    namespaces:
    - "loggenerator"
    topologyKey: kubernetes.io/hostname
    weight: 1
    nodeAffinity:

    securityContext:
    fsGroup: 1001
    containers:
    - name: cassandra
    command:
    - bash
    - -ec
    - |
    # Node 0 is the password seeder
    if [[ $POD_NAME =~ (.*)-0$ ]]; then
    echo "Setting node as password seeder"
    export CASSANDRA_PASSWORD_SEEDER=yes
    else
    # Only node 0 will execute the startup initdb scripts
    export CASSANDRA_IGNORE_INITDB_SCRIPTS=1
    fi
    /opt/bitnami/scripts/cassandra/entrypoint.sh /opt/bitnami/scripts/cassandra/run.sh
    image: docker.io/bitnami/cassandra:4.0.7-debian-11-r0
    imagePullPolicy: "IfNotPresent"
    securityContext:
    runAsNonRoot: true
    runAsUser: 1001
    env:
    - name: BITNAMI_DEBUG
    value: "false"
    - name: CASSANDRA_CLUSTER_NAME
    value: cassandra
    - name: CASSANDRA_SEEDS
    value: "loggenerat-cassandra-0.loggenerat-cassandra-headless.loggenerator.svc.cluster.local"
    - name: CASSANDRA_PASSWORD
    valueFrom:
    secretKeyRef:
    name: loggenerat-cassandra
    key: cassandra-password
    - name: POD_IP
    valueFrom:
    fieldRef:
    fieldPath: status.podIP
    - name: POD_NAME
    valueFrom:
    fieldRef:
    fieldPath: metadata.name
    - name: CASSANDRA_USER
    value: "cassandra"
    - name: CASSANDRA_NUM_TOKENS
    value: "256"
    - name: CASSANDRA_DATACENTER
    value: dc1
    - name: CASSANDRA_ENDPOINT_SNITCH
    value: SimpleSnitch
    - name: CASSANDRA_KEYSTORE_LOCATION
    value: "/opt/bitnami/cassandra/certs/keystore"
    - name: CASSANDRA_TRUSTSTORE_LOCATION
    value: "/opt/bitnami/cassandra/certs/truststore"
    - name: CASSANDRA_RACK
    value: rack1
    - name: CASSANDRA_TRANSPORT_PORT_NUMBER
    value: "7000"
    - name: CASSANDRA_JMX_PORT_NUMBER
    value: "7199"
    - name: CASSANDRA_CQL_PORT_NUMBER
    value: "9042"
    envFrom:
    livenessProbe:
    exec:
    command:
    - /bin/bash
    - -ec
    - |
    nodetool info | grep "Native Transport active: true"
    initialDelaySeconds: 60
    periodSeconds: 30
    timeoutSeconds: 30
    successThreshold: 1
    failureThreshold: 5
    readinessProbe:
    exec:
    command:
    - /bin/bash
    - -ec
    - |
    nodetool status | grep -E "^UN\\s+${POD_IP}"
    initialDelaySeconds: 60
    periodSeconds: 10
    timeoutSeconds: 30
    successThreshold: 1
    failureThreshold: 5
    lifecycle:
    preStop:
    exec:
    command:
    - bash
    - -ec
    - nodetool drain
    ports:
    - name: intra
    containerPort: 7000
    - name: tls
    containerPort: 7001
    - name: jmx
    containerPort: 7199
    - name: cql
    containerPort: 9042
    resources:
    limits: {}
    requests: {}
    volumeMounts:
    - name: data
    mountPath: /bitnami/cassandra

    volumes:
    - name: metrics-conf
    configMap:
    name: loggenerat-cassandra-metrics-conf
    volumeClaimTemplates:
    - metadata:
    name: data
    labels:
    app.kubernetes.io/name: cassandra
    app.kubernetes.io/instance: loggenerat
    spec:
    accessModes:
    - "ReadWriteOnce"
    resources:
    requests:
    storage: "8Gi"