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:
TASK | IP ADRES | HOSTNAME |
ETCD1 | 192.168.200.52 | etcd1.computingforgeeks.com |
ETCD1 | 192.168.200.62 | etcd2.computingforgeeks.com |
ETCD1 | 192.168.200.63 | etcd3computingforgeeks.com |
LOAD-BALANCER | 192.168.200.56 | loadbalancer.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.
Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.