Jamil Sultanli.
← Ana Səhifəyə Qayıt

Kubernetes Nədir və Necə İşləyir? Konteynerlərin İdarə Edilməsi Bələdçisi

·12 dəqiqə

Müasir proqram təminatı dünyasında tətbiqlərin sürətli, təhlükəsiz və fasiləsiz işləməsi hər bir texnologiya şirkətinin əsas hədəfidir. Keçmişdə tətbiqlər fiziki serverlərdə və ya virtual maşınlarda (VM) birbaşa işə salınırdı. Lakin bu metod resursların səmərəsiz istifadəsinə və asılılıq (dependency) münaqişələrinə yol açırdı. Docker kimi texnologiyaların gəlişi ilə "konteynerləşdirmə" (containerization) inqilabı baş verdi. Konteynerlər tətbiqləri bütün lazımi kitabxanaları ilə birlikdə izolyasiya olunmuş mühitdə işlətməyə imkan verdi.

Lakin layihələr böyüdükcə, yüzlərlə və ya minlərlə konteyneri idarə etmək, onları müxtəlif serverlər arasında paylamaq, sıradan çıxanları yenidən başlatmaq və yükü balanslaşdırmaq insan gücü ilə qeyri-mümkün hala gəldi. Məhz bu nöqtədə səhnəyə Kubernetes (qısaca K8s) daxil olur. Bu bələdçidə Kubernetes-in nə olduğunu, necə işlədiyini, arxitekturasını və praktiki tətbiq yollarını ən sadə və anlaşıqlı şəkildə öyrənəcəyik.


BUNLARI DA OXUYUN

Sıfırdan Sayt Hazırlamaq Bələdçisi: Kod Yazmadan Professional Veb Sayt Necə Qurulur?

Kod yazmadan professional veb sayt hazırlamaq istəyirsiniz? WordPress, Webflow və Shopify ilə addım-addım sayt qurmaq bələdçisi və ən yaxşı platformalar.

Oxumağa davam et

Kubernetes Nədir? Qısa və Sadə İzah

Kubernetes, konteynerləşdirilmiş tətbiqlərin yerləşdirilməsini (deployment), miqyaslanmasını (scaling) və idarə edilməsini avtomatlaşdıran açıq mənbəli (open-source) bir platformadır. Sadə dillə desək, Kubernetes konteynerlərin idarə edilməsi üzrə bir "orkestr dirijorudur". Əgər hər bir konteyneri bir musiqi aləti hesab etsək, Kubernetes bu alətlərin birlikdə harmoniyada çalmasını təmin edən dirijordur.

Kubernetes ilk olaraq Google mühəndisləri tərəfindən daxili layihə olan "Borg" sisteminin təcrübəsi əsasında hazırlanıb və 2014-cü ildə açıq mənbəli layihə kimi Cloud Native Computing Foundation (CNCF) təşkilatına bağışlanıb. Bu gün o, dünya miqyasında bulud texnologiyalarının standartına çevrilmişdir.

"Kubernetes sadəcə bir alət deyil, o, müasir bulud texnologiyalarının (Cloud-Native) əməliyyat sistemidir."


Docker və Kubernetes: Aralarındakı Fərq Nədir?

Yeni başlayanlar tez-tez "Docker yoxsa Kubernetes?" sualını verirlər. Əslində bu iki texnologiya bir-birinə rəqib deyil, əksinə, bir-birini tamamlayan alətlərdir.

  • Docker: Tətbiqlərinizi konteynerlərə paketləmək, onları yaratmaq və tək bir serverdə işə salmaq üçün istifadə olunur.
  • Kubernetes: Çoxlu sayda serverdə işləyən yüzlərlə Docker konteynerini koordinasiya etmək və idarə etmək üçün istifadə olunur.

Aşağıdakı müqayisə cədvəli bu fərqləri daha aydın göstərir:

XüsusiyyətDocker (Tək Node)Kubernetes (K8s)
Əsas MəqsədKonteyner yaratmaq və işə salmaqKonteynerləri geniş miqyasda idarə etmək
Miqyaslama (Scaling)Manual olaraq həyata keçirilirAvtomatik və dinamik (Auto-scaling)
Özünübərpa (Self-healing)Dəstəklənmir (Konteyner çöksə, manual müdaxilə lazımdır)Avtomatik (Çökən konteynerləri dərhal yenisi ilə əvəz edir)
Yük BalanslaşdırılmasıXarici alətlər tələb olunurDaxili olaraq mövcuddur (Load Balancing)
Quraşdırma SəviyyəsiÇox asan və sürətliMürəkkəb və peşəkar bilik tələb edir

Kubernetes Arxitekturası: Daxildə Nələr Baş Verir?

Kubernetes-in gücünü anlamaq üçün onun daxili arxitekturasını bilmək vacibdir. Kubernetes klasteri (cluster) iki əsas hissədən ibarətdir: Control Plane (Master Node)Worker Nodes.

+-----------------------------------------------------+
|                    CONTROL PLANE                    |
|  +------------+  +--------+  +-------------------+  |
|  | API Server |  |  etcd  |  | Controller Manager|  |
|  +------------+  +--------+  +-------------------+  |
|  +--------------------+                             |
|  |     Scheduler      |                             |
|  +--------------------+                             |
+--------------------------+--------------------------+
                           |
                           v
+-----------------------------------------------------+
|                    WORKER NODES                     |
|  +--------------------+   +--------------------+    |
|  |     Node 1         |   |     Node 2         |    |
|  |  +--------------+  |   |  +--------------+  |    |
|  |  |   Kubelet    |  |   |  |   Kubelet    |  |    |
|  |  +--------------+  |   |  +--------------+  |    |
|  |  |  Kube-Proxy  |  |   |  |  Kube-Proxy  |  |    |
|  |  +--------------+  |   |  +--------------+  |    |
|  |  | Pods (Docker)|  |   |  | Pods (Docker)|  |    |
|  |  +--------------+  |   |  +--------------+  |    |
|  +--------------------+   +--------------------+    |
+-----------------------------------------------------+

1. Control Plane (Master Node)

Control Plane klasterin "beyni" rolunu oynayır. O, klasterin ümumi vəziyyətinə nəzarət edir, qərarlar qəbul edir və sistemin konfiqurasiyasını saxlayır. Onun əsas komponentləri bunlardır:

  • kube-apiserver: Klasterin giriş qapısıdır. Bütün daxili və xarici sorğular (məsələn, sizin yazdığınız əmrlər) bu API vasitəsilə qəbul edilir.
  • etcd: Klasterin bütün məlumatlarını, konfiqurasiyalarını və cari vəziyyətini saxlayan yüksək dərəcədə qorunan "açar-dəyər" (key-value) verilənlər bazasıdır.
  • kube-scheduler: Yeni yaradılan konteynerlərin (podların) hansı fiziki və ya virtual serverdə (node) işləyəcəyinə qərar verir. Bu qərarı verərkən serverlərin boş resurslarını analiz edir.
  • kube-controller-manager: Klasterin arzu olunan vəziyyətdə (desired state) qalmasını təmin edir. Məsələn, əgər siz "3 nüsxə tətbiq işləsin" demisinizsə və onlardan biri çöksə, bu menecer dərhal yeni birini işə salır.

2. Worker Nodes

Worker Node-lar tətbiqlərinizin faktiki olaraq işlədiyi serverlərdir. Hər bir Worker Node aşağıdakı komponentlərə malikdir:

  • Kubelet: Master Node ilə əlaqə saxlayan və konteynerlərin planlaşdırıldığı kimi düzgün işlədiyinə nəzarət edən kiçik bir agentdir.
  • Kube-proxy: Node daxilində və xaricində şəbəkə qaydalarını idarə edən və şəbəkə trafikini yönləndirən komponentdir.
  • Container Runtime: Konteynerləri işə salmaq üçün məsul olan proqram təminatıdır (məsələn, Docker, containerd və ya CRI-O).

Əsas Kubernetes Obyektləri və Anlayışları

Kubernetes ilə işləyərkən tez-tez qarşılaşacağınız bəzi fundamental anlayışlar var:

Pods (Podlar)

Pod, Kubernetes-də yaradıla və idarə oluna bilən ən kiçik, ən sadə obyektdir. Bir pod daxilində bir və ya bir neçə sıx bağlı konteyner işləyə bilər. Pod daxilindəki konteynerlər eyni şəbəkəni (IP ünvanını) və saxlama resurslarını (storage) paylaşırlar.

Deployments (Təqdimatlar)

Deployments, podların necə yaradılacağını və yenilənəcəyini təsvir edən bəyannamədir (declarative state). O, tətbiqinizin neçə nüsxədə (replica) işləyəcəyini təyin edir və tətbiqin yeni versiyasını sıfır kəsinti (zero-downtime) ilə yeniləməyə imkan verir.

Services (Servislər)

Podlar müvəqqətidir (ephemeral). Onlar silindikdə və ya yenidən yaradıldıqda IP ünvanları dəyişir. Service obyekti podlar qrupuna sabit bir IP ünvanı və DNS adı verərək, xarici və ya daxili istifadəçilərin tətbiqə asanlıqla daxil olmasını təmin edir.

Namespaces (Ad Fəzaları)

Bir Kubernetes klasterini virtual olaraq bir neçə hissəyə bölmək üçün istifadə olunur. Məsələn, eyni klaster daxilində "development", "testing" və "production" mühitlərini bir-birindən ayırmaq üçün fərqli Namespace-lərdən istifadə edilir.


Praktiki Tətbiq: İlk Kubernetes Tətbiqinizi Yaradın

İndi isə nəzəriyyəni praktikaya çevirək. Bu bölmədə biz sadə bir Nginx veb serverini Kubernetes klasterində necə işə salacağımızı addım-addım öyrənəcəyik.

Bu testi lokal kompüterinizdə etmək üçün Minikube (lokal Kubernetes klasteri yaradan alət) və kubectl (Kubernetes idarəetmə konsolu) alətlərinin quraşdırılması tövsiyə olunur.

Addım 1: Deployment Faylının Hazırlanması

Kubernetes-də hər şey YAML formatında yazılmış konfiqurasiya faylları ilə idarə olunur. Aşağıda sadə bir Nginx tətbiqini işə salmaq üçün lazım olan nginx-deployment.yaml faylının məzmunu verilmişdir:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3 # Klasterdə eyni vaxtda 3 ədəd Nginx podu işləyəcək
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25.3 # İstifadə olunacaq rəsmi Nginx imici və versiyası
        ports:
        - containerPort: 80 # Konteynerin daxili portu

Addım 2: Deployment-in Klasterə Tətbiq Edilməsi

Yuxarıdakı faylı yaratdıqdan sonra terminalda aşağıdakı əmri icra edərək tətbiqi Kubernetes klasterinizə göndərin:

# YAML faylını klasterə tətbiq edirik
kubectl apply -f nginx-deployment.yaml

Addım 3: Podların Vəziyyətinin Yoxlanılması

Tətbiqin uğurla işə düşdüyünü və 3 nüsxənin yaradıldığını yoxlamaq üçün bu əmri yazın:

# Aktiv podların siyahısını alırıq
kubectl get pods

Çıxış təxminən belə olacaq:

NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-7848d4b86f-abc12   1/1     Running   0          45s
nginx-deployment-7848d4b86f-def34   1/1     Running   0          45s
nginx-deployment-7848d4b86f-ghi56   1/1     Running   0          45s

Addım 4: Tətbiqi Xarici Aləmə Açmaq (Service Yaradılması)

Podlar işləyir, lakin onlara kənardan daxil olmaq üçün bir Service yaratmalıyıq. Terminalda aşağıdakı əmri icra edin:

# Podları xarici trafikə açmaq üçün NodePort tipli servis yaradırıq
kubectl expose deployment nginx-deployment --type=NodePort --port=80

İndi isə servisin hansı port vasitəsilə əlçatan olduğunu öyrənmək üçün bu əmri yazın:

kubectl get services

Artıq brauzerinizdə müvafiq IP və portu yazaraq "Welcome to nginx" səhifəsini görə bilərsiniz!


Niyə Şirkətlər Kubernetes-ə Keçir? Real Biznes Faydaları

Kubernetes-in quraşdırılması və idarə edilməsi müəyyən çətinliklər yaratsa da, böyük və orta miqyaslı şirkətlər üçün onun təqdim etdiyi üstünlüklər əvəzsizdir:

  1. Sıfır Kəsinti ilə Yenilənmə (Rolling Updates): Müştəriləriniz tətbiqdən istifadə edərkən siz arxa fonda yeni versiyanı yükləyə bilərsiniz. Kubernetes köhnə podları növbə ilə söndürüb yeniləri ilə əvəz edir.
  2. Avtomatik Miqyaslanma (Auto-scaling): Qara Cümə (Black Friday) kimi xüsusi günlərdə saytınıza gələn trafik kəskin artdıqda, Kubernetes avtomatik olaraq podların sayını artırır. Trafik azaldıqda isə resurslara qənaət etmək üçün podların sayını azaldır.
  3. Bulud Müstəqilliyi (Multi-cloud Flexibility): Kubernetes standart arxitekturaya malik olduğu üçün siz tətbiqinizi heç bir kod dəyişikliyi etmədən AWS-dən Google Cloud-a və ya Microsoft Azure-a asanlıqla köçürə bilərsiniz.
  4. Resursların Optimizasiyası: Kubernetes serverlərinizin prosessor (CPU) və yaddaş (RAM) resurslarından maksimum səmərəli istifadə edir, bu isə bulud xərclərinizi əhəmiyyətli dərəcədə azaldır.

Nəticə və Gələcək Addımlar

Kubernetes, müasir proqram təminatı infrastrukturunun və DevOps mədəniyyətinin təməl daşlarından biridir. O, mürəkkəb mikroservis arxitekturalarını asanlıqla idarə etməyə, tətbiqlərin fasiləsizliyini təmin etməyə və biznesin sürətlə böyüməsinə kömək edir.

Əgər siz də texnologiya sahəsində karyera qurmaq və ya mövcud infrastrukturunuzu modernləşdirmək istəyirsinizsə, Kubernetes öyrənmək sizin üçün ən böyük investisiyalardan biri olacaqdır. İlk addım olaraq lokal kompüterinizdə Minikube quraşdıraraq kiçik sınaqlar etməyə başlayın və bulud dünyasının bu sehrli qapısını aralayın!

JS
YAZAR

Jamil Sultanli

Rəqəmsal marketinq, SEO və startuplar üzrə məsləhətçi. Datanın tətbiqi ilə işlərin miqyaslanması (Scaling) və inkişaf (Growth) strategiyalarının idarə olunması haqqında yazır.

Bunları da oxuyun