This page details helpful kubectl commands to assist with developing, debugging, and operating Appian in Kubernetes for self-managed customers. A more detailed cheat sheet maintained by the Kubernetes community for general kubectl
usage can be found here.
Changing the namespace of the current kubeconfig context prevents one from having to specify the --namespace
/-n
flag for subsequent kubectl
commands. To do so, run the following:
1
kubectl config set-context --current --namespace <NAMESPACE>
Save even more time by creating an alias for the above command. Simply add the following to ~/.bashrc
:
1
alias kns="kubectl config set-context --current --namespace"
Now, you can change namespaces via kns <NAMESPACE>
.
To view a resource of a given resource type (for example, Pods, Deployments, or StatefulSets) run the following:
1
kubectl -n <NAMESPACE> get <TYPE> <NAME>
To view all resources of a given resource type, simply omit <NAME>
. You can also use kubectl get
to view resources of multiple resource types at once. For example:
1
kubectl -n <NAMESPACE> get appians,deployments,statefulsets,pods
The default output format for all kubectl
commands, including kubectl get
, is the human readable plain-text format. The --output
/-o
flag can be used to change kubectl
's output to a variety of other formats - including JSON and YAML. When used with kubectl get
, the JSON and YAML formats output resources' raw Kubernetes manifests.
For example, you can use the following command to print out the current appian custom resource definition.
1
kubectl -n <NAMESPACE> get appian <APPIAN NAME> -oyaml
To view a Pod's stdout/stderr, run:
1
kubectl -n <NAMESPACE> logs <POD>
To follow the logs, specify the --follow
/-f
flag.
If the logs you're looking for are written to the Pod's file system instead of streamed to stdout/stderr, either copy them from the Pod to your machine or exec into the Pod to view them.
To exec into a Pod, run the following:
1
kubectl -n <NAMESPACE> exec -i --tty <POD> -- bash
If you instead need to run a single command in a Pod without exec'ing into it, run the following:
1
kubectl -n <NAMESPACE> exec <POD> -- <COMMAND> <ARGS...>
For example, to list a Pod's directory contents at /usr/local/appian/ae
, run:
1
kubectl -n <NAMESPACE> exec <POD> -- ls /usr/local/appian/ae
To copy a file from a Pod to your machine, run the following:
1
kubectl -n <NAMESPACE> cp <POD>:<FILE> <DEST>
Conversely, to copy a file from your machine to a Pod, run the following:
1
kubectl -n <NAMESPACE> cp <FILE> <POD>:<DEST>
You can add plugins to Appian by copying files in this way.
You may need to restart the Webapp component in the course of updating configurations such as Changes to Custom Properties.
To restart the Webapp component, delete its pod(s).
1
kubectl -n <NAMESPACE> delete pod <WEBAPP POD>
Kubernetes will immediately start a new Pod that will take on any configuration changes.
Caution: This type of restart is only safe to do for the Webapp component. If you need to change the configuration specific to any other component, we recommend doing a site restart to apply the changes.
Port-forwarding forwards one or more local ports from your machine to a Pod. This is useful for making requests to ports not exposed outside of the cluster for internal testing and troubleshooting. To port-forward a Pod, run the following:
1
kubectl -n <NAMESPACE> port-forward <POD> <PORT>
This forward requests from localhost:<PORT>
on your machine to <PORT>
on the specified Pod. It's possible to port-forward multiple ports on the same Pod simultaneously by specifying <PORT>
multiple times. If the desired port cannot be bound to on your machine, you can request a different mapping by specifying <LOCAL_PORT>:<REMOTE_PORT>
instead of <PORT>
.
Describing a resource prints a detailed description of the resource — including related resources such as events and controllers. To describe a resource, run the following:
1
kubectl -n <NAMESPACE> describe <TYPE> <NAME>
One can use kubectl edit
to directly edit a resource as follows:
1
kubectl -n <NAMESPACE> edit <TYPE> <NAME>
By default, kubectl
opens resources for editing using vi
. To change the default editor, simply add one of the following to ~/.bashrc
:
1
2
3
4
export KUBE_EDITOR="atom --wait" # Atom
export KUBE_EDITOR="nano" # Nano
export KUBE_EDITOR="subl --wait" # Sublime
export KUBE_EDITOR="mate -w" # TextMate
To view all resources types in the Kubernetes API server, run the following:
1
kubectl api-resources
Explaining a resource type describes its associated fields:
1
kubectl explain <TYPE>
One can also use JSONPath syntax to explain nested fields. For example:
1
kubectl explain pods.spec.containers
kubectl Cheat Sheet