Kubectl
Kubectl is a command line tool for controlling Kubernetes clusters.
kubectl
looks for a file named config in the $HOME/.kube directory. You can specify other kubeconfig files by setting the KUBECONFIG environment variable or by setting the --kubeconfig flag.
Resource types and it's aliases⚑
Resource Name | Short Name |
---|---|
clusters | |
componentstatuses | cs |
configmaps | cm |
daemonsets | ds |
deployments | deploy |
endpoints | ep |
event | ev |
horizontalpodautoscalers | hpa |
ingresses | ing |
jobs | |
limitranges | limits |
namespaces | ns |
networkpolicies | netpol |
nodes | no |
statefulsets | sts |
persistentvolumeclaims | pvc |
persistentvolumes | pv |
pods | po |
podsecuritypolicies | psp |
podtemplates | |
replicasets | rs |
replicationcontrollers | rc |
resourcequotas | quota |
cronjob | |
secrets | |
serviceaccount | sa |
services | svc |
storageclasses | |
thirdpartyresources |
Usage⚑
Port forward / Tunnel to an internal service⚑
If you have a service running in kubernetes and you want to directly access it instead of going through the usual path, you can use kubectl port-forward
.
kubectl port-forward
allows using resource name, such as a pod name, service replica set or deployment, to select the matching resource to port forward to. For example, the next commands are equivalent:
kubectl port-forward mongo-75f59d57f4-4nd6q 28015:27017
kubectl port-forward deployment/mongo 28015:27017
kubectl port-forward replicaset/mongo-75f59d57f4 28015:27017
kubectl port-forward service/mongo 28015:27017
The output is similar to this:
Forwarding from 127.0.0.1:28015 -> 27017
Forwarding from [::1]:28015 -> 27017
If you don't need a specific local port, you can let kubectl
choose and allocate the local port and thus relieve you from having to manage local port conflicts, with the slightly simpler syntax:
$: kubectl port-forward deployment/mongo :27017
Forwarding from 127.0.0.1:63753 -> 27017
Forwarding from [::1]:63753 -> 27017
Run a command against a specific context⚑
If you have multiple contexts and you want to be able to run commands against a context that you have access to but is not your active context you can use the --context
global option for all kubectl
commands:
kubectl get pods --context <context_B>
To get a list of available contexts use kubectl config get-contexts
Namespaces⚑
Temporary set the namespace for a request⚑
kubectl -n {{ namespace_name }} {{ command_to_execute }}
kubectl --namespace={{ namespace_name }} {{ command_to_execute }}
Permanently set the namespace for a request⚑
kubectl config set-context --current --namespace={{ namespace_name }}
To make things easier you can set an alias:
alias kn='kubectl config set-context --current --namespace '
To unset the namespace use kubectl config set-context --current --namespace=""
Links⚑
- Overview.
- Cheatsheet.
- Kbenv: Virtualenv for kubectl.