Kubespray ile Kubernetes Kurulumu

Kubernetes cluster kurmak  için çeşitli araçlar vardır, ihtiyaca uygun bunlardan faydalanabiliriz.

  • kubeadm: Tek bir master node’u olan cluster kurabiliriz.
  • Kubespray: Arka planda kubeadm kullanır ve single master nodelu cluster kurabileceği gibi multiple master node’lu clusterda kurabilir.
  • kops : cloud provider larda single veya multi master nodelu cluster kurmamıza yarar.
  • eksctl: AWS altyapısında bir cluster oluşturur.
  • Rancher: Birkaç kümeyi yönetmek için web kullanıcı arayüzü sağlar, hatta cluster kurulumu için de kullanılabilir.

Liste tabi ki  daha da uzayabilir, open source dünyası olduğu için zilyon tane alternatif var 🙂

Daha önceki yazımda kubeadm ile tek master node’u olan bir kubernetes cluster kurmuştum, ama tahmin edebileceğiniz gibi production ortamda master node’un high availability olması lazım. İşte kubespray tam burada ortaya çıkıyor multi master yapıda çok basit bir şekilde kubernetes cluster kurmamızı sağlıyor.

Resmi Kubespray GitHub bağlantısı linkteki gibidir, kubespray’ın amacı basitlik bu nedenle kurulum adımlarıda çok basit, biz sadece birbirlerini gören makineleri veriyoruz gerisini kubespray bizim için hallediyor. Bu arada şunuda söylemeden geçemiyeceğim, kubespray’ın tek kötü özelliği varsa oda her adımdaki kontroller nedeniyle kurulumun uzun (15-25 dk) sürmesidir.

Şimdi örnek bir kuruluma başlayacak olursak. Ben bu örnek için aşağıdaki iplere sahip 4 tane centos 7 makine hazırladım, bunlardan 2 sinide master node olarak ayarlayacağım birde etcd ilk basştaki 3 sunucuya cluster yapıda kurmasını sağlayacağım.

  • 168.10.30
  • 168.10.31
  • 168.10.32
  • 168.10.33

(devamı..)

Loading


Centos Üzerine Kubernetes Cluster Kurulumu

Kubernetes üzerinde geliştirme yapabilmek için tercih edilecek en iyi yollardan biri Minikube kullanmak. Minikube lokal makinenizde bir VM içinde, tek node’lu bir cluster oluşturarak Kubernetes deneyimi yaşamanıza imkan veriyor. Ancak çok node’lu bir cluster nasıl çalışıyor görmek istiyorsanız, lokal makinenize sanal makinelerden oluşan bir kurulum yapmanız gerekiyor. Ben Windows ile çalıştığım için VMware Workstation kullanacağım ancak kurulum adımları bir çok farklı sanallaştırma aracı veya fiziksel ortam için de geçerli.

Tipik bir Kubernetes cluster genellikle bir master ve birkaç worker nod’dan meydana gelir. Worker node lar daha sonra master node tarafından yönetilir, böylece cluster’ın merkezi bir noktadan yönetilmesi sağlanır.

Anlatmaya çalışacağım Kubernets cluster yapısı 1 master node, iki 2 worker node şeklinde bir yapı olacak. Master node’da en az 2 CPU ve 4 GB RAM olması önerilir. Kurulum sırasında repository lerden paketler indireceğimiz için tüm nodelarda internet bağlantısı gerekli, sanallaştırma ortamını buna uygun ayarlamamız gerekir. Tahmin edeceğiniz gibi kubernetes container runtime olarak docker kullanacağız.

  • Master Node : 192.168.10.20
  • Worker Node 1 : 192.168.10.21
  • Worker Node 2 : 192.168.10.22

(devamı..)

Loading


Kubernetes Nedir, Nasıl Çalışır, Nerede Kullanılır?

Kubernetes’in kelimesi Yunancadan geliyor ve anlamı dümenci (helmsman) veya pilot olarak karşımıza çıkıyor. Çoğu kaynaklarda kubernetesi k8s olarak yazıldığını görebilirsiniz. Bunun sebebi k ve s harflerinin arasında 8 tane harf olmasıdır.

Kubernetes (K8s), konteyner uygulamaların dağıtımını, ölçeklendirilmesini ve yönetimini otomatikleştirmek için açık kaynaklı bir sistemdir.

Sektörün ihtiyaçları neticesinde container yapılarının yoğun olarak kullanılmaya başlanmasıyla, yönetim ve operasyon yükünü kısıtlı personel ile kaldırabilmek adına bu sistemleri otonom haline getirmek kaçınılmaz bir hal aldı. Kubernetes’in öne çıktığı nokta tam olarak burası diyebilirim. Gerçek hayattan birkaç örnek verecek olursak;

  • Bizim makine bütünümüz var yani 1000 core luk bir makine halinde değil 8/10/12 vb gibi parçalar halinde, biz uygulamaları bunların üzerinde çalıştırırken uygulamaların nerede çalışacağına da karar vermek istemiyoruz. Bu durumlardan dolayı bütün container orchestratorlar birer cluster manager rolünde. Bunların üzerine bir agent kuruyoruz ve bize uygulamayı yönetme imkanı veriyor. Bizim 20 tane 10 core luk makinemiz varsa ben onları 200 core şeklinde bir bütün olarak görüyorum.
  • Containerları kurduk, 5 tane container çalıştıracağım, bunları aynı VM ler üzerinde değil de farklı VM lerde çalıştrımak istiyorum (best practice) gibi mantıksal tercihlerin yapılması ve aynı zamanda bir önceki maddede belirttiğim makine bütününde kullanılan/kalan core hesaplarının yapılması gibi işlemler içinde pencerenin bütününü gören bir mekanizmaya ihtiyacımız var bu noktada bir container orchestrator ihtiyacımız doğuyor.

Bu bilgiler ışığında kubernetes’in çözdüğü ve çözmeye aday olduğu noktalar ;

  • Tüm alt yapıyı tek bir bütün olarak görmemize/yönetmemize olanak sağlıyor.
  • Alt yapımızı daha iyi kullanmamıza olanak veriyor.
  • Containerlarda health check yaparak kontrollü çalışmasını sağlıyor.
  • Bir container herhangi bir sebepten fail duruma geçerse, yenisinin ayağa kaldırılmasını sağlıyor.
  • Maintenance yada failing durumlarında HA şeklinde bir node üzerindeki uygulamaları bir diğerine kesintisiz şekilde taşınmasını sağlıyor.
  • Conteinerların belirlenen kriterlerde auto-scale edilmesini sağlıyor ve aynı zamanda scale olan containerlere yük dağılımını da sağlıyor.
  • Yeni versiyonların herhangi bir kesinti olmadan deploy edilmesini sağlıyor.
  • Service discover gibi bir özellik ile ne-nerde bilmemize olanak sağlıyor.
  • Key/Value Store yani konfigürasyonları containerler dışında store edilmesini sağlıyor.
  • Containerlerin izole bir networkte haberleşmesini sağlıyor.

Google’ın GO dili kullanılarak geliştirdiği Kubernetes’i 2014 yılında açık kaynak hale getirildi ve Cloud Native Computing Foundation tarafından desteklenmektedir. Google tarafından 2004 yılından beri kullanılmakta ve hali hazırda milyarlarca konteyner için kullanılıyor.

Kubernetes konteyner içerisindeki uygulama veya servislerinizin en iyi şekilde çalışmasını sağlar.

Servisleri izler, yük dengelemesi yapar, depolama alanlarınızı yönetir, (Yerel depolama birimlerinizden, Amazon servislerine, NFS ve iSCSI protokollerinden verilmiş depolama birimlerine kadar), secret ve konfigürasyon yönetiminizi yapar, konteynerlarınız hataya düştüğünde otomatik olarak onarmaya çalışır, çok basit şekilde yatayda genişlemenizi sağlar. (CPU kullanımına göre otomatik olarak yapılabilir.)

Konteyner yönetim aracı olarak birden fazla alternatif vardır bunlardan başlıcaları docker swarm ve mesos’dur. Bu arada Kubenetes’de konteyner teknolojisi(Container runtime) olarak sadece docker’ı değil başka konteynerlarıda desteklemektedir, bunlar containerd, cri-o, rktlet konteynırlarıdır.
(devamı..)

Loading


Docker Nedir

Merhabalar bu yazıda gün geçtikçe popülerliği artan docker ile ilgili bir şeyler yazmak istedim fakat araştırdıkça o kadar güzel yazılar gördüm ki yazmak yerine, benim docker’ı anlama yardım eden yazılardan kısa,net ve anlaşılır bir özet çıkarmak istedim. Kullandığım referansların bir kısımını yazının sonuna ekliyor olacağım.

Konteyner yapısının ve getirdiği farklılıkların daha iyi anlaşılabilmesi için öncelikle eskiden ne yapıyorduk, şimdi ne yapıyoruz bir hatırlayalım.

Sanallaştırma teknolojilerinden önce bir fiziksel sunucu üzerine birden fazla işletim sistemi kurmak mümkün olmuyordu. Farklı her bir işletim sistemi için mutlaka yeni fiziksel kaynak gerekiyordu. Bu durumda her yeni sunucu ihtiyacında temin süresi bekleniyor, alınacak sunucular için rack alanı ayarlanıyor, sistem odasinin soğutma tasarımı ve enerji tüketimi gözden geçiriliyor vs. vs. bir çok olumsuz ve iş yükü getiren detay ortaya çıkıyordu.

Sanallaştırma teknolojileri ile beraber bu durum değişti. Sanallaştırma ile yazılımsal olarak elde bulunan fiziksel donanımların mantıksal olarak ayrılarak birden fazla sanal makine şekline sokulup, kaynakları daha verimli kullanmak başta olmak üzere daha bir çok avantajı beraberinde getirdi diyebiliriz. Sanalaştırma ile onlarca fiziksel makine yerine yüksek kapasiteli tek bir makine içerisine sanal olarak aynı sistemleri kurabilirsiniz. Böylece enerji, kablolama, soğutma, ve sunucuların kapladığı alandan büyük ölçüde tasarruf ve mobilite sağlar. Bakım, onarım, upgrade süreleri kısalır, high availability çözümleri kolaylaşır, olası bir afet veya bir arıza durumlarında downtime sürenizi saniyelere kadar indirir. Bu yapı halen çok yaygın kullanılmakta olup, aşağıdaki resim sanallaştırılmış bir ortamı anlatmaktadır.


(devamı..)

Loading


Linux Rsync ile Yerel veya Uzak Sunucular Arasında Senkronizasyon işlemleri

rsync, uzak ya da lokal olarak dosya transferi işlemlerini gerçekleştiren ve bu işlemlerde kullandığı algoritma sayesinde daha hızlı sonuç sağlayan bir senkronizasyon aracı olarak ifade edilebilir. Açık kaynak kodlu ve GNU Genel Kamu Lisans’ı altında dağıtılan rsync, bir çok Linux dağıtımında öntanımlı olarak yüklü gelmektedir. Ayrıca, bir çok dağıtımın paket yöneticisinden de kolayca kurulabilmektedir. Kaynak ve hedef arasında kopyalama yapmadan önce, bir algoritma üzerinden dosyalar arasındaki farkları tespit eden rsync, hedef’e sadece değişikliğe uğramış ya da tamamen yeni olan dosyaları aktarır. Bu sayede kopyalama süreci hızlandırılmış olur.

  • Tüm bir dizinin ya da dosya sisteminin yedeklenebilmesi
  • Sembolik ve Hard linklerin, dosya ve dizin izinlerinin, sahip ve grup bilgilerinin hedefte muhafaza edilebilmesi
  • Root yetkisine gereksinim duyulmaması
  • Lokal sistem üzerinde yedekleme/senkronizasyon
  • Lokal sistemden, uzaktaki sisteme yedekleme/senkronizasyon
  • Uzaktaki sistemden, lokal sisteme yedekleme/senkronizasyon
  • Network üzerinden transfer için ssh kullanabilme
  • Rsync daemon modu ile sunucu desteği
  • Exclude anahtarı ile spesifik dosya/dizinlerin, dosya tiplerinin hariç tutulabilmesi.

Redhat tabanlı sistemlerde öntanımlı olarak bulunmaktadır. Bu sebeple ayrıca kuruluma ihtiyaç duyulmamaktadır.

Debian ve Ubuntu gibi dağıtımların paket depolarında bulunmaktadır. Dolayısı ile “apt-get” ile kolayca kurulabilmektedir.
(devamı..)

Loading


Mysql/Mariadb Master-Slave Replikasyon

Replication kelime anlamı olarak Veri Kopyalama anlamına gelir. Database tarafında ise; bir database’in başka bir sunucu üzerinde eşleniğinin ‘yani hem yapısal hem de datasal olarak’ tutulmasıdır. Master database da yapılan herhagi bir değişiklik anında eşlenik database ‘Slave’ yansır. Replication bir backuplama yöntemi değildir. Çünkü Master database de yapılan bir delete işlemi slave database de de yapılacağı için her iki database de de veri silinmiş olacaktır. Replication nun faydası yüksek erişilebilirlilik sağlaması(Hight Availability) ve uygulamanın performansında artışa sebeb olmaktır. Bu performans artışını da uygulama tarafında insert-update-delete işlemlerini master database’e select işlemlerini de slave database’e yönlendirilerek yapılabilir. Tabi bu yapıyı Çoğaltma şansınız var.Master -Slave -Slave şeklinde Slave sunucau sayısını arttırabilirsiniz. Burada dikkat etmeniz gereken bir nokta var.Master ve Slave sunucuların aynı network farmında bulunması gerekmektedir. Aksi takdirde perforans ta ciddi azalmalar meydana gelir.

Replikasyon Çeşitleri

Replikasyon işlemini senkron ve asenkron olarak ve yarı senkron olacak şekilde 3 şekilde yapabilir. Default olarak asenkron replikasyon yapılır.

Asenkron replikasyon

Master veritabanında transactionlar binary dosyalara yazılır ve slave requestler hazır olduklarında talep ederler. Yalnız bu yöntemde transactionın slave veritabanına ulaşabileceğinin garantisi yoktur. . (row-based replikasyon ve statement-based replikasyon yapma seçeneklerimiz var burada) Asenkron replikasyon avantajı slave veritabanına herhangi bir nedenden dolayı ulaşılamasa bile kullanıcılar veritabanında işlemi yapmaya devam edebilir dezavantajı ise replikasyonun sıfır veri kaybı garantisini verememesidir.

 

Mysql Master-Slave Replication 1

Yarı Senkron replikasyon

Transactionın doğru aktarılmasını sağlamak için slave ve master ünitenin birbirleriyle iletişim kurması anlamına gelir. Master yalnızca binlog dosyasını doldurur ve slavelerden biri transactionın slave’in relay loglarından birine düzgün bir şekilde yerleştirildiğinin doğrulanmasını sağlarsa transaction devam eder. Yarı eşzamanlı replikasyon, bir transactionın doğru şekilde kopyalandığını garanti eder, ancak slave üzerine olan taahhüdün gerçekten gerçekleşeceğini garanti etmez.

Mysql Master-Slave Replication 2

 

Senkron replikasyon

Master veritabanında bir transaction gerçekleştirildiğinde, tüm slave’lerde bu transaction işlenene kadar master transaction sonlanmaz.Bunun dezavantajı ise bir transactionı tamamlamak için çok fazla gecikme olabileceğidir.

Row-Based Replikasyon ve Statement-Based Replikasyon

Statement-based replikasyon ile SQL sorgusunun kendisi binary log dosyasına kaydedilir ve slave tarafından bu sql ler çalıştırılır.Bu sistemin birçok avantajı ve dezavantajı vardır:

  • Gerçek sorgular binary log dosyasına kaydedildiği için veritabanını denetlemek çok daha kolaydır
  • Network üzerinden daha az veri aktarılır

Row-based replikasyon defauly yöntemdir. Satır değişiklikleri binary log dosyalarına kaydedilir ve içerik bilgisi gerektirmez. Avantajları;

  • Birkaç satır değişikliği içeren yüksek eşzamanlılık sorgularıyla performans iyileştirmeleri
  • veri tutarlılığı geliştirme

Master –Slave Replikasyon Örneği

Şimdi biz bu yazıdaki örneğimizde asenkron master-slave replikasyon yapacağız. Öncelikle kullanacağımız ipler aşağıdaki gibidir;

Master Database : 192.168.10.130
Slave Database : 192.168.10.130

  • Eğer veritabanı bulunmuyorsa aşağıdaki gibi kurmamız gerekmektedir.

apt-get install mariadb-server -y


NOT :
MariaDB, GNU Genel Kamu Lisansı altında serbest olarak kullanılabilen, MySQL’in yaratıcısı olan Monty Widenius‘un MySQL’in kodunu çatallayıp (fork) “çoğunlukla” MySQL ile aynı komutları, arayüzleri ve API’leri destekleyecek şekilde geliştirmeye başlanan (MariaDB 5.2 >= MySQL 5.2), toplulukla iç içe hızlı ve verimli şekilde geliştirilmeye devam edilen MySQL ilişkisel veritabanı yönetim sistemidir. Tabi geliştirmelerle birlikte farklı yaklaşımlar da sürümlerle birlikte sunulmaya başlandı. Detaylı bir değerlendirme için MariaDB versus MySQL – Features sayfasını inceleyebilirsiniz.

  • Yükleme tamamlandıktan sonra, MariaDB servisini başlatmak ve aşağıdaki komutla önyükleme zamanında başlatmak için etkinleştirin;
systemctl start mysql
systemctl enable mysql
  • Aşağıda kodu verilen mysql_secure_installation scripti çalıştırarak güvenlik ayarlarını yapabiliriz.Scripti çalıştırdıktan sonra MySQL root şifresini değiştirmeyi, anonim hesabını kaldırmayı ve localhostun dışında root girişi yapılmamasını ve test veritabanını silmek isteyip istemediğinizi sorabilir.

 

mysql_secure_installation

Aşağıda gösterildiği gibi tüm soruları cevaplayın;

Set root password? [Y/n] n
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
    • Şimdi master sunucumuzda mysql yapılandırma dosyasını açıp /etc/mysql/my.cnf aşağıdaki satırları düzenleyelim;
    • bind-address : Belirli interfacelerin dinlenmesini sağlar. Birden fazla interface ekleyebiliriz. 192.168.1.1,10.0.0.1
    • server_id : Bu değişken sunucu kimliğini belirtir. server_id varsayılan olarak 1’e ayarlanmıştır. Replikasyon  topolojisinde kullanılan sunucular için, her replikasyon sunucusu için 1 – 232  aralığında benzersiz bir sunucu kimliği belirtmeniz gerekir.
    • log-basename : binary logun yerini belirtiriz
    • binlog-format : binary log formatını seçmemizi sağlayan parametre. STATEMENT, ROW ve MIXED değerlerini alabilir.
    • binlog-do-db : Replike edilecek veritabanını belirtir bunun yerine istersek binlog-ignore-db parametresi ile replike edilmeyecek veritabanlarınıda ayarlayabiliriz.
[mysqld]
bind-address = 192.168.10.130
server_id=1
log-basename=master
log-bin=/var/log/mysql/mariadb-bin
binlog-format=row
binlog-do-db=masterdb

(devamı..)

Loading


  • Sertifikasyon



  • Etiketler

  • Topluluklar

                     
                     
  • Copyright © 1996-2010 Mustafa Bektaş Tepe. All rights reserved.
    Türkçeleştirme Blogizma | AltyapıWordPress