Kubernetes Nədir və Necə İşləyir? Konteynerlərin İdarə Edilməsi Bələdçisi
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.
Süni İntellekt Agentləri (AI Agents) Nədir? Biznes Proseslərini Avtomatlaşdırmağın Yolları
Süni İntellekt Agentləri (AI Agents) nədir və biznes proseslərini necə avtomatlaşdırır? CrewAI və LangChain ilə praktiki tətbiq planı və ətraflı bələdçi.
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ət | Docker (Tək Node) | Kubernetes (K8s) |
|---|---|---|
| Əsas Məqsəd | Konteyner yaratmaq və işə salmaq | Konteynerləri geniş miqyasda idarə etmək |
| Miqyaslama (Scaling) | Manual olaraq həyata keçirilir | Avtomatik 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 olunur | Daxili olaraq mövcuddur (Load Balancing) |
| Quraşdırma Səviyyəsi | Çox asan və sürətli | Mü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) və 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:
- 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.
- 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.
- 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.
- 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!
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.