Rancher ve Docker Machine ile Ubuntu 16.04 Üzerinde Çok Düğümlü Dağıtımları Yönetmek
Çok düğümlü (multi-node) dağıtımlar, modern uygulama mimarilerinin temel taşlarından biridir. Yüksek erişilebilirlik, ölçeklenebilirlik ve hata toleransı sağlamak için uygulamaların birden fazla sunucuya yayılması kritik öneme sahiptir. Ancak bu tür ortamları yönetmek, altyapı kurulumundan uygulama dağıtımına, izlemeden bakıma kadar birçok karmaşık adımı içerir. Geleneksel yöntemlerle bu süreçleri otomatikleştirmek ve yönetmek zaman alıcı ve hataya açık olabilir. İşte bu noktada konteyner teknolojileri ve orkestrasyon araçları devreye girer.
Bu makale, Rancher ve Docker Machine kombinasyonunu kullanarak Ubuntu 16.04 işletim sistemi üzerinde çok düğümlü bir Docker ortamını nasıl kuracağınızı ve yöneteceğinizi adım adım açıklayacaktır. Docker Machine, sanal veya fiziksel makinelerde Docker Engine kurulu hostlar oluşturmayı kolaylaştırırken, Rancher bu hostlar üzerinde konteyner tabanlı uygulamaların dağıtımını, yönetimini ve ölçeklendirilmesini sağlayan güçlü bir konteyner yönetim platformudur. Ubuntu 16.04, uzun süreli destek (LTS) sunan stabil bir işletim sistemi olduğu için bu tür altyapı kurulumları için sıklıkla tercih edilmiştir. Bu rehber sayesinde, karmaşık görünen çok düğümlü dağıtım süreçlerini basitleştirerek kendi ölçeklenebilir ve yönetilebilir konteyner altyapınızı kurabileceksiniz.
1. Temel Kavramlar ve Önkoşullar
Çok düğümlü bir konteyner altyapısı oluşturmaya başlamadan önce, kullanacağımız temel araçları ve kavramları anlamak önemlidir.
1.1 Konteynerleşme ve Docker
Konteynerleşme, bir uygulamayı ve tüm bağımlılıklarını (kütüphaneler, ayarlar vb.) izole edilmiş bir ortamda paketleme yöntemidir. Bu izolasyon sayesinde uygulama, çalıştığı ortamdan bağımsız hale gelir ve her yerde tutarlı bir şekilde çalışır. Docker, konteyner teknolojisinin en popüler ve yaygın kullanılan platformudur. Docker ile uygulamalar, hafif, taşınabilir ve kendi kendine yeten birimler olan “konteynerler” içinde paketlenir. Bu konteynerler, sanal makinelerden daha az kaynak tüketir ve daha hızlı başlatılır. Çok düğümlü bir ortamda, birden fazla Docker hostu üzerinde binlerce konteyner çalıştırılabilir.
1.2 Docker Machine
Docker Machine, Docker Engine kurulu hostlar oluşturmak için kullanılan bir araçtır. Yerel sanallaştırma platformları (VirtualBox, VMware) veya bulut sağlayıcıları (AWS, DigitalOcean, Azure) üzerinde kolayca Docker hostları sağlamanıza olanak tanır. Docker Machine’in temel amacı, farklı altyapılarda tutarlı bir şekilde Docker ortamları kurma sürecini otomatikleştirmektir. Bu sayede, elle kurulum zahmetinden kurtulur ve hızlıca çok düğümlü bir ortam için gerekli hostları hazırlayabilirsiniz. Makinemiz üzerinde Rancher için kullanacağımız hostları bu araçla oluşturacağız.
1.3 Rancher
Rancher, konteynerlerin dağıtımını, yönetimini ve ölçeklendirilmesini basitleştiren açık kaynaklı bir konteyner yönetim platformudur. Rancher, Kubernetes, Docker Swarm ve Cattle gibi çeşitli konteyner orkestrasyon motorlarını destekler. Kullanıcı dostu bir web arayüzü (UI) sunarak, geliştiricilerin ve operasyon ekiplerinin konteyner altyapılarını daha verimli bir şekilde yönetmelerini sağlar. Rancher’ın temel bileşenleri şunlardır:
* Rancher Server: Rancher platformunun kalbi olup, tüm yönetim operasyonlarını gerçekleştirir, UI’ı sunar ve API isteklerini işler.
* Rancher Agent: Yönetilecek her hosta kurulan hafif bir bileşendir. Rancher Server ile iletişim kurar ve host üzerindeki Docker konteynerlerini yönetir.
Rancher, yüksek erişilebilirlik, izleme, loglama, depolama entegrasyonları ve güvenlik gibi birçok gelişmiş özellik sunar.
1.4 Ubuntu 16.04 LTS
Ubuntu 16.04 LTS (Xenial Xerus), Nisan 2016’da piyasaya sürülen ve uzun süreli destek (Long Term Support) sunan bir Linux dağıtımıdır. Geniş bir kullanıcı tabanına ve aktif bir topluluğa sahip olması, kararlılığı ve kapsamlı paket depoları nedeniyle sunucu ortamlarında yaygın olarak kullanılmaktadır. Bu makalede, Rancher Server’ı çalıştırmak ve Docker Machine ile oluşturacağımız hostlar için temel işletim sistemi olarak Ubuntu 16.04’ü kullanacağız. Bu versiyon, belirtilen araçların sorunsuz çalışması için gerekli tüm bileşenleri desteklemektedir.
1.5 Önkoşullar
Bu rehberi takip edebilmek için aşağıdaki önkoşullara sahip olmanız gerekmektedir:
* Ana Makine: Ubuntu 16.04 veya daha yeni bir Linux dağıtımı (veya macOS) çalıştıran bir ana makineye (laptop/masaüstü) ihtiyacınız olacaktır. Bu makine üzerinde Docker, Docker Compose ve Docker Machine kurulu olacaktır.
* Docker: Ana makinenizde Docker Engine’in kurulu ve çalışır durumda olması.
* Docker Compose: Rancher Server’ı çalıştırmak için Docker Compose’a ihtiyacımız olacak.
* Docker Machine: Hostları oluşturmak için Docker Machine kurulu olmalı.
* Sanal Makine Sağlayıcısı: Docker Machine ile yerel olarak host oluşturmak için VirtualBox gibi bir sanallaştırma yazılımı kurulu olmalıdır. Bulut sağlayıcıları kullanacaksanız, ilgili API erişim anahtarlarınızın olması gerekir.
* İnternet Erişimi: Tüm kurulum ve imaj indirme işlemleri için internet bağlantısı gereklidir.
* Yeterli Kaynak: Oluşturacağınız sanal makineler için ana makinenizde yeterli RAM, CPU ve disk alanı bulunmalıdır. Her bir Rancher düğümü için en az 2GB RAM ve 1 CPU çekirdeği önerilir.
2. Geliştirme Ortamının Hazırlanması
Bu bölümde, ana makinemizde Docker, Docker Machine ve Rancher Server’ı kuracağız.
2.1 Docker, Docker Compose ve Docker Machine Kurulumu
Ubuntu 16.04 üzerinde Docker, Docker Compose ve Docker Machine kurulumu aşağıdaki adımlarla gerçekleştirilir:
1. Sistem Paketlerini Güncelleme:
sudo apt update
sudo apt upgrade -y
2. Gerekli Bağımlılıkları Kurma:
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
3. Docker GPG Anahtarını Ekleme:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4. Docker Stabil Deposu Ekleme:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
5. Docker Engine Kurulumu:
Depoları güncelledikten sonra Docker Engine’i kurun.
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
6. Kullanıcıyı Docker Grubuna Ekleme (İsteğe Bağlı ama Önerilir):
sudo kullanmadan Docker komutlarını çalıştırmak için kullanıcınızı docker grubuna ekleyin ve oturumu kapatıp tekrar açın veya yeniden başlatın.
sudo usermod -aG docker $USER
# Yeni grubun etkinleşmesi için oturumu kapatıp tekrar açın veya yeniden başlatın.
7. Docker Kurulumunu Doğrulama:
docker run hello-world
8. Docker Compose Kurulumu:
Docker Compose’un en son stabil sürümünü indirin. Sürüm numarasını kontrol etmek için [Docker Compose GitHub Releases](https://github.com/docker/compose/releases) sayfasını ziyaret edebilirsiniz.
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Kurulumu doğrulayın:
docker-compose --version
9. Docker Machine Kurulumu:
Docker Machine’in en son stabil sürümünü indirin. Sürüm numarasını kontrol etmek için [Docker Machine GitHub Releases](https://github.com/docker/machine/releases) sayfasını ziyaret edebilirsiniz.
base=https://github.com/docker/machine/releases/download/v0.16.2 && \
curl -L ${base}/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && \
sudo install /tmp/docker-machine /usr/local/bin/docker-machine
Kurulumu doğrulayın:
docker-machine --version
2.2 Rancher Server Kurulumu
Rancher Server’ı ana makinemizde bir Docker konteyneri olarak çalıştıracağız. Bu, Rancher Server’ın hızlı ve izole bir şekilde kurulmasını sağlar.
docker run -d --restart=unless-stopped -p 80:80 -p 443:443 --privileged rancher/rancher:stable
* -d: Konteyneri arka planda çalıştırır.
* --restart=unless-stopped: Konteyner durmadığı sürece otomatik olarak yeniden başlatılır.
* -p 80:80 -p 443:443: Rancher UI’a HTTP ve HTTPS üzerinden erişim sağlamak için portları eşleştirir.
* --privileged: Rancher Server’ın Docker soketine erişim gibi bazı özel ayrıcalıklara sahip olmasını sağlar. Bu, Rancher’ın Kubernetes kümelerini yönetmesi için gereklidir.
* rancher/rancher:stable: Rancher Server’ın stabil sürümünü kullanır.
Konteynerin başlatılması birkaç dakika sürebilir. Konteynerin durumunu kontrol etmek için:
docker ps
Rancher Server çalışmaya başladıktan sonra, web tarayıcınızdan ana makinenizin IP adresine veya localhost‘a (eğer yerel makineden erişiyorsanız) giderek Rancher UI’a erişebilirsiniz:
https://
İlk erişimde bir admin şifresi belirlemeniz istenecektir. Güçlü bir şifre belirledikten sonra Rancher UI’a giriş yapabilirsiniz.
3. Docker Machine ile Hostların Oluşturulması
Rancher kümemize ekleyeceğimiz hostları Docker Machine kullanarak oluşturacağız. Bu makalede VirtualBox’ı sanal makine sağlayıcısı olarak kullanacağız. Eğer farklı bir bulut sağlayıcı (AWS, DigitalOcean vb.) kullanacaksanız, docker-machine create komutundaki --driver parametresini ve ilgili bulut sağlayıcısının gerektirdiği ek parametreleri değiştirmeniz gerekecektir.
3.1 Sanal Makine Sağlayıcı Seçimi ve Yapılandırması
VirtualBox’ı kullanıyorsanız, ana makinenizde VirtualBox’ın kurulu olduğundan emin olun. VirtualBox’ın son sürümünü [resmi web sitesinden](https://www.virtualbox.org/wiki/Downloads) indirebilirsiniz.
3.2 Docker Machine ile Host Oluşturma Komutları
Şimdi Rancher kümemiz için iki adet host oluşturalım. Bu hostlar, daha sonra Rancher Agent’ı çalıştıracak ve Kubernetes düğümleri olarak işlev görecektir.
Her bir sanal makine için en az 2GB RAM ve 2 CPU çekirdeği atamak iyi bir başlangıçtır.
# İlk düğümü oluşturma
docker-machine create --driver virtualbox --virtualbox-memory "2048" --virtualbox-cpu-count "2" rancher-node-1
İkinci düğümü oluşturma
docker-machine create --driver virtualbox --virtualbox-memory "2048" --virtualbox-cpu-count "2" rancher-node-2
Bu komutlar, VirtualBox üzerinde rancher-node-1 ve rancher-node-2 adında iki sanal makine oluşturacak, her birine Docker Engine’i kuracak ve başlatacaktır.
Oluşturulan makineleri listelemek için:
docker-machine ls
Çıktı, makinelerin adlarını, sürücülerini, durumlarını ve IP adreslerini gösterecektir. Her makinenin STATE sütununun Running olduğundan emin olun.
Her bir makineye SSH ile bağlanarak temel sistem güncellemelerini yapmanız önerilir:
docker-machine ssh rancher-node-1 "sudo apt update && sudo apt upgrade -y"
docker-machine ssh rancher-node-2 "sudo apt update && sudo apt upgrade -y"
Bu adımlar, hostlarımızın Rancher Agent’ı çalıştırmak ve Kubernetes bileşenlerini barındırmak için hazır olmasını sağlar.
4. Rancher’a Hostların Eklenmesi
Hostlarımız hazır olduğuna göre, bunları Rancher kümesine ekleyebiliriz. Rancher, bu hostları yöneterek üzerlerinde Kubernetes kümesi oluşturacak ve konteyner dağıtımlarımızı gerçekleştirecektir.
4.1 Rancher UI Üzerinden Host Ekleme İşlemi
1. Rancher UI’a Giriş: Web tarayıcınızdan Rancher UI’a erişin ve admin şifrenizle giriş yapın.
2. Yeni Küme Oluşturma: Sol üst köşedeki menüden “Cluster Management” (Küme Yönetimi) veya “Clusters” (Kümeler) bölümüne gidin. “Create” (Oluştur) veya “Add Cluster” (Küme Ekle) düğmesine tıklayın.
3. Küme Sağlayıcı Seçimi: Açılan seçeneklerden “Custom” (Özel) seçeneğini seçin. Bu, mevcut hostlarımızı kullanarak bir Kubernetes kümesi oluşturacağımız anlamına gelir.
4. Küme Yapılandırması:
* Cluster Name: Kümenize bir isim verin, örneğin my-rancher-cluster.
* Kubernetes Version: Mevcut stabil bir Kubernetes sürümünü seçin (Rancher’ın önerdiği sürümü kullanmak genellikle en iyisidir).
* Network Provider: Kubernetes kümenizin ağ iletişimini sağlayacak CNI (Container Network Interface) eklentisini seçin. Flannel veya Calico yaygın seçeneklerdir. Basit kurulumlar için Flannel genellikle yeterlidir.
* Diğer varsayılan ayarları şimdilik değiştirmeden bırakabilirsiniz.
5. Host Seçenekleri: “Next” (İleri) düğmesine tıkladıktan sonra, Rancher size hostları kümenize eklemek için bir komut verecektir. Bu komut, her bir hostta çalıştırılması gereken docker run komutudur ve Rancher Agent’ı içerir.
* Node Roles (Düğüm Rolleri): Her düğüm için hangi rolleri atayacağınızı seçmeniz gerekir:
* etcd: Küme durumunu depolayan dağıtık bir anahtar-değer deposu. Yüksek erişilebilirlik için en az 3 etcd düğümü önerilir.
* Control Plane: Kubernetes API sunucusu, zamanlayıcı ve kontrolör yöneticisini içerir. Kümenin beyni gibidir.
* Worker: Uygulama konteynerlerini çalıştıran düğümlerdir.
* Bizim kurulumumuzda, rancher-node-1 için etcd, Control Plane ve Worker rollerini, rancher-node-2 için ise sadece Worker rolünü seçebiliriz. Daha büyük kümelerde etcd ve control plane rollerini ayrı düğümlere atamak daha iyi bir uygulamadır.
* Rancher UI’da, seçtiğiniz roller için uygun docker run komutunu göreceksiniz. Bu komutu kopyalayın.
4.2 Rancher Agent’ın Hostlara Dağıtılması
Kopyaladığınız docker run komutunu her bir Docker Machine hostunda çalıştırmanız gerekmektedir.
1. İlk Düğüm (rancher-node-1) için Agent Kurulumu:
Önce rancher-node-1 ortamına geçiş yapın:
eval $(docker-machine env rancher-node-1)
Şimdi Rancher UI’dan kopyaladığınız docker run komutunu yapıştırın ve çalıştırın. Örneğin:
sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.x.x.x --server https:// --token --etcd --controlplane --worker
Not: Yukarıdaki komut bir örnektir. Rancher UI’dan alacağınız komut, Rancher Server IP’niz ve token’ınız ile birlikte daha uzun ve spesifik olacaktır.
2. İkinci Düğüm (rancher-node-2) için Agent Kurulumu:
Şimdi rancher-node-2 ortamına geçiş yapın:
eval $(docker-machine env rancher-node-2)
Rancher UI’da sadece Worker rolünü seçtiğinizde size verilen docker run komutunu yapıştırın ve çalıştırın. Örneğin:
sudo docker run -d --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.x.x.x --server https:// --token --worker
Her iki düğümde de komutları çalıştırdıktan sonra, Rancher UI’daki “Cluster Management” bölümüne geri dönün. Oluşturduğunuz kümenin durumunu izleyin. Düğümlerin durumu başlangıçta Pending (Beklemede) veya Provisioning (Sağlanıyor) olarak görünecektir. Kubernetes bileşenleri indirilip kuruldukça, durumları Active (Aktif) olarak değişecektir. Bu süreç, ağ hızınıza ve makine kaynaklarınıza bağlı olarak birkaç dakika sürebilir.
Küme Active duruma geldiğinde, artık Kubernetes kümeniz Rancher tarafından yönetilmeye hazırdır.
5. Uygulama Dağıtımı ve Yönetimi
Rancher ve Kubernetes kümemiz hazır olduğuna göre, artık uygulamalarımızı dağıtabiliriz. Rancher UI, Kubernetes’in karmaşık yapılandırmalarını basitleştirerek uygulama dağıtımını kolaylaştırır.
5.1 Namespace Oluşturma
Kubernetes’te Namespace‘ler, kaynakları (Pod’lar, Servisler, Dağıtımlar vb.) mantıksal olarak izole etmek için kullanılır. Her uygulama veya takım için ayrı bir namespace oluşturmak iyi bir uygulamadır.
1. Rancher UI’da, oluşturduğunuz kümenin ana ekranına gidin.
2. Sol menüden “Projects/Namespaces” (Projeler/Ad Alanları) seçeneğine tıklayın.
3. “Create Namespace” (Ad Alanı Oluştur) düğmesine tıklayın.
4. Namespace’inize bir isim verin, örneğin my-app-namespace.
5. “Create” düğmesine tıklayın.
5.2 Workload (Uygulama) Dağıtımı
Şimdi my-app-namespace içine basit bir Nginx uygulaması dağıtalım.
1. Rancher UI’da, sol menüden “Workloads” (İş Yükleri) altında “Deploy” (Dağıt) seçeneğine tıklayın.
2. Name: Uygulamanıza bir isim verin, örneğin nginx-web.
3. Namespace: Az önce oluşturduğunuz my-app-namespace‘i seçin.
4. Docker Image: Kullanmak istediğiniz Docker imajını girin, örneğin nginx:latest.
5. Port Mapping: Uygulamanın dışarıdan erişilebilmesi için port eşleştirmesi yapın.
* Container Port: Konteynerin içinde uygulamanın dinlediği port (Nginx için varsayılan 80).
* Protocol: TCP
* Listen Port (NodePort): Bu portu boş bırakırsanız Rancher otomatik bir NodePort atar. Eğer belirli bir NodePort istiyorsanız 30000-32767 aralığında bir port belirleyebilirsiniz. Örneğin, 30080.
6. Environment Variables (Ortam Değişkenleri): Uygulamanızın ihtiyaç duyduğu ortam değişkenlerini burada tanımlayabilirsiniz (örneğin, veritabanı bağlantı bilgileri).
7. Scaling (Ölçeklendirme): “Number of Pods” (Pod Sayısı) alanından uygulamanızın kaç replika ile çalışacağını belirleyebilirsiniz. Başlangıç için 1 veya 2 seçebilirsiniz.
8. Diğer ayarları şimdilik varsayılan olarak bırakın. “Launch” (Başlat) düğmesine tıklayın.
Rancher, seçtiğiniz namespace içinde bir Deployment ve ilgili ReplicaSet ile Pod’ları oluşturacaktır. “Workloads” bölümünde nginx-web uygulamanızın durumunu ve Pod’larının çalıştığını görebilirsiniz.
5.3 Service ve Ingress Oluşturma
Uygulamanıza dışarıdan erişmek için bir Kubernetes Service ve/veya Ingress oluşturmanız gerekir. Yukarıdaki örnekte NodePort Service otomatik olarak oluşturulmuştur.
* Service (Servis): Bir grup Pod’a erişim sağlayan soyut bir yapıdır.
* ClusterIP: Küme içinden erişilebilir.
* NodePort: Küme dışından, düğüm IP’si ve belirli bir port üzerinden erişilebilir.
* LoadBalancer: Bulut sağlayıcılarında harici bir yük dengeleyici sağlar.
* Ingress: HTTP/HTTPS trafiğini küme içindeki servislere yönlendirmek için kullanılır. Daha karmaşık yönlendirme kuralları (host tabanlı, yol tabanlı) ve SSL sonlandırma sağlar.
Eğer NodePort ile erişim sağladıysanız, http://: adresinden Nginx uygulamanıza erişebilirsiniz. Örneğin, http://192.168.99.100:30080.
5.4 Ölçeklendirme ve Güncelleme
Rancher UI, uygulamalarınızı ölçeklendirmeyi ve güncelleştirmeyi çok kolaylaştırır.
* Ölçeklendirme: “Workloads” bölümünde uygulamanızın yanındaki üç noktaya tıklayın ve “Scale” (Ölçeklendir) seçeneğini seçin. Pod sayısını artırarak veya azaltarak uygulamanızı ölçeklendirebilirsiniz. Rancher, yeni Pod’ları otomatik olarak uygun düğümlere dağıtacaktır.
* Güncelleme: Uygulamanızın Docker imajını güncellemek için “Upgrade” (Güncelle) seçeneğini kullanın. Yeni imaj etiketini girin ve Rancher otomatik olarak rolling update (kademeli güncelleme) yaparak uygulamanızı kesintisiz bir şekilde güncelleyecektir.
5.5 İzleme ve Log Yönetimi
Rancher, kümeniz ve uygulamalarınız için temel izleme ve loglama yetenekleri sunar:
* Metrikler: Rancher UI’da “Cluster Explorer” (Küme Gezgini) altındaki “Monitoring” (İzleme) bölümünden düğüm ve Pod metriklerini (CPU, RAM kullanımı) görebilirsiniz.
* Loglar: Herhangi bir Pod’un detay sayfasına giderek “Logs” (Loglar) sekmesinden Pod’un canlı loglarını takip edebilirsiniz. Bu, sorun giderme sırasında çok faydalıdır.
* Prometheus/Grafana: Rancher, Prometheus ve Grafana tabanlı gelişmiş izleme ve uyarı sistemlerini kolayca kurmanıza olanak tanır. Bu, daha detaylı metrik toplama ve görselleştirme için idealdir.
6. Gelişmiş Konular ve En İyi Uygulamalar
Çok düğümlü konteyner dağıtımlarını daha sağlam, güvenli ve verimli hale getirmek için bazı gelişmiş konuları ve en iyi uygulamaları göz önünde bulundurmak önemlidir.
6.1 Yüksek Erişilebilirlik (HA)
Üretim ortamları için yüksek erişilebilirlik kritik öneme sahiptir.
* Rancher Server HA: Tek bir Rancher Server konteyneri tek bir hata noktasıdır. Üretim ortamlarında Rancher Server’ı yüksek erişilebilir bir şekilde kurmak için harici bir veritabanı (MySQL veya PostgreSQL), bir yük dengeleyici ve birden fazla Rancher Server konteyneri kullanılır.
* Kubernetes Kontrol Düzlemi HA: Kubernetes kümesinin kontrol düzlemi (etcd, API Sunucusu, Zamanlayıcı, Kontrolör Yöneticisi) için de yüksek erişilebilirlik sağlamak önemlidir. En az 3 adet etcd ve Control Plane rolüne sahip düğüm kullanarak bu sağlanabilir.
6.2 Depolama Çözümleri
Konteynerler varsayılan olarak efemeraldir (geçicidir). Uygulamaların kalıcı verilere ihtiyacı olduğunda, Kubernetes’in Persistent Volume (PV) ve Persistent Volume Claim (PVC) mekanizmalarını kullanmak gerekir.
* NFS: Basit ve yaygın olarak kullanılan bir ağ dosya sistemi.
* Ceph: Dağıtık bir depolama çözümü.
* Longhorn: Rancher tarafından geliştirilen, Kubernetes için dağıtık blok depolama çözümü.
* Bulut Sağlayıcı Depolaması: AWS EBS, Azure Disk, Google Persistent Disk gibi bulut sağlayıcılarının sunduğu depolama hizmetleri.
6.3 Ağ Politikaları
Kubernetes ağ politikaları, Pod’lar arasındaki veya Pod’lar ile dış dünya arasındaki ağ iletişimini kontrol etmenizi sağlar. Bu, güvenlik ve izolasyon için çok önemlidir. Calico, Canal gibi CNI eklentileri ağ politikalarını destekler. Rancher UI üzerinden ağ politikalarını tanımlayabilir ve uygulayabilirsiniz.
6.4 Güvenlik
Konteyner ortamlarının güvenliği çok yönlü bir konudur.
* RBAC (Role-Based Access Control): Rancher ve Kubernetes, kullanıcı ve grup izinlerini yönetmek için RBAC kullanır. Kimin hangi kaynaklara erişebileceğini ve hangi eylemleri gerçekleştirebileceğini hassas bir şekilde tanımlayabilirsiniz.
* Kimlik Doğrulama: Rancher, LDAP, Active Directory, GitHub, Azure AD gibi harici kimlik doğrulama sağlayıcılarıyla entegre olabilir.
* Konteyner Güvenliği: Konteyner imajlarını güvenlik açıkları için taramak (örneğin, Harbor gibi araçlarla), Pod Security Policies (PSP) uygulamak ve konteynerlerin ayrıcalıklarını kısıtlamak önemlidir.
* Ağ Güvenliği: Firewall kuralları ve ağ politikaları ile küme içi ve küme dışı trafiği güvenli hale getirin.
6.5 CI/CD Entegrasyonu
Sürekli Entegrasyon/Sürekli Dağıtım (CI/CD) süreçleri, uygulama dağıtımını otomatikleştirmenin anahtarıdır. Rancher, Jenkins, GitLab CI/CD, Argo CD gibi popüler CI/CD araçlarıyla entegre edilebilir. Bu entegrasyonlar sayesinde, kod değişiklikleri otomatik olarak test edilebilir ve Kubernetes kümesine dağıtılabilir.
6.6 Yedekleme ve Geri Yükleme
Küme yapılandırmanızın ve Rancher Server veritabanınızın düzenli olarak yedeklenmesi felaket kurtarma senaryoları için hayati öneme sahiptir. Rancher, küme yapılandırmasının (etcd verisi) ve Rancher Server’ın kendi veritabanının yedeklenmesi ve geri yüklenmesi için araçlar ve prosedürler sunar.
7. Sorun Giderme ve Yaygın Hatalar
Çok düğümlü bir ortam kurarken veya yönetirken bazı sorunlarla karşılaşmak olasıdır. İşte yaygın sorunlar ve çözüm önerileri:
7.1 Ağ Sorunları
* Konteynerler Arası İletişim: Pod’lar veya Servisler arası iletişimde sorun yaşıyorsanız, CNI eklentinizin (Flannel, Calico) doğru çalıştığından emin olun. kubectl get pods -n kube-system komutu ile ağ Pod’larının (örneğin kube-flannel) durumunu kontrol edin.
* Dışarıdan Erişim: Uygulamanıza dışarıdan erişemiyorsanız, Service tipinin (NodePort, LoadBalancer) doğru yapılandırıldığından ve ilgili portların açık olduğundan emin olun. Düğüm firewall’larını (ufw, iptables) kontrol edin.
* DNS Çözümleme: Konteynerler içinde DNS çözümleme sorunları yaşıyorsanız, kube-dns veya CoreDNS Pod’larının çalıştığından ve küme DNS ayarlarının doğru olduğundan emin olun.
7.2 Kaynak Yetersizliği
* CPU/RAM: Düğümlerinizde veya Pod’larınızda CPU veya RAM yetersizliği, uygulamaların yavaş çalışmasına veya çökmesine neden olabilir. Rancher UI’dan veya kubectl top nodes / kubectl top pods komutlarıyla kaynak kullanımını izleyin. Gerekirse düğümlere daha fazla kaynak atayın veya daha fazla düğüm ekleyin.
* Disk Alanı: Düğümlerde veya konteynerlerde disk alanı yetersizliği, logların birikmesi veya imajların indirilememesi gibi sorunlara yol açabilir. df -h komutuyla disk kullanımını kontrol edin.
7.3 Rancher Agent Bağlantı Sorunları
* Rancher Server Erişilebilirliği: Rancher Agent’ın Rancher Server’a erişebildiğinden emin olun. Düğümden Rancher Server IP’sine ping atın veya curl https:// komutuyla bağlantıyı test edin. Firewall’ları kontrol edin.
* Agent Logları: Rancher Agent konteynerinin loglarını kontrol edin:
eval $(docker-machine env )
docker logs rancher-agent
Hata mesajları, bağlantı sorunlarının nedenini anlamanıza yardımcı olabilir.
7.4 Docker Machine ve VirtualBox Hataları
* Sanal Makine Başlatma Sorunları: docker-machine ls komutunda makinenin durumu Stopped veya Error ise, docker-machine start komutunu deneyin. VirtualBox UI’dan da sanal makinenin durumunu kontrol edebilirsiniz.
* IP Adresi Çakışmaları: Docker Machine tarafından atanan IP adreslerinin yerel ağınızdaki diğer cihazlarla çakışmadığından emin olun.
* VirtualBox Genişletme Paketleri: Bazı durumlarda, VirtualBox’ın genişletme paketlerinin (Extension Pack) kurulu olması gerekebilir.
Sonuç
Bu makalede, Rancher ve Docker Machine kullanarak Ubuntu 16.04 üzerinde çok düğümlü bir Docker ortamını nasıl kuracağımızı ve yöneteceğimizi ayrıntılı bir şekilde ele aldık. Temel kavramlardan başlayarak, Rancher Server’ın kurulumu, Docker Machine ile hostların sağlanması, bu hostların Rancher kümesine eklenmesi ve son olarak örnek bir uygulamanın dağıtımı ve yönetimi adımlarını uyguladık. Ayrıca, yüksek erişilebilirlik, depolama, güvenlik ve CI/CD entegrasyonu gibi gelişmiş konulara değindik ve yaygın sorun giderme ipuçları sunduk.
Rancher ve Docker Machine kombinasyonu, karmaşık konteyner orkestrasyonunu basitleştiren güçlü bir araç setidir. Docker Machine, farklı altyapılar üzerinde tutarlı Docker hostları oluşturma sürecini otomatikleştirirken, Rancher kullanıcı dostu arayüzü ve kapsamlı özellikleriyle Kubernetes kümelerini yönetmeyi son derece kolaylaştırır. Bu araçları kullanarak, geliştirme, test ve hatta küçük ölçekli üretim ortamları için ölçeklenebilir, güvenilir ve yönetilebilir konteyner altyapıları oluşturabilirsiniz.
Unutulmamalıdır ki, konteyner teknolojileri ve orkestrasyon platformları sürekli gelişmektedir. Bu makaledeki adımlar Ubuntu 16.04 ve belirli Rancher/Docker Machine sürümleri için geçerli olsa da, temel prensipler daha yeni sürümlerde ve farklı işletim sistemlerinde de benzerdir. Konteyner ekosistemindeki güncel gelişmeleri takip etmek ve en iyi uygulamaları benimsemek, altyapınızın verimliliğini ve güvenliğini sürekli artırmanıza yardımcı olacaktır. Bu rehber, konteyner yolculuğunuzda sağlam bir başlangıç noktası sunmaktadır.
