Skip to content

Commit

Permalink
Add blog post and update gitignore
Browse files Browse the repository at this point in the history
  • Loading branch information
veyselkaraca committed Oct 27, 2023
1 parent b99690c commit b2e5776
Show file tree
Hide file tree
Showing 9 changed files with 316 additions and 57 deletions.
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
_site
.vscode
.sass-cache/
.jekyll-metadata
node_modules
/_site
2 changes: 0 additions & 2 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ group :jekyll_plugins do
gem "jekyll-mentions", "1.6.0"
gem "webrick"
end
platforms :mingw, :x64_mingw, :mswin, :jruby do
gem "tzinfo", "~> 1.2"
gem "tzinfo-data"
end

104 changes: 50 additions & 54 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -11,36 +11,33 @@ PATH
GEM
remote: https://rubygems.org/
specs:
activesupport (6.0.4)
activesupport (6.0.6.1)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
tzinfo (~> 1.1)
zeitwerk (~> 2.2, >= 2.2.2)
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
backports (3.21.0)
addressable (2.8.5)
public_suffix (>= 2.0.2, < 6.0)
colorator (1.1.0)
concurrent-ruby (1.1.9)
em-websocket (0.5.2)
concurrent-ruby (1.2.2)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0.6.0)
http_parser.rb (~> 0)
eventmachine (1.2.7)
eventmachine (1.2.7-x64-mingw32)
ffi (1.15.3)
ffi (1.15.3-x64-mingw32)
ffi (1.16.3)
forwardable-extended (2.6.0)
html-pipeline (2.14.0)
html-pipeline (2.14.3)
activesupport (>= 2)
nokogiri (>= 1.4)
http_parser.rb (0.6.0)
i18n (0.9.5)
http_parser.rb (0.8.0)
i18n (1.14.1)
concurrent-ruby (~> 1.0)
jekyll (3.9.1)
jekyll (3.9.3)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (~> 0.7)
i18n (>= 0.7, < 2)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 2.0)
kramdown (>= 1.17, < 3)
Expand All @@ -49,81 +46,80 @@ GEM
pathutil (~> 0.9)
rouge (>= 1.7, < 4)
safe_yaml (~> 1.0)
jekyll-admin (0.11.0)
jekyll-admin (0.11.1)
jekyll (>= 3.7, < 5.0)
sinatra (~> 1.4)
sinatra-contrib (~> 1.4)
jekyll-feed (0.15.1)
sinatra (>= 1.4)
sinatra-contrib (>= 1.4)
jekyll-feed (0.17.0)
jekyll (>= 3.7, < 5.0)
jekyll-mentions (1.6.0)
html-pipeline (~> 2.3)
jekyll (>= 3.7, < 5.0)
jekyll-paginate (1.1.0)
jekyll-sass-converter (1.5.2)
sass (~> 3.4)
jekyll-seo-tag (2.7.1)
jekyll-seo-tag (2.8.0)
jekyll (>= 3.8, < 5.0)
jekyll-sitemap (1.4.0)
jekyll (>= 3.7, < 5.0)
jekyll-watch (2.2.1)
listen (~> 3.0)
kramdown (2.3.1)
kramdown (2.3.2)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
liquid (4.0.3)
listen (3.6.0)
liquid (4.0.4)
listen (3.8.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.3.6)
mini_portile2 (2.5.3)
minitest (5.14.4)
mini_portile2 (2.8.5)
minitest (5.20.0)
multi_json (1.15.0)
nokogiri (1.11.7)
mini_portile2 (~> 2.5.0)
racc (~> 1.4)
nokogiri (1.11.7-x64-mingw32)
mustermann (3.0.0)
ruby2_keywords (~> 0.0.1)
nokogiri (1.15.4)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (4.0.6)
racc (1.5.2)
rack (1.6.13)
rack-protection (1.5.5)
rack
rack-test (1.1.0)
rack (>= 1.0, < 3)
public_suffix (5.0.3)
racc (1.7.1)
rack (2.2.8)
rack-protection (3.1.0)
rack (~> 2.2, >= 2.2.4)
rake (12.3.3)
rb-fsevent (0.11.0)
rb-fsevent (0.11.2)
rb-inotify (0.10.1)
ffi (~> 1.0)
rexml (3.2.5)
rouge (3.26.0)
rexml (3.2.6)
rouge (3.30.0)
ruby2_keywords (0.0.5)
safe_yaml (1.0.5)
sass (3.7.4)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
sinatra (1.4.8)
rack (~> 1.5)
rack-protection (~> 1.4)
tilt (>= 1.3, < 3)
sinatra-contrib (1.4.7)
backports (>= 2.0)
sinatra (3.1.0)
mustermann (~> 3.0)
rack (~> 2.2, >= 2.2.4)
rack-protection (= 3.1.0)
tilt (~> 2.0)
sinatra-contrib (3.1.0)
multi_json
rack-protection
rack-test
sinatra (~> 1.4.0)
tilt (>= 1.3, < 3)
mustermann (~> 3.0)
rack-protection (= 3.1.0)
sinatra (= 3.1.0)
tilt (~> 2.0)
thread_safe (0.3.6)
tilt (2.0.10)
tzinfo (1.2.9)
tilt (2.3.0)
tzinfo (1.2.11)
thread_safe (~> 0.1)
tzinfo-data (1.2021.1)
tzinfo-data (1.2023.3)
tzinfo (>= 1.0.0)
webrick (1.7.0)
zeitwerk (2.4.2)
webrick (1.8.1)
zeitwerk (2.6.12)

PLATFORMS
ruby
Expand Down
2 changes: 1 addition & 1 deletion _config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ share-links-active:

# How to display the link to your website in the footer
# Remove this if you don't want a link in the footer
# url-pretty: "localhost:4000/"
url-pretty: "veyselkaraca.com.tr/"

# Excerpt word length - Truncate the excerpt of each post on the feed page to the specified number of words
excerpt_length: 50
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
---
title: 'Docker Swarm vs. Kubernetes: Hangisi Daha İyi Bir Konteyner Orkestrasyon Çözümü?'
tags:
- DevOps
- Kubernetes
- Docker
thumbnail-img: assets/img/docker_swarm_vs_kubernetes.png
permalink: docker-swarm-vs-kubernetes-hangisi-daha-iyi-bir-konteyner-orkestrasyon-cozumu
---

Giriş:

Konteyner orkestrasyon çözümleri, günümüz uygulama dağıtımının temel taşları haline geldi. Ancak, Docker Swarm ve Kubernetes gibi farklı çözümler arasında bir seçim yapmak, bazen karmaşık bir iş olabilir. Bu makalede, Docker Swarm ve Kubernetes'i karşılaştırarak hangi senaryolarda hangi çözümün daha iyi olduğunu anlayacaksınız.
1. Docker Swarm Nedir?

Konteyner orkestrasyonu dünyasına ilk adımı atarken, Docker Swarm'ı anlamak iyi bir başlangıç noktası olabilir. Docker Swarm, Docker tarafından geliştirilen, konteyner uygulamalarınızı kolayca yönetmenizi ve dağıtmanızı sağlayan bir konteyner orkestrasyon aracıdır.


* Temel Kavramlar:

Docker Swarm, "Swarm" adını verilen bir grup Docker ana bilgisayarının oluşturulduğu bir yapı üzerinde çalışır. Bu Swarm, konteynerlarınızın dağıtımını, ölçeklenmesini ve yönetimini kolaylaştırır.
Swarm, yönetim düğümleri (manager nodes) ve çalışma düğümleri (worker nodes) olarak iki temel türde düğüme dayanır. Yönetim düğümleri, Swarm'ın kontrolünü sağlar ve iş yüklerini çalıştıran düğümlere yönlendirir. Çalışma düğümleri, uygulama konteynerlarının çalıştığı düğümlerdir.


* Kolay Kurulum ve Yönetim:

Docker Swarm, kurulumu ve yapılandırması oldukça basit olan bir araçtır. Bir Docker ana bilgisayarına Docker Swarm modunu etkinleştirerek veya Docker Compose kullanarak hızla bir Swarm kümesi oluşturabilirsiniz.
Docker Swarm, Docker API'yi kullanır ve Docker komutlarına benzer bir şekilde kullanılır, bu da Docker kullanıcıları için öğrenmesi kolaydır.
```shell
docker swarm init
```

* Docker Compose ile Kolay Yönetim:
Docker Compose kullanarak, Swarm servislerini tanımlayan bir YAML dosyası oluşturabilir ve birkaç komutla tüm Swarm'ı yönetebilirsiniz. Örneğin;
``` yaml
version: '3'
services:
web:
image: my-web-app:latest
ports:
- "80:80"
database:
image: my-database:latest
environment:
MYSQL_ROOT_PASSWORD: examplepass
```
Yukarıdaki Docker Compose dosyası, iki servisi tanımlar: "web" ve "database". "web" servisi, özel bir web uygulaması görüntüsünü kullanır ve port 80 üzerinden erişilebilir hale getirir. "database" servisi, bir MySQL veritabanı sunucusunu temsil eder ve kök parolasını ayarlar.
Bu Docker Compose dosyasını kullanarak, Swarm kümenizde bu servisleri başlatabilir ve yönetebilirsiniz. Aşağıdaki komutu kullanarak Swarm üzerinde servisleri başlatabilirsiniz:
```shell
docker stack deploy -c docker-compose.yml app
```


* Yüksek Erişilebilirlik:

Docker Swarm, yüksek erişilebilirlik sağlamak için tasarlanmıştır. Swarm'daki yönetim düğümleri arasında birincil ve ikincil roller atanabilir, bu da birincil düğümün arızalanması durumunda otomatik olarak ikincil düğümün devralmasını sağlar.


* Otomatik Yük Dengeleme:

Swarm, gelen trafik yükünü otomatik olarak düğümler arasında dengeler. Bu, uygulamanızın sürekli olarak kullanılabilir olmasını sağlar.


* Hizmet Yönetimi:

Docker Swarm, "servisler" olarak adlandırılan uygulama bileşenlerini yönetmek için kullanılır. Bu servisler, belirli sayıda çalışma düğümünde çalıştırılabilir ve gerektiğinde otomatik olarak yeniden başlatılabilir. Örneğin;
```yaml
version: '3'
services:
web:
image: e-commerce-web:latest
ports:
- "80:80"
payment:
image: payment-service:latest
product:
image: product-service:latest
database:
image: e-commerce-db:latest
environment:
MYSQL_ROOT_PASSWORD: mysecretpassword
```
Yukarıdaki örnek Docker Compose dosyası, bir e-ticaret uygulamasını oluşturur. "web" servisi, kullanıcıların uygulamaya erişebileceği bir web sunucusunu temsil eder. "payment" ve "product" servisleri, ödeme işlemleri ve ürün hizmeti gibi işlevleri yerine getirir. "database" servisi ise veritabanını temsil eder.


2. Kubernetes Nedir?

Kubernetes, konteyner orkestrasyonunun açık kaynaklı ve popüler bir platformudur. Google tarafından geliştirilen Kubernetes, karmaşık uygulamaları kolayca dağıtmak, ölçeklemek ve yönetmek için kullanılır. İşte Kubernetes'in temel kavramları ve özellikleri:

* Temel Kavramlar:

Pods (Kapsüller): Kubernetes'te çalışan en küçük ünite pod'dur. Bir pod, bir veya birden fazla konteyneri içerebilir ve bu konteynerler aynı ağ ve depolama kaynaklarını paylaşırlar.

Node (Düğüm): Kubernetes kümesinin fiziksel veya sanal makineleri olarak düşünülebilir. Her bir düğüm, Kubernetes tarafından yönetilen konteynerlerin çalıştığı bir sunucuyu temsil eder.

* Dağıtım ve Yönetim:

Kubernetes, uygulamalarınızın yüksek erişilebilirlik ve hızlı ölçeklenme ile çalışmasını sağlar. Konteyner uygulamalarınızı otomatik olarak düğümler arasında dağıtabilir ve isteğe bağlı olarak yeni konteynerler ekleyebilir veya kaldırabilir.

Kaynak tahsisi ve otomatik ölçeklendirme, Kubernetes'in en önemli özelliklerinden biridir. Uygulamanızın taleplerine göre kaynakları dinamik olarak ayarlar.

* Servisler ve Yük Dengeleme:

Kubernetes, servisler adı verilen mantıksal grupları kullanarak konteynerlere erişimi düzenler. Bu, örneğin, bir web uygulamasının ön yüzeyi ve veritabanı hizmeti gibi farklı parçalarını bir araya getirmek için kullanılır.

Servisler, uygulamanızın sürekli çalışabilirliğini sağlamak için yük dengelemesi yapar. Trafik, servisler aracılığıyla otomatik olarak konteynerlere yönlendirilir.
Örneğin, "web-app-service" adlı bir servis, "web-app" adlı bir Deployment ile ilişkilendirilebilir:

```yaml
apiVersion: v1
kind: Service
metadata:
name: web-app-service
spec:
selector:
app: web-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
```


* Geniş Topluluk ve Ekosistem:

Kubernetes, büyük bir açık kaynak topluluğu tarafından desteklenir ve sürekli olarak geliştirilir. Bu, yeni özelliklerin ve güncellemelerin hızla uygulanmasını sağlar.

Kubernetes ekosistemi, bir dizi eklenti ve araç içerir. Bu araçlar, depolama yönetimi, ağ politikaları, izleme, güvenlik ve daha fazlası gibi ek işlevselliği sağlamak için kullanılabilir.

Bölüm 3: Docker Swarm vs. Kubernetes Karşılaştırması



| Özellikler | Docker Swarm | Kubernetes |
|---------------------------|-----------------------|-----------------------|
| Kolaylık ve Basitlik | Kolay kurulum ve yapılandırma. Docker ile benzer komutlar. | Daha karmaşık yapı ve daha fazla yapılandırma. |
| Ölçeklenebilirlik | Küçük ve orta ölçekli projeler için uygundur ancak büyük projelerde sınırlamaları olabilir. | Küçükten büyüğe her tür projeyi kolayca ölçekler. |
| Topluluk Desteği | Küçük topluluğa sahip ve daha az eklenti. | Geniş ve aktif bir topluluğa sahip.|
| Karmaşıklık | Basit projeler için uygundur, ancak büyük projelerde bazı eksiklikleri olabilir | Büyük ve karmaşık projeler için tasarlanmış . |
| İşbirliği ve Entegrasyon | Docker ile entegrasyon avantajlıdır. Docker Compose dosyalarını kullanarak kolayca yönetilebilir. | Birçok entegrasyon ve eklenti sunar. Özellikle büyük ölçekli projeler için işbirliği ve entegrasyon sağlar. |
|Tavisye Edilen Node Sayısı | 7 | 5000|



4. Hangi Senaryoda Hangi Çözümü Seçmelisiniz?

Docker Swarm ve Kubernetes, konteyner orkestrasyon dünyasında farklı güçlü yönler sunar. İşte hangi senaryoda hangi çözümü tercih etmeniz gerektiğini belirlemek için dikkate almanız gereken faktörler:

* Küçük ve Basit Projeler:

Docker Swarm: Küçük bloglar, kişisel projeler veya küçük işletmeler için Docker Swarm ideal bir çözümdür. Basit yapılandırma ve kolay kullanım, bu tür projelerde avantaj sağlar.


* Büyük ve Karmaşık Projeler:

Kubernetes: Büyük kurumsal projeler, büyük ölçekli e-ticaret siteleri veya karmaşık mikro servis tabanlı uygulamalar için Kubernetes daha uygundur. Ölçeklenebilirlik, karmaşıklık ve çoklu iş yükleri yönetimi için Kubernetes önemli avantajlar sunar.


* Docker İle Uyum:

Docker Swarm: Docker teknolojileri ile derin bir entegrasyon istiyorsanız Docker Swarm tercih edilebilir. Docker Compose dosyalarını doğrudan kullanabilirsiniz.


* Büyük Topluluk ve Eklenti Desteği:

Kubernetes: Geniş bir topluluk ve birçok üçüncü taraf eklentisi ile çalışmak istiyorsanız Kubernetes ideal bir seçenektir. Bu, projenizin büyümesine ve ihtiyaçlarınıza uygun özellikler eklemeye olanak tanır.


* Otomatik Ölçeklendirme ve Yük Dengeleme:

Kubernetes: Otomatik ölçeklendirme ve gelişmiş yük dengeleme özellikleri gerekiyorsa, Kubernetes bu ihtiyaçları karşılayabilir. Büyük trafiği etkili bir şekilde yönlendirmek için yararlıdır.


* Karmaşıklık ve Yapılandırma:

Docker Swarm: Projelerinizin karmaşıklığı düşükse ve hızlı bir şekilde başlamak istiyorsanız, Docker Swarm daha az yapılandırma ve karmaşıklık sunar.


Sonuç

Docker Swarm ve Kubernetes, konteyner orkestrasyonu için iki önde gelen platformdur ve her biri kendi avantajlarına sahiptir. Hangi platformu seçeceğiniz, projenizin ihtiyaçlarına ve büyüklüğüne bağlıdır. İşte bu makalede ele aldığımız bazı anahtar noktalar:

Docker Swarm, küçük ve basit projeler için idealdir. Docker ile entegrasyonu kolaydır ve kullanımı basittir. Küçük uygulamalar, kişisel projeler ve basit bloglar için Docker Swarm hızlı bir başlangıç yapmanın mükemmel bir yoludur.

Kubernetes, büyük ve karmaşık projeleri destekler. Büyük kurumsal uygulamalar, büyük ölçekli e-ticaret siteleri ve çoklu iş yükleri yönetimi gereken projeler için uygundur. Geniş topluluk ve üçüncü taraf eklentileri sayesinde çok yönlü bir platform sunar.


Son Düşünceler:
Projelerinizi ve ihtiyaçlarınızı değerlendirmek, hangi çözümün sizin için daha uygun olduğunu belirlemek için önemlidir.Her iki platform da konteyner orkestrasyonunda büyük adımlar atmıştır ve ihtiyaçlarınıza göre seçiminizi yaparken bu faktörleri göz önünde bulundurmanızı öneririm.

Kaynaklar;

[Docker Swarm Official Guide](https://docs.docker.com/engine/swarm/)

[Docker Swarm Nodes](https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/)

[Kubernetes Overview](https://kubernetes.io/docs/concepts/overview/)

[Kubernetes and Docker freeCodeCamp](https://www.freecodecamp.org/news/kubernetes-vs-docker-swarm-what-is-the-difference/)
Loading

0 comments on commit b2e5776

Please sign in to comment.