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ıtKubernetes klasterinin daxilində
Komponentin rolunu araşdır və ya sorğunun klasterdə keçdiyi yolu addımlarla izlə.
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.
Üç 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?
Pod obyekti yoxdur
Deployment üç replika istəyir. Hələ Pod obyektləri yoxdur. Növbəti addımda ReplicaSet controller-in işini izlə.
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.
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ş.
kubectl config current-context
kubectl get nodes
kubectl create namespace academy-foundationskind-kind
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready control-plane ... v1.x.y
namespace/academy-foundations createdTə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.
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: 3stable-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.
kubectl apply -f foundations-web.yaml
kubectl -n academy-foundations rollout status deployment/foundations-web --timeout=120s
kubectl -n academy-foundations get deployment,replicaset,podsdeployment.apps/foundations-web created
...
deployment "foundations-web" successfully rolled out
...
NAME READY UP-TO-DATE AVAILABLE
deployment.apps/foundations-web 3/3 3 3# 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.uidSilinə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.kubectl apply -f foundations-web.yaml
kubectl -n academy-foundations rollout status deployment/foundations-web --timeout=120s
kubectl -n academy-foundations get deployment foundations-webdeployment.apps/foundations-web configured
...
NAME READY UP-TO-DATE AVAILABLE
foundations-web 2/2 2 2Gözlənilən vəziyyət yaranmırsa
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- Pending + FailedScheduling: resurs tələblərini, node tutumunu və yerləşdirmə məhdudiyyətlərini yoxla.
- ImagePullBackOff: image adını, registry girişini və şəbəkəni yoxla. Əlavə replikalar səhv image problemini həll etmir.
- Running, lakin 0/1 Ready: readiness yoxlamasını və tətbiqi araşdır. İşləyən proses sorğulara xidmət etməyə hazır olmaya bilər.
kubectl delete namespace academy-foundationsnamespace "academy-foundations" deletedTapşı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.