
İnternetdə çoxlu məsləhət ədəbiyyatı var, lakin bəzən ən dəyərli olanlar ən sadə məsləhətlərdir. Komanda tərtib etdi , hansı ki, məqalənin müəllifi Kubernetes ilə bir il işlədikdən sonra topladı. Məsləhətlər önəmlilik sırasına görə sıralanmamışdır, amma düşünürük ki, hər kəs özünə faydalı bir şey tapacaq.
Kubernetes ilə işdəki ən sadə komanda
Başlamaq üçün, bəlkə də, Kubernetes ilə işdəki ən sadə və faydalı əməliyyatı icra etməkdir. Növbəti komandada kubectl bash qabığında avtomatik tamamlanma aktivləşdirilir:
echo "source > ~/.bashrc
Avtomatik tamamlanma kubectl .bashrc faylında yazılacaq və qovluğu işə salarkən hər dəfə avtomatik olaraq aktivləşəcək. Bu, uzun komandaların və parametrlərin yazılmasını sürətləndirir, məsələn all-namespaces. Daha ətraflı məlumat üçün .
Namespace-daki yaddaş və CPU üçün varsayılan məhdudiyyətlər
Əgər tətbiq düzgün yazılmayıbsa, məsələn, hər saniyə yeni bir verilənlər bazası əlaqəsi açılır, amma heç vaxt bağlanmırsa, klasterdə yaddaş sızması baş verir. Həm də tətbiq yerləşdirilərkən yaddaş üçün məhdudiyyət qoyulmayıbsa, bu, düyünün çökməsinə səbəb ola bilər.
Bunu qarşısını almaq üçün Kubernetes hər bir namespace üçün varsayılan məhdudiyyətlər təyin etməyə imkan verir. Bunlar müəyyən bir namespace üçün yaml faylında qeyd olunur. Belə bir faylın nümunəsi:
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 512Mi
defaultRequest:
memory: 256Mi
type: Container
Belə bir yaml yaradın və istənilən namespace-ə tətbiq edin. Məsələn, limit-examplenamespace-ə. İndi bu namespace-də yerləşdirilmiş hər bir konteyner üçün 512Mi limiti tətbiq ediləcək, əgər həmin konteyner üçün əlavə başqa bir fərdi limit təyin olunmayıbsa.
Kubernetes-in köhnə versiyalarında tullantıların təmizlənməsi
Kubelet varsayılan olaraq tullantıların təmizlənməsinə başlayır, əgər var/lib/docker məlumatdiskinin 90%-ni tutursa. Bu gözəldir, lakin Kubernetes 1.7-dən əvvəl inode (indeksləşdirilmiş deskriptorlar) üçün varsayılan bir limit yoxdur ki, bu da fayl sistemindəki faylların sayına uyğun gəlir.
Potensial olaraq, konteyneriniz yalnız 50% məlumatdiskini istifadə edə bilər, lakin bu halda inodlar tükənə bilər ki, bu da işçi proseslərində problemlərə səbəb ola bilər. var/lib/docker Kubelet-in 1.4-dən 1.6-ya qədərki köhnə versiyalarında belə bir bayrağı əlavə etmək lazımdır:
--eviction-hard =memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%
1.7 və daha yeni versiyalarda bu bayraq varsayılan olaraq aktivdir. Lakin əvvəlki versiyalar inod limitini izləmirdi.
Minikube... kiçik, lakin güclü yerli Kubernetes
Minikube yerli Kubernetes klasterini işə salmağın ən asan yoludur. O, sadə bir komanda ilə işə salınır:
minikube start
Bu komandayı icra etdikdən sonra kompüterinizdə gerçək bir Kubernetes klasteri fəaliyyət göstərəcək.
Bu əmri icra etdikdə, kompüterinizdə gerçek bir Kubernetes klasteri işləyir.

Tətbiqi yığmaq və onu bu klasterdə yerli olaraq işə salmağın incəlikləri. Xüsusi göstərişlər verilmədiyi halda, Docker imajı kompüterinizdə yığılacaq, klasterdə isə deyil.
Docker-in imajı yerli Kubernetes klasterinə göndərməsi üçün docker maşınına aşağıdakı əmri verin:
eval $(minikube docker-env)
İndi Kubernetes-in yerli klasterində tətbiqləri yığa bilərik.
kubectl-ə hamının giriş icazəsini verməyin
Bu, aşkar görünür, amma bir neçə komanda öz tətbiqləri üçün eyni klasteri istifadə edirsə (Kubernetes-in yaradılma səbəbi də budur), sadəcə hər kəsə icazə vermək olmaz. kubectlKomandaları ayırmaq daha yaxşıdır, hər birinin öz ad boşluğunu ayıraraq və RBAC siyasətləri ilə girişləri məhdudlaşdırmaqla.
Hər bir pod üçün giriş, oxuma, yaratma, silmə və digər əməliyyatlara hüquqlar tanımağı nəzərdə tutan ətraflı işə başlamaq mümkündür. Amma əsas odur ki, gizli məlumatlara giriş yalnız administratorlara icazə verilsin. Bu, klasteri idarə edə bilənlər ilə orada sadəcə yerləşənlər arasında fərq qoyur.
Pod büdcələrini idarə edin
Kubernetes klasterində tətbiqin dayanma müddətini necə təmin etmək olar? PodDisruptionBudget və bir daha PodDisruptionBudget.
Klasterlər mütəmadi olaraq yenilənir və düyünlər boşaldılır. Heç nə sabit qalmır, bu, reallıqdır. Bir neçə instansiyası olan hər bir yerləşməyə mütləq PDB (PodDisruptionBudget) daxil edilməlidir. O, klasterə tətbiq olunan sadə bir yaml faylında yaradılır. Müəyyən PDB-nin əhatə dairəsi etiket seçiciləri ilə müəyyən edilir.
Qeyd: PDB büdcəsi yalnız geri qaytarılan büdcə pozuntusu zamanı nəzərə alınır (). Avadanlıq qəzaları kimi hallar zamanı PDB işə düşməyəcək.
PDB nümunəsi:
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: app-a-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: app-a
İki əsas parametr bunlardır matchLabels və minAvailable. Birinci parametr, hansı tətbiqlərə büdcənin tətbiq olunduğunu göstərir. Məsələn, əgər mənim etiketləri olan yerləşmələrim varsa app: app-a və app: app-b, bu PDB yalnız birincilərə tətbiq olunacaq.
Parametr minAvailable bir düyün boşaldıldıqda (təmizlənmə zamanı) nəzərə alınır. Məsələn, bizim nümunədə boşaldılma zamanı bütün instansiyalar app: app-a, iki istisna olmaqla, yerindən çıxarılır.
Bu, tətbiqin hər an neçə instansiyasının işə salınmalı olduğuna nəzarət etməyə imkan verir.
Tətbiqin sağlamlıq monitorinqi
Belə monitorinq iki yolla mümkündür: Readiness və Liveness probe-ləri ilə.
Birinci probe (readiness) konteynerin trafik qəbul etməyə hazır olub-olmadığını müəyyən edir.
İkinci (liveness) konteynerin sağlam olub-olmadığını göstərir ya da onu yenidən başlatmaq lazımdır.
Müvafiq konfiqurasiyalar sadəcə olaraq yerləşdirmə üçün yaml-a əlavə edilir. Orada zaman aşımı, gecikmə müddəti və ardıcıllıq sayını göstərə bilərsiniz. Onlar haqqında daha ətraflı məlumatı üçün .
etiketlər hər yerdə
Etiketler - Kubernetes'te temel kavramlardan biridir. Bu, nesnelerin birbirleriyle serbestçe bağlantı kurmasını ve etiketlere dayalı sorgular oluşturmasını sağlar. Kubernetes'te, belirli etiketlere göre olayları gözlemlemek için istemciye geçiş yapabilirsiniz.
Etiketlerle neredeyse her şeyi yapabilirsiniz, ancak iyi bir örnek, tek bir kümede birden fazla ortamda program çalıştırmak olacaktır.
Diyelim ki, aynı küme içinde kullanıyorsunuz dev və qa. Bu, "app-a" adlı bir uygulamanızın iki ortamda aynı anda çalışabileceği anlamına gelir. app-a. Bu durumda, belirli bir ortamda uygulamanın örneğine erişmek için ilgili parametreyi belirtebiliriz qa və dev. Örneğin, environmentenvironment: dev app: app-a və bir ortam için ve environment: qa app: app-a və ikinci için. Bu, her iki uygulama örneğine erişim sağlamanıza olanak tanır; örneğin, aynı anda test yapabilirsiniz.
Düzenleyin
Kubernetes çok güçlü bir sistemdir, ancak her sistem sonunda çok sayıda süreçle karışabilir. Kubelet, belirttiğiniz tüm süreçleri ve kontrolleri başlatır ve kendi süreçlerini de yürütür.
Elbette, bir sahipsiz hizmet sistemi yavaşlatmaz ve Kubernetes başlangıçta ölçeklenmek üzere tasarlanmıştır. Ancak, bir hizmet yerine milyon olursa, kubelet boğulmaya başlar.
Herhangi bir nedenle bir dağıtım (konteyner, görüntü, ne olursa olsun) silerseniz, tamamen temizlendiğinden emin olun.
Tanışın Go ile
Sonunda vermek istediğimiz ana tavsiye bu. Go programlama dilini öğrenin.
Kubernetes Go ile geliştirilmiştir, tüm uzantılar Go ile yazılmıştır ve resmi olarak client-go istemci kütüphanesi desteklenmektedir.
Bu, farklı ve ilginç şeyler yapmak için kullanılabilir. Örneğin, Kubernetes sistemini kişiselleştirmek için kendi programlarınızı kullanabilirsiniz; veri toplama, uygulama dağıtımı veya konteynerlerin basit temizlenmesi için.
Go programlama dilini öğrenmek ve client-go'yu benimsemek, Kubernetes kullanıcılarına en önemli tavsiye olabilir.
Mail.ru Cloud Solutions desteğiyle çevrildi.
Kubernetes Çalışma Düğümleri: Çok Sayıda Küçük veya Az Sayıda Büyük:
- .
- ?
- .
Mənbə: habr.com
