mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-16 07:13:53 +00:00
Productionize the cockroachdb example a little more
Includes: * A service for clients to use * Readiness/liveness probes * An extended graceful termination period * Easy clean-up of all created resources
This commit is contained in:
parent
01cf564eaa
commit
98b6d0672d
@ -67,6 +67,25 @@ steps.
|
|||||||
|
|
||||||
Follow the steps in [minikube.sh](minikube.sh) (or simply run that file).
|
Follow the steps in [minikube.sh](minikube.sh) (or simply run that file).
|
||||||
|
|
||||||
|
## Accessing the database
|
||||||
|
|
||||||
|
Along with our PetSet configuration, we expose a standard Kubernetes service
|
||||||
|
that offers a load-balanced virtual IP for clients to access the database
|
||||||
|
with. In our example, we've called this service `cockroachdb-public`.
|
||||||
|
|
||||||
|
Start up a client pod and open up an interactive, (mostly) Postgres-flavor
|
||||||
|
SQL shell using:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ kubectl run -it cockroach-client --image=cockroachdb/cockroach --restart=Never --command -- bash
|
||||||
|
root@cockroach-client # ./cockroach sql --host cockroachdb-public
|
||||||
|
```
|
||||||
|
|
||||||
|
You can see example SQL statements for inserting and querying data in the
|
||||||
|
included [demo script](demo.sh), but can use almost any Postgres-style SQL
|
||||||
|
commands. Some more basic examples can be found within
|
||||||
|
[CockroachDB's documentation](https://www.cockroachlabs.com/docs/learn-cockroachdb-sql.html).
|
||||||
|
|
||||||
## Simulating failures
|
## Simulating failures
|
||||||
|
|
||||||
When all (or enough) nodes are up, simulate a failure like this:
|
When all (or enough) nodes are up, simulate a failure like this:
|
||||||
@ -75,14 +94,15 @@ When all (or enough) nodes are up, simulate a failure like this:
|
|||||||
kubectl exec cockroachdb-0 -- /bin/bash -c "while true; do kill 1; done"
|
kubectl exec cockroachdb-0 -- /bin/bash -c "while true; do kill 1; done"
|
||||||
```
|
```
|
||||||
|
|
||||||
On one of the other pods, run `./cockroach sql --host $(hostname)` and use
|
You can then reconnect to the database as demonstrated above and verify
|
||||||
(mostly) Postgres-flavor SQL. The example runs with three-fold replication,
|
that no data was lost. The example runs with three-fold replication, so
|
||||||
so it can tolerate one failure of any given node at a time.
|
it can tolerate one failure of any given node at a time. Note also that
|
||||||
Note also that there is a brief period of time immediately after the creation
|
there is a brief period of time immediately after the creation of the
|
||||||
of the cluster during which the three-fold replication is established, and
|
cluster during which the three-fold replication is established, and during
|
||||||
during which killing a node may lead to unavailability.
|
which killing a node may lead to unavailability.
|
||||||
|
|
||||||
There is also a [demo script](demo.sh).
|
The [demo script](demo.sh) gives an example of killing one instance of the
|
||||||
|
database and ensuring the other replicas have all data that was written.
|
||||||
|
|
||||||
## Scaling up or down
|
## Scaling up or down
|
||||||
|
|
||||||
@ -91,6 +111,15 @@ volume claim first). If you ran `minikube.sh`, there's a spare volume so you
|
|||||||
can immediately scale up by one. Convince yourself that the new node
|
can immediately scale up by one. Convince yourself that the new node
|
||||||
immediately serves reads and writes.
|
immediately serves reads and writes.
|
||||||
|
|
||||||
|
## Cleaning up when you're done
|
||||||
|
|
||||||
|
Because all of the resources in this example have been tagged with the label `app=cockroachdb`,
|
||||||
|
we can clean up everything that we created in one quick command using a selector on that label:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl delete petsets,pods,persistentvolumes,persistentvolumeclaims,services -l app=cockroachdb
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
|
<!-- BEGIN MUNGE: GENERATED_ANALYTICS -->
|
||||||
[]()
|
[]()
|
||||||
|
@ -1,14 +1,9 @@
|
|||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
# This service is meant to be used by clients of the database. It exposes a ClusterIP that will
|
||||||
# Make sure DNS is resolvable during initialization.
|
# automatically load balance connections to the different database pods.
|
||||||
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
|
name: cockroachdb-public
|
||||||
# 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"
|
|
||||||
name: cockroachdb
|
|
||||||
labels:
|
labels:
|
||||||
app: cockroachdb
|
app: cockroachdb
|
||||||
spec:
|
spec:
|
||||||
@ -19,6 +14,33 @@ spec:
|
|||||||
targetPort: 26257
|
targetPort: 26257
|
||||||
name: grpc
|
name: grpc
|
||||||
# The secondary port serves the UI as well as health and debug endpoints.
|
# 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:
|
||||||
|
annotations:
|
||||||
|
# Make sure DNS is resolvable during initialization.
|
||||||
|
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"
|
||||||
|
# This service only exists to create DNS entries for each pet in the petset 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
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: 26257
|
||||||
|
targetPort: 26257
|
||||||
|
name: grpc
|
||||||
- port: 8080
|
- port: 8080
|
||||||
targetPort: 8080
|
targetPort: 8080
|
||||||
name: http
|
name: http
|
||||||
@ -54,6 +76,16 @@ spec:
|
|||||||
name: grpc
|
name: grpc
|
||||||
- containerPort: 8080
|
- containerPort: 8080
|
||||||
name: http
|
name: http
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /_admin/v1/health
|
||||||
|
port: http
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /_admin/v1/health
|
||||||
|
port: http
|
||||||
|
initialDelaySeconds: 10
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: datadir
|
- name: datadir
|
||||||
mountPath: /cockroach/cockroach-data
|
mountPath: /cockroach/cockroach-data
|
||||||
@ -84,6 +116,9 @@ spec:
|
|||||||
CRARGS+=("--join" "cockroachdb")
|
CRARGS+=("--join" "cockroachdb")
|
||||||
fi
|
fi
|
||||||
/cockroach/cockroach ${CRARGS[*]}
|
/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:
|
volumes:
|
||||||
- name: datadir
|
- name: datadir
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
|
@ -28,6 +28,9 @@
|
|||||||
|
|
||||||
set -exuo pipefail
|
set -exuo pipefail
|
||||||
|
|
||||||
|
# Clean up anything from a prior run:
|
||||||
|
kubectl delete petsets,pods,persistentvolumes,persistentvolumeclaims,services -l app=cockroachdb
|
||||||
|
|
||||||
# Make persistent volumes and (correctly named) claims. We must create the
|
# Make persistent volumes and (correctly named) claims. We must create the
|
||||||
# claims here manually even though that sounds counter-intuitive. For details
|
# claims here manually even though that sounds counter-intuitive. For details
|
||||||
# see https://github.com/kubernetes/contrib/pull/1295#issuecomment-230180894.
|
# see https://github.com/kubernetes/contrib/pull/1295#issuecomment-230180894.
|
||||||
@ -40,6 +43,7 @@ metadata:
|
|||||||
name: pv${i}
|
name: pv${i}
|
||||||
labels:
|
labels:
|
||||||
type: local
|
type: local
|
||||||
|
app: cockroachdb
|
||||||
spec:
|
spec:
|
||||||
capacity:
|
capacity:
|
||||||
storage: 1Gi
|
storage: 1Gi
|
||||||
|
Loading…
Reference in New Issue
Block a user