Bu kılavuzda Gatus’u Kubernetes’i kullanarak bir sağlık kontrol paneli aracı olarak yapılandıracağız.
Önkoşullar
- Yeni kaynak oluşturmaya yetkili bir küme
- Kubectl yerelde yüklü olmalı
En yeni Gatus, resmi docker hub hesabında docker görüntüsü olarak mevcuttur. Bu görüntüyü kurulum için kullanacağız.
Kubernetes Manifest’lerini Ayarlama
Önkoşulları yerine getirdikten sonra Kubernetes kaynak bildirimlerini oluşturabiliriz.
Namespace
Kubernetes’te ad alanı, tek bir küme içindeki kaynak gruplarının yalıtılmasına yönelik bir mekanizma sağlar. Kaynak adlarının bir ad alanı içinde benzersiz olması gerekir, ancak ad alanları arasında benzersiz olması gerekmez. Ad alanı tabanlı kapsam yalnızca ad alanlı nesneler (örn. Dağıtımlar, Hizmetler vb.) için geçerlidir ve küme çapındaki nesneler (örn. StorageClass, Nodes, PersistentVolumes vb.) için geçerli değildir.
Gatus kaynaklarımız için bir ad alanı oluşturalım. Aşağıdakileri namespace.yaml dosyasına kaydedin:
---
apiVersion: v1
kind: Namespace
metadata:
name: gatus
Daha sonra gatus adında yeni bir ad alanı oluşturmak için aşağıdaki komutu yürütün.
kubectl apply -f namespace.yaml
Gatus Yapılandırmalarını Dışsallaştırmak için Yapılandırma Haritası Oluşturun
Gatus’a yönelik tüm yapılandırmalar, izlenecek uç noktaları ve uyarı kanallarını tanımlayan config.yaml dosyasının bir parçasıdır. Bu yapılandırma dosyası uygulamayı başlatırken belirtilecektir.
ConfigMap, gizli olmayan verileri anahtar/değer çiftlerinde depolamak için kullanılan bir API nesnesidir. Pod’lar ConfigMaps’i ortam değişkenleri, komut satırı bağımsız değişkenleri veya bir birimdeki yapılandırma dosyaları olarak kullanabilir. Configfile haritamızı bir configmap olarak belirleyip, birimdeki konfigürasyon dosyası olarak dağıtıma aktarıyoruz.
config-map.yaml adında bir dosya oluşturun ve aşağıdaki dosya içeriklerini ekleyin:
apiVersion: v1
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/instance: gatus
app.kubernetes.io/name: gatus
name: gatus-config
data:
config.yaml: |-
alerting:
slack:
webhook-url: "https://hooks.slack.com/services/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"
default-alert:
enabled: true
description: "Health check failed"
send-on-resolved: true
failure-threshold: 3
success-threshold: 2
endpoints:
- name: Application One
url: https://app-one.citizix.co/healthz
interval: 30s
conditions:
- "[STATUS] == 200"
- "[RESPONSE_TIME] < 1000"
alerts:
- type: slack
failure-threshold: 3
success-threshold: 2
- name: Application Two
url: https://app-two.citizix.co/healthz
interval: 30s
conditions:
- "[STATUS] == 200"
- "[RESPONSE_TIME] < 1000"
alerts:
- type: slack
failure-threshold: 3
success-threshold: 2
storage:
type: postgres
path: "postgres://user:[email protected]:5432/gatus?sslmode=disable"
Yukarıda tanımlanan yapılandırmalarda, tanımlanan eşikler bir hatayı tetiklediğinde uyarı bildirimleri için gevşek web kancası tanımlıyoruz. Ayrıca birinci uygulama ve ikinci uygulama için iki uç nokta tanımlıyoruz. Son olarak verileri postgres’te ısrar ediyoruz.
Kubernetes’te yapılandırma haritasını oluşturmak için aşağıdaki komutu yürütün.
kubectl create -f config-map.yaml
Gatus Dağıtımı Oluşturun
Dağıtım, Pod’lar ve ReplicaSet’ler için bildirime dayalı güncellemeler sağlar. Bir Dağıtımda istenen bir durumu tanımlarsınız ve Dağıtım Denetleyicisi gerçek durumu kontrollü bir hızda istenen duruma değiştirir. Yeni ReplicaSet’ler oluşturmak veya mevcut Dağıtımları kaldırmak ve tüm kaynaklarını yeni Dağıtımlarla benimsemek için Dağıtımları tanımlayabilirsiniz.
Bizim durumumuzda, docker-hub tarafından sağlanan görüntüyü kullanacağız ve önceden tanımlanmış configmap’i /config’e işaret edilmiş bir birim olarak bağlayacağız.
Aşağıdaki içeriği dağıtım.yaml dosyasına kaydedin.
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: gatus
labels:
app: gatus
spec:
replicas: 1
selector:
matchLabels:
app: gatus
template:
metadata:
labels:
app: gatus
spec:
containers:
- name: gatus
image: twinproduction/gatus:latest
ports:
- containerPort: 8080
name: http
protocol: TCP
volumeMounts:
- name: gatus-config
mountPath: /config
volumes:
- name: gatus-config
configMap:
defaultMode: 420
name: gatus-config
Yukarıdaki dosyayı kullanarak ad alanını izleme konusunda bir dağıtım oluşturun.
kubectl create -f deployment.yaml
Aşağıdaki komutu kullanarak oluşturulan dağıtımı kontrol edebilirsiniz.
kubectl get deployments --namespace=gatus
kubectl get pods --namespace=gatus
Gatus Kontrol Paneline Bağlanma
Dağıtılan Gatus kontrol panelini üç farklı şekilde görüntüleyebilirsiniz.
- Kubectl bağlantı noktası yönlendirmeyi kullanma
- Gatus dağıtımını NodePort veya Load Balancer ile bir hizmet olarak kullanıma sunma.
- Dağıtılmış bir Ingress denetleyiciniz varsa bir Ingress nesnesi ekleme.
Kubectl bağlantı noktası yönlendirmeyi kullanma
Kubectl bağlantı noktası yönlendirmeyi kullanarak, yerel ana makinenizde seçilen bir bağlantı noktasını kullanarak yerel iş istasyonunuzdan bir pod’a erişebilirsiniz. Bu yöntem öncelikle hata ayıklama amacıyla kullanılır.
İlk önce Gatus pod adını alın.
kubectl get pods --namespace=gatus
Çıktı aşağıdaki gibi görünecektir.
➜ kubectl get pods --namespace=gatus NAME READY STATUS RESTARTS AGE gatus-b8895b7b-bpmfn 1/1 Running 0 30m
Gatus’a localhost bağlantı noktası 8080’den erişmek için pod adınızla aşağıdaki komutu yürütün.
Not: gatus-b8895b7b-bpmfn’yi bölme adınızla değiştirin.
kubectl port-forward gatus-b8895b7b-bpmfn 8080:8080 -n gatus
Artık tarayıcınızda http://localhost:8080’e erişirseniz Gatus ana sayfasını göreceksiniz.
Gatus’u Hizmet Olarak Kullanıma Sunma [NodePort ve LoadBalancer]
Gatus kontrol paneline bir IP veya DNS adı üzerinden erişmek için onu bir Kubernetes hizmeti olarak kullanıma sunmanız gerekir.
service.yaml adında bir dosya oluşturun ve aşağıdaki içerikleri kopyalayın. Gatus’u 40000 numaralı bağlantı noktasındaki tüm kubernetes düğüm IP’lerinde açığa çıkaracağız.
Not: AWS, Azure veya Google Cloud kullanıyorsanız yük dengeleyici oluşturacak ve bunu otomatik olarak Kubernetes hizmeti uç noktasına yönlendirecek Yük Dengeleyici türünü kullanabilirsiniz.
--- apiVersion: v1 kind: Service metadata: name: gatus labels: app: gatus namespace: gatus spec: selector: app: gatus type: NodePort ports: - name: gatus protocol: TCP port: 8080 targetPort: http nodePort: 40000
Aşağıdaki komutu kullanarak hizmeti oluşturun.
kubectl create -f service.yaml --namespace=gatus
Oluşturulduktan sonra Gatus kontrol paneline 40000 numaralı bağlantı noktasındaki herhangi bir Kubernetes düğümü IP’sini kullanarak erişebilirsiniz. Buluttaysanız iş istasyonunuzdan 40000 numaralı bağlantı noktasına erişmek için doğru güvenlik duvarı kurallarına sahip olduğunuzdan emin olun.
Ingress’i Kullanarak Gatus’u Gösterme
Mevcut bir giriş denetleyici kurulumunuz varsa Gatus DNS’yi Gatus arka uç hizmetine yönlendirmek için bir giriş nesnesi oluşturabilirsiniz.
Ayrıca giriş katmanına Gatus için SSL ekleyebilirsiniz. Daha fazla ayrıntı için Kubernetes giriş TLS/SSL Sertifikası kılavuzuna başvurabilirsiniz.
Burada örnek bir giriş nesnesi verilmiştir.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx labels: app.kubernetes.io/instance: gatus app.kubernetes.io/name: gatus name: gatus namespace: gatus spec: rules: - host: gatus.citizix.com http: paths: - backend: service: name: gatus port: number: 8080 path: / pathType: ImplementationSpecific
Kustomize’yi Kullanma
Kustomize, kullanıma hazır uygulamaların kullanımını basitleştiren uygulama yapılandırmasını özelleştirmenin şablonsuz bir yolunu sunar. Şimdi kubectl’in içine Apply -k şeklinde yerleştirilmiş.
Bizim durumumuzda birden fazla kubectl application -f <filename> önlemek için tüm kaynakları tanımlamak ve ardından tek olarak uygulamak için kustomize komutunu kullanabiliriz. Aşağıdakileri kustomization.yaml olarak kaydedin.
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: gatus
resources:
- namespace.yaml
- configmap.yaml
- deployment.yaml
- service.yaml
- ingress.yaml
Then apply using this command:
➜ kubectl apply -k .
namespace/gatus unchanged
configmap/gatus-config unchanged
service/gatus unchanged
deployment.apps/gatus unchanged
ingress.networking.k8s.io/gatus unchanged
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.