Kubectl Cheat Sheet
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.