Bir sabah, bir Kubernetes cluster’ına yeni bir pod başlatmak için komutları sırasıyla yazmaya başladığınızda, karşılaştığınız hata mesajı size her şeyin karmaşık olduğunu düşündürebilir. Bu yazıda, sık karşılaşılan Kubernetes Pod başlatma hatalarını ve çözüm yollarını sizler için derledim.
Pod Başlatma Hatası: "ErrImagePull"
En sık karşılaşılan hatalardan biri, “ErrImagePull” hatasıdır. Bu hata, Kubernetes’in container image’ını bulamadığı veya çekemediği durumlarda ortaya çıkar. Peki, bu hatayı nasıl çözüme kavuşturabilirsiniz?
Örneğin, şu şekilde bir pod manifest dosyanız olabilir:
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp-container
image: wrong-image-name:latest
Yukarıdaki örnekte, `wrong-image-name:latest` yanlış bir image adı olduğu için Kubernetes, bu image’ı çekemez ve "ErrImagePull" hatası alırsınız.
Hatanın çözümü için doğru image ismini belirtmeniz gerekir. Eğer bir Docker Hub image’ı kullanıyorsanız, image ismini şu şekilde düzeltebilirsiniz:
image: username/myapp:latest
Alternatif olarak, private registry kullanıyorsanız, registry URL’sini de eklemelisiniz:
image: registry.example.com/myapp:latest
Bu değişikliği yaptıktan sonra pod’unuzu yeniden başlatmayı unutmayın.
Pod Başlatma Hatası: "CrashLoopBackOff"
Bir başka yaygın hata ise “CrashLoopBackOff” hatasıdır. Bu hatayı gördüğünüzde, pod’un başlangıç aşamasında bir problem olduğunu anlayabilirsiniz. Pod, çalışmaya başlamakta zorlanır ve sürekli olarak çökme noktasına gelir.
kubectl logs myapp-pod
Log'lar, genellikle uygulamanın başlatılması sırasında bir hata olduğunu gösterir. Örneğin, uygulamanın bağlı olduğu veritabanına erişim hatası olabilir veya yanlış yapılandırılmış bir çevre değişkeni nedeniyle uygulama başlatılamaz.
Çözüm önerisi, uygulamanın düzgün bir şekilde çalışabilmesi için gerekli yapılandırmaları gözden geçirmektir. Eğer bir çevre değişkeni eksikse, Kubernetes pod manifest dosyasına aşağıdaki gibi bir `env` bölümü ekleyebilirsiniz:
spec:
containers:
- name: myapp-container
image: username/myapp:latest
env:
- name: DATABASE_URL
value: "mongodb://db-server:27017"
Bu tür hatalar için dikkat edilmesi gereken bir diğer önemli nokta, container’ın yeterli bellek ve CPU kaynaklarına sahip olup olmadığıdır. Eğer kaynaklar kısıtlıysa, pod manifest dosyasındaki `resources` bölümünü kontrol edip düzenleyebilirsiniz.
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
Pod’un gerekli kaynakları doğru şekilde alması, çökme sorununu çözebilir.
Pod Başlatma Hatası: "ImagePullBackOff"
Bir diğer yaygın hata da “ImagePullBackOff” hatasıdır. Bu hata, Kubernetes’in container image’ını indirirken bir problem yaşadığını gösterir. Bu genellikle registry erişim izinleriyle alakalı bir sorundur. Özellikle private bir Docker registry kullanıyorsanız, Kubernetes’in doğru kimlik bilgilerini kullanarak image’ı çekmesi için uygun erişim izinlerine sahip olması gerekir.
kubectl create secret docker-registry my-registry-key \
--docker-server=registry.example.com \
--docker-username=my-username \
--docker-password=my-password \
--docker-email=my-email@example.com
Bu Docker secret’ı pod manifest dosyasına şu şekilde ekleyebilirsiniz:
spec:
imagePullSecrets:
- name: my-registry-key
Bundan sonra Kubernetes, doğru kimlik bilgileriyle registry'e bağlanarak image’ı çekecektir.
### Sonuç:
Kubernetes ile ilgili pod başlatma hataları, başlangıçta karmaşık görünse de doğru adımlar atıldığında hızlıca çözülmesi mümkündür. Hata mesajlarını dikkatlice incelemek, doğru image’ı kullanmak, kaynakları uygun şekilde tanımlamak ve registry erişimini sağlamak en yaygın çözüm yollarıdır. Artık Kubernetes pod başlatma hatalarıyla karşılaştığınızda, bu yazıda öğrendiklerinizi kolayca uygulayarak sorunları çözebilirsiniz.