Tüm Ürünler
Search
Belge Merkezi

Container Service for Kubernetes:Workload FAQ

Son Güncelleme:Oct 06, 2026

ACK kümelerinde iş yüklerini dağıtma ve yönetme ile ilgili yaygın sorular ve yanıtlar.

ACK kümesinde konteynerleştirilmiş bir uygulamayı nasıl dağıtırım?

Konteynerleştirilmiş bir uygulama dağıtmak dört aşamadan oluşur:

  1. Uygulama kodunuzu herhangi bir dilde yazın.

  2. Bir Dockerfile kullanarak bir konteyner görüntüsü oluşturun. Bu metin dosyası, kodunuzu ve tüm bağımlılıklarınızı taşınabilir bir teslimat öğesi olarak paketler. Konteyner görüntüsü, JAR, WAR veya RPM dosyaları gibi geleneksel paketlerden daha kapsamlıdır çünkü uygulamayı, konteyner çalışma zamanının ihtiyaç duyduğu her dosya ile birlikte sunar. Bir konteyner başlatmak için bu görüntüyü kullanın; konteyner, çalışan uygulamanın kendisidir. Adım adım talimatlar için bkz. Dockerfile kullanarak görüntüleri oluşturma, paketleme ve çalıştırma.

  3. Görüntüyü bir kayıt defterine gönderin. Container Registry (ACR), görüntüleri depolar, yönetir, dağıtır ve sunar. ACR iki sürüm sunar. Daha fazla bilgi için bkz. Container Registry ACR Nedir.

    • Kişisel Sürüm — bireysel geliştiriciler için

    • Kurumsal Sürüm — kurumsal müşteriler için

  4. Konteynerleştirilmiş uygulamanızı çalıştırmak için ACK'de iş yüklerini dağıtın. ACK, konteynerleştirilmiş iş yüklerinin tam yaşam döngüsünü yönetir; pod'ları belirli düğümlere zamanlar, yük değişikliklerine göre ölçeklendirir ve çok daha fazlasını yapar. Daha fazla bilgi için bkz. İş Yükleri.

Görüntü çekimleri neden çok uzun sürüyor veya başarısız oluyor?

Çekim yaptığınız kaynağa bağlı olarak aşağıdakileri kontrol edin:

Genel ağ üzerinden çekim yapma

ACR'den çekim yapma

ACK'deki uygulama sorunlarını nasıl gideririm?

Uygulama hataları genellikle pod'lardan, denetleyicilerden (Deployment, StatefulSet, DaemonSet) veya Hizmetlerden kaynaklanır. Sorunun hangi katmanda olduğunu belirleyerek başlayın, ardından aşağıdaki adımları izleyin.

Pod'ları kontrol etme

Pod düzeyindeki sorunları teşhis etmeye ilişkin kapsamlı bir kılavuz için bkz. Pod anormalliklerini giderme.

Dağıtımları kontrol etme

Pod anormallikleri genellikle Deployment, DaemonSet, StatefulSet veya Job gibi denetleyiciler oluşturulduğunda ortaya çıkar. Pod düzeyindeki sorunları kontrol ettikten sonra, Deployment olaylarına ve günlüklerine bakın:

  1. ACK konsoluna giriş yapın. Sol gezinme bölmesinde ACK konsoluClusters seçeneğine tıklayın.

  2. Clusters sayfasında küme adını bulun ve tıklayın. Sol gezinme bölmesinde Workloads > Deployments seçeneğini seçin.

  3. Deployments sayfasında Deployment adına tıklayın, ardından sorunu belirlemek için Events veya Logs seçeneğine tıklayın.

DaemonSet, StatefulSet ve Job için süreç aynıdır.

Hizmetleri kontrol etme

Bir Hizmet, bir grup pod arasında trafiği yük dengeler. Hizmetle ilgili sorunları belirlemek için şu adımları izleyin.

Adım 1: Uç noktaların varlığını doğrulayın

kubectl ile kümeye bağlanın ve ardından şunu çalıştırın:

kubectl get endpoints <service_name>

ENDPOINTS sütunundaki adres sayısı, beklenen çoğaltma sayısıyla eşleşmelidir. Örneğin, üç çoğaltmaya sahip bir Deployment üç adres göstermelidir.

Eksik Hizmet uç noktaları

Hizmetin uç nokta adresi yoksa, Hizmet seçicisi hiçbir pod ile eşleşmiyor olabilir. Kontrol etmek için aşağıdakileri çalıştırın:

  1. Hizmet YAML dosyasındaki seçiciyi bulun:

    spec:
      clusterIP: 1x.xx.xx.33
      externalTrafficPolicy: Cluster
      ports:
        - name: http
          nodePort: 30040
          port: 30080
          protocol: TCP
          targetPort: 80
      selector:
        app: nginx
      sessionAffinity: None
  2. Bu seçiciyi kullanarak pod'ları sorgulayın:

    <app> pod'un app etiketinin değeridir. <namespace> Hizmetin bulunduğu ad alanıdır. Hizmet varsayılan ad alanında ise -n <namespace> kısmını atlayın.
    kubectl get pods -l app=<app> -n <namespace>
  3. Eşleşen pod'lar varsa ancak hala uç nokta yoksa, Hizmet bağlantı noktası konteyner bağlantı noktasıyla eşleşmiyor olabilir. Bağlantıyı test edin:

    <ip> ve <port> 1. adımdaki Hizmet YAML'sindeki clusterIP ve port değerleridir. Kesin test yöntemi ortamınıza bağlıdır.
    curl <ip>:<port>

    Hizmette belirtilen konteyner bağlantı noktasının, uygulamanın gerçekten dinlediği bağlantı noktasıyla aynı olduğunu onaylayın.

Ağ yönlendirme sorunları

İstemci Hizmete ulaşabiliyor ve uç noktalar doğruysa ancak bağlantılar hemen kesiliyorsa, trafik pod'lara ulaşmıyor olabilir. Aşağıdakileri kontrol edin:

  • Pod sağlıklı mı? Bkz. Pod anormalliklerini giderme.

  • Pod IP'sine ulaşılabilir mi? kubectl get pods -o wide ile pod IP'lerini alın, ardından herhangi bir düğüme giriş yapın ve ağ bağlantısını doğrulamak için ping <pod-ip> komutunu çalıştırın.

  • Uygulama doğru bağlantı noktasında dinliyor mu? Herhangi bir düğümde curl <pod-ip>:<port> komutunu çalıştırarak pod'daki konteyner bağlantı noktasının beklendiği gibi çalıştığını onaylayın.

Helm'i manuel olarak nasıl güncellerim?

Helm v2'nin sunucu tarafı bileşeni Tiller, saldırganların kümelerde yetkisiz uygulamalar yüklemesine olanak tanıyan bilinen güvenlik açıklarına sahiptir. Helm v3'e yükseltin. Bkz. Helm v2'den Helm v3'e yükseltme.

Çin anakarasındaki bir Container Registry Kurumsal Sürüm örneğinden Çin anakarası dışındaki bir ACK kümesine nasıl görüntü çekerim?

Aşağıdaki Container Registry Kurumsal Sürüm örneklerini satın alın:

  • Çin anakarasındaki bölgede Standart veya Premium örnek

  • Çin anakarası dışındaki bölgede Temel örnek

Ardından, görüntüleri Çin anakarası bölgesinden Çin anakarası dışındaki bölgeye çoğaltmak için bir senkronizasyon örneği kullanın. Bkz. Aynı hesap senkronizasyon örneği. Senkronizasyondan sonra, Çin anakarası dışındaki bölgedeki Kurumsal Sürüm örneğinden kayıt defteri adresini alın ve ACK'de uygulamalar oluştururken kullanın.

ACR Kişisel Sürümün senkronizasyon hızı daha düşüktür. Kendi kendine yönetilen depolar için, görüntü çekimlerini hızlandırmak üzere Global Acceleration (GA) satın almanız gerekir; bu da maliyeti artırır. Container Registry Kurumsal Sürümü önerilen seçenektir. Bkz. Faturalandırma bilgileri .

Hizmet kesintisi olmadan yuvarlak güncellemeleri nasıl gerçekleştiririm?

Yuvarlak güncelleme sırasında pod'ları değiştirirken, pod değişikliklerinin Classic Load Balancer (CLB) örneğine yansıtılması birkaç saniye sürer. Bu durum geçici 5XX hatalarına neden olabilir. Sıfır kesinti süreli yuvarlak güncellemeler elde etmek için zarif kapatmayı yapılandırın. Bkz. Sıfır kesinti süreli yuvarlak dağıtımları uygulama.

Bir iş yükü için konteyner görüntüsünü nasıl alırım?

Konteyner görüntüsü çekmeye ilişkin ön koşullar ve kılavuz için bkz. Görüntü çekme.

Bir konteyneri nasıl yeniden başlatırım?

Kubernetes, tek tek konteynerlerin doğrudan yeniden başlatılmasını desteklemez. Bunun yerine, pod'u silin; denetleyici (Deployment, DaemonSet vb.) otomatik olarak bir yenisini oluşturur.

  1. Yeniden başlatılacak pod'u bulmak için pod'ları listeleyin:

    kubectl get pods
  2. Pod'u silin:

    kubectl delete pod <pod-name>
  3. Yeni pod'un çalıştığını doğrulayın:

    kubectl get pods

    Pod durumunun Running olduğunu onaylayın.

Üretim ortamında, pod'ları doğrudan manipüle etmek yerine ReplicaSets ve Deployments gibi üst düzey nesneler aracılığıyla konteynerleri yönetin. Bu, küme durumu tutarlılığını korur.

Bir Deployment'ın ad alanını nasıl değiştiririm?

Bir Deployment'ı farklı bir ad alanına taşımak, kalıcı birim istekleri (PVC'ler), ConfigMap'ler ve Secrets gibi bağımlı kaynakların da yeni ad alanına manuel olarak güncellenmesini gerektirir.

  1. Deployment yapılandırmasını dışa aktarın:

    kubectl get deploy <deployment-name> -n <old-namespace> -o yaml > deployment.yaml
  2. deployment.yaml dosyasını düzenleyin ve namespace değerini değiştirin:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      annotations:
      generation: 1
      labels:
        app: nginx
      name: nginx-deployment
      namespace: new-namespace # Specify the new namespace.
      ... ...
  3. Güncellenmiş yapılandırmayı uygulayın:

    kubectl apply -f deployment.yaml
  4. Deployment'ın yeni ad alanında çalıştığını doğrulayın:

    kubectl get deploy -n new-namespace

Çalışan konteynerlere pod bilgilerini nasıl sunarım?

ACK, yerel Kubernetes topluluk özelliklerini takip eder. İki yöntem desteklenir:

imagePullSecrets nasıl kullanılır?

Önemli
  • Parolasız çekim bileşeni, manuel olarak belirtilen imagePullSecrets alanını desteklemez.

  • Secret, iş yüküyle aynı ad alanında olmalıdır.

9 Eylül 2024 tarihinde veya sonrasında oluşturulan ACR Kişisel Sürüm örnekleri aliyun-acr-credential-helper özelliğini desteklemez. Kimlik bilgilerinizi bir Kubernetes Secret'ında saklayın ve imagePullSecrets aracılığıyla buna başvurun.

Adım 1: Secret'ı oluşturun

kubectl create secret docker-registry image-secret \
  --docker-server=<ACR-registry> \
  --docker-username=<username> \
  --docker-password=<password> \
  --docker-email=<email@example.com>
Parametre Açıklama
--docker-server ACR örnek uç noktası. Kayıt defteri adresinin ağ türüyle (dahili veya genel) eşleşmelidir.
--docker-username ACR erişim kimlik bilgisinin kullanıcı adı.
--docker-password ACR erişim kimlik bilgisinin parolası.
--docker-email İsteğe bağlı.

Adım 2: Secret'a başvurun

Aşağıdaki yöntemlerden birini seçin:

Service Account Kullanma

Seçenek 1: ServiceAccount'a ekleme

ServiceAccount'u kullanan tüm iş yükleri, Secret'ı tek tek belirtmeden görüntü çekebilir.

apiVersion: v1
kind: ServiceAccount
metadata:
  name: default
  namespace: default
imagePullSecrets:
- name: image-secret # Enter the ACR Secret

Bu ServiceAccount'u kullanan herhangi bir Deployment daha sonra görüntü çekebilir:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test
  namespace: default
  labels:
    app: nginx
spec:
  serviceAccountName: default # If using the default ServiceAccount for the namespace, you do not need to specify it.
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: <acrID>.cr.aliyuncs.com/<repo>/nginx:latest  # Replace with the ACR instance link

Doğrudan İş Yükünde Kullanma

Seçenek 2: Doğrudan iş yükünde belirtme

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test
  namespace: default
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      imagePullSecrets:
      - name: image-secret  # Use the Secret created in the previous step
      containers:
      - name: nginx
        image: <acrID>.cr.aliyuncs.com/<repo>/nginx:latest  # Replace with the Registry Address of the ACR repository

Doğrulama

Yapılandırmayı uyguladıktan sonra pod'un çalıştığını onaylayın:

kubectl get pods

Parolasız bileşeni yapılandırdıktan sonra çekimler neden hala başarısız oluyor?

Parolasız çekim bileşeni yanlış yapılandırılmış olabilir. Bu iki yaygın nedeni kontrol edin:

  • Bileşendeki örnek bilgileri ACR örneğiyle eşleşmiyor.

  • Görüntü çekmek için kullanılan görüntü adresi, bileşende yapılandırılan alan adıyla eşleşmiyor.

Yapılandırmayı doğrulamak için Aynı hesap içindeki görüntüleri çekme bölümünü izleyin.

Yapılandırma doğru olduktan sonra çekim hala başarısız oluyorsa, iş yükü YAML'sinde manuel olarak belirtilen imagePullSecrets alanı parolasız bileşenle çakışıyor olabilir. imagePullSecrets alanını kaldırın, ardından pod'u silin ve yeniden oluşturun.

Düğüm havuzu görüntü hızlandırmayı etkinleştirdikten sonra yeni düğümlerde konteynerler neden başlatılamıyor?

Bir düğüm havuzu için Container Image Acceleration özelliğini etkinleştirdikten sonra aşağıdaki hatayı görebilirsiniz:

failed to create containerd container: failed to attach and mount for snapshot 46: failed to enable target for /sys/kernel/config/target/core/user_99999/dev_46, failed:failed to open remote file as tar file xxxx

Bu hata, Container Image Acceleration'ın aliyun-acr-acceleration-suite bileşeninin yüklü olmasını ve özel görüntüler için çekim kimlik bilgilerinin yapılandırılmasını gerektirmesinden kaynaklanır. Bkz. Konteyner görüntüsü çekim kimlik bilgilerini yapılandırma.

Önemli

Bileşeni yükledikten sonra sorun devam ederse, hizmetlerinizi geri yüklemek için önce konteyner görüntüsü hızlandırmayı devre dışı bırakın ve ardından yeniden yapılandırın.