123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- apiVersion: apps/v1
- kind: StatefulSet
- metadata:
- name: cockroachdb
- spec:
- serviceName: "cockroachdb"
- replicas: 3
- selector:
- matchLabels:
- app: cockroachdb
- template:
- metadata:
- labels:
- app: cockroachdb
- spec:
- # Init containers are run only once in the lifetime of a pod, before
- # it's started up for the first time. It has to exit successfully
- # before the pod's main containers are allowed to start.
- # This particular init container does a DNS lookup for other pods in
- # the set to help determine whether or not a cluster already exists.
- # If any other pods exist, it creates a file in the cockroach-data
- # directory to pass that information along to the primary container that
- # has to decide what command-line flags to use when starting CockroachDB.
- # This only matters when a pod's persistent volume is empty - if it has
- # data from a previous execution, that data will always be used.
- initContainers:
- - name: bootstrap
- image: cockroachdb/cockroach-k8s-init:0.1
- imagePullPolicy: IfNotPresent
- args:
- - "-on-start=/on-start.sh"
- - "-service=cockroachdb"
- env:
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- volumeMounts:
- - name: datadir
- mountPath: "/cockroach/cockroach-data"
- affinity:
- podAntiAffinity:
- preferredDuringSchedulingIgnoredDuringExecution:
- - weight: 100
- podAffinityTerm:
- labelSelector:
- matchExpressions:
- - key: app
- operator: In
- values:
- - cockroachdb
- topologyKey: kubernetes.io/hostname
- containers:
- - name: cockroachdb
- image: cockroachdb/cockroach:v1.0
- imagePullPolicy: IfNotPresent
- ports:
- - containerPort: 26257
- name: grpc
- - containerPort: 8080
- name: http
- volumeMounts:
- - name: datadir
- mountPath: /cockroach/cockroach-data
- command:
- - "/bin/bash"
- - "-ecx"
- - |
- # The use of qualified `hostname -f` is crucial:
- # Other nodes aren't able to look up the unqualified hostname.
- CRARGS=("start" "--logtostderr" "--insecure" "--host" "$(hostname -f)" "--http-host" "0.0.0.0")
- # We only want to initialize a new cluster (by omitting the join flag)
- # if we're sure that we're the first node (i.e. index 0) and that
- # there aren't any other nodes running as part of the cluster that
- # this is supposed to be a part of (which indicates that a cluster
- # already exists and we should make sure not to create a new one).
- # It's fine to run without --join on a restart if there aren't any
- # other nodes.
- if [ ! "$(hostname)" == "cockroachdb-0" ] || \
- [ -e "/cockroach/cockroach-data/cluster_exists_marker" ]
- then
- # We don't join cockroachdb in order to avoid a node attempting
- # to join itself, which currently doesn't work
- # (https://github.com/cockroachdb/cockroach/issues/9625).
- CRARGS+=("--join" "cockroachdb-0.cockroachdb,cockroachdb-1.cockroachdb,cockroachdb-2.cockroachdb")
- fi
- exec /cockroach/cockroach ${CRARGS[*]}
- # No pre-stop hook is required, a SIGTERM plus some time is all that's
- # needed for graceful shutdown of a node.
- terminationGracePeriodSeconds: 60
- volumes:
- - name: datadir
- persistentVolumeClaim:
- claimName: datadir
- volumeClaimTemplates:
- - metadata:
- name: datadir
- spec:
- accessModes:
- - "ReadWriteOnce"
- resources:
- requests:
- storage: 1Gi
|