Kubectl, Kubernetes cluster ortamında komutları çalıştırmanıza izin veren bir komut satırı arabirimidir. Cluster üzerinde çeşitli işlemleri bu şekilde gerçekleştirebileceğiz.

Kubectl bir kubeconfig’e(/etc/kubernetes/admin.conf) bağlıdır. Bu, bir veya daha fazla clustera erişim için bir yapılandırma dosyasıdır, kubectl komutunun sintaksisi aşağıdaki gibidir;

kubectl [command] [TYPE] [NAME] [flags]
  • command : Bir veya daha fazla kaynak üzerinde gerçekleştirmek istediğiniz işlemi belirtir; örneğin create, get, describe, delete,logs ,exec, apply
  • TYPE : Kaynak türünü belirtir. Kaynak türleri büyük / küçük harfe duyarlı değildir ve tekil, çoğul veya kısaltılmış formları belirtebilirsiniz. En sık kullanılan kaynak türleri
kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1

En sık kullanılan kaynak türleri aşağıdaki gibidir.

    • pods, po
    • nodes, no
    • deployments, deploy
    • replicasets, rs
    • daemonsets, ds
    • statefulsets, sts
    • jobs
    • cronjobs, cj
    • services, svc
    • persistentvolumes, pv
    • persistentvolumeclaims, pvc
    • all
    • events

Burada iki tane kaynak türü çok sık kullanıldığı için onları ayrı olarak belirtmek istedim, bunlar all ve events kaynak türleridir, all tüm mevcut kaynaklara atıfta bulunmak için kullanılır, event ise container bazında değil ama kubernetes düzeyinde logları veriyor.

  • NAME : Kaynağın adını belirtir. İsimler büyük / küçük harfe duyarlıdır. Kaynağın adı belirtililmesse aynı namespace’deki bütün kaynaklar görüntülenir.
kubectl get pods
kubectl get pod example-pod1 example-pod2
kubectl get pod/example-pod1 replicationcontroller/example-rc1
kubectl get pod -f ./pod.yaml
  • flags : İsteğe bağlı flagları belirtir. Örneğin, Kubernetes API sunucusunun adresini ve bağlantı noktasını belirtmek için -s veya –server bayraklarını kullanabilirsiniz.

NOT : kubectl komutunu devamlı devamlı yazmak yerine isterske bash de bir alias tanımlayıp bu kısmı kısaltabiliriz.

alias k='kubectl'

Bu yukarıda yazdığım genel yazının detaylarına referanslar kısmında belirttiğim kubernetesin kendi dökümantasyonlarından ulaşabilirsiniz. Benim bu yazıdaki amacım çok kullanılan komutların derli toplu el altında bulunması;

--Cluster bilgisini görüntüler
kubectl cluster-info

--Kaynakları hakkında clusterdaki verileri alır.
kubectl get [(-o|--output=)json|yaml|wide|custom-columns=...|custom-columnsfile=...| go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...] (TYPE [NAME | -l label] | TYPE/NAME ...) [flags]
kubectl get all
kubectl get pods
kubectl get pods --all_namespaces
kubectl get pods --all_namespaces -o wide
kubectl get pods -l run=my-nginx -o wide
kubectl get pods -l run=my-nginx -o yaml
kubectl get deployment deneme1 -o yaml  # Çalışan deploy özelliklerini yaml formatında döker
kubectl get svc
kubectl get svc nginx
kubectl get ep nginx
kubectl get nodes
kubectl get nodes -o wide
kubectl get events
kubectl get events --namespace=default
kubectl get deployment
kubectl get pvc --all-namespaces #Volumes Claims:
kubectl get pv --all-namespaces 
kubectl get secrets
kubectl get configmap
kubectl get ingress
kubectl get daemonsets
kubectl get --raw=/apis
kubectl get --raw=/logs/kube-apiserver.log


--Pod içindeki konteynerların logunu almak için kullanılır.
kubectl logs [-f] [-p] POD [-c CONTAINER]
kubectl logs 
kubectl logs nginx
kubectl logs nginx --all-containers=true
kubectl logs –p –c nginx
kubectl logs -f -c ruby web-1
kubectl logs --tail=20 nginx
kubectl logs --since=1h nginx
kubectl logs job/hello

--Bir kaynağı dosya veya stdin ile yapılandırabilme özelliğine sahiptir.
kubectl apply –f <filename>

--Kaynak oluşturmak için kullanılır.Bunu yapmak için JSON veya YAML formatları kabul edilir.
kubectl create –f <File Name>
cat <file name> | kubectl create –f -

--Kaynak silmek için kullanılır
kubectl delete –f ([-f FILENAME] | TYPE [(NAME | -l label | --all)])
kubectl service/my-service
kubectl service my-service1 -n default

--Kubernetesde belirli bir kaynağı tanımlar. Kaynağın veya bir kaynak grubunun ayrıntılarını gösterir.
kubectl describe <type> <type name>
kubectl describe pod tomcat

--Konteyner bash prompta gitmek istersek veya herhangi bir komut çalıştırmak istersek kullanırız
kubectl exec POD <-c CONTAINER > -- COMMAND < args...>
kubectl exec tomcat 123-5-456 date
kubectl exec -it shell-demo -- /bin/bash

--Deployment, service, replica set, replication controller veya pod'a service oluşturmak için kullanılan komut.
kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol = TCP|UDP]
[--target-port = number-or-name] [--name = name] [--external-ip = external-ip-ofservice]
[--type = type]
kubectl expose rc nginx --port=80 --target-port=8000
kubectl expose -f nginx-controller.yaml --port=80 --target-port=8000
kubectl expose pod valid-pod --port=444 --name=frontend
kubectl expose service nginx --port=443 --target-port=8443 --name=nginx-https
kubectl expose rc streamer --port=4100 --protocol=UDP --name=video-stream


--Kubernetes deployment, ReplicaSet, Replication Controller'ın veya job'u ölçeklendirmek için kullanılır.
kubectl scale [--resource-version = version] [--current-replicas = count] --replicas = COUNT (-f FILENAME | TYPE NAME )
kubectl scale --replicas=3 rs/foo
kubectl scale --replicas=3 -f foo.yaml
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

--Kaynağın limitlerini ayarlamak için kullanılır.
kubectl set resources (-f FILENAME | TYPE NAME) ([--limits = LIMITS & --requests = REQUESTS]
kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi
kubectl set resources deployment nginx --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi
kubectl set resources deployment nginx --limits=cpu=0,memory=0 --requests=cpu=0,memory=0	#Silmek için
kubectl set resources -f path/to/file.yaml --limits=cpu=200m,memory=512Mi --local -o yaml

--Top komutu nodeların kaynak tüketimini görmenizi sağlar.CPU/Memory/Storage kullanımını gösterir.
kubectl top node
kubectl top node NODE_NAME
kubectl top pod
kubectl top pod --namespace=NAMESPACE
kubectl top pod POD_NAME --containers
kubectl top pod -l name=myLabel

--Deployment, replica set, Replication Controller gibi tanımlanan podları otomatik olarak ölçeklemek için kullanılır.
kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min = MINPODS] --max = MAXPODS [--cpu-percent = CPU] [flags]
kubectl autoscale deployment foo --min = 2 --max = 10

--Konteynarlara dizinlerden dosya ve dizin kopyalama
kubectl cp <Files from source> <Files to Destinatiion>
kubectl cp /tmp/foo <some-pod>:/tmp/bar -c <specific-container>

--Cluster da image çalıştırır.
kubectl run NAME --image = image [--env = "key = value"] [--port = port] [--replicas = replicas] [--dry-run = bool] [--overrides = inline-json] [--command] --[COMMAND] [args...]
kubectl run tomcat --image = tomcat:7.0
kubectl run tomcat –-image = tomcat:7.0 –port = 5000

--Cluster sorunlarını ayıklamak ve tanılamak için uygun küme bilgilerini dump dosyasını çıkartır. Varsayılan olarak, her şeyi stdout'a döker. 
kubectl cluster-info dump
kubectl cluster-info dump --output-directory=/home/kubernetes/test

--Bakım amacıyla bir nodu boşaltmak için kullanılır. Nodu bakım için hazırlar. Oluşturulacak yeni bir konteynerın atanmaması için nodu kullanılamaz olarak işaretler.
kubectl drain tomcat –force

--Çalışan konteynere bir şeyler ekler/iliştirir.
kubectl attach <pod> –c <container>
kubectl attach 123456-7890 -c tomcat-conatiner

--Clusterın desteklediği API versiyonu yazdırır
kubectl api-versions

--Kubeconfig içinde tanımlı kümeyi görüntüler.
kubectl config get-cluster
kubectl config get-cluster <Cluser Name>

--Kubeconfig dosyasını değiştirir.
kubectl config <SUBCOMMAD>
kubectl config –-kubeconfig <String of File name>

--Kubeconfig içinde bir kullanıcı girişi ayarlar.
kubectl config set-credentials cluster-admin --username = vipin --password = uXFGweU9l35qcif

Şimdilik bu kadar, umaraım yararı olur.

Referanslar;
https://kubernetes.io/docs/reference/kubectl/kubectl/
https://kubernetes.io/docs/reference/kubectl/overview/

Loading