Tipps und Tricks für Kubernetes: praktische Kubectl-Vorlagen

Innerhalb des Unternehmens teilen wir aktiv das gewonnene Wissen miteinander: nicht nur in Form von formalen Wiki-Anweisungen, sondern auch in Form von Nachrichten in Slack (und damit nichts verloren geht, wird ein intelligentes Suchsystem bereitgestellt, aber das ist eine andere Geschichte ...). Wir haben bereits eine große Anzahl verschiedener Vorlagen für Konsolenoperationen in Kubernetes mit kubectl gesammelt. Sie werden in diesem Artikel behandelt.







Einige Teams können sich für einige Leser als tägliche Routine herausstellen, aber wenn es diejenigen gibt, die neue Dinge für sich entdecken und dadurch ihre Effektivität verbessern, wird das Ziel des Artikels erreicht.



NB : Einige der unten aufgeführten Teams wurden von unseren Ingenieuren zusammengestellt, während andere im Internet gefunden wurden. Im letzteren Fall wurden sie getestet und als nützlich befunden.



So lass uns gehen!



pod'



  1. , pod' --all-namespaces . , — -A ( , Kubernetes 1.15).
  2. pod', (.. Running)?



    kubectl get pods -A --field-selector=status.phase!=Running | grep -v Complete
    






    , --field-selector (. ).
  3. :



    kubectl get no -o json | \
      jq -r '.items | sort_by(.status.capacity.memory)[]|[.metadata.name,.status.capacity.memory]| @tsv'
    


  4. pod' :



    kubectl get po -o json --all-namespaces | \
      jq '.items | group_by(.spec.nodeName) | map({"nodeName": .[0].spec.nodeName, "count": length}) | sort_by(.count)'
    


  5. , - DaemonSet - . — , - , DaemonSet':



    ns=my-namespace
    pod_template=my-pod
    kubectl get node | grep -v \"$(kubectl -n ${ns} get pod --all-namespaces -o wide | fgrep ${pod_template} | awk '{print $8}' | xargs -n 1 echo -n "\|" | sed 's/[[:space:]]*//g')\"
    
  6. kubectl top pod', :



    # cpu
    kubectl top pods -A | sort --reverse --key 3 --numeric
    # memory
    kubectl top pods -A | sort --reverse --key 4 --numeric
  7. pod' — , :



    kubectl get pods --sort-by=.status.containerStatuses[0].restartCount






    , (. PodStatus ContainerStatus).




  1. Ingress', pod' . , -o wide:



    kubectl -n jaeger get svc -o wide
    NAME                            TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)                                  AGE   SELECTOR
    
    jaeger-cassandra                ClusterIP   None              <none>        9042/TCP                                 77d   app=cassandracluster,cassandracluster=jaeger-cassandra,cluster=jaeger-cassandra


    , , pod'.
  2. pod' limits requests:



    kubectl get pods -n my-namespace -o=custom-columns='NAME:spec.containers[*].name,MEMREQ:spec.containers[*].resources.requests.memory,MEMLIM:spec.containers[*].resources.limits.memory,CPUREQ:spec.containers[*].resources.requests.cpu,CPULIM:spec.containers[*].resources.limits.cpu'


  3. kubectl run ( create, apply, patch) — --dry-run. -o yaml, . :



    kubectl run test --image=grafana/grafana --dry-run -o yaml
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      creationTimestamp: null
      labels:
        run: test
      name: test
    spec:
      replicas: 1
      selector:
        matchLabels:
          run: test
      strategy: {}
      template:
        metadata:
          creationTimestamp: null
          labels:
            run: test
        spec:
          containers:
          - image: grafana/grafana
            name: test
            resources: {}
    status: {}
    


    , / .
  4. - :



    kubectl explain hpa
    
    KIND:     HorizontalPodAutoscaler
    VERSION:  autoscaling/v1
    
    DESCRIPTION:
         configuration of a horizontal pod autoscaler.
    
    FIELDS:
       apiVersion    <string>
         APIVersion defines the versioned schema of this representation of an
         object. Servers should convert recognized schemas to the latest internal
         value, and may reject unrecognized values. More info:
         https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
    
       kind    <string>
         Kind is a string value representing the REST resource this object
         represents. Servers may infer this from the endpoint the client submits
         requests to. Cannot be updated. In CamelCase. More info:
         https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
    
       metadata    <Object>
         Standard object metadata. More info:
         https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
    
       spec    <Object>
         behaviour of autoscaler. More info:
         https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.
    
       status    <Object>
         current information about the autoscaler.


    !




  1. IP- :



    kubectl get nodes -o json | \
      jq -r '.items[].status.addresses[]? | select (.type == "InternalIP") | .address' | \
      paste -sd "\n" -
    


  2. nodePort, :



    kubectl get --all-namespaces svc -o json | \
      jq -r '.items[] | [.metadata.name,([.spec.ports[].nodePort | tostring ] | join("|"))]| @tsv'
    


  3. , CNI (, Flannel), pod' . pod', :



    kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}' | tr " " "\n"
    






  1. pod' c timestamp :



    kubectl -n my-namespace logs -f my-pod --timestamps
    
    2020-07-08T14:01:59.581788788Z fail: Microsoft.EntityFrameworkCore.Query[10100]
    


    , ?
  2. , pod' — --tail:



    kubectl -n my-namespace logs -f my-pod --tail=50
    
  3. pod':



    kubectl -n my-namespace logs -f my-pod --all-containers
    
  4. pod' label':



    kubectl -n my-namespace logs -f -l app=nginx
  5. , , , :



    kubectl -n my-namespace logs my-pod --previous
    




  1. ?



    kubectl get secrets -o json --namespace namespace-old | \
      jq '.items[].metadata.namespace = "namespace-new"' | \
      kubectl create-f  -
    
  2. :



    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=grafana.mysite.ru/O=MyOrganization"
    kubectl -n myapp create secret tls selfsecret --key tls.key --cert tls.crt




Anstelle einer Schlussfolgerung - eine kleine Liste ähnlicher Materialien und Sammlungen im Internet:



  • Das offizielle Cheatsheet aus der Kubernetes-Dokumentation;
  • Eine kurze praktische Einführung und ein schönes 2-seitiges Tablet der Linux Academy, um die Zeit für angehende Ingenieure zu verkürzen:



  • Eine sehr umfangreiche Liste von Befehlen von Blue Matador, unterteilt in Abschnitte;
  • Eine Auswahl von Links in der Liste zu Tabellen mit Befehlen, Artikeln zum Thema und einigen Befehlen;
  • Das Kubernetes-Cheat-Sheet GitHub-Repository eines anderen Enthusiasten enthält nur kategorisierte Befehle.
  • Das GitHub-Repository für Kubectl-Aliase ist ein Paradies für Abkürzungen.


PS



Lesen Sie auch in unserem Blog:



  • « Kubernetes kubectl»;
  • « Kubernetes kubectl»;
  • « Kubernetes».



All Articles