Kubernetes’te durum kontrolü izleme için Gatus nasıl kurulur ve çalıştırılır

Gatus, HTTP, ICMP, TCP ve hatta DNS sorgularını kullanarak hizmetlerinizi izlemenin yanı sıra durum kodu, yanıt süresi gibi değerlere ilişkin koşulların bir listesini kullanarak söz konusu sorguların sonuçlarını değerlendirme olanağı sağlayan bir sağlık kontrol panelidir. , sertifikanın geçerlilik süresinin dolması, kuruluş ve diğerleri.  İşin güzel yanı, bu sağlık kontrollerinin her birinin Slack, PagerDuty, Discord, Twilio ve daha fazlası aracılığıyla uyarılarla eşleştirilebilmesidir.

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.

  1. Kubectl bağlantı noktası yönlendirmeyi kullanma
  2. Gatus dağıtımını NodePort veya Load Balancer ile bir hizmet olarak kullanıma sunma.
  3. 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.