Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add README with CLI usage descriptions #20

Merged
merged 9 commits into from
Dec 29, 2023
114 changes: 114 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
# Scalar Admin for Kubernetes

Scalar Admin for Kubernetes is a tool that creates a paused state for ScalarDB or ScalarDL in a Kubernetes environment. You can use such a paused state to take backups easily and consistently across multiple diverse databases.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a few sentences describing what this is?
I think it's helpful even for internal developers.
Something like the following.

scalar-admin-k8s is a tool that creates a paused state for Scalar products (e.g., ScalarDB and ScalarDL) in a Kubernetes environment. We can use such a paused state to take backups easily and consistently across multiple diverse databases.

(This might need to be checked by @josh-wong if it is used.)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added such an explanation in 71c433e.

@josh-wong
Could you please also check this new sentence? Thank you!

Copy link
Member

@josh-wong josh-wong Dec 25, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was unable to suggest changes to the sentence in a reply to this message, so I added a new comment with my suggestion to the updated sentence.

## Usage of the CLI tool
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is an output of the scalar-admin-k8s CLI. I think there is no document that describes each flag of scalar-admin-k8s. This is the main purpose of this PR.

This section describes the scalar-admin-k8s options and I can link to this document in the document of Helm Chart to explain the flags of scalar-admin-k8s.


```console
Usage: scalar-admin-for-kubernetes-cli [-h] [-d=<pauseDuration>]
[-n=<namespace>] -r=<helmReleaseName>
[-w=<maxPauseWaitTime>] [-z=<zoneId>]
Scalar Admin pause tool for the Kubernetes environment
-d, --pause-duration=<pauseDuration>
The duration of the pause period by millisecond.
5000 (5 seconds) by default.
-h, --help Display the help message.
-n, --namespace=<namespace>
Namespace that Scalar products you want to pause
are deployed. `default` by default.
-r, --release-name=<helmReleaseName>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To be clear, only -r is required, correct? If so, I think it would be helpful to note that this parameter is required in the parameter description here.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To be clear, only -r is required, correct?

Yes. You are right.

If so, I think it would be helpful to note that this parameter is required in the parameter description here.

I see. I agree with adding a note.
I will do it in another PR.
Thank you for your suggestion!

Helm's release name that you specify when you run
the `helm install <RELEASE_NAME>` command. You
can see the <RELEASE_NAME> by using the `helm
list` command.
-w, --max-pause-wait-time=<maxPauseWaitTime>
The max wait time (in milliseconds) until Scalar
products drain outstanding requests before they
pause. If omitting this option, the max wait
time will be the default value defined in the
products. Most Scalar products have the default
value of 30 seconds.
-z, --time-zone=<zoneId> Specify a time zone ID, e.g., Asia/Tokyo, to
output successful paused period. Note the time
zone ID is case sensitive. Etc/UTC by default.
```

## Run the CLI tool in a Kubernetes environment

The `scalar-admin-for-kubernetes` CLI tool executes Kubernetes APIs in its internal processes. To run those Kubernetes APIs, you must run the `scalar-admin-for-kubernetes` CLI tool as a pod on the Kubernetes environment by following the steps below:

1. Create three Kubernetes resources (`Role`, `RoleBinding`, and `ServiceAccount`), replacing the contents in the angle brackets as described:

* Role

```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: scalar-admin-for-kubernetes-role
namespace: <YOUR_NAMESPACE>
rules:
- apiGroups: ["", "apps"]
resources: ["pods", "deployments", "services"]
verbs: ["get", "list"]
```

* RoleBinding

```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: scalar-admin-for-kubernetes-rolebinding
namespace: <YOUR_NAMESPACE>
subjects:
- kind: ServiceAccount
name: scalar-admin-for-kubernetes-sa
roleRef:
kind: Role
name: scalar-admin-for-kubernetes-role
apiGroup: rbac.authorization.k8s.io
```

* ServiceAccount

```yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: scalar-admin-for-kubernetes-sa
namespace: <YOUR_NAMESPACE>
```

1. Mount the `ServiceAccount` resource on the `scalar-admin-for-kubernetes` pod, replacing the contents in the angle brackets as described:

* Pod

```yaml
apiVersion: v1
kind: Pod
metadata:
name: scalar-admin-for-kubernetes
namespace: <YOUR_NAMESPACE>
spec:
serviceAccountName: scalar-admin-for-kubernetes-sa
containers:
- name: scalar-admin-for-kubernetes
image: ghcr.io/scalar-labs/scalar-admin-for-kubernetes:1.0.0
command:
- java
- -jar
- /app.jar
- -r
- <HELM_RELEASE_NAME>
- -n
- <SCALAR_PRODUCT_NAMESPACE>
- -d
- <PAUSE_DURATION>
- -z
- <TIMEZONE>
```

## Run the CLI tool in a Kubernetes environment by using a Helm Chart

Coming soon.