9 Toolboxes #
9.1 Rook toolbox #
The Rook toolbox is a container with common tools used for rook debugging
and testing. The toolbox is based on SUSE Linux Enterprise Server, so more
tools of your choosing can be installed with zypper.
The toolbox can be run in two modes:
Section 9.1.1, “Interactive toolbox”: Start a toolbox pod where you can connect and execute Ceph commands from a shell.
Section 9.1.2, “Running the toolbox job”: Run a script with Ceph commands and collect the results from the job log.
Prerequisite: Before running the toolbox you should have a running Rook cluster deployed.
9.1.1 Interactive toolbox #
The Rook toolbox can run as a deployment in a Kubernetes cluster where you can connect and run arbitrary Ceph commands.
Save the tools spec as toolbox.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: rook-ceph-tools
namespace: rook-ceph
labels:
app: rook-ceph-tools
spec:
replicas: 1
selector:
matchLabels:
app: rook-ceph-tools
template:
metadata:
labels:
app: rook-ceph-tools
spec:
dnsPolicy: ClusterFirstWithHostNet
containers:
- name: rook-ceph-tools
image: registry.suse.com/ses/7.1/rook/ceph:LATEST_TAG
command: ["/tini"]
args: ["-g", "--", "/usr/bin/toolbox.sh"]
imagePullPolicy: IfNotPresent
env:
- name: ROOK_CEPH_USERNAME
valueFrom:
secretKeyRef:
name: rook-ceph-mon
key: ceph-username
- name: ROOK_CEPH_SECRET
valueFrom:
secretKeyRef:
name: rook-ceph-mon
key: ceph-secret
volumeMounts:
- mountPath: /etc/ceph
name: ceph-config
- name: mon-endpoint-volume
mountPath: /etc/rook
volumes:
- name: mon-endpoint-volume
configMap:
name: rook-ceph-mon-endpoints
items:
- key: data
path: mon-endpoints
- name: ceph-config
emptyDir: {}
tolerations:
- key: "node.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 5
Launch the rook-ceph-tools pod:
kubectl@adm > kubectl create -f toolbox.yaml
Wait for the toolbox pod to download its container and get to the
running state:
kubectl@adm > kubectl -n rook-ceph get pod -l "app=rook-ceph-tools"Once the rook-ceph-tools pod is running, you can connect to it with:
kubectl@adm > kubectl -n rook-ceph exec -it $(kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}') bashAll available tools in the toolbox are ready for your troubleshooting needs.
Example:
ceph statusceph osd statusceph dfrados df
When you are done with the toolbox, you can remove the deployment:
kubectl@adm > kubectl -n rook-ceph delete deployment rook-ceph-tools9.1.2 Running the toolbox job #
If you want to run Ceph commands as a one-time operation and collect the results later from the logs, you can run a script as a Kubernetes job. The toolbox job will run a script that is embedded in the job specification. The script has the full flexibility of a bash script.
In this example, the ceph status command is executed
when the job is created.
apiVersion: batch/v1
kind: Job
metadata:
name: rook-ceph-toolbox-job
namespace: rook-ceph
labels:
app: ceph-toolbox-job
spec:
template:
spec:
initContainers:
- name: config-init
image: registry.suse.com/ses/7.1/rook/ceph:LATEST_TAG
command: ["/usr/bin/toolbox.sh"]
args: ["--skip-watch"]
imagePullPolicy: IfNotPresent
env:
- name: ROOK_CEPH_USERNAME
valueFrom:
secretKeyRef:
name: rook-ceph-mon
key: ceph-username
- name: ROOK_CEPH_SECRET
valueFrom:
secretKeyRef:
name: rook-ceph-mon
key: ceph-secret
volumeMounts:
- mountPath: /etc/ceph
name: ceph-config
- name: mon-endpoint-volume
mountPath: /etc/rook
containers:
- name: script
image: registry.suse.com/ses/7.1/rook/ceph:LATEST_TAG
volumeMounts:
- mountPath: /etc/ceph
name: ceph-config
readOnly: true
command:
- "bash"
- "-c"
- |
# Modify this script to run any ceph, rbd, radosgw-admin, or other commands that could
# be run in the toolbox pod. The output of the commands can be seen by getting the pod log.
#
# example: print the ceph status
ceph status
volumes:
- name: mon-endpoint-volume
configMap:
name: rook-ceph-mon-endpoints
items:
- key: data
path: mon-endpoints
- name: ceph-config
emptyDir: {}
restartPolicy: NeverCreate the toolbox job:
kubectl@adm > kubectl create -f toolbox-job.yamlAfter the job completes, see the results of the script:
kubectl@adm > kubectl -n rook-ceph logs -l job-name=rook-ceph-toolbox-job