KUBERNETES / PRAKTİKAPulsuz giriş

Kubernetes praktikası

Klasteri araşdır, Pod bərpasını simulyasiya et və kubectl tapşırığını yerinə yetir. Brauzer simulyasiyaları üçün quraşdırma lazım deyil; komanda sətri tapşırığı ayrıca lokal klaster tələb edir.

Kubernetes əsaslarına qayıt
İNTERAKTİV ARXİTEKTURA

Kubernetes klasterinin daxilində

Komponentin rolunu araşdır və ya sorğunun klasterdə keçdiyi yolu addımlarla izlə.

KUBERNETES CLUSTERKomponenti seç
CONTROL PLANEİdarəetmə
API server vasitəsilə əlaqə
↔ Cloud provayderinin API-si
Worker agentləri ↔ API server
WORKER 1Server / VM
WORKER 2Server / VM

Xarici çərçivə = Pod; daxili blok = konteyner. Əlaqələr idarəetmə əlaqələridir, tətbiq trafiki deyil. Pod-ların yerləşməsi nümunədir.

Tədris modeli: real controller-lər API vasitəsilə asinxron işləyir. Bu, canlı klaster deyil. Cloud inteqrasiyası opsionaldır; şəbəkə həlləri fərqlənir. Əsas rolların aydın qalması üçün CNI, DNS, saxlama və control plane replikaları sxemdə göstərilmir.

LAB 02 · UZLAŞDIRMA

Üç replika tələbini yerinə yetir

Əvvəl nəticəni təxmin et, sonra addımlarla yoxla. Replika sayını 4, worker slotlarını 2 et. Niyə iki Pod Pending qalır?

Arzu olunan replika3
Pod obyektləri0
İşləyən0

Pod obyekti yoxdur

Bu, brauzer simulyasiyasıdır, real klaster deyil. Bir slot Pod-un bütün resurs tələbini təmsil edir. Real scheduler CPU, yaddaş, məhdudiyyət və qaydaları nəzərə alır. Klasterdə addımlar paralel işləyir; readiness, image xətaları, təkrar cəhdlər və dayandırma gecikmələri göstərilmir.

PRAKTİKA · 15 DƏQİQƏ

Real klasterdə uzlaşdırmanı müşahidə et

İlk oxunuşda bu hissəni sonraya saxlaya bilərsən. kubectl, sınaq üçün lokal klaster (kind və ya minikube), namespace və iş yükü yaratmaq icazəsi, həmçinin image yükləmək üçün klasterin internet çıxışı lazımdır. Klasterin quraşdırılması İlk klaster dərsində izah ediləcək. Yuxarıdakı brauzer laboratoriyaları quraşdırma tələb etmir.

Yalnız öz sınaq lokal klasterindən istifadə et. Resurs yaratmazdan əvvəl context-i yoxla. academy-foundations artıq varsa, dayan və boş laboratoriya namespace adı seç. Bütün əmrlərdə və manifestdə adı dəyiş.

Hədəfi yoxla, sonra laboratoriya namespace-ini yaratÜçüncü əmrdən əvvəl ilk iki əmri icra et, context və node-ları yoxla. Aşağıdakı nəticələr nümunədir, canlı icra jurnalı deyil.
kubectl config current-context
kubectl get nodes
kubectl create namespace academy-foundations
Nümunə nəticə
kind-kind
NAME                 STATUS   ROLES           AGE   VERSION
kind-control-plane   Ready    control-plane   ...   v1.x.y
namespace/academy-foundations created

Tətbiq etməzdən əvvəl manifesti oxu

Bunu foundations-web.yaml adı ilə saxla. apiVersion və kind resurs növünü seçir, metadata onu adlandırır. spec.replicas üç nüsxə tələb edir. selector şablondakı label-lara uyğun gəlir və ReplicaSet-in Pod-ları tanımasına kömək edir. template hər Pod-u təsvir edir. HTTP readiness yoxlaması nginx-in cavab verə bildiyini sınayır; təkcə containerPort Service yaratmır və host portunu açmır.

foundations-web.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: foundations-web
  namespace: academy-foundations
spec:
  replicas: 3
  selector:
    matchLabels:
      app: foundations-web
  template:
    metadata:
      labels:
        app: foundations-web
    spec:
      containers:
        - name: web
          image: nginx:stable-alpine
          ports:
            - containerPort: 80
          resources:
            requests:
              cpu: 100m
              memory: 64Mi
            limits:
              memory: 128Mi
          readinessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 2
            periodSeconds: 3

stable-alpine teqi bu sınaq üçün rahatdır, lakin dəyişə bilər. Production buraxılışında yoxlanmış versiya və ya dəyişməz digest seç. CPU və yaddaş tələbləri yerləşdirmədə nəzərə alınır; bu kiçik nümunə dəyərləri production ölçüləndirmə tövsiyəsi deyil.

İstənilən vəziyyəti tətbiq et və hazırlığı gözləcreated API-nin obyekti qəbul etdiyini bildirir. rollout status Deployment-in əlçatan olmasını gözləyir. Vaxt bitirsə, səbəbi araşdır; bu, apply-ın uğursuz olduğunu sübut etmir.
kubectl apply -f foundations-web.yaml
kubectl -n academy-foundations rollout status deployment/foundations-web --timeout=120s
kubectl -n academy-foundations get deployment,replicaset,pods
Qısaldılmış nümunə nəticə
deployment.apps/foundations-web created
...
deployment "foundations-web" successfully rolled out
...
NAME                              READY   UP-TO-DATE   AVAILABLE
 deployment.apps/foundations-web   3/3     3            3
Bir Pod-u sil və identifikatorları müqayisə etƏvvəl ikinci terminalda watch əmrini işə sal. Birinci terminalda adları və UID-ləri qeydə al, sonra bir Pod seçib sil. Əvəzləyici Pod yeni ad və UID alır. İzləməni Ctrl+C ilə dayandır.
# Terminal 2
kubectl -n academy-foundations get pods -l app=foundations-web -w

# Terminal 1
kubectl -n academy-foundations get pods -l app=foundations-web -o custom-columns=NAME:.metadata.name,UID:.metadata.uid
LAB_POD=$(kubectl -n academy-foundations get pods -l app=foundations-web -o jsonpath='{.items[0].metadata.name}')
kubectl -n academy-foundations delete pod "$LAB_POD"
kubectl -n academy-foundations rollout status deployment/foundations-web --timeout=120s
kubectl -n academy-foundations get pods -l app=foundations-web -o custom-columns=NAME:.metadata.name,UID:.metadata.uid
Gözlənilən müşahidələr
Silinən Pod yox olur.
Yeni Pod Pending-dən Running-ə doğru keçir.
Bərpadan sonra yenə üç Pod olur.
Əvəzləyici Pod-un UID-si silinənin UID-sindən fərqlənir.
Adlar, hadisələrin sırası və vaxtlar dəyişə bilər.
Arzu olunan vəziyyəti dəyişSaxladığın YAML-da replicas: 3 sətrini replicas: 2 et və yenidən tətbiq et. Artıq Pod-u hansı controller-in siləcəyini təxmin et. Pod silməkdən fərqli olaraq bu addım arzu olunan sayın özünü dəyişir.
kubectl apply -f foundations-web.yaml
kubectl -n academy-foundations rollout status deployment/foundations-web --timeout=120s
kubectl -n academy-foundations get deployment foundations-web
Qısaldılmış nümunə nəticə
deployment.apps/foundations-web configured
...
NAME              READY   UP-TO-DATE   AVAILABLE
foundations-web    2/2     2            2

Gözlənilən vəziyyət yaranmırsa

Terminal
kubectl -n academy-foundations describe deployment foundations-web
kubectl -n academy-foundations describe pods -l app=foundations-web
kubectl -n academy-foundations get events --sort-by=.metadata.creationTimestamp
Yalnız öz yaratdığın namespace-i silBu əmr academy-foundations daxilində bütün resursları silir. Yalnız məşq üçün özün yaratdığın sınaq namespace-idirsə icra et.
kubectl delete namespace academy-foundations
Nümunə nəticə
namespace "academy-foundations" deleted
Tapşırıq: cavabı açmazdan əvvəl nəticəni izah et

İdarə olunan Pod-u silmək müşahidə edilən vəziyyəti dəyişir, ona görə ReplicaSet əvəzləyici yaradır. replicas dəyərini dəyişmək arzu olunan vəziyyəti dəyişir, ona görə ReplicaSet yeni sayı saxlayır.