mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 12:18:16 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			204 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			204 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
apiVersion: v1
 | 
						|
kind: Service
 | 
						|
metadata:
 | 
						|
  # This service is meant to be used by clients of the database. It exposes a ClusterIP that will
 | 
						|
  # automatically load balance connections to the different database pods.
 | 
						|
  name: cockroachdb-public
 | 
						|
  labels:
 | 
						|
    app: cockroachdb
 | 
						|
spec:
 | 
						|
  ports:
 | 
						|
  # The main port, served by gRPC, serves Postgres-flavor SQL, internode
 | 
						|
  # traffic and the cli.
 | 
						|
  - port: 26257
 | 
						|
    targetPort: 26257
 | 
						|
    name: grpc
 | 
						|
  # The secondary port serves the UI as well as health and debug endpoints.
 | 
						|
  - port: 8080
 | 
						|
    targetPort: 8080
 | 
						|
    name: http
 | 
						|
  selector:
 | 
						|
    app: cockroachdb
 | 
						|
---
 | 
						|
apiVersion: v1
 | 
						|
kind: Service
 | 
						|
metadata:
 | 
						|
  # This service only exists to create DNS entries for each pod in the stateful
 | 
						|
  # set such that they can resolve each other's IP addresses. It does not
 | 
						|
  # create a load-balanced ClusterIP and should not be used directly by clients
 | 
						|
  # in most circumstances.
 | 
						|
  name: cockroachdb
 | 
						|
  labels:
 | 
						|
    app: cockroachdb
 | 
						|
  annotations:
 | 
						|
    # This is needed to make the peer-finder work properly and to help avoid
 | 
						|
    # edge cases where instance 0 comes up after losing its data and needs to
 | 
						|
    # decide whether it should create a new cluster or try to join an existing
 | 
						|
    # one. If it creates a new cluster when it should have joined an existing
 | 
						|
    # one, we'd end up with two separate clusters listening at the same service
 | 
						|
    # endpoint, which would be very bad.
 | 
						|
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
 | 
						|
    # Enable automatic monitoring of all instances when Prometheus is running in the cluster.
 | 
						|
    prometheus.io/scrape: "true"
 | 
						|
    prometheus.io/path: "_status/vars"
 | 
						|
    prometheus.io/port: "8080"
 | 
						|
spec:
 | 
						|
  ports:
 | 
						|
  - port: 26257
 | 
						|
    targetPort: 26257
 | 
						|
    name: grpc
 | 
						|
  - port: 8080
 | 
						|
    targetPort: 8080
 | 
						|
    name: http
 | 
						|
  clusterIP: None
 | 
						|
  selector:
 | 
						|
    app: cockroachdb
 | 
						|
---
 | 
						|
apiVersion: policy/v1beta1
 | 
						|
kind: PodDisruptionBudget
 | 
						|
metadata:
 | 
						|
  name: cockroachdb-budget
 | 
						|
  labels:
 | 
						|
    app: cockroachdb
 | 
						|
spec:
 | 
						|
  selector:
 | 
						|
    matchLabels:
 | 
						|
      app: cockroachdb
 | 
						|
  minAvailable: 67%
 | 
						|
---
 | 
						|
apiVersion: apps/v1beta1
 | 
						|
kind: StatefulSet
 | 
						|
metadata:
 | 
						|
  name: cockroachdb
 | 
						|
spec:
 | 
						|
  serviceName: "cockroachdb"
 | 
						|
  replicas: 3
 | 
						|
  template:
 | 
						|
    metadata:
 | 
						|
      labels:
 | 
						|
        app: cockroachdb
 | 
						|
      annotations:
 | 
						|
        scheduler.alpha.kubernetes.io/affinity: >
 | 
						|
            {
 | 
						|
              "podAntiAffinity": {
 | 
						|
                "preferredDuringSchedulingIgnoredDuringExecution": [{
 | 
						|
                  "weight": 100,
 | 
						|
                  "labelSelector": {
 | 
						|
                    "matchExpressions": [{
 | 
						|
                      "key": "app",
 | 
						|
                      "operator": "In",
 | 
						|
                      "values": ["cockroachdb"]
 | 
						|
                    }]
 | 
						|
                  },
 | 
						|
                  "topologyKey": "kubernetes.io/hostname"
 | 
						|
                }]
 | 
						|
              }
 | 
						|
            }
 | 
						|
        # 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.
 | 
						|
        pod.alpha.kubernetes.io/init-containers: '[
 | 
						|
            {
 | 
						|
                "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": {
 | 
						|
                              "apiVersion": "v1",
 | 
						|
                              "fieldPath": "metadata.namespace"
 | 
						|
                          }
 | 
						|
                      }
 | 
						|
                   }
 | 
						|
                ],
 | 
						|
                "volumeMounts": [
 | 
						|
                    {
 | 
						|
                        "name": "datadir",
 | 
						|
                        "mountPath": "/cockroach/cockroach-data"
 | 
						|
                    }
 | 
						|
                ]
 | 
						|
            }
 | 
						|
        ]'
 | 
						|
    spec:
 | 
						|
      containers:
 | 
						|
      - name: cockroachdb
 | 
						|
        # Runs the master branch. Not recommended for production, but since
 | 
						|
        # CockroachDB is in Beta, you don't want to run it in production
 | 
						|
        # anyway. See
 | 
						|
        # https://hub.docker.com/r/cockroachdb/cockroach/tags/
 | 
						|
        # if you prefer to run a beta release.
 | 
						|
        image: cockroachdb/cockroach
 | 
						|
        imagePullPolicy: IfNotPresent
 | 
						|
        ports:
 | 
						|
        - containerPort: 26257
 | 
						|
          name: grpc
 | 
						|
        - containerPort: 8080
 | 
						|
          name: http
 | 
						|
        livenessProbe:
 | 
						|
          httpGet:
 | 
						|
            path: /_admin/v1/health
 | 
						|
            port: http
 | 
						|
          initialDelaySeconds: 30
 | 
						|
        readinessProbe:
 | 
						|
          httpGet:
 | 
						|
            path: /_admin/v1/health
 | 
						|
            port: http
 | 
						|
          initialDelaySeconds: 10
 | 
						|
        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-public")
 | 
						|
            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
 | 
						|
      annotations:
 | 
						|
        volume.alpha.kubernetes.io/storage-class: anything
 | 
						|
    spec:
 | 
						|
      accessModes:
 | 
						|
        - "ReadWriteOnce"
 | 
						|
      resources:
 | 
						|
        requests:
 | 
						|
          storage: 1Gi
 |