:PROPERTIES:
:ID:       49867854-3780-45ed-a703-4f5d22a92d39
:END:
#+title: Command line: kubectl
#+date: "2021-06-13 00:29:49 +08:00"
#+date_modified: "2021-07-02 16:44:03 +08:00"
#+language: en
#+property: header-arg  :eval no


The main binary when managing [[id:9e4f04d4-00a3-4898-ac98-924957fa868b][Kubernetes]] clusters.




* Subcommands

- =api-resource= lists all of the resources it currently supports.
- =cluster-info= prints information of the cluster and the add-ons installed.
- =create [RESOURCE] [NAME]= creates the specified resource with the given name.
  + =--dry-run= just initiates the process and does nothing.
    Useful with =-o yaml= to create a minimal manifest.
  + =-o [yaml|json|wide]= prints the created resource as the specified output.
    Specially useful to create manifests and manage clusters declaratively.
- =describe [RESOURCE] [NAME]= prints a detailed description of the given resource.
- =logs [RESOURCE] [NAME]= shows the log printed from the given resource.
- =explain [RESOURCE]= prints an explaination of the given resource — e.g., ~kubectl explain pods~, ~kubectl explain rs~.
- =get [RESOURCE]= list the specified resource from the cluster.
  + =-o, --output [yaml|json|wide]= prints in the specified format.
    You can also print [[https://kubernetes.io/docs/reference/kubectl/overview/#custom-columns][the columns]] you only need.
- =apply= applies a manifest, that is, a configuration file.

When referring to a specific resource with =${RESOURCE}/${NAME}= — e.g., =namespace/demo=, =deploy/hello=.




* Examples

As this is a massive tool, this needs massive examples.


** Basic workflow example from a beginner's perspective

Say you want to deploy your application with Kubernetes akin to Docker with a single container.

# TODO: Improve this example, please.
#+begin_src bash
# Get the description of the cluster.
kubectl cluster-info

# List all of the supported resources.
kubectl api-resources

# Create a deployment.
kubectl create deployment/hello-world --image=alpine
#+end_src
