Skip to content

Latest commit

 

History

History
13 lines (7 loc) · 3.49 KB

pod-container.md

File metadata and controls

13 lines (7 loc) · 3.49 KB

Pod, kubernetes içerisinde yönetilen çalıştırılabilir en küçük bileşendir. Kubernetes Cluster’ınızda çalışan process’leri temsil etmektedir. Pod Cluster’ın deploy edilebilir birimlerdir. Bu açıdan bakarsak, Docker biliyorsanız, basitçe tek başına veya bir arada çalışan container’lara denk geldiğini söyleyebiliriz.

Konuya teknik olarak yaklaşırsak, hatırlarsanız container’lar linux namespace’leri sayesinde birbirlerinden ayrılmaktadır. Farklı namespace’deki process, network, storage v.s. birbirlerini göremeyecek, birbirlerine bağsız(izole) olacaktır. Bu yaklaşımdan yola çıkarsak, Kubernetes’te network ve storage gibi kavramlar için bu soyutlama pod düzeyindedir. Bunun anlamı, aynı pod içerisindeki container’lar aynı storage’ı, network’ü paylaşırlar. Bir pod’daki container’ın açtığı bir sokete yine aynı pod’daki bir diğer container localhost (127.0.0.1) üzerinden ulaşabilir. Bunun yanında Pod içeresindeki container’lar birbirleriyle SystemV semaforları ve POSIX ortak hafızaları sayesinde iletişim kurabilirler. Öte yandan tabi ki pod içerisindeki container’lar için de farklı soyutlamalar söz konusudur. Bu esneklik sayesinde farklı container’ları bir araya getirerek kullanımımıza uygun doğru bileşenleri oluşturabilir, yatayda bu bileşenleri kolayca çoğaltabiliriz.

Pod’ların bir diğer önemli görevinin de soyutlama olduğunu rahatlıkla söyleyebiliriz. Kubernetes’de en fazla tercih edilen container runtime’ı Docker olmakla birlikte alternatifleri de bulunmaktadır. Bu noktada Pod kavramı Kubernetes için aynı zamanda Docker container kavramında bir soyutlama anlamına da gelmektedir. Kubernetes, container’ları değil pod’ları yönetmektedir.

Pod’ların doğası gereği birden fazla container’ı desteklemesi init container, app containers, side car v.b. mantıkların gelişmesine de olanak sunarak container’lardan bağımsız olarak biz geliştiricilere önemli esneklikler de kazandırmıştır. Örneğin; nginx container’ı ile belirli bir dizindeki dosyaları sunan bir pod’un ayağa kalkarken init container’ında sunulacak bu dosyaların hazırlanması sağlanabilir.

Bu esneklik beraberinde bir sorumluluk da getirmektedir. Pod içerisindeki container’ların aynı kaynakları kullanmaları nedeniyle kaynak yönetimine dikkat edilmelidir. Örneğin; pod içeriside birden fazla container’ın aynı network portunu kullanmak istemesi hataya neden olacaktır.

Pod’larda dikkat edilmesi gereken bir diğer konu da Kubernetes’in pod’lara olan yaklaşımıdır. Kubernetes bakış açısıyla pod’lar fanidir. Herhangi bir zamanda Kubernetes tarafından çalışmaları sonlandırılabilir. Çalışmalarının sonlanması ile birlikte varsayılan olarak verileri de kaybolacaktır. Dolayısıyla Kubernetes’te geliştirilen uygulamaların saklamaları gereken verileri varsa ram ya da yerel disk alanından farklı yerlerde saklamaları tavsiye edilmektedir. Bu alan, uzaktaki bir veritabanı olabileceği gibi dosya sistemine bağlanmış bulut depolama alanları da olabilir.

Kubernetes’in pod’lara geçici olarak yaklaşması, beraberinde pod’lar üzerinde koşan uygulamalarımızı yönetmek için bir soyutlama ihtiyacı ortaya çıkartmaktadır. Bu noktada işimize yarayan Controller’lar pod’ların doğrudan yönetilmesi yerine daha soyut olarak yönetilmesine olanak sunmaktadır. Bu durumda yönetimde ek bir kolaylığı beraberinde getirmektedir.