Ubuntu 22.04’e 3 Node Etcd HA Kümesi Nasıl Kurulur

Konteynerizasyon kavramı artık her yerde.  Paketlerin ve gerekli tüm bağımlılıkların konteyner adı verilen hafif bir yürütülebilir dosyada paketlenmesi olarak tanımlanabilir.  Bu konsept, paketlerle ilgili tüm bağımlılık sorunlarını ortadan kaldırdığı için oldukça benimsenmiştir.  Ayrıca iş yüklerini yalıtarak gelişmiş güvenlik ve ölçeklenebilirlik, taşınabilirlik ve esneklikle gelişmiş uygulama performansı sağlar.  Konteynerizasyon, Docker, Podman, Containerd, Kubernetes, ETCD vb. gibi çeşitli araçları beraberinde getirdi.

vbd, Kubernetes ile etkileşime giren tüm insanlar arasında popülerdir.  Tüm küme verilerini yedeklemek için dağıtılmış sistemlerin omurgası olarak hizmet veren tutarlı ve yüksek düzeyde kullanılabilir bir anahtar/değer deposudur.  Tüm Kubernetes küme durumlarının depolanması ve çoğaltılması için birincil depolama görevi görür.  Bu araç başlangıçta Fedora CoreOS’ta kümeleri çalıştırmak için oluşturuldu ve daha sonra OSX, Linux ve BSD sistemlerinde benimsendi.  Günümüzde Google Kubernetes, Cloud Foundry ve Fleet gibi birçok dağıtık sistem büyük ölçüde etcd’ye bağımlıdır.

Bir Kubernetes kümesinde vb. beyin görevi görür.  Kümeyi çalıştırmak için gereken tüm hassas bilgilerin tutulmasından sorumludur.  Etcd bir sorunla karşılaştığında tüm küme sorunlarla karşılaşabilir.  Yüksek kullanılabilirlik elde etmek için ectd kümesinin yalıtılması önerilir.  Bu, bakım ve yönetilebilirliği artırır.

Aşağıda Etcd Kümesinin mimarisini gösteren bir diyagram bulunmaktadır.

Bu kılavuzda, Ubuntu 22.04’te 3 Node Etcd HA Cluster’ın nasıl kurulacağını anlatacağız.

Başlarken

ETCD kümesini sorunsuz bir şekilde çalıştırmak için tek sayıda (örneğin 3 veya 5) hizmete ihtiyacınız vardır. Ayrıca kümenin kararlı olduğundan emin olmak için kaynak yetersizliği olmadığından da emin olmanız gerekir.

Bu kılavuzda, aşağıda gösterildiği gibi yapılandırılmış 4 Ubuntu 22.04 sunucusundan oluşan bir ortam kullanacağız:

TASKIP ADRESHOSTNAME
ETCD1192.168.200.52etcd1.computingforgeeks.com
ETCD1192.168.200.62etcd2.computingforgeeks.com
ETCD1192.168.200.63etcd3computingforgeeks.com
LOAD-BALANCER192.168.200.56loadbalancer.computingforgeeks.com

Sistemlerin güncellendiğinden ve gerekli tüm paketlerin kurulu olduğundan emin olun:

sudo apt update
sudo apt install vim curl -y

Ardından tüm sunuculardaki ana bilgisayar adlarını ayarlamaya devam edin.  Örneğin;

sudo hostnamectl set-hostname etcd1.computingforgeeks.com #Node1
sudo hostnamectl set-hostname etcd2.computingforgeeks.com #Node2
sudo hostnamectl set-hostname etcd3.computingforgeeks.com #Node3

Daha sonra tüm makinelerde /etc/hosts’u gösterildiği gibi yapılandırın:

$ sudo vim /etc/hosts
192.168.200.52 etcd1.computingforgeeks.com  etcd1
192.168.200.62 etcd2.computingforgeeks.com  etcd2
192.168.200.63 etcd3.computingforgeeks.com  etcd3
192.168.200.56 loadbalancer.computingforgeeks.com  loadbalancer

Canlı ortamlar için başka birçok gereksinim vardır.  Bunlardan biri, gereken minimum etcd sürümünün 3.4.22+ ve 3.5.6+ olmasıdır.  Daha birçok gereksinim var; kaynak gereksinimi referansına bakın

Once all is set up, you can proceed as shown in the below steps.

1. Gerekli Paketleri Kurun

Kümeyi başlatmaya devam etmeden önce tüm etcd düğümlerinde gerekli olan bazı paketler vardır.

Bu yöntem için kullanıcılar, etcd’nin mevcut en son sürümlerini seçebilirler.  Bunu başarmak için,etcd sürümleri sayfasını ziyaret edin.  Buraya geldiğinizde mevcut en son sürümü dışa aktarın:

ETCD_VER=v3.5.10

Gerekli diğer değişkenleri dışa aktarın:

GOOGLE_URL=https://storage.googleapis.com/etcd
GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
DOWNLOAD_URL=${GOOGLE_URL}

Başarı için /tmp dizinini oluşturun:

rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test

Şimdi ikili dosyayı komutlarla çekin:

curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

Arşivi çıkartın:

tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

İkili dosyaları PATH’inize taşıyın:

sudo cp /tmp/etcd-download-test/etcd* /usr/local/bin

Şimdi bir hizmet dosyası oluşturun:

sudo vim /etc/systemd/system/etcd.service

Bu satırları dosyaya ekleyin:

[Unit]
Description=etcd

[Service]
Type=notify
EnvironmentFile=/etc/default/etcd
ExecStart=/usr/local/bin/etcd
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

Şimdi kurulumu doğrulayın:

$ etcd --version
etcd Version: 3.5.10
Git SHA: 0223ca52b
Go Version: go1.20.10
Go OS/Arch: linux/amd64

$ etcdctl version
etcdctl version: 3.5.10
API version: 3.5

Etcd 3 sunucuya kurulduktan sonra aşağıda gösterildiği gibi ilerleyin.

2. Ubuntu’da Etcd HA Kümesini Kurun

Etcd düğümlerine gerekli paketler kurulduktan sonra artık kümeyi oluşturabiliriz.  Bunu başarmak için,etcd yapılandırmasında birkaç ayarlama yapmamız gerekiyor.

Dosyayı düzenlemek için açın:

sudo vim /etc/default/etcd

Bu dosya kümeye ilişkin tüm ortam değişkenlerini içerir.  Tüm değişkenleri 3 düğümün tamamında tanımlamamız gerekiyor:

ETCD_NAME=<node-name>
##ETCD_DATA_DIR=/var/lib/etcd
ETCD_INITIAL_CLUSTER=<node1-name=http://<node1-ip>:2380,node2-name=http://<node2-ip>:2380,node3-name=http://<node3-ip>:2380>
ETCD_INITIAL_ADVERTISE_PEER_URLS=http://<node-ip>:2380
ETCD_ADVERTISE_CLIENT_URLS=http://<node-ip>:2379
ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379

Başlatmadan önce her düğümdeki tüm değişkenleri değiştirin.  En az 2 etcd düğümünün 50 saniye içinde başlatılması gerektiğini, aksi takdirde ana seçim zaman aşımı nedeniyle hata vereceğini unutmayın.

Örneğin,etcd1 düğümümde değişkenler şöyle olacaktır:

ETCD_NAME=etcd1
##ETCD_DATA_DIR=/var/lib/etcd
ETCD_INITIAL_CLUSTER=etcd1=http://192.168.200.52:2380,etcd2=http://192.168.200.62:2380,etcd3=http://192.168.200.63:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS=http://192.168.200.52:2380
ETCD_ADVERTISE_CLIENT_URLS=http://192.168.200.52:2379
ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379

3 düğümün tamamında değişiklikler yapıldıktan sonra, etcd hizmetini aşağıdaki komutlarla başlatın veya yeniden başlatın:

sudo systemctl daemon-reload
sudo systemctl enable --now etcd

##To Restart, Use:
sudo systemctl restart etcd

Hizmetin tüm düğümlerde çalışıp çalışmadığını doğrulayın:

$ systemctl status etcd
● etcd.service - etcd
     Loaded: loaded (/etc/systemd/system/etcd.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2023-11-19 16:21:21 EAT; 29s ago
   Main PID: 4684 (etcd)
      Tasks: 7 (limit: 4617)
     Memory: 12.7M
        CPU: 455ms
     CGroup: /system.slice/etcd.service
             └─4684 /usr/local/bin/etcd

Nov 19 16:21:43 etcd1.computingforgeeks.com etcd[4684]: {"level":"info","ts":"2023-11-19T16:21:43.013666+0300","caller":"rafthttp/peer_status.go:53","msg":"peer became active","peer-id":"3c>
Nov 19 16:21:43 etcd1.computingforgeeks.com etcd[4684]: {"level":"info","ts":"2023-11-19T16:21:43.014271+0300","caller":"rafthttp/stream.go:412","msg":"established TCP streaming connection >
Nov 19 16:21:43 etcd1.computingforgeeks.com etcd[4684]: {"level":"info","ts":"2023-11-1
....

Şimdi bu noktada küme çalışır durumdadır.  Bunu doğrulamak için aşağıdaki komutu kullanın ve IP’yi herhangi bir vbd sunucusunun IP’siyle değiştirin.

$ etcdctl --endpoints=http://192.168.200.52:2379 member list
12aca8afa5a60d1a, started, etcd1, http://192.168.200.52:2380, http://192.168.200.52:2379, false
3ccdae3b547878c4, started, etcd3, http://192.168.200.63:2380, http://192.168.200.63:2379, false
cdf1b4107740a046, started, etcd2, http://192.168.200.62:2380, http://192.168.200.62:2379, false

Yukarıdaki çıktıya göre,etcd kümesinde 3 düğümümüz var.

3. LoadBalancer’ı Kurun ve Yapılandırın

İlk önce yük dengeleyiciyi yükleyin.  Bu kılavuzda yük dengeleyicimiz olarak Haproxy’yi kullanacağız.  Nginx’i veya başka herhangi birini istediğiniz gibi kullanabilirsiniz.

Haproxy’yi Ubuntu sisteminize kurmak için şunu kullanın:

##On Debian/Ubuntu
sudo apt update && sudo apt install haproxy

Kurulduktan sonra hizmeti başlatın ve etkinleştirin:

sudo systemctl start haproxy
sudo systemctl enable haproxy

Devam edin ve proxy yapılandırmasını oluşturun:

sudo cp /etc/haproxy/haproxy.cfg{,.old}
sudo vim /etc/haproxy/haproxy.cfg

HAProxy yapılandırmasının 4 ana bölümden oluştuğunu unutmayın.  Bunlar:

  • Global section Çalışan tüm sunucuların parametrelerini içeren genel bölüm.
  • Default settings Tüm proxy alt bölümleri için geçerli ayrıntıları içeren varsayılan ayarlar
  • Frontend settings Ön uç ayarları, istemci bağlantısındaki dinleme yuvalarını tanımlar
  • Backend settings Arka uç ayarları, sunucu IP adresini ve yük dengeleyici algoritmasını tanımlar

Dosyaya yük dengelemeyi nasıl ele alması gerektiğini tanımlayan aşağıdaki satırları eklememiz gerekiyor:

frontend main
    bind *:2379
    mode tcp
    default_backend etcd-api

backend etcd-api
    mode tcp
    balance roundrobin
    server node1  etcd1.computingforgeeks.com:2379 check
    server node2  etcd2.computingforgeeks.com:2379 check
    server node3  etcd3.computingforgeeks.com:2379 check

Yukarıdaki dosyada alan adlarını doğru şekilde girin.  Etkinleştirilmiş bir güvenlik duvarınız varsa, bu bağlantı noktasının tüm düğümlerde üzerinden geçmesine izin verin:

sudo ufw allow 2379

Şimdi HAProxy hizmetini yeniden başlatın:

sudo systemctl restart haproxy

Artık yük dengeleyici IP’sini kullanarak kümeye erişebilirsiniz.  Örneğin:

Artık Kubernetes kümenizdeki etcd uç noktasını kullanabilirsiniz.  Bunu gösterildiği gibi Kubernetes yapılandırmasında belirtmeniz gerekir:

$ sudo vim /etc/kubernetes/apiserver
KUBE_ETCD_SERVERS=” — etcd_servers=http://etcd1:2379,http://etcd2:2379, http://etcd3:2379"
##OR
KUBE_ETCD_SERVERS=” — etcd_servers=http://<loadbalancer-IP>:2379

Kümeye yazıp yazamadığınızı test edin:

##Member list in a table
# etcdctl --write-out=table --endpoints=<loadbalancer_IP>:2379 member list
+------------------+---------+--------+------------------------+------------------------+
|        ID        | STATUS  |  NAME  |       PEER ADDRS       |      CLIENT ADDRS      |
+------------------+---------+--------+------------------------+------------------------+
| 8211f1d0f64f3269 | started | etcd1 | http://192.168.200.52:2380  | http://192.168.200.52:2379  |
| 91bc3c398fb3c146 | started | etcd2 | http://192.168.200.62:22380 | http://192.168.200.62:22379 |
| fd422379fda50e48 | started | etcd3 | http://192.168.200.63:32380 | http://192.168.200.63:32379 |
+------------------+---------+--------+------------------------+------------------------+

##Store a Key
$ etcdctl put key hello
OK

##Retrieve the Key
$ etcdctl get key
hello

4. TLS sertifikalarıyla vb. güvenliği sağlayın

ETCD kümeniz için sertifikalar oluşturmak ve kullanmak mümkündür.  Bu, düğümler arasında güvenli bir iletişim sağlar.  Bunu göstermek için ETCD için kendinden imzalı sertifikalar oluşturacağım.

Bunun için Mkcert’i kullanabiliriz.  Öncelikle GitHub sürümlerinden en son ikili dosyayı alarak yükleyin.  Sürümü dışa aktaracağız:

VER=v1.4.4

Şimdi ikili dosyaları şu komutla indirin:

##AMD64 
wget https://github.com/FiloSottile/mkcert/releases/download/$VER/mkcert-$VER-linux-amd64

##ARM64
wget https://github.com/FiloSottile/mkcert/releases/download/$VER/mkcert-$VER-linux-arm64

##ARM
wget https://github.com/FiloSottile/mkcert/releases/download/$VER/mkcert-$VER-linux-arm

Çalıştırılabilir hale getirin ve PATH’inize taşıyın

chmod +x mkcert-$VER-linux-* 
sudo mv mkcert-$VER-linux-* /usr/local/bin/mkcert

Şimdi şu komutla sertifikalar oluşturun:

mkcert -install
mkcert '*.computingforgeeks.com'

Daha sonra konumlarınızda oluşturulan anahtar ve sertifikaya sahip olacaksınız.  CA, $(mkcert -CAROOT)/rootCA.pem dosyasında mevcuttur.  SSL sertifikası uyarılarından kaçınmak için CA’yı istemcinize kopyalayıp kullanabilirsiniz.

Bu sertifikaları tüm etcd düğümlerine kopyalayın.  Bunun için SCP’yi kullanabilirsiniz.

Sertifikalar gerekli dizine taşındıktan sonra /etc/ssl/certs/etcd deyin.  Etcd’yi bunları kullanacak şekilde yapılandırmaya şu satırları ekleyerek yapılandırabilirsiniz:

Sample on Node 2:

$ sudo vim /etc/default/etcd
ETCD_NAME=etcd2
##ETCD_DATA_DIR=/var/lib/etcd
ETCD_INITIAL_CLUSTER=etcd1=http://192.168.200.52:2380,etcd2=http://192.168.200.62:2380,etcd3=http://192.168.200.63:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.200.62:2380
ETCD_ADVERTISE_CLIENT_URLS=https://192.168.200.62:2379
ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
ETCD_LISTEN_CLIENT_URLS=https://0.0.0.0:2379
##[Security]
ETCD_CERT_FILE=/etc/ssl/certs/etcd/_wildcard.computingforgeeks.com.pem
ETCD_KEY_FILE=/etc/ssl/certs/etcd/_wildcard.computingforgeeks.com-key.pem
#ETCD_CLIENT_CERT_AUTH="false"
ETCD_TRUSTED_CA_FILE=/etc/ssl/certs/etcd/rootCA.pem

3 sunucunun tamamında değişiklikler yapıldıktan sonra,etcd hizmetini yeniden başlatın:

sudo systemctl restart etcd

CA sertifikasını, gösterildiği gibi sisteminizdeki güvenilir sertifikalar listesine ekleyebilirsiniz:

sudo cp /etc/ssl/certs/etcd/rootCA.pem /usr/local/share/ca-certificates/rootCA.crt
sudo update-ca-certificates

CA’yı güvenilen sertifikalar listesine ekleyemiyorsanız veya eklemek istemiyorsanız, kümeyi gösterildiği gibi belirterek erişebilirsiniz:

$ etcdctl --endpoints=https://192.168.200.56:2379 member list --cacert /path/to/rootCA.crt
12aca8afa5a60d1a, started, etcd1, https://192.168.200.52:2380, https://192.168.200.52:2379, false
3ccdae3b547878c4, started, etcd3, https://192.168.200.63:2380, https://192.168.200.63:2379, false
cdf1b4107740a046, started, etcd2, https://192.168.200.62:2380, https://192.168.200.62:2379, false

Bu, düğümler arasındaki iletişimin güvenli olduğunu gösterir.

 

 

Yazının orijinalini buradan okuyabilirsiniz.

Skip to content