Kubernetes Etcd Nedir Ve Nasıl Yedek Alınır

Kubernetes’in farklı çalışan düğümlerini düzenleyen ve merkezi master node’lar tarafından kontrol edilebilen dağıtılmış bir platform olduğunu hepimiz biliyoruz. Bölmeleri işlemek için dağıtılabilecek ‘n’ sayıda çalışan node olabilir. Bu node’lardaki tüm değişiklikleri ve güncellemeleri takip etmek ve istenen eylemi gerçekleştirmek için Kubernetes etcd kullanır.

Kubernetes etcd nedir?

Etcd, basit, hızlı ve güvenli, dağıtılmış, güvenilir bir anahtar-değer deposudur. Bir arka uç hizmet keşfi ve veritabanı gibi davranır, kümelerdeki değişiklikleri izlemek ve bir Kubernetes yöneticisi veya kümeleri tarafından erişilmesi gereken durum/yapılandırma verilerini depolamak için aynı anda Kubernetes kümelerindeki farklı sunucularda çalışır. Ek olarak, etcd, Kubernetes yöneticisinin keşif hizmetini desteklemesine olanak tanır, böylece dağıtılan uygulama hizmete dahil edilmek üzere kullanılabilirliklerini beyan edebilir.

Kubernetes etcd için key-value store aracılığıyla , Kubernetes Cluster için tüm yapılandırmaları depolar. Verileri tablo biçiminde depolayan geleneksel veritabanından farklıdır. Etcd, her kayıt için, birini güncellerken diğer kayıtları engellemeyen bir veritabanı sayfası oluşturur. Örneğin, birkaç kayıt ek sütunlar gerektirebilir, ancak aynı veritabanındaki diğer kayıtlar için gerekli olmayanlar olabilir. Bu, veritabanı içinde artıklık yaratır. Etcd, Kubernetes için tüm kayıtları güvenilir bir şekilde ekler ve yönetir. Kubernetes master da yer alan API sunucusu bileşeni, farklı kümelere yayılmış bileşenlerle etcd ile iletişim kurar. Etcd, sistem için istenen durumu ayarlamak için de yararlıdır.

Etcd kritik bir bileşendir ve etcd kümenizi kaybederseniz Kubernetes cluster’ınızı kaybedersiniz.

Kubernetes’te, etcd durumu ve konfigürasyonu koruduğundan, etcd’ye erişim, kümede root permission’a sahip olmakla eşdeğerdir. İdeal olarak, etcd kümesine yapılan tüm iletişim, Kubernetes API sunucusundan geçmeli ve yalnızca erişim gerektiren düğümlere erişim vermelidir. Etcd, sertifikalar aracılığıyla güvenli iletişim kurabilir ve ayrıca harici erişimi engellemek için güvenlik duvarı kuralları yapılandırabiliriz.

Etcd, Kubernetes için kritik bir veri depolar. Dağıtılmış olarak, dağıtılmış makineler/sunucular üzerindeki tüm kümelerdeki veri depolarının bir kopyasını da tutar. Bu kopya, tüm veri depoları için aynıdır ve diğer tüm etcd veri depolarından aynı verileri korur. Bir kopya bozulursa, diğer ikisi aynı bilgiyi tutar.

Kubernetes Kümelerinde etcd için Dağıtım Yöntemleri

Etcd, uygulama Kubernetes’te yüksek kullanılabilirlik sağlayacak şekilde tasarlanmıştır. Etcd, ana düğümlerde bölmeler olarak dağıtılabilir

Şekil – Aynı kümede yer alan etcd

Resim kaynağı: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/ha-topology/

Bu topoloji, kontrol düzlemlerini ve etcd üyelerini aynı düğümler üzerinde birleştirir. Kurulumu, harici etcd düğümleri olan bir kümeden daha basittir ve replication yönetimi için daha kolaydır. Ancak, bu bir stack kümedir; başarısız bağlantı riski taşır. Bir düğüm çökerse, hem etcd üyesi hem de master yapısı örneği kaybolur ve fazlalık tehlikeye girer. Daha fazla master düğümü ekleyerek bu riski azaltabilirsiniz.Bu nedenle, bir HA kümesi için en az üç stack master düğümü çalıştırmalısınız.

Şekil – Harici olarak dağıtılan etcd Yapısı

Resim kaynağı: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/ha-topology/

Bu topoloji, kontrol düzlemi ve etcd elemanını birbirinden ayırır. Bu nedenle, bir kontrol düzlemi örneğini veya bir etcd üyesini kaybetmenin daha az etkiye sahip olduğu ve küme yedekliliğini Stack HA topolojisi kadar etkilemediği bir HA kurulumu sağlar. Ancak bu topoloji, yığılmış HA topolojisine göre iki kat daha fazla ana bilgisayar gerektirir. Bu topolojiye sahip bir HA kümesi için kontrol düzlemi düğümleri için en az üç ana bilgisayar ve etcd düğümleri için üç ana bilgisayar gereklidir.

Etcd Nasıl Çalışır?

Etcd, Kubernetes kümesinin beyni olarak görev yapar. Değişikliklerin sırasının izlenmesi etcd’nin ‘İzle’ işlevi kullanılarak yapılır. Bu işlev ile Kubernetes, kümeler içindeki değişikliklere abone olabilir ve API sunucusundan gelen herhangi bir durum isteğini yürütebilir. Etcd, dağıtılmış kümeler içindeki farklı bileşenlerle koordine eder. Etcd, bileşenlerin durumuna göre değişikliklere tepki verir ve diğer bileşenler değişikliklere tepki verebilir.

Bir durum olabilir örneğin; cluster’daki etcd bileşenleri grubu arasındaki tüm durumların aynı kopyasını korurken, aynı verilerin iki etcd örneğinde depolanması gerekir. Ancak, etcd’nin farklı durumlarda aynı kaydı güncellemesi beklenmez.

Bu gibi durumlarda etcd, her küme düğümünde yazma işlemlerini işlemez. Bunun yerine, örneklerden yalnızca biri, yazma işlemlerini dahili olarak işleme sorumluluğunu alır. Bu düğüme lider denir. Kümedeki diğer düğümler, RAFT algoritmasını kullanarak bir lider seçer. Lider seçildikten sonra, diğer düğüm liderin takipçileri olur.

Şimdi, lider düğüme yazma istekleri geldiğinde, lider yazma işlemini işler. Lider etcd düğümü, verilerin bir kopyasını diğer düğümlere yayınlar. Takipçi düğümlerinden biri o anda etkin veya çevrimdışı değilse, mevcut düğümlerin çoğuna bağlı olarak yazma istekleri tam bir bayrak alır. Normalde, lider kümedeki diğer üyelerden onay alırsa yazma işlemi tam bayrağı alır.

Kendi aralarında lideri bu şekilde seçerler ve bir yazının tüm örneklere yayılmasını nasıl sağlarlar. Bu dağıtılmış fikir birliği, RAFT protokolü kullanılarak etcd’de uygulanır.

Şekil- Etcd Mimarisi

Kubernetes neden etcd kullanıyor?

Ekosistemde çeşitli veritabanları var, ancak neden etcd’nin bu kadar iyi uyduğunu merak ettiniz mi? Birincil neden CNCF ekosisteminde yer almaktır ve Kubernetes’e uyacak şekilde büyümüştür. CNCF takımları birbirleriyle iyi çalışır. Ama başka ne var?

Dağıtılmış Veritabanı

Kubernetes ve etcd’yi birleştirmenin ana avantajı, etcd’nin Kubernetes kümeleriyle birlikte çalışan dağıtılmış bir veritabanı olmasıdır. Sonuç olarak, etcd’yi Kubernetes ile kullanmak küme sağlığı için kritik öneme sahiptir. Kubernetes topluluğu, küme durumlarını yönetmek için sayısız fayda sağlamak ve dinamik iş yükleri için daha fazla otomasyon sağlamak için bundan geniş ölçüde yararlandı.

Bildirimi Değiştir

İstemciler, etcd kullanarak belirli bir anahtarda veya anahtar kümesinde yapılan değişikliklere abone olabilir. Kubernetes, değişiklik uyarılarından harika bir şekilde yararlanır ve bu, Kubernaut’ların sevdiği özelliklerden biridir.

Yüksek Kullanılabilirlik

Üç veya daha fazla tek sayı düğümü ile etcd, yüksek oranda kullanılabilir bir yöntemde dağıtılır. Etcd kümesi, hiçbir şey paylaşmayan düğümlerden oluşur. Bir düğüm kümenin lideri olarak hizmet ederken, diğerleri takipçiler olarak hizmet eder. Çalışma zamanında, lider düğüm, Raft algoritması kullanılarak belirlenir. Bu, ağ bağlantısı sorunları, elektrik kesintileri, donanım arızaları, beklenmeyen bakım vb. nedeniyle oluşan tek hata noktalarını ortadan kaldırır.

Güvenilir

etcd, bir isteği hemen bir günlük dosyasına kaydeder ( gpRC request kullanarak ileri yazma günlüğü ) ve ardından günlük dosyasının çok büyümesini önlemek için bir anlık görüntü dosyası oluşturur. Anlık görüntü dosyası, anahtarların sırasına göre sıralanır ve b+ ağaç yapısı tarafından düzenlenen anahtar/değer çiftlerini içerir.

Etcd kümesi, günlük dosyalarından ve anlık görüntülerden verileri geri yükleyebilir ve bir sorun nedeniyle çökerse veya durursa hizmeti sürdürebilir.

Güvenilir tutarlı

etcd’den okunan her veri, tüm kümelerden en güncel bilgileri döndürür. Bir istek alındığında lider düğüm, takipçilere karşı oy kullanır. Lider, isteği taahhüt eder ve takipçilerden düğümlerin çoğunluğunun aynı fikirde olup olmadığını taahhüt etmesini ister. Kümedeki herhangi bir düğüm, bir etcd istemcisinden istek alabilir. Bir müşteri bir takipçiye istek gönderirse, istek bir lider düğüme iletilecektir.

Hız

Anahtar/değer deposu, saniyede 10.000 yazma ile kıyaslanır, ancak etcd’nin performansı öncelikle depolama disk hızına bağlıdır ve etcd dağıtımlarında SSD’ler şiddetle tavsiye edilir.

Güvenlik

Etcd, Kubernetes’ten gelen sırları ve diğer son derece hassas yapılandırma verilerini depolar ve tasarım gereği güvenli olması gerekir. Verileri korumak için özünde mükemmel bir yerleşik güvenliğe sahiptir.

Güvenli Taşıma

etcd, otomatik Aktarım Katmanı Güvenliği (TLS) ve isteğe bağlı Güvenli Yuva Katmanı (SSL) kullanarak istemci sertifikası kimlik doğrulamasını destekler .

 

Karşılıklı olarak doğrulanmış TLS ile Etcd Erişimi

 

 

RBAC’ler (Rol Tabanlı Erişim Kontrolleri)

Dağıtım içinde etcd, rol tabanlı erişim kontrollerini mümkün kılar ve bununla ilgilenen ekip üyelerinin işlerini yapmak için gereken en az ayrıcalıklı erişim düzeyine sahip olmasını sağlar.

İzolasyon

etcd, MVCC (Multi-version Concurrency Control) tarafından seri hale getirilebilir izolasyonu destekler .

Etcd yedeğinin alınması:

Kubernetes ortamında etcd kümenizi nasıl kurduğunuza bağlı olarak etcd yedeği almak için farklı bir mekanizma vardır.

Kubernetes ortamında etcd kümesini kurmanın iki yolu vardır:

  1. Internal etcd kümesi: Bu, etcd kümenizi Kubernetes kümesi içinde containers/pods  biçiminde çalıştırdığınız anlamına gelir ve bu bölmeleri yönetmek Kubernetes’in sorumluluğundadır.
  2. External etcd kümesi: Kubernetes cluster’ın dışında çalıştırdığınız ve çoğunlukla Linux service’leri biçiminde çalıştırdığımıız Etcd kümesidir  ve uç noktalarını yazmak için Kubernetes kümesine sağlar.

Bir Etcd Kümesi Kurma

İlk olarak, aşağıdaki komutu çalıştırarak etcd’yi indirelim:

wget -q --show-progress --https-only --timestamping \ "https://github.com/etcd-io/etcd/releases/download/v3.4.0/etcd-v3.4.0-linux-amd64.tar.gz"

İnternet hızınıza bağlı olarak birkaç dakika sürebilir. Tamamlandığında, çalıştırarak çıkarın:

tar -xvf etcd-v3.4.0-linux-amd64.tar.gz

Şimdi, geçerli dizininizde etcd var ama olması gereken yer burası değil, çünkü Kubernetes onu /usr/local/bin içinde arayacaktır . Öyleyse onu bu dizine taşıyın:

sudo mv etcd-v3.4.0-linux-amd64/etcd* /usr/local/bin/

Şimdi, etcd’nin SSL sertifikalarına bakacağı birkaç dizin oluşturmanız gerekiyor:

sudo mkdir -p /etc/etcd /var/lib/etcd
sudo cp ca.pem kubernetes-key.pem kubernetes.pem /etc/etcd/

Sertifikaları oluştururken sorun yaşıyorsanız, kendiniz için bir sertifika oluşturmaya yardımcı olması için bu kapsamlı kılavuza göz atabilirsiniz .

Ardından, etcd kümenizin üyeleriyle istemci istekleri ve veri iletimi ile ilgilenmenize yardımcı olması için mevcut işlem bulut sunucusu IP adresinizi alın:

INTERNAL_IP=$(curl -s -H "Metadata-Flavor: Google" \ http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip)

etcd adınız mevcut hesaplama örneğinin adıyla eşleşmelidir, bu nedenle terminalde şu satırı çalıştırarak bunu gerçekleştirin:

ETCD_NAME=$(hostname -s)

etcd.service sistemd birim dosyasını oluşturun:

cat <<EOF | sudo tee /etc/systemd/system/etcd.service[Unit]

Description=etcd
Documentation=https://github.com/coreos
[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \\
--name $[ETCD_NAME] \\
--cert-file=/etc/etcd/kubernetes.pem \\
--key-file=/etc/etcd/kubernetes-key.pem \\
--peer-cert-file=/etc/etcd/kubernetes.pem \\
--peer-key-file=/etc/etcd/kubernetes-key.pem \\
--trusted-ca-file=/etc/etcd/ca.pem \\
--peer-trusted-ca-file=/etc/etcd/ca.pem \\
--peer-client-cert-auth \\
--client-cert-auth
--initial-advertise-peer-urls https://${INTERNAL_IP}:2380 \\
--listen-peer-urls https://${INTERNAL_IP}:2380 \\
--listen-client-urls https://${INTERNAL_IP}:2379,https://127.0.0.1:2379 \\
--advertise-client-urls https://${INTERNAL_IP}:2379 \\
--initial-cluster-token etcd-cluster-0 \\
--initial-cluster controller-0=https://10.240.0.10:2380,controller-1=https://10.240.0.11:2380,controller-2=https://10.240.0.12:2380 \\
--initial-cluster-state neww \\
--data-dir=/var/lib/etcd
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF

Kurulumunuz tamamlandığına göre, aşağıdaki komutları çalıştırarak etcd sunucusunu başlatın:

sudo systemctl daemon-reload

sudo systemctl enable etcd

sudo systemctl start etcd

Şimdi, farklı denetleyicilerinizde (controller-0, controller-1, controller-2) önceki komutları tekrarlayın.

Artık etcd küme üyelerini listelemeye devam edebilirsiniz:

sudo ETCDCTL_API=3 etcdctl member list \–endpoints=https://127.0.0.1:2379 \–cacert=/etc/etcd/ca.pem \–cert=/etc/etcd/kubernetes.pem \–key=/etc/etcd/kubernetes-key.pem

Ve çıktınız şöyle görünecek:

3a57933972cb5131, started, controller-2, https://10.251.0.22:2380, https://10.251.0.22:2379
f98dc20bce6225a0, started, controller-0, https://10.251.0.20:2380, https://10.251.0.20:2379
ffed16798470cab5, started, controller-1, https://10.251.0.21:2380, https://10.251.0.21:2379

Tebrikler, etcd kümenizi kurdunuz.

Güvenlik endişeleri

Etcd kümenizdeki verilerin hassas yapısı nedeniyle, bilgisayar korsanları için birincil hedeftir. Etcd veritabanında bulunan kadar bilgiye sahip biri, fidye yazılımı saldırısı, etki alanı ele geçirme, kimlik hırsızlığı ve çok daha fazlası gibi çok fazla hasara neden olabilir.

Eh, kötü adamlar her zaman orada olacak. En önemli şey, onlardan her zaman on adım önde olmanız ve şu anda Kubernetes kümenizin güvenliğini sağlamaya odaklanmanızdır. İçin sizin etcd kümeyi güvenli yapmalısınız:

  1. Özellikle etcd örneğiniz için uygun bir SSL sertifikası uyguladığınızdan emin olun. etcd, hem istemcilerden sunucuya hem de sunucudan sunucuya iletişim için sertifikalar aracılığıyla otomatik TLS ve kimlik doğrulamasından yararlanır. Ve etcd kümesinin her üyesi için ayrı sertifikalar oluşturmanız ve imzalamanız önerilir. Bu sayede sadece etcd üyeleriniz sertifikanıza sahip olur ve birbirleriyle güvenli bir şekilde iletişim kurabilirler.
  2. etcd kümenizi şifreleyin. etcd kümenizi şifrelemek, Kubernetes kümenizin güvenliği ihlal edilse bile özel anahtarlarınızın güvende kalacağı anlamına gelir. Bilgisayar korsanının, kimlik bilgilerinize erişmek için etcd kümenize girmesi gerekecektir.
  3. Kimliği doğrula. etcd v2 , etc kümesindeki key-value çiftlerini yalnızca yetkili kullanıcıların düzenlemesine izin vermek için bir kimlik doğrulama API’sı sundu. Varsayılan olarak bu kimlik doğrulama kapalıdır. PUT /v2/auth/enable uç noktasına bir put isteği çalıştırarak kök kullanıcı olarak açabilirsiniz .

Backing Up

Etcd veritabanınızı yedeklemek, geleneksel veritabanınızı yedeklemek kadar önemlidir. Kurtarılamaz sistem arızalarında, sisteminizi her zaman tekrar çalışır duruma getirebilirsiniz. etcd’nizi yedeklemenin diğer nedenleri, büyük bir yükseltmeden veya bir ortamdan diğerine geçişten önce üretim ortamınızı hazırlamaya kopyalamak olabilir.

Etcd kümelerinizi düzenli olarak yedeklemek için bir cron işi ayarlayabilirsiniz.

Aşağıdaki komut bir etcd kümesini yedekleyecektir:

ETCDCTL_API=3 etcdctl1 --endpoints=https://[172.31.98.230]:2379 -- cacart=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etd/server.key snapshot save /data/backup.db

Önceki komutla etcdctl komutunu kullanarak etcd kümenizi yedekleyebilirsiniz. Yukarıdaki snippet’te gösterildiği gibi SSL sertifikanızı sağlamanız istenecektir. Buna zaten sahipsiniz, bu nedenle örneğiniz üzerinde sertifikanın yolunu ayarlamanız gerekecek.

Etcd kümenizi geri yüklemek için önce etcd kümenizi, Kube API sunucunuzu ve zamanlayıcılarınızı durdurmanız ve ardından aşağıdaki komutları çalıştırmanız önerilir:

ETCDCTL_API=3 etcdctl1 snapshot restore /data/backup.db --data-dir=/var/lib/myetcd - - cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key --name kubemaster --initial-cluster=kubemaster=https://172.31.98.230:2380 --initial-advertise-peer-urls=https://172.31.98.230:2380 --initial-cluster-token kubemaster

Yedekleme dosyasının adını not edin. Yedeklemenin, geri yüklemek istediğiniz dizinde ve sertifika dosyalarında olduğundan emin olun.

Upgrading etcd

Etcd, her biri hayati hata düzeltmelerini çözen ve yeni özellikler ekleyen birkaç sürümden geçti. Geçerli önerilen etcd sürümü 3.x’tir . Yükselttiğiniz sürüme bağlı olarak, biraz kapalı kalma süreniz olabilir veya hiç kesinti olmayabilir .

Küçük sürümler arasında aşamalı olarak geçiş yapmanız önerilir. Örneğin, sürüm 2.0’daysanız, 3.0 veya 3.4’e geçmeden önce 2.3’e geçmelisiniz. Bu, bir yükseltme ile gelebilecek komplikasyonları azaltmaya yardımcı olacaktır.

Bir sürümden diğerine yükseltmek için, yeni sürümü hedeflemek ve başlatmak için etcd bildirim dosyasındaki komutu değiştirmeniz yeterlidir:

TARGET_STORAGE=etcd3
ETCD_IMAGE=3.0.17
TARGET_VERSION=3.0.17
STORAGE_MEDIA_TYPE=application/json

Ön yükseltme için, etcd’yi durdurmak için bir komut dosyasına ihtiyacınız olacak, sağlıklı olana kadar bekleyin ve ardından etcd ekibi tarafından ./etcdctl move çalıştırarak oluşturulan resmi taşıma komut dosyasını çalıştırın .

Sonuç

Etcd, Kubernetes’in temel bir bileşenidir. Nasıl kullanılacağını bilmek, kötü adamlardan korumak, yükseltmek ve yedeklemek önemlidir ve umarım şimdi bunların hepsini nasıl yapacağınızı biliyorsunuzdur. Öğrenecek daha çok şey olduğundan, bu makale etcd keşfiniz için bir başlangıç ​​noktası olarak hizmet etmelidir. etcd belgelerine bakarak etcd hakkında daha fazla bilgi edinebilirsiniz .

İlk yorum yapan olun

Bir yanıt bırakın

E-posta hesabınız yayımlanmayacak.


*