kubernetes-cheat-sheet

Nodes

1-) Node'ların listelenmesi

kubectl get nodes ve(ya) kubectl get no

Not: Diğer örneklerde de göreceğiniz gibi, bazı parametreler varsayılan olarak kısaltmalara sahiptir. İki kullanımın output olarak herhangi bir farkı yoktur.

Aynı komut "-o wide" parametresiyle birlikte kullanıldığında Internal-External IP, işletim sistemi, çekirdek versiyonu ve Docker Runtime bilgileri de gösterilir.

"--show-labels" parametresi ile label bilgileri görüntülenebilir. Bu parametreden aldığınız sonucu "--selector" parametresi ile birlikte kullanarak "label" bazlı listeleme yapabilirsiniz.

Listeme işlemlerinde JSON bazlı filtrelemeler de yapılabilmektedir. Örneğin sadece Internal IP bilgilerini getirmek için:

kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}'

gibi bir kullanım mümkündür.

2-) Node'lar hakkında bilgi alma

kubectl describe nodes ve(ya) kubectl describe no

Herhangi bir node adı belirtilmediğinde mevcut cluster üzerinde çalışan tüm node'lar sırasıyla listelenir. Argüman olarak bir node adı verildiğinde ise o node'a ait detaylı bilgiler görüntülenir.

Bir node hakkında çok daha ayrıntılı bilgi alabilmek için "get" ile birlikte "-o yaml" parametresi de kullanılabilir. Bu şekilde bilgiler JSON formatında aktarılır.

kubectl get no -o yaml

3-) Node üzerinde değişiklik yapma

kubectl edit no node_adı

Pods

1-) Yeni Pod oluşturma

kubectl create -f dosya_adı ve(ya) kubectl apply -f dosya_adı

### Not: create "Imperative", apply "Declarative" mantığıyla çalışır.

Pod oluşturulurken mevcut YAML dosyası kullanlabileceği gibi "run" ve belirleyici diğer parametreler ile birlikte de aynı işlem gerçekleştirilebilir.

kubectl run pod_adı --image=redis

2-) Pod'ların listelenmesi

kubectl get pods ve(ya) kubectl get po

"-o wide" kullanımı pod'lar için de geçerlidir.

"--show-labels" kullanımı burada da geçerlidir. Label bilgisine göre "-l" parametresi ile filtreleme yapılabilir.

3-) Pod'lar hakkında bilgi alma

kubectl describe pods ve(ya) kubectl describe po

Pod adı belirtilmediği sürece tüm pod'ların bilgisi listelenir. Özellikle troubleshooting gerektiren durumlarda ilk başvurulan komutlardan birisidir.

4-) Pod'ların silinmesi

kubectl delete pods ve(ya) kubectl delete po

Çoklu silmeler için Pod isimleri aralarında boşluk bırakalarak tanımlanabilir.

5-) Pod üzerinde değişiklik yapma

kubectl edit po pod_adı

6-) Pod'u interaktif modda başlatma

kubectl run -i --tty busybox --image=busybox -- sh

7-) Yeni başlatılan Pod'un özelliklerini YAML formatında dosyaya aktarma

kubectl run pod_adı --image=alpine -o yaml > my_pod.yaml

8-) Pod üzerinde komut çalıştırma

kubectl exec pod_adı -- komut

9-) Pod'a Probe kullanımı ekleme

Üç çeşit Probe vardır:

-Liveness Probe: Pod istenildiği gibi çalışıyor mu kontrol edilir. Hata kodu alınırsa container silinir ve yeniden başlatılır.

-Readiness Probe: Pod trafik almaya uygun mu kontrol edilir. Hata kodu dönerse bu Pod'a trafik yönlendirmez.

-Startup Probe: Pod'un içerisindeki uygulama istenildiği şekilde çalışıyor mu kontrol edilir.

Üç çeşit Probe yöntemi vardır:

```

-ExecAction

apiVersion: v1
kind: Pod
metadata: exec-probe
spec:
  containers:
  - name: exec-pod
    image: nginx
    args:
    - /bin/sh
    - -c
    - touch /tmp/deneme.txt; sleep 600
    livenessProbe:
      exec:
        command:
        - cat 
        - /tmp/deneme.txt
      initialDelaySeconds: 5
      periodSeconds: 5



-HTTPGet

apiVersion: v1
kind: Pod
metadata:
  name: httget-probe
spec:
  containers:
  - name: probe-pod
    image: httpd:2.4
    livenessProbe:
      httppGet:
        path: /index.html
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 5


-TCPSocket

apiVersion: v1
kind: Pod
metadata:
  name: tcpsocket-probe
spec:
  containers:
  - name: tcpsocket-pod
    image: nginx
    ports:
    - containerPort: 80
    livenessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 5


```

Namespaces

1-) Yeni namespace oluşturma

kubectl create namespace namespace_adı

2-) Namespace'lerin listelenmesi

kubectl get namespaces ve(ya) kubectl get ns

"-o yaml" parametresi namespace'ler için de aktiftir.

3-) Namespace'ler hakkında bilgi alma

kubectl describe namespaces ve(ya) kubectl describe ns

4-) Namespace'lerin silinmesi

kubectl delete namespace namespace_adı ve(ya) kubectl delete ns namespace_adı

Deployments

1-) Yeni Deployment oluşturma

kubectl create deployment deployment_adı --image=imaj_adı

2-) Deployment'ların listelenmesi

kubectl get deployments ve(ya) kubectl get deploy

Kullanılan Docker imajları ve "selector" bilgisi "-o wide" ile görüntülenebilir.

"-o yaml" parametresi aynı şekilde Deployment'lar için de kullanılabilir.

3-) Deployment'lar hakkında bilgi alma

kubectl describe deployments ve(ya) kubectl describe deploy

Yine troubleshoot durumlarında kullanılan başlıca komutlardan birisidir.

4-) Deployment'ların silinmesi

kubectl delete deployments deployment_adı ve(ya) kubectl delete deploy deployment_adı

Services

1-) Yeni Service oluşturma

kubectl create service loadbalancer mylb --tcp="80:8080"

Ana şablon "kubectl create service" ile başlar, sonrasında service tipi belirtilmelidir. Bu örnekte "loadbalancer" tipi seçilmiştir. Diğer tipler:

  • clusterip
  • externalname
  • nodeport

Sonrasında service adı ve port tanımlanır.

2-) Service'lerin listelenmesi

kubectl get services ve(ya) kubectl get svc

"-o wide" parametresi "selector" bilgisini getirir. "-o yaml" kullanımı servisler için de geçerlidir.

"--show-labels" parametresi ile servise atanan label bilgileri de görüntülenebilir.

3-) Service'ler hakkında bilgi alma

kubectl describe services service_adı ve(ya) kubectl describe svc service_adı

4-) Service üzerinde değişiklik yapma

kubectl edit service ve(ya) kubectl edit svc

5-) Service'lerin silinmesi

kubectl delete services service_adı ve(ya) kubectl delete svc service_adı

DaemonSet

1-) DaemonSet'lerin listelenmesi

kubectl get daemonset ve(ya) kubectl get ds

2-) DaemonSet hakkında bilgi alma

kubectl describe daemonset ve(ya) kubectl describe ds

3-) DaemonSet üzerinde değişiklik yapma

kubectl edit daemonset ve(veya) kubectl edit ds

4-) DaemonSet'lerin silinmesi

kubectl delete daemonset daemonsets_adı ve(ya) kubectl delete ds daemonsets_adı

PersistentVolume

1-) PersistentVolume'ların listelenmesi

kubectl get persistentvolume ve(ya) kubectl get pv

2-) PersistentVolume hakkında bilgi alma

kubectl describe persistentvolume ve(ya) kubectl describe pv

3-) PersistentVolume'lerin silinmesi

kubectl delete persistentvolume persistentvolume_adı ve(ya) kubectl delete pv persistentvolume_adı

PersistentVolumeClaim

1-) PersistentVolumeClaim'ların listelenmesi

kubectl get persistentvolumeclaim ve(ya) kubectl get pvc

2-) PersistentVolumeClaim'ler hakkında bilgi alma

kubectl describe persistentvolumeclaim ve(ya) kubectl describe pvc

3-) PersistentVolumeClaim'lerin silinmesi

kubectl delete persistentvolumeclaim persistentvolumeclaim_adı ve(ya) kubectl delete pvc persistentvolumeclaim_adı

ReplicaSets

1-) ReplicaSets listelenmesi

kubectl get replicasets ve(ya) kubectl get rs

2-) ReplicaSets hakkında bilgi alma

kubectl describe replicasets ve(ya) kubectl describe rs

3-) ReplicaSet'lerin silinmesi

kubectl delete replicaset(s) replicaset_adı ve(ya) kubectl delete rs replicaset_adı

ConfigMaps

1-) ConfigMap'lerin listelenmesi

kubectl get configmaps ve(ya) kubectl get cm

2-) ConfigMap'ler hakkında bilgi alma

kubectl describe configmaps configmap_adı ve(ya) kubectl describe cm configmap_adı

Secrets

1-) Secret'ların listelenmesi

kubectl get secret ve(ya) kubectl get secrets

Roles

1-) Rollerin listelenmesi

kubectl get roles

Events

1-) Event'ların listelenmesi

kubectl get events ve(ya) kubectl get ev 

2-) Event'ların anlık takip edilmesi

kubectl get events -w ve(ya) kubectl get ev -w 

# Logs

1-) Pod loglarının görüntülenmesi

kubectl logs pod_adı

2-) Son X satır log'ların listelenmesi

kubectl logs --tail=X pod_adı

3-) Son X saatlik - X dakikalık log'ların listelenmesi

kubectl logs --since=X pod_adı

Saat bazlı listelemede "h" kullanılır,

Dakika bazlı listelemede "m" kullanılır.

4-) Belirli bir selector'a sahip pod'lara ait log'ların listelenmesi

kubectl logs --selector=selector_kriterleri

Örneğin label olarak run=main_svc belirtilmiş pod'larınızın tümünden log çıktısı almak için

kubectl logs --selector=run=main_svc

yazabilirsiniz.

ServiceAccounts

1-) ServiceAccount'ların görüntülenmesi

kubectl get serviceaccounts ve(ya) kubectl get sa

2-) Bilgilerin .yaml formatında alınması

kubectl get serviceaccounts -o yaml ve(ya) kubectl get sa -o yaml

Genel Bilgiler ve İpuçları

1-) Component'lar farklı namespace'ler altında oluşturulmuş olabilir, listelemeler varsayılan olarak "default" namespace'i baz alınarak yapılır. Bu tarz durumlarda "-n" parametresi ile hedef namespace belirtilir.

2-) Tüm yapıların listelenmesi

kubectl get all

3-) Cluster hakkında temel bilgi alma

kubectl cluster-info

4-) cat komutu ile çoklu component oluşturma

apiVersion: v1
kind: Pod
metadata:
  name: nightw
spec:
  containers:
  - name: nightw
    image: oraclelinux
    args:
    - sleep
    - "1000"
---
apiVersion: v1
kind: Pod
metadata:
  name: ubuntu
spec:
  containers:
  - name: ubuntu
    image: ubuntu
    args:
    - sleep
    - "1700"
EOF

5-) Çoklu component silme

kubectl delete pod,svc mypod mysrv

6-) PersistentVolume'ların boyuta göre listelenmesi

kubectl get pv --sort-by=.spec.capacity.storage

7-) Ölçeklendirmenin güncellenmesi

kubectl scale --replicas=X component_tipi/component_adı

Resimdeki örnekte 1 replica olarak çalışan deployment 3 replica şeklinde güncellenmiştir.

8-) Container log'larını görüntüleme

kubectl logs pod_adı -c container_adı

9-) Mevcut Pod'a label ekleme

kubectl label pod pod_adı mein=kampf

10-) Bash için otomatik komut tanımlamanın ayarlanması

source <(kubectl completion bash

Not: Komutun çalışması için bash-completion paketinin yüklü olması gerekmektedir.

İşlemin kalıcı olması adına .bashrc dosyasına yazmak için:

echo "source <(kubectl completion bash)" >> ~/.bashrc

11-) Aynı anda birden çok kubeconfig dosyasının kullanılması

config ve config2 isimli dosyalarımız olduğunu varsayalım.

export KUBECONFIG=~/.kube/config:~/.kube/config2