Kubernetes, bir düğüm kümesi boyunca konteynerli uygulamaları yönetmek ve düzenlemek için kullanılan bir sistemdir. Google tarafından kapsayıcıları geniş ölçekte yönetmek ve planlamak için tasarlanmıştır. Kubernetes şirket içinde veya bulutta çalışabilir, bu da onu BT altyapısını modernleştirmek için popüler bir seçim haline getirir. Google ve Shopify dahil olmak üzere birçok büyük şirket, konteynerli uygulamalarını yönetmek için Kubernetes’i kullanır.
Genellikle k8s olarak adlandırılan Kubernetes, geleneksel sanal makinelere göre daha yüksek derecede otomasyon ve güvenilirlik sağlayarak birçok ana bilgisayarda büyük kapsayıcıları yönetmenize olanak tanır. Kubernetes, geleneksel uygulama dağıtım modellerine göre daha fazla esneklik ve ölçeklenebilirlik, daha iyi kaynak kullanımı ve gelişmiş hata toleransı gibi birçok avantaj sağlar.
Kubernetes Nedir?
Kubernetes, uygulamaları geniş ölçekte yönetmeye ve dağıtmaya yardımcı olan bir konteyner düzenleme platformudur. Sistem, yaşam döngüsü yönetimini basitleştirmek için tasarlanmıştır ve geliştiricilerin altyapı bakımı yerine uygulama kodlarına odaklanmalarına olanak tanır. Kendi kendini iyileştirme, otomatik ölçeklendirme ve yük dengeleme gibi özellikler sunması, onu büyük ölçekli dağıtımlar için ideal bir çözüm haline getirmektedir. Kubernetes ayrıca kullanıcıların gerektiğinde yeni işlevler eklemesine olanak tanıyan son derece genişletilebilir bir yapıya sahiptir. Ayrıca, Kubernetes açık kaynak kodludur ve geniş bir geliştirici topluluğu tarafından desteklenmektedir, bu da onu çok yönlü ve yaygın olarak kullanılan bir platform haline getirmektedir.
Kubernetes’in Özellikleri
Aşağıdaki listede Kubernetes’in bazı önemli özelliklerini bulabilirsiniz:
1. Konteyner oluşturma ve yok etme
Kubernetes kullanmanın birçok avantajından biri, YAML yapılandırma dosyalarına dayalı olarak kaynakları otomatik olarak oluşturmasıdır. Bu, yöneticileri pod gibi kaynakları manuel olarak oluşturmak zorunda bırakmadığı için büyük bir zaman tasarrufu sağlayabilir.
Ayrıca tüm kaynak oluşturma işlemleri Kubernetes’in kendisi tarafından gerçekleştirildiği için insan hatası riskini de azaltır. Ayrıca bu özellik, tek gereken geçerli bir YAML yapılandırma dosyası olduğu için kaynakları birden fazla sunucu arasında çoğaltmayı kolaylaştırır. Sonuç olarak Kubernetes, sunucu dağıtımlarını yönetme sürecini büyük ölçüde basitleştirebilir.
2. Otomatik ölçeklenebilir altyapı
Büyük ölçekli dağıtımları yönetirken, otomatik ölçeklenebilirlik Kubernetes’in önemli bir özelliğidir. Kubernetes, CPU kullanımı, bellek kullanımı ve ağ trafiği gibi faktörlere göre otomatik olarak ölçeklendirme yaparak uygulamaların sorunsuz çalışmasını sağlamak için gereken kaynakları sağlayabilir.
Bu sadece manuel müdahale ihtiyacını ortadan kaldırmakla kalmaz, aynı zamanda uygulamaların trafikteki ani artışlarla sorunsuz bir şekilde başa çıkabilmesini sağlamaya yardımcı olur. Sonuç olarak, otomatik ölçeklenebilirlik herhangi bir Kubernetes dağıtımının çok önemli bir bileşenidir.
3. Yatay ölçeklendirme
Yatay ölçeklendirme, Kubernetes’in kullanıcının bir kümedeki düğüm sayısını artırmasına veya azaltmasına olanak tanıyan bir özelliğidir. Bu, dağıtımdan replikalar eklenerek veya çıkarılarak yapılır. Dağıtım denetleyicisi, replika sayısının istenen sayıyla eşleşmesini sağlayacaktır.
4. Yük dengeleyiciler
Yük dengeleyici, Kubernetes’in iş yüklerini bir kümedeki birden fazla düğüme dağıtan bir özelliğidir. Bu, tek bir düğümün aşırı yüklenmemesini ve iş yükünün eşit olarak dağıtılmasını sağlar. Bir yük dengeleyici kullanarak Kubernetes kümenizin performansını artırabilir ve arıza süresi olasılığını azaltabilirsiniz.
5. Canlılık ve hazır olma
Canlılık ve hazır olma probları, Kubernetes’in uygulamalarınızın amaçlandığı gibi çalışmasını sağlamaya yardımcı olan iki önemli özelliğidir. Canlılık probları, bir uygulamanın hala canlı olup olmadığını tespit etmek ve değilse yeniden başlatmak için kullanılır. Hazırlık probları ise bir uygulamanın trafik almaya hazır olup olmadığını belirlemek için kullanılır.
Hem canlılık hem de hazır olma probları çeşitli sistem durumu kontrol yöntemleri kullanacak şekilde yapılandırılabilir. Ayrıca, her iki prob türü de düzenli aralıklarla çalışacak ve bir uygulama sağlık kontrolünden geçemezse uyarı verecek şekilde yapılandırılabilir.
Kubernetes ayrıca başarısız dağıtımları otomatik olarak geri alabilir ve uygulamanızın asla kararsız bir durumda kalmamasını sağlar.
6. Öngörülebilirliği yüksek altyapı
Kubernetes son derece öngörülebilir bir altyapı sağlar. Bu, verilerinizin tam olarak nerede depolandığını ve bunlara nasıl erişildiğini her zaman bilebileceğiniz anlamına gelir. Bu, altyapınızı yönetmeyi ve verilerinizi güvende tutmayı çok daha kolay hale getirir.
Ayrıca, bu öngörülebilirlik yedekleme ve felaket kurtarma gibi görevleri otomatikleştirmeyi de kolaylaştırır. Sonuç olarak Kubernetes, altyapınızı yönetmek için gereken zaman ve çaba miktarını azaltmanıza yardımcı olabilir.
7. Uygulamaları çalıştırmak için bağlar ve depolama sistemi
Kubernetes ayrıca uygulamaları çalıştırmak için kullanılabilecek bir bağlama ve depolama sistemi de sunar. Bu sistem, uygulamaların verileri yerel makineye kopyalamak zorunda kalmadan uzak bir sunucuda depolanan verilere erişmeleri için bir yol sağlamak üzere tasarlanmıştır.
Bağlama ve depolama sistemi, bir uygulamanın veri tabanı gibi paylaşılan bir konuma veri okuması ve yazması gereken durumlar için de kullanışlıdır. Bağlama ve depolama sistemini kullanarak, geliştiriciler kendi depolama altyapılarını oluşturma ve sürdürme ihtiyacından kaçınabilirler. Bunun yerine, ölçeklenebilir ve güvenilir bir depolama çözümü sağlaması için Kubernetes’e güvenebilirler.
8. Verimli kaynak kullanımı
Verimli kaynak kullanımı Kubernetes’in önemli bir özelliğidir. Kubernetes, akıllı zamanlama kullanarak podların yalnızca onları destekleyecek kaynaklara sahip düğümlerde çalıştırılmasını sağlayabilir. Bu, kaynakların mümkün olduğunca verimli kullanılmasını ve hiçbir düğümün aşırı yüklenmemesini sağlar.
Ayrıca Kubernetes, talepteki değişikliklere yanıt olarak podları dinamik olarak yukarı veya aşağı ölçeklendirebilir. Bu, podların her zaman optimum düzeyde çalışmasını ve kaynakların boşa harcanmamasını sağlar. Sonuç olarak, Kubernetes kaynak kullanımı söz konusu olduğunda yüksek düzeyde verimlilik sağlar.
9. Güvenlik, ağ ve ağ bileşenlerinin otomatik yönetimi
Kubernetes, güvenlik, ağ ve ağ bileşenlerinin yönetimini otomatikleştiren bir konteyner orkestrasyon sistemidir. Kullanıcıların konteynerli uygulamaları kümelenmiş bir ortamda dağıtmasına ve yönetmesine olanak tanır.
Kubernetes, iş yüklerini birden fazla düğüme dağıtarak yüksek kullanılabilirlik ve ölçeklenebilirlik sağlamak üzere tasarlanmıştır. Ayrıca kendi kendini iyileştirme ve yatay ölçeklendirme içerir.
Kubernetes Mimarisi
Kubernetes mimarisi, her biri sistemin genel işleyişinde hayati bir rol oynayan bir dizi temel bileşene dayanmaktadır:
1. Kontrol Düzlemi
Kubernetes kontrol düzlemi kümenin yönetiminden sorumludur. Her biri genel küme yönetiminde belirli bir role sahip olan çeşitli bileşenlerden oluşur. Kontrol düzleminin en önemli bileşenleri etcd veri tabanı, API sunucusu, zamanlayıcı ve denetleyici yöneticisidir.
etcd veritabanı, podlar ve hizmetler hakkındaki bilgiler de dahil olmak üzere küme durumunu depolar. API sunucusu, kümeyi yönetmek için kullanılabilecek bir RESTful API sunar. Zamanlayıcı, podları düğümlere zamanlamaktan sorumludur. Denetleyici yöneticisi, çoğaltma denetleyicilerini ve hizmet hesaplarını yönetmekten sorumludur.
2. Veri Düzlemi
Kubernetes veri düzlemi kümedeki düğümlerden oluşur. Her düğüm, podları çalıştırmaktan sorumlu olan bir kubelet çalıştırır. Podlar, bir depolama birimini ve ağ ad alanını paylaşan konteyner gruplarıdır. Düğümler ayrıca podlar için yük dengeleme ve hizmet keşfi sağlayan bir proxy hizmeti çalıştırır.
3. Kube-apiserver
Kube-apiserver, tüm Kubernetes API çağrıları için merkezi iletişim noktasıdır. Veri doğrulama, yetkilendirme ve erişim kontrolünün yanı sıra manifest dosyasını etcd içinde depolamaktan sorumludur. Kube-apiserver ayrıca yapılandırmayı varsayılan değerlerle doldurmak için bir arayüz sağlar. Bu, etcd’de saklanmadan önce tüm konfigürasyonların doğru şekilde ayarlanmasını sağlar.
4. Etcd
Kubernetes mimarisindeki etcd bileşeni, küme yapılandırmasını depolamak için kullanılan dağıtılmış, yüksek oranda kullanılabilir bir anahtar değer veri deposudur. Her kaynak için meta verileri ve hem istenen hem de mevcut durumu barındırır. Temel olarak, oluşturulan herhangi bir nesne veya kaynak etcd’ye kaydedilir.
Çalışma şekli, etcd’nin yalnızca kube-apiserver ile doğrudan iletişim kurmasıdır. Kube-apiserver, veri deposuyla yapılan tüm etkileşimler için bir arabulucu ve doğrulayıcı görevi görür.
Dolayısıyla, başka herhangi bir bileşenin etcd’de depolanan kaynakların meta verileri veya durumu hakkındaki bilgilere erişmesi gerekiyorsa, kube-apiserver’dan geçmeleri gerekir. Bu, etcd bileşeninden verilere erişirken düzeni ve hiyerarşiyi korur.
5. Kube-Controller-Manager
Kube-controller-manager bileşeni, Kubernetes kümesinin durumunu yöneten çeşitli denetleyicileri çalıştırmaktan sorumludur. Denetleyici bileşenleri, apiserver aracılığıyla kümenin paylaşılan durumunu izler ve istenen durumun gerçek duruma yansıtılmasını sağlamak için değişiklikler yapar.
Kube-controller-manager, her biri belirli bir görevden sorumlu olan birçok denetleyiciyle birlikte gönderilir. Örneğin, çoğaltma denetleyicisi belirli sayıda podun her zaman çalışmasını sağlarken, hizmet denetleyicisi Kubernetes hizmetleri için yük dengeleme ve hizmet keşfi sağlar.
Buna ek olarak, kube-controller-manager depolama, ağ ve gizli bilgileri yönetmek için denetleyiciler de içerir. Çok çeşitli denetleyicilerle birlikte gönderilerek, kube-controller-manager Kubernetes dağıtımlarını daha sağlam ve yönetimi daha kolay hale getirmeye yardımcı olur.
6. Kube zamanlayıcı
Kube-scheduler, podları kümedeki düğümlere zamanlamaktan sorumludur. Belirli bir pod’u çalıştırmak için hangi düğümün en uygun olduğunu belirlemek için mevcut kaynaklar ve düğüm kullanımı gibi çeşitli faktörler kullanır.
7. Kubelet
Kubelet, kümedeki her düğümde çalışan bir ajandır. Bir düğüme atanan tüm podların çalışır durumda ve sağlıklı olmasını sağlamaktan sorumludur. Ayrıca Kubernetes master ile iletişimi yönetir ve düğümün ve podlarının durumu hakkında rapor verir.
8. Kube-proxy
Kube-proxy, kümedeki her düğümde çalışan bir aracıdır. Hizmetler ve podlar arasındaki trafiği yönlendirmekten sorumludur.
9. Kubectl istemcisi
Kubectl istemcisi, bir Kubernetes kümesi içindeki kaynakları manipüle etmek amacıyla bir Kubernetes API sunucusuyla arayüz oluşturmak için kullanılır. Kubectl istemcisi, bir Kubernetes kümesi içindeki kaynakları oluşturmak, güncellemek, silmek ve görüntülemek için kullanılabilir.
Ayrıca ağ oluşturma, RBAC ve diğer küme düzeyi yapılandırmaları dahil olmak üzere bir Kubernetes kümesini yapılandırmak için de kullanılabilir. Buna ek olarak, kubectl istemcisi bir Kubernetes kümesindeki sorunları ayıklamak ve gidermek amacıyla bir Kubernetes API sunucusuna bağlanmak için kullanılabilir.
kubectl komut satırı aracı Kubernetes kümesi ile etkileşim kurmak için Kubernetes API’sini kullanır. Varsayılan olarak kubectl, yönetici tarafından sağlanan sertifika tabanlı kimlik bilgilerini kullanarak API sunucusuna bağlanmaya çalışacaktır.
Alternatif olarak, kubectl kimlik doğrulama için taşıyıcı belirteçleri veya kullanıcı adı/parola kullanacak şekilde yapılandırılabilir. Kubectl’in kimliği doğrulandıktan sonra, Kubernetes kümesindeki kaynakları manipüle etmek için API sunucusuna istek gönderecektir.
10. Konteyner çalışma zamanı
Konteyner çalışma zamanı, belirli bir ana bilgisayarda konteynerleri gerçekten çalıştıran yazılımdır. Kubernetes, Docker, rkt ve CRI-O gibi bir dizi farklı çalışma zamanını destekler.
Bir Kubernetes sisteminde, bir düğüm kümesi boyunca konteynerli uygulamaları düzenlemek için birlikte çalışan birkaç temel bileşen vardır. Kontrol düzlemi birkaç bileşenden oluşur: API sunucusu, zamanlayıcı ve denetleyici yöneticisi.
API sunucusu, Kubernetes kontrol düzlemindeki en önemli bileşendir ve Kubernetes API’sinin açığa çıkarılmasından sorumludur. Zamanlayıcı, podları kümedeki düğümlere zamanlamaktan sorumludur.
Denetleyici yöneticisi, sistemin durumunu gözlemleyen ve istenen durumun korunmasını sağlamak için gerekli değişiklikleri yapan birden fazla denetleyiciyi (çoğaltma denetleyicisi gibi) yerleştiren bir daemon’dur.
Kontrol düzlemi bileşenlerine ek olarak, kubelet ve kube-proxy olmak üzere birkaç işçi düğümü bileşeni de vardır. Kubelet, konteynerlerin bir düğüm üzerinde çalışmasını sağlamaktan ve API sunucusuna geri bildirimde bulunmaktan sorumludur.
Kube-proxy, bir düğümdeki hizmetler için ağ oluşturma ve yük dengelemeden sorumludur. Tüm bu bileşenler, konteynerli uygulamalar için bir düzenleme platformu sağlamak amacıyla birlikte çalışır.
Konteyner Yönetimi Nasıl Avantajlar Sağlar?
Konteynerleştirme teknolojisi, özellikle buluta hazır uygulamaların hizmetlerine odaklanan şirketler başta olmak üzere tüm sektörlerde yaygınlaşmaktadır. Uygulama buluta hazır olmasa bile, konteynerlerin size sağlayabileceği bazı avantajlar aşağıdaki şekildedir:
- Birçok konteyner tek bir makinede veya hatta bir sanal makinede (VM) çalışabildiğinden altyapı maliyetinde azalma.
- Monolitik veya eski uygulamalar mikro hizmet mimarisi kullanılarak konteynerleştirilebilir ve gelecekte ölçeklendirme için yer açılabilir.
- Uygulama farklı sistemlerde ayrı konteynerlerde depolanacağı ve ana bilgisayardan izole edileceği için uygulama güvenliğini artırır.
- Konteynerler belirli bir işletim sistemine bağımlı değildir ve konteyner motoru bir ana işletim sistemi üzerinde çalıştığı için herhangi bir işletim sistemi üzerinde çalışabilir.
- Konteynerler saniyeler içinde hesaplama için hazır olduklarını kanıtladıkları için hafif ve daha hızlıdır.
Kubernetes İle İlgili En Çok Sorulan Sorular
1. Kubernetes’te konteyner nedir?
Kubernetes’teki bir konteyner, altyapıdan bağımsız olarak konteynerleştirilmiş uygulamaları ana işletim sistemine bağlayabilen bir yazılım çözümüdür. Kubernetes böyle bir konteyner oluşturmak ve çalıştırmak için bir platformdur.
2. Pod bir konteyner mıdır?
Hem evet hem hayır. Pod, Kubernetes’te bir kümedeki en küçük dağıtım birimidir. Bir veya birden fazla kapsayıcı içerebilir. Bir pod tek bir konteyner içeriyorsa pod ve konteyner terimlerini birbirinin yerine kullanabilirsiniz, ancak birden fazla konteyner içeriyorsa kullanamazsınız.
3. Docker konteyneri bir sanal makine midir?
Her ikisi de sanallaştırma teknolojilerini kullanır, ancak farklıdırlar. Sanal makineler konuk işletim sistemine sahipken, docker konteyneri ana işletim sistemini paylaşır. Bu, Docker konteynerlerini VM’lerden çok daha verimli ve hafif yapar.
4. Docker ve Container arasındaki fark nedir?
Konteyner, uygulamalarınızı ve bu uygulamaları altyapıdan bağımsız hale getirmek için bağımlılıklarını içeren bir yazılımdır.
Docker, konteynerleştirilmiş uygulamalar oluşturmak ve dağıtmak için bir çalışma zamanı ortamıdır.
5. Konteyner ve Kubernetes nedir?
Konteynerler ve Kubernetes paralel olarak çalışır. Konteynerler uygulamanızı tutar ve herhangi bir yere dağıtmanıza izin verirken, Kubernetes konteyner kümelerinin işbirliği içinde doğru şekilde çalışmasını sağlar.
6. Konteynerli uygulama nedir?
Konteynerli uygulamalar, bir uygulama olduğunda ana bilgisayar altyapısına bağımlılık olmamasını sağlayan konteynerlerin geliştirme ve dağıtım standartlarını takip eder. Bağımlılık dosyalarını, yapılandırma dosyalarını ve ikili dosyaları yanlarında taşırlar.
7. Konteynerler hangi sorunları çözer?
Konteynerler, sanal makineler gibi her uygulama için bir konuk işletim sistemi yerine konteynerleştirilmiş uygulamalar için ana işletim sistemini kullanır. Bu özellik konteynerlerin boyutunu birkaç MB’a düşürerek onları sanal makinelere harika bir alternatif haline getirir.
Ayrıca, işletim sisteminden bağımsız olmaları sayesinde şirketlerin uygulamaları buluta veya bulutlar arasında kolayca taşımalarına yardımcı olurlar.