kubectl/docs/book/pages/kubectl_book/getting_started.md

5.0 KiB

{% panel style="success", title="Providing Feedback" %} Provide feedback at the survey {% endpanel %}

{% panel style="info", title="TL;DR" %}

  • Creating Resources
  • Printing Resources
  • Debugging Containers {% endpanel %}

Getting Started With Kubectl

Note: If you are already familiar with Kubectl, you can skip this section.

This section provides a brief overview of the most basic Kubectl commands, which are described in more detail in later chapters.

For more background on the Kubernetes APIs themselves, see the docs at k8s.io.

Listing Kubernetes Resources

{% method %}

List the Kubernetes Deployment Resources that are in the kube-system namespace.

Note: Deployments are Resources which manage Pod replicas (Pods run Containers)

{% sample lang="yaml" %}

kubectl get deployments --namespace kube-system
NAME                     DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
event-exporter-v0.2.3    1         1         1            1           14d
fluentd-gcp-scaler       1         1         1            1           14d
heapster-v1.6.0-beta.1   1         1         1            1           14d
kube-dns                 2         2         2            2           14d
kube-dns-autoscaler      1         1         1            1           14d
l7-default-backend       1         1         1            1           14d
metrics-server-v0.3.1    1         1         1            1           14d

{% endmethod %}

{% method %}

Print detailed information about the kube-dns Deployment in the kube-system namespace.

{% sample lang="yaml" %}

kubectl describe deployment kube-dns --namespace kube-system
Name:                   kube-dns
Namespace:              kube-system
CreationTimestamp:      Wed, 06 Mar 2019 17:36:05 -0800
Labels:                 addonmanager.kubernetes.io/mode=Reconcile
                        k8s-app=kube-dns
                        kubernetes.io/cluster-service=true
Annotations:            deployment.kubernetes.io/revision: 2
...

{% endmethod %}

Creating a Resource from Config

{% method %}

Create or Update Kubernetes Resources from Remote Config.

{% sample lang="yaml" %}

kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubectl/master/docs/book/examples/nginx/nginx.yaml
service/nginx created
deployment.apps/nginx-deployment created

{% endmethod %}

{% method %}

Create or Update Kubernetes Resources from Local Config.

{% sample lang="yaml" %}

kubectl apply -f ./examples/nginx/nginx.yaml
service/nginx created
deployment.apps/nginx-deployment created

{% endmethod %}

{% method %}

Print the Resources that were Applied.

{% sample lang="yaml" %}

kubectl get -f ./examples/nginx/nginx.yaml --show-labels
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE   LABELS
service/nginx   ClusterIP   10.59.245.201   <none>        80/TCP    11m   <none>

NAME                               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE   LABELS
deployment.apps/nginx-deployment   3         3         3            3           11m   app=nginx

{% endmethod %}

Generating a Config from a Command

{% method %}

Generate Config for a Deployment Resource. This could be Applied to a cluster by writing the output to a file, and then running kubectl apply -f <yaml-file>

Note: The generated Config has extra boilerplate that users shouldn't include but exists due to the serialization process of go objects.

{% sample lang="yaml" %}

kubectl create deployment nginx --dry-run -o yaml --image nginx
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null # delete this
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  strategy: {} # delete this
  template:
    metadata:
      creationTimestamp: null # delete this
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {} # delete this
status: {} # delete this

{% endmethod %}

Viewing Pods Associated with Resources

{% method %}

View the Pods created by the Deployment using the Pod labels.

{% sample lang="yaml" %}

kubectl get pods -l app=nginx
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-5c689d88bb-b2xfk   1/1     Running   0          10m
nginx-deployment-5c689d88bb-rx569   1/1     Running   0          10m
nginx-deployment-5c689d88bb-s7xcv   1/1     Running   0          10m

{% endmethod %}

Debugging Containers

{% method %}

Get the logs from all Pods managed by the Deployment.

{% sample lang="yaml" %}

kubectl logs -l app=nginx

{% endmethod %}

{% method %}

Get a shell into a specific Pod's Container

{% sample lang="yaml" %}

kubectl exec -i -t  nginx-deployment-5c689d88bb-s7xcv bash
root@nginx-deployment-5c689d88bb-s7xcv:/#

{% endmethod %}