Kubernetes'te Uygulamalar Nasıl Dağıtılır
Yayınlanan: 2022-11-09Kubernetes, bir ana bilgisayar veya düğüm kümesinde uygulama kapsayıcılarını dağıtmak, ölçeklendirmek ve çalıştırmak için en popüler otomasyon platformlarından biridir.
Bu makale, Kubernetes'teki merkezi nesnelerden birini tartışacaktır: dağıtım. Amaç, davranışını ve nasıl oluşturulacağını, güncelleneceğini ve silineceğini anlamaktır.
Dağıtım nedir?
Dağıtım, Pod'ları başlatmak için kullanılan nesnelerden biridir. Kubernetes en iyi uygulamaları, durum bilgisi olmayan uygulamalar için dağıtımların kullanımını teşvik eder. Dağıtım olmadan birden çok Bölmeyi manuel olarak oluşturmanız, güncellemeniz ve silmeniz gerekir; bu da birçok Bölme için sıkıcı ve olanaksız olacaktır.
Bir dağıtım, YAML'de yalnızca Pod'ları oluşturmakla kalmayıp aynı zamanda bunların güncel ve çalışır durumda olmasını sağlayan tek bir nesne bildirir. Ayrıca Kubernetes'te bir dağıtım kullanarak uygulamalarınızı kolayca otomatik olarak ölçeklendirebilirsiniz. Bu nedenle, uygulamalarınızın Pod'lardaki sürümlerini ölçeklendirmek, dağıtmak ve geri almak için bir dağıtım kullanılır.
Dağıtım ayrıca Kubernetes'e bir Pod'un kaç kopyasını çalıştırmak istediğimizi söyler ve gerisini Kubernetes halleder. İlişkili denetleyici, bir dağıtım oluştururken yapılandırmanızdan bir ReplicaSet oluşturacaktır. ReplicaSet ile ilişkili denetleyici, ReplicaSet yapılandırmasından bir dizi Pod oluşturacaktır.
Doğrudan bir ReplicaSet oluşturmak yerine bir dağıtım kullanmanın avantajları şunlardır:
- Nesnenin geçmişe dönüştürülmesi: nesnedeki her değişiklik ("uygulama" veya "düzenleme" yoluyla) önceki sürümün bir yedeğini oluşturacaktır.
- Devreye alma ve geri alma yönetimi: Bir önceki noktayla bağlantılı olarak bir yapılandırmaya geri dönebilirsiniz.
Dağıtım Oluşturma
Kubernetes dağıtımı oluşturmak için kullanabileceğimiz iki yöntem vardır:
Zorunlu Yöntem
Kubernetes API'leri, yapılandırma dosyaları veya YAML biçimli bildirimler gerektirmeden daha doğrudan ve zorunlu bir yaklaşıma olanak tanır. Bu yaklaşımda tek yapmamız gereken ne yapılmasını istediğimizi söylemektir ve Kubernetes beklenen sonucu elde etmek için ne yapılması gerektiğini tanımlama sorumluluğunu üstlenecektir.
Zorunlu yöntemi kullanmak için aşağıdaki komutu kullanmanız yeterlidir:
kubectl create deployment nginx-deployment --image nginx --port=80
Bildirim Yöntemi
Bu yöntemde her şeyi bildirmeniz gerekir ve bu kodu kullandığınızda Kubernetes sadece tanımlarınızı okur ve aynen sunulduğu veya bildirildiği gibi oluşturur.
Bildirime dayalı dağıtımı kullanmak için bir YAML dosyası oluşturmanız gerekir.
new_deployment.yaml
adıyla dağıtım için YAML dosyası:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: #Specifies the number of Pod Copies replicas: 3 #Selects the Pod to be managed by the deployment selector: #Matches the defined labels matchLabels: deploy: example template: metadata: #Specifies the labels on the Pod. labels: deploy: example spec: containers: - name: nginx image: nginx:1.20.2
Bu YAML dosyasında Kubernetes API sürümünü, oluşturduğunuz nesnenin türünü ve dağıtımın adını tanımladıktan sonra spec bölümü bulunmaktadır. Bu bölümde, önce dağıtımın etkin tutması gereken Pod örneklerinin sayısını belirten çoğaltma anahtarını tanımlarsınız.
Dağıtımdaki Pod'ları tanımlamak için bir seçici etiket kullanın. Bunun için, bu etiketlerle eşleşen tüm bölmelerin dağıtımda gruplandırıldığını söyleyen konuşlandırma etiketini kullanabilirsiniz.
Bundan sonra, dağıtım belirtiminizde bir Pod modelinizin olduğu şablon nesnesine sahip olursunuz. Dağıtım, Kapsüller oluşturduğunda, bunları bu şablonu kullanarak oluşturur. Normal bir bölmenin özellikleri şablon anahtarının altında bulunabilir.
Bu dağıtımla, etiketli Nginx görüntüleri Pod'lara dağıtılacak. Üstelik bu noktada da dikkatli olmalısınız ve Pod, Kubernetes'teki ölçeklenebilirlik birimidir, bu yüzden aynı Pod'a birkaç kap koyarsanız kullanmak istediğiniz deseni düşünmelisiniz.
Ardından, new_deployment.yaml
Yaml dosyasını uygulayın, aşağıdaki komutu kullanın:
kubectl apply -f new_deployment.yaml
Birkaç saniye sonra, aşağıdakileri kullanarak dağıtım durumunu alabilirsiniz:
kubectl get all

Dağıtımı Al ve Güncelle
Oluşturduğunuz Pod'lara, dağıtıma ve ayrıca bir Replicaset'e sahip olduğunuzu unutmayın. Dolayısıyla bir dağıtım her zaman bir Replicaset oluşturur ve yönetir. Artık dağıtımı açıklamak için aşağıdaki komutu kullanabilirsiniz:

kubectl describe deployment nginx-deployment

Artık dağıtımın tam bir açıklamasına sahipsiniz. Bir güncelleme RollingUpdate olarak tanımlandığında bölmeleri oluşturmak/yeniden oluşturmak için kullanılan stratejiyi vurgular.
RollingUpdate stratejisi, bir uygulamanın bir sürümünün daha yeni bir sürüme düzenli bir şekilde taşınmasına izin verir. Kubernetes'te kullanılan varsayılan stratejidir.
Buna ek olarak, aşağıdaki stratejilerimiz de var:
- Yeniden Oluştur: Şu anda çalışan Pod örneklerini sonlandırır ve bunları yeni sürümle 'yeniden oluşturur';
- Mavi/Yeşil: Bu strateji iki ayrı ama aynı ortam yaratır. Mavi ortamda uygulama olduğu gibi çalışır, yeşil ortamda ise uygulama gelecekte olacağı gibi çalışır;
- Kanarya: Bir uygulama veya hizmetin artımlı sürümüne bir kullanıcı alt kümesinin dahil olduğu bir dağıtım stratejisi.
"Yuvarlanan güncelleme"yi seçerseniz, davranışını istenen kopya sayısıyla ilgili olarak yapılandırabilirsiniz.
-
maxSurge
, şu anda yapılandırılmış kopya sayısına ek olarak kaç Pod oluşturabileceğini (yüzde veya mutlak olarak) belirtmenize olanak tanır. -
maxUnavailable
, yapılandırılan replikaların sayısına bağlı olarak, güncelleme sırasında kaç Pod'un "kullanılamaz" olabileceğini (yüzde veya mutlak olarak) belirtmenize olanak tanır.
Uygulamanıza ve otomatik ölçekleyicinize bağlı olarak bu yapılandırmalar, QoS sağlamanıza veya dağıtımlarınızı hızlandırmanıza olanak tanır.
Ardından, Bölmeleri 10'a ölçeklendirmeniz ve Nginx görüntü etiketini en son olarak değiştirmeniz gerekir.
kubectl scale deployment nginx-deployment --replicas=10

Oluşturulan 5 kapsayıcımız olduğunu ve 10 Pod'dan 5'inin elimizde olduğunu unutmayın.
Birkaç saniye sonra aşağıdaki komutu kullanın:
kubectl get all
Burada tüm Pod'ların oluşturulduğunu ve konteynerlerin çalıştığını görebilirsiniz.

Dağıtımınızı Silme
Bir Kubernetes dağıtımını silmek için aşağıdaki komutları kullanabilirsiniz:
kubectl delete deploy nginx-deployment kubectl delete deploy new_deployment.yaml
Dümen: Dağıtımları Basitleştirin
Onlarca hatta yüzlerce Kubernetes kaynağı kullanan karmaşık bir uygulamayı dağıtmak istediğinizde, kubectl aracı uygun olmaz, bu nedenle Helm aracı geliştirilmiştir. Helm, kubectl üzerine kurulu ve uygulama dağıtımlarını basitleştiren Kubernetes için bir paket yöneticisidir.
Helm sözlüğünde, bir uygulamaya sürüm adı verilir. Bir grafikle, yani genel değişkenleri ve Kubernetes kaynaklarını açıklayan şablonları içeren YAML biçimindeki bir yapılandırma dosyaları koleksiyonuyla ilişkilidir.
Çözüm
Dağıtım, önemli bir Kubernetes nesnesidir. Büyük bir güç büyük bir sorumluluk gerektirdiğinden, onu yapılandırırken dikkatli olmalısınız veya beklenmedik davranışlarda bulunma riskini almalısınız. Dağıtım yapılandırmalarında daha ileri gitmek için Kubernetes belgelerine başvurabilirsiniz.
Ayrıca sıfırdan öğrenmek ve uzman olmak için en iyi Kubernetes eğitimlerinden bazılarını keşfedebilirsiniz.