Bir Kubernetes deployment'ı, sana hiç göstermediği bir şekli tarif eden bir YAML yığınıdır. Kubernetes YAML'dan diyagram çıkarmanın derdi de buradan doğar: Ingress bir Service'i adıyla gösterir, Service Pod'ları label ile seçer, Pod'lar bir Deployment'tan gelir, yol üzerinde bir yerde de bir ConfigMap ve bir Secret mount edilir. Her bağlantı, farklı bir dosyaya gömülmüş bir string eşleşmesidir. Trafiğin container'ına gerçekte nasıl ulaştığını anlamak için altı dokümanı kafanda tutar, label'ları doğru eşleştirdiğini umarsın.
Bilgi zaten orada; sadece hiç çizilmiyor. O zaman çiz. Manifestlerini LetDraw'a yapıştır; Kubernetes'in okuduğu aynı alanları (selector'lar, isimler, referanslar) okur ve nesnelerin nasıl bağlandığını gösteren bir diyagram yerleştirir. Bir klasör dolusu YAML, bir review'da parmakla gösterebileceğin bir resme dönüşür.
Kubernetes manifestleri grafiği zaten tarif ediyor
Kubernetes, özünde label'lar ve isimlerle birbirine bağlanmış nesnelerden oluşan bir grafiktir. Bir Ingress backend'i bir Service'i adlandırır; bir Service'in selector'ı bir Pod şablonunun label'larıyla eşleşir; bu Pod'ların sahibi bir Deployment'tır; volume'lar bir ConfigMap ya da Secret'a adıyla referans verir. Bu referanslar tam olarak bir diyagramın kenarlarıdır. Yapıyı uydurman ya da bağlantıları tahmin etmen gerekmez; YAML'ın içine birebir string eşleşmeleri olarak yazılmışlardır ve onları otomatik çizmeyi güvenli kılan da tam olarak budur.
Tek yapıştırma, tüm cluster
Özel bir şey export etmen gerekmez. Zaten kubectl apply ettiğin manifestler girdinin ta kendisi. Onları birleştir (ya da aynı çok dokümanlı dosyayı kullan) ve Koddan Oluştur'a yapıştır; LetDraw nesneleri parse eder ve bulduğu bağlantıları çizer.
apiVersion: apps/v1 kind: Deployment metadata: { name: api } spec: replicas: 3 selector: { matchLabels: { app: api } } --- apiVersion: v1 kind: Service metadata: { name: api } spec: selector: { app: api } # ← matches the Deployment's pods ports: [{ port: 80, targetPort: 8080 }] --- apiVersion: networking.k8s.io/v1 kind: Ingress spec: rules: [{ http: { paths: [{ backend: { service: { name: api } } }] } }] # ← names the Service
O selector: app: api ve o service.name: api kenarların ta kendisi. LetDraw onları cluster'ın izlediği şekilde izler; böylece diyagram trafiğin nasıl aktığını hatırladığın gibi değil, gerçekte aktığı gibi yansıtır. Namespace'ler her şeyin içinde durduğu kapsayıcılara dönüşür, ikonlar da her nesne türünü bir bakışta tanınır kılar.
YAML cluster'ın nasıl bağlandığını söyler. Diyagram ise sadece o bağlantıların görünür hâlidir.
Artık normal bir diyagram
Taslak tuvale düştüğünde onu dilediğin gibi şekillendirebilirsin. Resmin saklamaya değer bir şeye dönüştüğü yer burası:
- Gürültüyü buda. Hikâyenin parçası olmayan nesneleri gizle (onboarding diyagramında kimsenin görmesi gerekmeyen on beşinci ConfigMap gibi) ve istek yolunu ön planda tut.
- Zor kısımlara not düş. Readiness probe'un nerede olduğunu, hangi Service'in yalnızca dahili olduğunu, Secret'ın aslında nereden geldiğini işaretle.
- Birden fazla namespace göster. Birkaçını yapıştır, sınırlar multi-tenant düzeni apaçık ortaya koysun.
- Kod olarak sakla. Mermaid ya da D2'ye export et ve manifestlerin yanına, repoya koy; böylece diyagram tarif ettiği cluster ile birlikte gelir.
Gerçekten deploy ettiğin cluster'ı gör
Yazdığın YAML ile çalıştırdığın cluster arasındaki boşluk, olayların saklandığı yerdir: hiçbir şeyle eşleşmeyen bir selector, yanlış porta bakan bir Service, unuttuğun bir Ingress route'u. Manifestleri çizmek bu uyumsuzlukları gece 2'de keşfettiğin bir şey olmaktan çıkarıp görebildiğin bir şeye dönüştürür. Zaten apply ettiğin şeyi yapıştır, nasıl bağlandığının resmini al ve onu üreten kodun yanında sakla.
Manifestlerini kopyala, bir kez yapıştır ve cluster'ın kendi kendine bir diyagrama dönüşmesini izle.