giriiş
Bu eğitimde, servis ve node keşfi için Consul ile bir HashiCorp Nomad kümesi kuracağız.
3 sunucu düğümü ve isteğe bağlı sayıda istemci düğümüyle bu kurulum, büyüyen projeler için bir temel oluşturabilir.
Ayrıca, manuel yapılandırmaya gerek kalmadan daha fazla istemcinin eklenmesine olanak sağlayacak şekilde, istemciler için Hetzner Bulutunun bir Anlık Görüntüsünü de oluşturacağız.
Küme, sunucular arasında özel bir ağ üzerinde çalışır ve hizmet keşfi ve birim yönetimi gibi tüm Nomad ve Consul özelliklerini anında destekler.
Bu eğitim kısmen Consul and Nomad'ın resmi dağıtım kılavuzunda önerilen adımları takip etmektedir.
Ön koşullar
- Bir Hetzner Cloud hesabı
- Linux ve kabuk komutlarının temel bilgisi
- Sunucuya ssh ile bağlanma yeteneği
- Bir Hetzner sunucunuz var
Bu eğitim Ubuntu 24.04 Hetzner Cloud sunucularında Nomad 1.9.3 ve Consul 1.20.1 sürümlerinde test edilmiştir.
Terimler ve semboller
Komutlar
local$ <command> این دستور باید روی ماشین محلی اجرا شود.
server$ <command> این دستور باید بهعنوان root روی سرور اجرا شود.
Adım 1 – Temel görüntüyü oluşturun
Bu adımda aşağıdaki kaynak kullanılacaktır:
- 1 Hetzner Bulut Sunucusu Türü CX22
Yeni bir CX22 sunucusunda bir Consul/Nomad sunucusu kurarak başlayacağız. Oluşturulan anlık görüntü, aşağıdaki adımlarda tüm küme sunucuları ve istemcileri için temel görüntü görevi görecektir.
Bu kılavuz, 3 sunucu için kurulumu göstermektedir. Bu, kümenin yüksek erişilebilirlikli olmasını sağlar, ancak çok pahalı değildir. Tek bir sunucu kurmak önerilmez, ancak mümkündür. Eğitimde, ilgili adımlarda 3 sunucudan biri veya daha fazlası için gereken değişiklikler hakkında yorumlar yer alacaktır.
Hetzner Cloud web arayüzüne gidin ve Ubuntu 24.04 ile yeni bir CX22 sunucusu oluşturun.
Adım 1.1 – Consul'u Yükleme
Consul'u yükleyin
Mevcut sürümler hakkında daha fazla bilgi için resmi web sitesini ziyaret edin.
server$ wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
server$ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list
server$ apt update && apt install consulArtık Consul'a otomatik tamamlama işlevselliğini ekleyebiliriz (isteğe bağlı)
server$ consul -autocomplete-installKonsolosluk için TLS sertifikalarının hazırlanması
server$ consul tls ca create
server$ consul tls cert create -server -dc dc1
server$ consul tls cert create -server -dc dc1
server$ consul tls cert create -server -dc dc1
server$ consul tls cert create -client -dc dc1Consul kümesinde 3'ten az veya çok sunucu çalıştırmak istiyorsanız, komutu tekrarlayın konsolos tls cert create -server -dc dc1 Uyum sağlayın.
Bir küme sunucusu için sadece bir sertifika yeterli olurken, 5 sunucu için 5 sertifikaya ihtiyacınız var.
Bu komutlar 3 adet sunucu sertifikası ve bir adet istemci sertifikası oluşturacaktır.
Dosya /kök/ Artık en azından aşağıdaki dosyaları içermesi gerekir:
server$ ls
consul-agent-ca.pem
consul-agent-ca-key.pem
dc1-server-consul-0.pem
dc1-server-consul-0-key.pem
dc1-server-consul-1.pem
dc1-server-consul-1-key.pem
dc1-server-consul-2.pem
dc1-server-consul-2-key.pem
dc1-client-consul-0.pem
dc1-client-consul-0-key.pemAdım 1.2 – Nomad ikili dosyasının kurulumu
Nomad'ı yükleyin
Mevcut sürümler hakkında daha fazla bilgi için resmi web sitesini ziyaret edin.
server$ wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
server$ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list
server$ apt update && apt install nomadNomad için otomatik tamamlamayı ekle (isteğe bağlı):
server$ nomad -autocomplete-installAşağıdaki yapılandırma dosyası /etc/nomad.d/nomad.hcl Eklemek:
datacenter = "dc1"
data_dir = "/opt/nomad"Adım 1.3 - systemd servislerini hazırlama
Consul ve Nomad yeniden başlatmanın ardından otomatik olarak başlayacaktır. Bunu yapmak için her biri için bir systemd servisi oluşturun.
Öncelikle tüm izinleri ayarlayın:
server$ chown consul:consul dc1-server-consul*
server$ chown consul:consul dc1-client-consul*
server$ chown -R consul:consul /opt/consul
server$ chown -R nomad:nomad /opt/nomad
server$ mkdir -p /opt/alloc_mounts && chown -R nomad:nomad /opt/alloc_mountsAşağıdaki yapılandırma dosyası /etc/systemd/system/consul.service Eklemek:
[Unit]
Description="HashiCorp Consul - A service mesh solution"
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target
ConditionFileNotEmpty=/etc/consul.d/consul.hcl
[Service]
EnvironmentFile=-/etc/consul.d/consul.env
User=consul
Group=consul
ExecStart=/usr/bin/consul agent -config-dir=/etc/consul.d/
ExecReload=/bin/kill --signal HUP $MAINPID
KillMode=process
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.targetve aşağıdaki yapılandırma dosyasını /etc/systemd/system/nomad.service Eklemek:
[Unit]
Description=Nomad
Documentation=https://www.nomadproject.io/docs/
Wants=network-online.target
After=network-online.target
[Service]
User=nomad
Group=nomad
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/bin/nomad agent -config /etc/nomad.d
KillMode=process
KillSignal=SIGINT
LimitNOFILE=65536
LimitNPROC=infinity
Restart=on-failure
RestartSec=2
OOMScoreAdjust=-1000
TasksMax=infinity
[Install]
WantedBy=multi-user.targetKurulum henüz tamamlanmadığından bu hizmetleri henüz etkinleştirmeyin.
Adım 1.5 – Temel Bir Anlık Görüntü Oluşturun
Son olarak, Hetzner Cloud konsolunda sunucuyu durdurun ve bir Anlık Görüntü oluşturun. Bu Anlık Görüntü, sunucu ve küme istemcilerini yapılandırmanın temeli olarak kullanılacaktır.
Anlık görüntü oluşturma işlemi başarılı olduktan sonra, bu adımdan CX22 örneğini silin.
Adım 2 – Küme sunucularını kurma
Bu adımda, 1. adımda oluşturulan temel imajdan 3 adet küme sunucusu oluşturacaksınız.
Bu sunucular kümenizin temelini oluşturur ve dinamik olarak bir küme lideri seçer.
- 1 Hetzner Bulut Ağı
- 3 Hetzner Bulut Sunucusu Tip CX22
Hetzner Cloud Konsolunda, 1. Adımda oluşturulan Snapshot'tan 3 adet CX22 sunucusu ve paylaşımlı bir Cloud Network oluşturun.
Bu kılavuz 10.0.0.0/8 ağını kullanır, ancak daha küçük ağlar da işe yarar.
Eğitimin ilerleyen adımlarında 10.0.0.2, 10.0.0.3 ve 10.0.0.4 dahili adreslerine sahip sunuculardan bahsedilecektir.
Sunucularınızın farklı dahili adresleri varsa, bunları bir sonraki adımlarda değiştirin.
Adım 2.1 – Simetrik bir şifreleme anahtarı oluşturun
Öncelikle, tüm sunucular arasında paylaşılacak simetrik bir şifreleme anahtarı oluşturun. Bu anahtarı güvenli bir yerde saklayın; sonraki adımlarda buna ihtiyacımız olacak.
server$ consul keygenAdım 2.2 – Consul'u Yapılandırma
Her sunucu için bir Consul yapılandırma dosyası oluşturun. Bu dosya, diğer sunucuların dahili IP adreslerini içerecektir.
Yoldaki her sunucu için /etc/consul.d/consul.hcl Aşağıdaki dosyayı oluşturun:
datacenter = "dc1" data_dir = "/opt/consul" encrypt = "" ca_file = "/root/consul-agent-ca.pem" cert_file = "/root/dc1-server-consul-0.pem" key_file = "/root/dc1-server-consul-0-key.pem" verify_incoming = true verify_outgoing = true verify_server_hostname = true performance { raft_multiplier = 1 } retry_join = ["10.0.0.2", "10.0.0.3", "10.0.0.4"] bind_addr = "0.0.0.0" client_addr = "0.0.0.0" server = true bootstrap_expect = 3 ui = true
Yer değiştirmek <CONSUL_KEY> komuttan üretilen anahtarla konsül keygen.
Diğer sunucular için, sertifika_dosyası Ve anahtar_dosyası Bunu, o sunucunun sertifikasıyla eşleşecek şekilde değiştirin.
Adım 2.3 – Nomad'ı Yapılandırma
Her sunucu için bir Nomad yapılandırma dosyası oluşturun. Bu dosya, yol bölümünde bulunur. /etc/nomad.d/nomad.hcl Olacak:
datacenter = "dc1"
data_dir = "/opt/consul"
encrypt = "your-symmetric-encryption-key"
tls {
defaults {
ca_file = "/etc/consul.d/consul-agent-ca.pem"
cert_file = "/etc/consul.d/dc1-server-consul-0.pem"
key_file = "/etc/consul.d/dc1-server-consul-0-key.pem"
verify_incoming = true
verify_outgoing = true
},
internal_rpc {
verify_server_hostname = true
}
}
retry_join = ["10.0.0.2"]
bind_addr = "{{ GetPrivateInterfaces | include \"network\" \"10.0.0.0/8\" | attr \"address\" }}"
acl = {
enabled = true
default_policy = "allow"
enable_token_persistence = true
}
performance {
raft_multiplier = 1
}Adresleri değiştir 10.0.0.x Her sunucunun dahili adresiyle.
Adım 2.4 – Hizmetleri etkinleştirin ve başlatın
Yapılandırma dosyalarını oluşturduktan sonra Consul ve Nomad'ı systemd servisleri olarak etkinleştirin ve başlatın:
server$ systemctl enable consul server$ systemctl start consul server$ systemctl enable nomad server$ systemctl start nomadAşağıdaki komutları kullanarak her bir servisin durumunu kontrol edin:
server$ systemctl status consul
server$ systemctl status nomadAdım 2.5 – Consul kümesini doğrulayın
Consul kümesinin durumunu kontrol etmek için aşağıdaki komutu çalıştırın:
server$ consul membersKümedeki tüm sunucuların ve istemcilerin bir listesini görmelisiniz. Herhangi bir sorun varsa, yapılandırma dosyalarını tekrar kontrol edin ve günlükleri okuyun:
server$ journalctl -u consulAdım 2.6 – Nomad Kümesinin Doğrulanması
Aşağıdaki komutu kullanarak Nomad kümesinin durumunu kontrol edin:
server$ nomad server membersKümedeki Nomad sunucularının bir listesini görmelisiniz. Herhangi bir sorun varsa, yapılandırma dosyalarını kontrol edin ve günlükleri okuyun:
server$ journalctl -u nomadAdım 2.7 – Web arayüzünü kontrol edin
Consul ve Nomad web arayüzleri artık kullanılabilir olmalı:
- Konsolos:
http:// :8500 - Göçebe:
http:// :4646
Yer değiştirmek <SERVER_IP> sunucunun genel veya özel IP adresiyle.
Adım 3 – Müşterileri Ekleyin
Artık Nomad istemcileri ekleyebilirsiniz. Bu adım, sunucu kurulumuna benzer, ancak istemci rolüyle.
Adım 3.1 – İstemcileri yükleyin ve yapılandırın
Nomad istemcileri için kurulum adımları, sunucular için olanlara benzerdir. İlk olarak, istemci makinelerine Consul ve Nomad'ı kurun.
Bu adımlar paketlerin indirilmesi ve kurulmasını içerir.
Adım 3.2 – Müşteriler için Consul'u kurma
Yoldaki bir Consul yapılandırma dosyası /etc/consul.d/consul.hcl Oluşturun. İstemciler için yapılandırma daha basittir:
client {
enabled = true
network_interface = "{{ GetPrivateInterfaces | include \"network\" \"10.0.0.0/8\" | attr \"name\" }}"
}
acl {
enabled = true
}IP adreslerinin şu şekilde olduğunu unutmayın: yeniden_katılmayı_dene Bunlar Consul sunucularının dahili adresleridir.
Sertifika ve anahtar dosyaları (cert ve key) istemciye özel olmalıdır.
Adım 3.3 – Müşteriler için Nomad'ı kurma
Nomad yapılandırma dosyasını yola yerleştirin /etc/nomad.d/nomad.hcl Oluştur. İstemciler için bu yapılandırma aşağıdaki ayarları içerir:
datacenter = "dc1" data_dir = "/opt/nomad" bind_addr = "0.0.0.0" advertise { http = "10.0.1.2:4646" rpc = "10.0.1.2:4647" serf = "10.0.1.2:4648" } client { enabled = true network_interface = "eth0" servers = ["10.0.0.2:4647", "10.0.0.3:4647", "10.0.0.4:4647"] } tls { http = true rpc = true ca_file = "/root/consul-agent-ca.pem" cert_file = "/root/dc1-client-consul-0.pem" key_file = "/root/dc1-client-consul-0-key.pem" verify_server_hostname = true }Adres reklam vermek Bu istemcinin dahili adresini göstermelidir. Ayrıca, adresler sunucular Bunlar Nomad sunucuları ile aynıdır.
Adım 3.4 – Hizmetleri etkinleştirin ve başlatın
Sunucularda olduğu gibi, istemciler için Consul ve Nomad servislerini etkinleştirin ve yapılandırın:
client$ systemctl enable consul
client$ systemctl start consul
client$ systemctl enable nomad
client$ systemctl start nomadHizmetlerin durumunu kontrol edin:
client$ systemctl status consul
client$ systemctl status nomadAdım 3.5 – İstemci Bağlantısını Kontrol Etme
İstemcilerin Consul kümesine bağlı olduğundan emin olun. Bir sunucudan aşağıdaki komutu çalıştırın:
server$ consul membersMüşteriler listede görünür olmalıdır. Ayrıca Nomad için:
server$ nomad node statusİstemciler "hazır" durumunda olmalıdır. Bir sorun varsa, yapılandırma dosyalarını kontrol edin ve günlükleri okuyun:
client$ journalctl -u consul
client$ journalctl -u nomadAdım 4 – Nomad'da görevleri çalıştırma
Doğru kurulumu sağladıktan sonra Nomad üzerinde işlerinizi tanımlayıp çalıştırabilirsiniz.
Örneğin bir görev yapılandırma dosyası oluşturun:
job "example" { datacenters = ["dc1"] group "example-group" { task "example-task" { driver = "docker" config { image = "nginx:latest" } resources { cpu = 500 memory = 256 } } } }Yukarıdaki dosyanın adını yazın örnek.göçebe Aşağıdaki komutla kaydedip çalıştırın:
server$ nomad job run example.nomadGörev yürütme durumunu kontrol edin:
server$ nomad job status exampleSonuç
Consul ve Nomad kümesini başarıyla kurdunuz. Artık bu altyapıyı görevlerinizi ve hizmetlerinizi yönetmek için kullanabilirsiniz.









