Kubernetes dağıtımları nasıl çalışır?

Tamamlandı

İnsansız hava aracı izleme uygulamasının birbirinden ayrı olarak dağıtılan çeşitli bileşenleri vardır. Kümedeki bu bileşenler için dağıtımları yapılandırmak sizin görevinizdir. Burada, bu bileşenleri dağıtmak için kullanabileceğiniz dağıtım seçeneklerinden bazılarını inceleyebilirsiniz.

Diagram of the high-level architecture that shows the drone-tracking solution components.

Pod dağıtım seçenekleri

kubectl kullanırken bir Kubernetes kümesindeki podların dağıtımını yönetmek için birkaç seçenek vardır. Seçenekler şunlardır:

  • Pod şablonları
  • Çoğaltma denetleyicileri
  • Çoğaltma kümeleri
  • Dağıtımlar

Bir pod veya pod dağıtmak için bu dört Kubernetes nesne türü tanımından herhangi birini kullanabilirsiniz. Bu dosyalar, dağıtılacak pod veya podların hedeflenen durumunu açıklamak için YAML kullanır.

Pod şablonu nedir?

Pod şablonu, dağıtmak istediğiniz podun yapılandırmasını tanımlamanızı sağlar. Şablon, kapsayıcı görüntüsünün adı ve görüntüleri getirmek için kullanılacak kapsayıcı kayıt defteri gibi bilgileri içerir. Şablon, kullanılacak bağlantı noktaları gibi çalışma zamanı yapılandırma bilgilerini de içerir. Şablonlar Docker dosyaları oluşturulurken olduğu gibi YAML kullanılarak tanımlanır.

Şablonları kullanarak podları el ile dağıtabilirsiniz. Ancak el ile dağıtılan podlar başarısız olduktan, silindikten veya sona erdikten sonra yeniden başlatılmaz. Podun yaşam döngüsünü yönetmek için daha üst düzey bir Kubernetes nesnesi oluşturmanız gerekir.

Çoğaltma denetleyicisi nedir?

Çoğaltma denetleyicisi pod şablonlarını kullanır ve çalıştırılması gereken belirli pod sayısını açıklar. Denetleyici, aynı podun birden çok örneğini çalıştırmanıza yardımcı olur ve podların kümedeki bir veya daha çok düğümde her zaman çalışır durumda olmasını sağlar. Denetleyici, bu şekilde çalışan podların başarısız olması, silinmesi veya sona ermesi durumunda yerine yeni podları koyar.

Örneğin, insansız hava aracı izleme ön uç web sitesini dağıttığınızı ve kullanıcıların web sitesine erişmeye başladığını varsayalım. Tüm podlar bir nedenden dolayı başarısız olursa, siz yeni podları başlatana kadar web sitesi kullanıcılar tarafından kullanılabilir durumda olmaz. Çoğaltma denetleyicisi, web sitenizin her zaman kullanılabilir olduğundan emin olmanıza yardımcı olur.

Çoğaltma kümesi nedir?

Çoğaltma kümesi, çoğaltmaları dağıtmak için tercih edilen yöntem olarak çoğaltma denetleyicisinin yerine geçer. Çoğaltma kümesi, çoğaltma denetleyicisiyle aynı işlevselliği içerir, ancak seçici değeri eklemek için ek bir yapılandırma seçeneğine sahiptir.

Seçici, çoğaltma kümesinin altında çalışan tüm podları tanımlamasına olanak verir. Bu özelliği kullanarak, seçici değerin sahip olduğu aynı değerle etiketlenmiş, ancak çoğaltılmış kümeyle oluşturulmamış olan podları yönetebilirsiniz.

Dağıtım nedir?

Dağıtım, çoğaltma kümesinden bir düzey daha yüksek bir yönetim nesnesi oluşturur ve kümedeki podlar için güncelleştirmeleri dağıtmanıza ve yönetmenize olanak tanır.

Uygulamanızın kümenizde dağıtılmış beş örneği olduğunu varsayalım. Uygulamanızın 1.0.0 sürümünü çalıştıran beş pod var.

Diagram that shows five pods running on a node with the same pod version.

Uygulamanızı el ile güncelleştirmeye karar verirseniz tüm podları kaldırabilir ve ardından uygulamanızın 2.0.0 sürümünü çalıştıran yeni podları başlatabilirsiniz. Bu stratejiyle, uygulamanız kapalı kalma süresi yaşar.

Bunun yerine, eski uygulama sürümüne sahip podları kaldırmadan önce uygulamanızın yeni sürümüyle podları başlattığınız sıralı bir güncelleştirme yürütmek istiyorsunuz. Sıralı güncelleştirmeler, tüm eski podları aynı anda kapatmak yerine bir kerede bir pod başlatır. Dağıtımlar, çoğaltma kümeleri hakkında bilgilerin açıklandığı bölümde yapılandırılmış olan çoğaltma sayısını kabul eder. Eski podları yeni podlarla değiştirdiğinden çoğaltma kümesinde belirtilen pod sayısını korur.

Diagram that shows five pods, two pods set as version 1 and 3 pods set as version 2.

Dağıtımlar varsayılan olarak podları güncelleştirirken sıralı güncelleştirme stratejisi sağlar. Yeniden oluşturma stratejisi de kullanabilirsiniz. Bu strateji, yeni podları başlatmadan önce podları sonlandırır.

Dağıtımlar da kubectl kullanarak yürütebileceğiniz bir geri alma stratejisi sunar.

Dağıtımlar, YAML tabanlı tanım dosyalarından yararlanır ve dağıtımları yönetmeyi kolaylaştırır. Dağıtımların, kümenize dilediğiniz değişiklikleri uygulamanıza olanak sağladığını unutmayın. Örneğin uygulamanızın yeni sürümlerini dağıtabilir, etiketleri güncelleştirebilir ve podlarınızın diğer çoğaltmalarını çalıştırabilirsiniz.

kubectl, pod dağıtmak için kubectl run komutunu kullandığında otomatik olarak dağıtım oluşturmak için gereken uygun söz dizimine sahiptir. Bu komut, gerekli çoğaltma kümesini ve podları içeren bir dağıtım oluşturur. Ancak komut, bir tanım dosyası oluşturmaz. Dağıtım tanımı dosyalarıyla tüm dağıtımları yönetmek ve bir sürüm denetimi sistemi kullanarak değişiklikleri izlemek en iyi yöntemdir.

Dağıtma konuları

Kubernetes, bir küme için ağ ve depolamayı yapılandırma bakımından belirli gereksinimlere sahiptir. Bu iki boyutu yapılandırma yönteminiz, küme ağı üzerindeki uygulamaları kullanıma sunma ve verileri depolama hakkındaki kararlarınızı etkiler.

Örneğin, insansız hava aracı izleme uygulamasındaki hizmetlerin her biri kullanıcı erişimi, işlemler arası ağ erişimi ve veri depolama için belirli gereksinimlere sahiptir. Şimdi kubernetes kümesinin bu yönlerine ve uygulamaların dağıtımını nasıl etkilediğine göz atın.

Kubernetes ağ

Bir kontrol düzlemi ve iki düğüm içeren bir kümeniz olduğunu varsayalım. Kubernetes’e düğümler eklediğinizde, bir iç özel ağ aralığından her düğüme otomatik olarak bir IP adresi atanır. Örneğin, yerel ağ aralığınızın 192.192.168.1.0/24 olduğunu varsayalım.

Diagram of nodes with assigned IP addresses in a cluster.

Dağıttığınız her poda, IP adreslerinin bulunduğu havuzdan bir IP adresi atanır. Örneğin, yapılandırmanızın aşağıdaki görüntüde gösterildiği gibi 10.32.0.0/12 ağ aralığını kullandığını varsayalım.

Diagram of nodes and pods with assigned IP addresses in a cluster.

Varsayılan olarak podlar ve düğümler, farklı IP adres aralıklarını kullanarak birbirleriyle iletişim kuramaz.

Daha karmaşık durumlar için, podların geçici olduğunu aklınızda bulundurun. Podun IP adresi geçicidir ve yeni oluşturulan bir poda yeniden bağlanmak için kullanılamaz. Bu yapılandırma, uygulamanızın kendi iç bileşenleriyle nasıl iletişim kuracaklarını ve sizin ve hizmetlerin bu bileşenle dış etkileşim kurma şeklinizi etkiler.

Kubernetes, iletişimi basitleştirmek için şunlara olanak veren bir yöntemle ağı yapılandırmanızı bekler:

  • Podlar Ağ Adresi Çevirisi (NAT) olmadan düğümler arasında birbirleriyle iletişim kurabilir.
  • Düğümler tüm podlarla ve podlar tüm düğümlerle NAT olmadan iletişim kurabilir.
  • Bir düğümdeki aracılar tüm düğüm ve podlarla iletişim kurabilir.

Kubernetes, ağı yapılandırmak için yükleyebileceğiniz çeşitli ağ seçenekleri sunar. Örnekler arasında Antrea, Cisco Application Centric Infrastructure (ACI), Cilium, Flannel, Kubenet, VMware NSX-T ve Weave Net yer alır.

Bulut sağlayıcıları, kendi ağ çözümlerini de sağlar. Örneğin, Azure Kubernetes Service (AKS) Azure Sanal Ağ kapsayıcı ağ arabirimini (CNI), Kubenet’i, Flannel’ı, Cilium’ı ve Antrea’yı destekler.

Kubernetes hizmetleri

Kubernetes hizmeti, podlar için kararlı bir ağ sağlayan Kubernetes nesnesidir. Kubernetes hizmetleri uygulamanızın düğümleri, podları ve kullanıcıları arasında ve kümeye hem iç hem de dış iletişime olanak verir.

Kubernetes, oluşturma sırasında bir düğüm veya pod gibi bir hizmet ve IP adresi atar. Bu adresler bir hizmet kümesinin IP aralığından atanır; örneğin, 10.96.0.0/12. Ayrıca hizmete, hizmetin adı temel alınarak bir DNS adı ve IP bağlantı noktası atanır.

İnsansız hava aracı izleme uygulamasında ağ iletişimi aşağıdaki gibidir:

  • Web sitesine ve RESTful API’ye küme dışındaki kullanıcılar erişebilir.

  • Bellek içi önbellek ve ileti kuyruğu hizmetlerine sırasıyla ön uç ve RESTful API erişebilir, ancak dış kullanıcılar erişemez.

  • İleti kuyruğuna veri işleme hizmetinin erişmesi gerekir, ancak dış kullanıcılar erişemez.

  • NoSQL veritabanına bellek içi önbellek ve veri işleme hizmetinin erişmesi gerekir, ancak dış kullanıcılar erişemez.

Bu senaryoları desteklemek için, uygulamanızın bileşenlerini kullanıma sunmak üzere üç tür hizmet yapılandırabilirsiniz.

Hizmet Açıklama
ClusterIP Hizmeti küme içindeki bir hizmet kümesine kullanılabilir hale getiren, bir hizmete atanmış adres. Örneğin, uygulamanızın ön uç ve arka uç bileşenleri arasındaki iletişim.
NodePort Kubernetes denetim düzleminin hizmete atamış olduğu 30000 ile 32767 arasındaki düğüm bağlantı noktası; örneğin, kümelerde 192.169.1.1101. Daha sonra hizmeti, kullanıma sunmak istediğiniz pod üzerindeki bir hedef bağlantı noktasıyla yapılandırırsınız. Örneğin, ön uçlardan birinde çalışan pod üzerindeki bağlantı noktası 80’i yapılandırın. Artık bir düğüm IP ve bağlantı noktası adresi üzerinden ön uca erişebilirsiniz.
LoadBalancer Uygulamanızı çalıştıran düğümler arasında yük dağıtımına ve podun genel ağ erişiminde kullanıma sunulmasına olanak veren yük dengeleyici. Yük dengeleyicileri genellikle bulut sağlayıcıları kullandığınızda yapılandırırsınız. Bu durumda, dış yük dengeleyiciden gelen trafik, uygulamanızı çalıştıran podlara yönlendirilir.

İnsansız hava aracı izleme uygulamasında, bir LoadBalancer kullanarak izleme web sitesini ve RESTful API'sini ve clusterIP kullanarak veri işleme hizmetini kullanıma sunma kararı vekleyebilirsiniz.

Podları gruplandırma

Podları IP adresine göre yönetmek pratik bir yöntem değildir. Denetleyiciler tarafından yeniden oluşturulduklarından ve siz belirli sayıda pod çalıştırıyor olabileceğinizden, pod IP adresleri değişir.

Diagram of a service with selector labels.

Hizmet nesnesi, seçici etiketlerini kullanarak kümenizdeki belirli podları hedefleyip yönetmenize olanak verir. Hizmet tanımındaki bir seçici etiketini, podun tanıtım dosyasında tanımlanan pod etiketiyle eşleşecek şekilde ayarlarsınız.

Örneğin, çalışan çok sayıda podunuz olduğunu varsayalım. Bu podların yalnızca birkaç tanesi ön uç podlardır ve yalnızca ön uç podlarını hedefleyen bir LoadBalancer hizmeti ayarlamak istiyorsunuz. Hizmetinizi, pod etiketine hizmetin tanım dosyasındaki seçici değeri olarak başvurarak hizmetinizi bu podları kullanıma sunması için uygulayabilirsiniz. Hizmet yalnızca etiketle eşleşen podları gruplandırıyor. Bir pod kaldırılıp yeniden oluşturulursa yeni pod eşleşme etiketi üzerinden hizmet grubuna otomatik olarak eklenir.

Kubernetes depolaması

Kubernetes, Docker kullanırken karşılaştığınız aynı depolama birimi kavramını kullanır. Docker birimleri Kubernetes birimlerinden daha az yönetilir çünkü Docker birim ömrü yönetilmiyor. Kubernetes biriminin yaşam süresi, podun yaşam süresiyle eşleşen açık bir yaşam süresidir. Bu yaşam süresi eşleşmesi, birimin podda çalışan kapsayıcılardan daha uzun süre kullanılması anlamına gelir. Ancak pod kaldırılırsa birim de kaldırılır.

Diagram of a service with selector labels again.

Kubernetes, PersistentVolumes kullanımıyla kalıcı depolama sağlama seçenekleri sunar. Ayrıca, PersistentVolumeClaims kullanarak podlar için belirli depolama alanları isteyebilirsiniz.

İleti kuyrukları ve veritabanları gibi kalıcı depolama gereken uygulama bileşenlerini dağıtırken, bu iki seçeneği de göz önünde bulundurun.

Bulut tümleştirmesi konuları

Kubernetes, buluta özel uygulamanızda kullanmanız gereken teknoloji yığınıyla ilgili bir koşul öne sürmez. Azure gibi bir bulut ortamında, Kubernetes kümesi dışındaki çeşitli hizmetleri kullanabilirsiniz.

Hatırlayacağınız üzere Kubernetes şu hizmetleri sağlamaz:

  • Ara yazılım
  • Veri işleme çerçeveleri
  • Veritabanları
  • Önbellekler
  • Küme depolama sistemleri

Bu insansız hava aracı izleme çözümünde ara yazılım işlevselliği sağlayan üç hizmet vardır: NoSQL veritabanı, bellek içi önbellek hizmeti ve ileti kuyruğu. NoSQL çözümü için MongoDB Atlas'ı, bellek içi önbelleği yönetmek için Redis'i ve ileti kuyruğu gereksinimlerinize bağlı olarak RabbitMQ veya Kafka'yı seçebilirsiniz.

Azure gibi bir bulut ortamı kullanırken, Kubernetes kümesi dışındaki hizmetleri kullanmak en iyi yöntemdir. Bu karar, kümenin yapılandırmasını ve yönetimini basitleştirebilir. Örneğin, bellek içi önbelleğe alma hizmetleri için Redis için Azure Cache, ileti kuyruğu için Azure Service Bus mesajlaşması ve NoSQL veritabanı için Azure Cosmos DB’yi kullanabilirsiniz.