k8s.io/kubernetes@v1.29.3/test/e2e/testing-manifests/statefulset/cockroachdb/statefulset.yaml (about)

     1  apiVersion: apps/v1
     2  kind: StatefulSet
     3  metadata:
     4    name: cockroachdb
     5  spec:
     6    serviceName: "cockroachdb"
     7    replicas: 3
     8    selector:
     9      matchLabels:
    10        app: cockroachdb
    11    template:
    12      metadata:
    13        labels:
    14          app: cockroachdb
    15      spec:
    16        # Init containers are run only once in the lifetime of a pod, before
    17        # it's started up for the first time. It has to exit successfully
    18        # before the pod's main containers are allowed to start.
    19        # This particular init container does a DNS lookup for other pods in
    20        # the set to help determine whether or not a cluster already exists.
    21        # If any other pods exist, it creates a file in the cockroach-data
    22        # directory to pass that information along to the primary container that
    23        # has to decide what command-line flags to use when starting CockroachDB.
    24        # This only matters when a pod's persistent volume is empty - if it has
    25        # data from a previous execution, that data will always be used.
    26        initContainers:
    27        - name: bootstrap
    28          image: cockroachdb/cockroach-k8s-init:0.1
    29          imagePullPolicy: IfNotPresent
    30          args:
    31          - "-on-start=/on-start.sh"
    32          - "-service=cockroachdb"
    33          env:
    34          - name: POD_NAMESPACE
    35            valueFrom:
    36              fieldRef:
    37                fieldPath: metadata.namespace
    38          volumeMounts:
    39          - name: datadir
    40            mountPath: "/cockroach/cockroach-data"
    41        affinity:
    42          podAntiAffinity:
    43            preferredDuringSchedulingIgnoredDuringExecution:
    44            - weight: 100
    45              podAffinityTerm:
    46                labelSelector:
    47                  matchExpressions:
    48                  - key: app
    49                    operator: In
    50                    values:
    51                    - cockroachdb
    52                topologyKey: kubernetes.io/hostname
    53        containers:
    54        - name: cockroachdb
    55          image: cockroachdb/cockroach:v1.0
    56          imagePullPolicy: IfNotPresent
    57          ports:
    58          - containerPort: 26257
    59            name: grpc
    60          - containerPort: 8080
    61            name: http
    62          volumeMounts:
    63          - name: datadir
    64            mountPath: /cockroach/cockroach-data
    65          command:
    66            - "/bin/bash"
    67            - "-ecx"
    68            - |
    69              # The use of qualified `hostname -f` is crucial:
    70              # Other nodes aren't able to look up the unqualified hostname.
    71              CRARGS=("start" "--logtostderr" "--insecure" "--host" "$(hostname -f)" "--http-host" "0.0.0.0")
    72              # We only want to initialize a new cluster (by omitting the join flag)
    73              # if we're sure that we're the first node (i.e. index 0) and that
    74              # there aren't any other nodes running as part of the cluster that
    75              # this is supposed to be a part of (which indicates that a cluster
    76              # already exists and we should make sure not to create a new one).
    77              # It's fine to run without --join on a restart if there aren't any
    78              # other nodes.
    79              if [ ! "$(hostname)" == "cockroachdb-0" ] || \
    80                 [ -e "/cockroach/cockroach-data/cluster_exists_marker" ]
    81              then
    82                # We don't join cockroachdb in order to avoid a node attempting
    83                # to join itself, which currently doesn't work
    84                # (https://github.com/cockroachdb/cockroach/issues/9625).
    85                CRARGS+=("--join" "cockroachdb-0.cockroachdb,cockroachdb-1.cockroachdb,cockroachdb-2.cockroachdb")
    86              fi
    87              exec /cockroach/cockroach ${CRARGS[*]}
    88        # No pre-stop hook is required, a SIGTERM plus some time is all that's
    89        # needed for graceful shutdown of a node.
    90        terminationGracePeriodSeconds: 60
    91        volumes:
    92        - name: datadir
    93          persistentVolumeClaim:
    94            claimName: datadir
    95    volumeClaimTemplates:
    96    - metadata:
    97        name: datadir
    98      spec:
    99        accessModes:
   100          - "ReadWriteOnce"
   101        resources:
   102          requests:
   103            storage: 1Gi