Azure Kubernetes Service (AKS) üzerinde uygulamalarınızı deploy ederken karşılaşabileceğiniz en yaygın hatalardan biri ImagePullBackOff hatasıdır. Bu hata, temel olarak Kubernetes’in belirlediğiniz container imajını (image) çeşitli nedenlerle indiremediğini (pull edemediğini) gösterir.
AKS ortamında bu hatanın temel olarak iki ana sebebi vardır:
- İmaj isminin veya etiketinin (tag) yanlış yazılması.
- Azure Container Registry (ACR) veya dış bir registry’den imajı çekmek için gerekli yetkilerin (credentials) eksik olması.
Bu makalede, kasıtlı olarak hatalı bir imaj ismi girerek Azure AKS üzerinde bu hatayı nasıl simüle edeceğimizi ve komut satırı üzerinden (CLI) sorunun kaynağını nasıl tespit edeceğimizi adım adım inceleyeceğiz.
Sorunsuz Bir Pod YAML Örneği
Normal şartlarda, doğru bir Microsoft imajı kullanarak hazırladığımız bir Pod manifestosu aşağıdaki gibidir ve deploy edildiğinde sorunsuz çalışır:
YAML
apiVersion: v1
kind: Pod
metadata:
name: aspnetapp
labels:
app: aspnetapp
spec:
containers:
- image: "mcr.microsoft.com/dotnet/samples:aspnetapp"
name: aspnetapp-image
ports:
- containerPort: 8080
protocol: TCP
Adım 1: Hatayı Simüle Etmek İçin YAML’ı Düzenleme
Şimdi, hatanın nasıl göründüğünü ve nasıl çözüleceğini anlamak için image ismini bilerek hatalı (repolarında bulunmayan bir isimle) değiştirelim. İmajın sonuna xyz ekliyoruz:
YAML
apiVersion: v1
kind: Pod
metadata:
name: aspnetap-imagepullbackof
labels:
app: aspnetapp
spec:
containers:
- image: "mcr.microsoft.com/dotnet/samples:aspnetappxyz" # Kasıtlı olarak yanlış yazılmış imaj ismi
name: aspnetapp-image
ports:
- containerPort: 8080
protocol: TCP
Hazırladığımız bu hatalı YAML dosyasını AKS cluster’ımıza deploy ediyoruz:
Bash
kubectl apply -f aspnetapp.yaml

[RESİM 1: kubectl apply komut çıktısı]
Adım 2: Azure Portal ve CLI Üzerinden Hatayı Tespit Etme
Manifestomuz AKS’ye iletildi (created), ancak uygulamamız ayağa kalkmayacak. Durumu kontrol etmek için önce Azure Portal’a, ardından komut satırına bakalım.
Azure Portal’da Kubernetes kaynakları (Workloads -> Pods) sekmesine girdiğimizde, Ready kısmında bir uyarı olduğunu görebiliriz.

[RESİM 2: Azure Portal – ErrImagePull hatası]
Aynı durumu yerel terminalimizden kontrol etmek için aşağıdaki komutu çalıştırıyoruz:
Bash
kubectl get pods

[RESİM 3: CLI – ImagePullBackOff hatası görünümü]
Çıktıda açıkça ImagePullBackOff durumunu görüyoruz. Kubernetes, ErrImagePull ile imajı çekmeyi denedi, başaramadı ve bekleme süresini artırarak (BackOff) denemeye devam ediyor.
Adım 3: Pod Loglarını ve Event’leri İnceleme (Troubleshooting)
Sorunun tam olarak neden kaynaklandığını anlamak (isim hatası mı, yetki hatası mı?) için Pod’un detaylarına inmemiz gerekiyor. Bunun için describe komutunu kullanacağız.
Aşağıdaki komutu çalıştırarak AKS’nin bu pod ile ilgili oluşturduğu “Events” (Olaylar) loglarını detaylıca inceleyelim:
Bash
kubectl describe pod aspnetap-imagepullbackof

[RESİM 4: kubectl describe pod Events çıktısı]
Çıktının en altındaki Events bölümünü incelediğimizde sorunun kaynağını net bir şekilde görebiliyoruz:
Failed to pull image "[mcr.microsoft.com/dotnet/samples:aspnetappxyz](https://mcr.microsoft.com/dotnet/samples:aspnetappxyz)": rpc error: code = NotFound desc = failed to pull and unpack image ... not found
Sonuç: Azure AKS bize açıkça belirttiğimiz repoda aspnetappxyz adında bir imaj bulamadığını (Not Found) söylüyor.
Çözüm
Bu senaryoda çözüm oldukça basittir: YAML dosyasındaki image satırını tekrar geçerli bir imaj (örneğin [mcr.microsoft.com/dotnet/samples:aspnetapp](https://mcr.microsoft.com/dotnet/samples:aspnetapp)) ile değiştirmek ve kubectl apply -f komutunu tekrar çalıştırmaktır.
Eğer imaj isminden eminseniz ancak hala bu hatayı alıyorsanız, sorunun kaynağı AKS’nin özel container registry’nize (örneğin Azure Container Registry – ACR) erişim yetkisinin olmamasıdır. Bu durumda rol atamalarını (Role Assignments) kontrol etmeniz gerekecektir.