CodeBlanks Logo Icon CodeBlanks

Çoklu container pod

Bir Pod'da birden çok container çalıştırmayı öğrenirsin.

Çoklu container pod

Bir pod'a birden çok container, yalnızca birbirine sıkı bağlıysa konur. En yaygın desen sidecar'dır: ana uygulamaya yardımcı bir container (log toplayıcı, vekil, eşitleyici). Ortak bir emptyDir volume'ü üzerinden dosya paylaşırlar:

spec:
  volumes:
    - name: loglar
      emptyDir: {}
  containers:
    - name: uygulama
      image: api:1.0
      volumeMounts:
        - name: loglar
          mountPath: /var/log/app
    - name: log-gonderici
      image: busybox:1.36
      command: ["sh", "-c", "tail -F /loglar/app.log"]
      volumeMounts:
        - name: loglar
          mountPath: /loglar

Init container

initContainers, ana container'lardan önce sırayla çalışıp biten container'lardır. Bağımlılığın hazır olmasını beklemek ya da ayar dosyası hazırlamak için kullanılır; hepsi başarıyla bitmeden ana container'lar başlamaz:

spec:
  initContainers:
    - name: db-bekle
      image: busybox:1.36
      command: ["sh", "-c", "until nc -z db 5432; do sleep 2; done"]
  containers:
    - name: api
      image: api:1.0

Belirli bir container'ın log'u için kubectl logs api -c db-bekle kullanılır.

Uygulama Sidecar'lı pod

Bir pod YAML'ı yaz: adı api; volumes altında emptyDir: {} olan loglar volume'ü; iki container: uygulama (api:1.0, loglar'ı /var/log/app'e bağlar) ve log-gonderici (busybox:1.36, loglar'ı /loglar'a bağlar).

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
apiVersion: v1
kind: Pod
metadata:
  name: api
spec:
  volumes:
    - name: loglar
      emptyDir: {}
  containers:
    - name: uygulama
      image: api:1.0
      volumeMounts:
        - name: loglar
          mountPath: /var/log/app
    - name: log-gonderici
      image: busybox:1.36
      volumeMounts:
        - name: loglar
          mountPath: /loglar

Beklenen çıktı

pod/api created
NAME   READY   STATUS    RESTARTS   AGE
api    2/2     Running   0          9s

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Web uygulaması ve veritabanı aynı pod'a konmalı mı?

  • Yalnızca üretimde
  • Yalnızca Minikube'de
  • Hayır; ayrı ölçeklenir ve ayrı yaşam döngüleri vardır Doğru cevap
  • Evet, her zaman

Açıklama: Pod ölçeklendiğinde içindeki tüm container'lar birlikte kopyalanır.

2 Pod içindeki belirli container'ın log'unu göster.

Soru
kubectl logs api ____ db-bekle
Cevap
kubectl logs api -c db-bekle

Açıklama: -c (container) container adını seçer.

3 Eşleştir.

Kavram Anlamı
sidecar Yardımcı container
emptyDir Pod ömürlü ortak dizin
initContainers Önce çalışıp biter
-c Container seçimi

Orta seviye bölümündeki tüm dersler