Terraform ve Kubernetes Arasındaki Fark Nedir?

Terraform ve Kubernetes, hem uygulama dağıtımı hem de yaşam döngüsü yönetiminde kullanılan DevOps araçlarıdır. Ancak ikisinin de farklı işlevleri vardır. Terraform, geliştiricilerin bulut BT kaynaklarını otomatik olarak oluşturmak, sağlamak ve yönetmek için kullandıkları Kod Olarak Altyapı (IaC) aracıdır. Bununla, bulut altyapınızdan istediklerinize odaklanabilir ve kurulum için gerekli adımları otomatik olarak gerçekleştirebilirsiniz. Buna karşılık Kubernetes, container'larınızı uygun ölçekte yönetmenize yardımcı olan bir container düzenleme aracıdır. Kaynak tedariki, container zamanlaması, gruplama ve diğer koordinasyon görevlerini yönetir.

Kubernetes ve Terraform neden kullanılır?

Hem Kubernetes hem de Terraform, bulut uygulamalarının geniş ölçekte dağıtılmasına ve yönetilmesine yardımcı olur.

Terraform

Bir BT ortamı, genellikle birden fazla altyapı kaynağı, bileşen ve yapılandırma gerektirir. Aşağıdaki faktörler altyapı tedarikini daha da zorlaştırabilir:

  • Bir kuruluş içindeki farklı ekipler benzer altyapı gerektirse de küçük yapılandırma farklılıkları olabilir.
  • Altyapı, şirket içi ayarlar ve birden çok bulut sağlayıcısı arasında dağıtılabilir.
  • Uygulama değişiklikleri mevcut altyapıyı değiştirmenizi veya yükseltmenizi gerektirebilir.

Altyapı bileşenlerini teker teker manuel olarak temin edebilirsiniz. Ancak özellikle birçok karmaşık kaynağınız varsa hem zorlu hem de zaman alan bir işlem olabilir. Terraform, yönetilen altyapınızı kod kullanarak sağlamanıza ve desteklemenize yardımcı olarak bu zorluğu çözer. Kod olarak altyapı, yönetilen altyapıya tekrarlanabilirlik, şeffaflık ve verimlilik sağlar.

Kubernetes

Modern uygulamalar, her bir uygulama işlemini bir hizmet olarak çalıştıran bağımsız bileşenler olan mikro hizmetlerden oluşur. Her hizmet tek bir işlev gerçekleştirir ve API adı verilen iyi tanımlanmış bir arabirim üzerinden diğer hizmetlerle iletişim kurar. Container'lar, mikro hizmetleri farklı platformlarda dağıtılabilir programlar olarak paketler. Ancak bazı uygulamalar farklı sunucu örneklerinde binlerce mikro hizmete ölçeklendirilebilir. Çok container'lı uygulamalar, beraberinde yeni yönetim zorlukları getirir:

  • Birden fazla container'ı nasıl koordine etmelisiniz?
  • Container'ları nasıl planlamalısınız?
  • Container'ları nasıl gruplandırmalı ve kataloglamalısınız?

Kubernetes, iş yüklerinizi ölçeklendirebilmeniz ve birden fazla sunucu örneklerinde container dağıtımını yönetebilmeniz için operasyon karmaşıklıklarını yönetir. Container'lı uygulamalarınızı, operasyonel araçlarınızı değiştirmeden istediğiniz yerde çalıştırabilirsiniz.

Nasıl çalışırlar: Kubernetes ile Terraform karşılaştırması

Benzerliklere ve farklılıklara göz atmadan önce iki teknolojinin de temel kavramlarını kısaca inceleyelim.

Kubernetes

Kubernetes, bir sunucu örnekleri kümesini yöneterek ve container'ları kümede çalışacak şekilde planlayarak çalışır. İşlem kaynaklarını verimli bir şekilde yöneterek her container'ın kaynak gereksinimlerini karşılar. Container'lar pod adı verilen mantıksal gruplar halinde çalıştırılır ve bir veya daha fazla container'ı birlikte bir pod olarak çalıştırabilir ve ölçeklendirebilirsiniz.

Denetim düzlemi yazılımı gibi Kubernetes bileşenleri, pod'larınızın ne zaman ve nerede çalıştırılacağına karar verir, trafik yönlendirmesini yönetir ve kullanım veya tanımladığınız diğer ölçümlere göre pod'larınızı ölçeklendirir. Her pod'a, Kubernetes'in hizmetlerinizi birbirine ve harici trafiğe bağlamak için kullandığı bir IP adresi ve tek bir DNS adı verilir.

Terraform

Terraform, altyapı bileşenleriniz hakkında bilgi depolamak için durum dosyalarını kullanır. Durum dosyası, altyapı kodunu gerçek dünya kaynaklarına eşler. Terraform Core, iki Terraform dosyasını giriş değişkenleri olarak alan anahtar bileşendir:

  1. Mevcut kaynaklarınız veya geçerli durum dosyası.
  2. Bu kaynaklar veya yapılandırma dosyası için istediğiniz durum.

Terraform Core bu bilgileri kullanarak kaynakların karşılıklı bağımlılıklarını tanımlayan ve hangi kaynakları eklemesi, değiştirmesi veya kaldırması gerektiğini planlayan bir kaynak grafiği oluşturur. Siz planı onayladıktan sonra Core, altyapı bileşenlerini oluşturmak ve sağlamak için üçüncü taraf hizmetlerle iletişim kurar.

Terraform ve Kubernetes arasındaki benzerlikler nelerdir?

Her iki araç da nasıl çalıştıkları ve bunları nasıl kullandığınıza dair benzerlikler barındırır.

Bildirimsel yapılandırma

Her iki araç da kaynakları tanımlamak ve yönetmek için bildirimsel bir yaklaşım kullanır. Bildirimsel yapılandırma, bu duruma ulaşmak için adım adım talimatları belirtmeden bir sistemin veya uygulamanın istenen durumunu tanımlamaya ve yönetmeye yönelik bir yaklaşımdır. Gerçekleştirilecek işlemlerin tam sırasını tanımlamak yerine, bildirimsel yapılandırma, nihai sonuç veya sistemin istenen durumunu tanımlamaya odaklanır. Her iki araçla da sisteminizin neye benzemesi veya nasıl davranması gerektiğini ifade edebilirsiniz. Araçlar, bu duruma ulaşmak için gerekli adımları ele alır.

Otomatik değişiklik yönetimi

Hem Kubernetes hem de Terraform, altyapı değişikliği yönetimini otomatikleştirmek için mekanizmalar sağlar. Yapılandırmalarınızdaki karmaşık değişiklikleri otomatik olarak algılayabilir ve bağımlılıkları yönetirken bunları altyapınıza uygulayabilirler. Bulut ortamlarının tanımını kod yapıtları olarak ele alarak sürüm kontrolü, tekrarlanabilirlik ve iş birliği mekanizmalarını desteklerler. Değişiklikler, hataları azaltmak ve sürekli entegrasyon veya dağıtım hatlarını desteklemek için aşamalı olarak yönetilir.

Çoklu bulut dağıtımı

Terraform ve Kubernetes buluttan bağımsızdır ve birden fazla bulut sağlayıcısı destekler. Birden çok bulut platformunda veya şirket içi ortamlarda barındırılan altyapı kaynaklarını yönetebilir ve uygulamalarınız için en uygun kaynakları seçmenize olanak tanır.

Topluluk desteği

Hem Terraform hem de Kubernetes, aktif geliştirici toplulukları ile açık kaynaklardır. İşlevselliği hem geliştiren hem de diğer araçlar ve hizmetlerle entegrasyona izin veren çeşitli eklentiler, uzantılar veya entegrasyonlar sunarlar. Bu projelerin arkasındaki topluluklar belgeler, eğitimler ve destek sağlayarak geliştiricilerin bu araçları etkin bir şekilde benimsemelerine ve kullanmalarına yardımcı olur.

Temel farklılıklar: Kubernetes ile Terraform karşılaştırması

Terraform ve Kubernetes, hem bulut bilgi işlem hem de altyapı yönetimi içinde farklı amaç ve kapsamları olan iki farklı araçtır.

Altyapı tedariği

Hem Terraform hem de Kubernetes farklı seviyelerde altyapı sağlar. Terraform, bulut ortamınızdaki sanal makineler veya bulut örnekleri, ağ, depolama ve diğer bileşenler gibi kaynakları sağlar ve yönetir. Alternatif olarak, Kubernetes yalnızca container iş yükleri için altyapı sağlar.

Soyutlama düzeyi

Terraform, bulut ortamlarında kaynakları ve yapılandırmalarını yöneterek daha yüksek bir soyutlama düzeyinde çalışır. Kubernetes, bir küme içindeki container'ların dağıtımına ve yaşam döngüsüne odaklanarak daha düşük bir soyutlama düzeyinde çalışır. Yük dengeleme, ağ iletişimi, hizmet keşfi ve container'ların ölçeklendirilmesi için özellikler sağlar.

Yapılandırma dili

Terraform, Terraform v0.12 ve önceki sürümler için HashiCorp Yapılandırma Dili (HCL) veya JSON adı verilen etki alanına özgü bir dil kullanır. Geliştiriciler HCL'de bildirim yapılandırma dosyaları yazarlar. Buna karşılık, Kubernetes küme pod'ları, hizmetleri, dağıtımları ve diğer kaynakları tanımlamak ve yapılandırmak için YAML veya JSON tabanlı bildirim dosyalarını kullanırlar.

Hatadan kurtarma

Terraform otomatik arıza kurtarma sağlamaz. Terraform'un altyapıyı geri yükleyebilmesi için komut dosyaları yazmalı ve bu dosyaları arıza durumunda çalıştırmalısınız. Buna karşılık Kubernetes, uygulamanın istenen durumunu korumak için başarısız container'ları otomatik olarak algılayıp yeniden başlatabilir. Terraform ile hata kurtarmak için ek Terraform araçları kullanmanız gerekir.

Kullanım kolaylığı

Kullanım kolaylığı ve kullanmaya başlama açısından Terraform, yeni başlayanlar için Kubernetes'e kıyasla daha kolay olarak kabul edilir. Kurulum ile yükleme hem basittir hem de HCL öğrenmek ve çalışmak sezgiseldir. Birleştirilmiş bir iş akışı ile farklı ortamlardaki bulut altyapısını kolayca yönetebilirsiniz. 

Kubernetes kümelerinin nasıl dağıtılacağını anlamanız gerektiği için daha zorlu bir öğrenme eğrisi vardır. Birincil ve çalışan düğümlerini yapılandırmayı, gerekli bileşenleri kurmayı ve aralarında uygun iletişimi sağlamayı gerektirir. Kurulum süreci daha karmaşıktır ve sadece altyapı ortamlarından daha fazla bilgi gerektirir. Container'lı hale getirme ilkeleri, ağ iletişimi, yük dengeleme ve ölçeklendirme stratejileri hakkında bilgi gerektirir.

Ne zaman kullanılır: Terraform ile Kubernetes karşılaştırması

Terraform'u, talebi karşılamak üzere sık sık ölçeklendirilen veya azaltılan çok katmanlı uygulamalar için altyapıyı desteklemek amacıyla kullanabilirsiniz. Geliştiriciler, işletim ekibinden minimum destek alarak kodlama ortamlarını hızlı bir şekilde kurmak için önceden yapılandırılmış Terraform şablonlarını kullanır. Ağ mühendisleri, bulutta güvenlik duvarları ve yönlendirici gibi altyapıları dağıtmak için Terraform'u kullanır. Terraform'u yeni, hem tek kullanımlık ortamlar oluşturmak hem de dağıtmak için kullanabilir ve kullandıktan sonra bunları atabilirsiniz.

Container'lı uygulamaları uygun ölçekte yönetmek için Kubernetes kullanın. Örneğin, yerel geliştirme makinelerinden üretim dağıtımlarına sorunsuz bir şekilde geçmek veya şirket içinde çalışan dağıtımlarla tam uyumluluğu korurken AWS'de yüksek oranda kullanılabilir ve ölçeklenebilir Kubernetes kümelerini çalıştırmak için kullanabilirsiniz.

Farklılıkların özeti: Kubernetes ile Terraform karşılaştırması

 

Terraform

Kubernetes

Bu nedir?

Kod olarak altyapı aracı

Container düzenleme aracı

Neden kullanılıyor?

Yönetilen altyapıya tekrarlanabilirlik, şeffaflık ve verimlilik kazandırmak için

Container iş yüklerinizi ve çoklu container uygulamalarınızı ölçeklendirip işletim karmaşıklıklarını azaltmak için

Kaynak yönetimi

İşlem bulut sunucuları, depolama ve ağ iletişimi gibi tüm altyapı nesnelerini yönetir

Sunucu kaynaklarını yalnızca container iş yükleri için bir Kubernetes kümesi olarak yönetir

Soyutlama

Birden çok bulut ortamında altyapı provizyonunu özetler

Tek bir küme içinde sunucu sağlama işlemini özetler

Yapılandırma dili

HCL

YAML veya JSON

Hatadan kurtarma

Arıza kurtarmayı yönetmek için araçlar ve komut dosyaları kullanmanız gerekir

Otomatik ve kendi kendini yöneten

Kullanım kolaylığı

Daha küçük öğrenme eğrisi, başlamak daha kolay

Başlamadan önce container'lı hale getirme ilkeleri, ağ letişimi, yük dengeleme ve ölçeklendirme stratejileri hakkında bilgi gerektirir

AWS, Terraform ve Kubernetes gereksinimlerinize nasıl yardımcı olur?

AWS Terraform modülleri, AWS'de Terraform tarafından yönetilen kaynakların yapı taşlarıdır. Modüller açık kaynak lisansı altında yayınlanır ve AWS tarafından HashiCorp ile birlikte geliştirilir. Terraform yerine açık kaynaklı bir yazılım geliştirme çerçevesi olan AWS Bulut Geliştirme Seti'ni (AWS CDK) kullanmayı da düşünebilirsiniz. AWS CDK ile şunları yapabilirsiniz:

  • Terraform HCL durum dosyaları da dahil olmak üzere tanıdık programlama dilleriyle bulut uygulama kaynaklarınızı tanımlayabilirsiniz.
  • Çok fazla yeni şey öğrenmenizi gerekmediği için AWS'ye katılımınızı hızlandırabilirsiniz. 

Benzer şekilde Amazon Esnek Kubernetes Hizmeti (Amazon EKS), AWS Bulut'ta ve şirket içi veri merkezlerinde Kubernetes iş yüklerini çalıştırmaya yarayan, yönetilen bir Kubernetes hizmetidir. Amazon EKS, bulutta container'ları planlama, uygulama erişilebilirliğini yönetme, küme verilerini depolama ve diğer temel görevlerden sorumlu Kubernetes kaynaklarının erişilebilirliği ve ölçeklenebilirliğini otomatik olarak yönetir. 

Kubernetes yerine, AWS bulut platformunda container'lı uygulamaları dağıtmak, yönetmek ve ölçeklendirmek için tam olarak yönetilen bir container düzenleme hizmeti olan Amazon Esnek Container Hizmeti'ni (Amazon ECS) de kullanabilirsiniz. Amazon ECS ile şunları yapabilirsiniz:

  • Başvurunuzu ve gerekli kaynakları açıklamak.
  • Diğer destekleyici AWS hizmetleri ile otomatik entegrasyonlarla uygulamanızı esnek bilgi işlem seçenekleriyle başlatmak, izlemek ve ölçeklendirmek. 
  • Özel ölçeklendirme ve kapasite kuralları oluşturma gibi sistem işlemlerini gerçekleştirmek ve uygulama günlükleri ile telemetriden verileri gözlemleyip sorgulamak.

Hemen bir hesap oluşturarak AWS'de Terraform ve Kubernetes kullanmaya başlayın.