Kubectl Cheat Sheet

H. Alperen Selcuk
3 min readJan 22, 2024

--

bu yazımda çok kullandığım ve önemli gördüğüm kubectl komutlarını ele aldım.

kubernetes kullanıcıları olarak kubectl bizim ana toolumuz. kubernetes api ye istek göndererek kubernetes i kullanmamızı, resource yaratmamızı, belli bilgileri görmemizi sağlıyor.

bu yazımda size günlük operasyonlarda da çok kullandığım ve önemli gördüğüm kubectl komutlarını ele aldım.

run

kubernetes üzerindeki en temel obje olan pod yaratmak için kullanılır.

kubectl run nginx --image=nginx

create

kubernetes üzerinde bulunan resourceları yaratmak için kullanılır. deployment, statefulset, job vs

kubectl create deployment nginx --image=nginx

dry-run

dry-run aslında bir flagg dir ama run ve deployment ile çok güzel kullanılır. bu flag kubernetes apisine isteği göndermeden kubectl çalıştırmanıza yarar. bu en çok imperative dediğimiz bu kubectl çalıştırma komutunu declarative dediğimiz yaml file a dönüştürürken kullanılır. sınavlarda çok işe yarar

kubectl create deployment nginx --image=nginx --dry-run=client  -oyaml 

bu komut bir deployment oluştururken sizin kubernetes apisine ne göndereceğinizi gösterir bunu da bir file a kaydederseniz elinizde artık declarative bir kubernetes deployment dosyası olur.

kubectl create deployment nginx --image=nginx --dry-run=client  -oyaml > deployment.yaml

herhangi bir işlem için bunu yapabilirsiniz.

describe

bir kubernetes resource u hakkında detaylı bilgi almak için kullanılır. genellikle troubleshoot zamanı çok işimize yarar.

kubectl describe pod nginx

expose

deployment ve pod a erişim için service objesi oluşturmak için kullanılır.

kubectl expose pod nginx --port=80

eğer container port farklı ise target port olarak belirtmeniz gerek

kubectl expose deployment/nginx --port=80 --target-port=8080

herhangi bir şey belirtmezseniz kubernetes service i ClusterIP açar. type ı belirtmek için ise;

kubectl expose deployment/nginx --port=80 --type=LoadBalancer

port-forward

en kolay şekilde lokalden kubernetes servisine/poda erişmek için kullanılır. sizin local portunuza kubernetes poduna veya servisine doğru tunnel açar.

kubectl port-forward svc/web 8080:80

kubectl port-forward pod nginx 8888:80

edit

anlık olarak kubernetes resourcelarını değiştirmek için kullanılır. burada editorü de kendiniz seçebilirsiniz. KUBE_EDITOR=”nano” derseniz editlemeyi nano da açar. KUBE_EDITOR=”vim” derseniz de vim de açarsınız bunu bashrc/zshrc export KUBE_EDITOR=”nano” dosyasına koymanız yeterli.

kubectl edit deployment web

top

kubernetes pod ve nodeların anlık cpu ve mem kullanımlarını gösterir. bu komutun tam anlamıyla çalışabilmesi için kubernetes üzerinde bir metric server olması gerekir.

kubectl top nodes
kubectl top pods

set image

kubernetes deployment veya pod üzerinde mevcutta çalışan image i değiştirmek için kullanılır. kubernetes deployment ile container isminiz aynı olması lazım. bu genellikle ci/cd pipelinelarda çok kullanışlıdır. sadece yeni build aldığını image idisni değiştirmek istediğinizde kubectl set kullanabilirsiniz.

kubectl set image deployment/web web=nginx:1.20

rollout

kuberentes deploymentinizin önceki versiyonlarını görüntülemek, o versiyonlara geri dönmek ve mevcut versiyonda çalışan podları yeniden başlatmak için kullanılır.

kubectl rollout history deployment/web

kubectl rollout undo deployment/web --to-revision=2

kubectl rollout restart deployment/web

replace

hard bir şekilde podu silip bir manifest üzerinden tekrar oluşturmaya yarar. normalde mevcutta bulunan bir resource a bir manifest apply ederseniz hata verebilir. bu şekilde replace ederseniz silip yeniden oluşturur.

kubectl replace -f nginx.yaml

scale

mevcut deployment da replica sayısını değiştirmek için kullanılır

kubectl scale --replicas=3 deployment/web

cp

kubernetes podu içine lokalden dosya atmak için veya pod içinden lokale dosya almak için kullanılır.

birden fazla namespace kullanıyorsanız bunu başta belirtmeniz gerek.

kubectl cp default/web:/var/deneme.txt ~/deneme.txt

kubectl cp abc.txt production/web:/var/abc.txt

label

kubernetes resourlarına label vermek için kullanılır. sonradan bu labelları pod/node affinity, taint/toleration gibi yerlerde kullanabilirsiniz.

kubectl label pods web platform=www
kubectl label nodes node1 system=ubuntu

set-context namespace

sürekli çalıştığınız namespace varsa ve sürekli -n -namespace selectorleri girmek istemiyorsanız config dosyanızda namespace sabitlemek için kullanılır. özellikle kubernetes sınavlarında çok işe yarar.

kubectl config set-context --current --namespace production

cordon ve uncordon

kubernetes nodelarını pod schedule edilmemesini ve edilmesini belirtirsiniz. cordon schedule e kapatır uncordon geri açar.

kubectl cordon node

kubectl uncordon node

drain

kubernetes node üzerindeki podları diğer nodelara aktarılmasını sağlar. genellikle node upgradelerinde kullanılır. daemonset varsa kubernetes de çalışan ignore komutu ile kullanılması gerekir.

kubectl drain node-1 --ignore-daemonsets

umarım işinize yarar ben kubernetes kontrolünü özellikle kubectl ile yapmaktan hoşlanıyorum. dashboard kullandığım zamanlarda oluyor ama özellikl kubernetes i iyi öğrenmek istiyorsanız kubectl i fazla fazla kullanmanızı tavsiye ederim.

bir sonraki yazımda görüşmek üzere.

h.a.s.

--

--