En İyi 10 Kubernetes Püf Noktaları ve İpuçları

En İyi 10 Kubernetes Püf Noktaları ve İpuçları

İnternette çok sayıda referans literatürü vardır, ancak bazen en basit tavsiye en değerli olanıdır. Takım Mail.ru'dan Kubernetes aaS tercüme edildi on numara ve ipucundan oluşan bir seçkiMakalenin yazarının Kubernetes ile bir yıl çalıştıktan sonra topladığı. İpuçları önem sırasına göre sıralanmamıştır ancak herkesin kendine göre yararlı bir şeyler bulacağını düşünüyoruz.

Kubernetes ile çalışmanın en basit komutu

Başlangıç ​​olarak Kubernetes ile çalışmanın belki de en basit ve en kullanışlı eylemiyle başlayalım. Aşağıdaki komut komutun tamamlanmasını sağlar kubectl bash kabuğunda:

echo "source <(kubectl completion bash)" >> ~/.bashrc

Otomatik Tamamlama kubectl .bashrc dosyasına yazılacak ve kabuk her başlatıldığında otomatik olarak etkinleştirilecektir. Bu, aşağıdaki gibi uzun komutların ve parametrelerin yazılmasını hızlandırır: all-namespaces. Daha fazla ayrıntı Kubernetes bash yardımı.

Ad alanındaki varsayılan bellek ve CPU sınırları

Uygulama yanlış yazılmışsa, örneğin her saniye veritabanına yeni bir bağlantı açıyor ancak hiçbir zaman kapatmıyorsa, kümede bellek sızıntısı var demektir. Uygulamanın dağıtım sırasında ayarlanmış bir bellek sınırı yoksa, bu durum bir düğüm hatasına yol açabilir.

Bunu önlemek için Kubernetes, ad alanı bazında varsayılan kısıtlamalar belirlemenize olanak tanır. Belirli bir ad alanı için yaml dosyasına yazılırlar. İşte böyle bir dosyanın bir örneği:

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

Böyle bir yaml oluşturun ve herhangi bir ad alanına uygulayın. Örneğin, ad alanına limit-example. Artık bu ad alanına dağıtılan herhangi bir kapsayıcının sınırı, bu kapsayıcı için ek olarak başka bir bireysel sınır ayarlanmadığı sürece 512Mi olacaktır.

Kubernetes'in eski sürümlerinde çöp toplama

Kubelet varsayılan olarak şu durumlarda çöp toplama işlemini başlatır: var/lib/docker kullanılabilir disk alanının %90'ını kaplar. Ancak bu harika bir şey; Kubernetes 1.7'ye kadar, dosya sistemindeki dosya sayısına karşılık gelen, kullanılan inode sayısında varsayılan bir sınır yoktu.

Potansiyel olarak konteyneriniz var/lib/docker Disk alanının yalnızca %50'sini kullanabilir, ancak inode'lar tükenebilir ve bu da çalışanlar için sorunlara neden olabilir.

Kubelet'in 1.4'ten 1.6'ya kadar olan eski sürümlerinde bu bayrağı eklemeniz gerekecektir:

--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%

1.7 ve sonraki sürümlerde bu bayrak varsayılan olarak ayarlanmıştır. Ancak önceki sürümler inode sınırını izlemiyor.

Minikube... küçük ama güçlü yerel Kubernet'ler

Minikube, yerel bir Kubernetes kümesini çalıştırmanın en kolay yoludur. Basit bir komutla başlatılır:

minikube start

Bu komutu çalıştırmak, bilgisayarınızda gerçek bir Kubernetes kümesinin çalışmasına neden olur.

En İyi 10 Kubernetes Püf Noktaları ve İpuçları
İllüstrasyon kaynağı

İşin püf noktası, uygulamanın nasıl oluşturulacağı ve o kümede yerel olarak nasıl çalıştırılacağıdır. Özel olarak talimat verilmediği sürece Docker görüntüsü kümede değil, bilgisayarınızda oluşturulacaktır.

Docker'ı görüntüyü yerel Kubernetes kümesine göndermeye zorlamak için docker makinesine aşağıdaki komut verilir:

eval $(minikube docker-env)

Artık yerel bir Kubernetes kümesi üzerinde uygulamalar geliştirebiliriz.

Herkese kubectl erişimi vermeyin

Bu çok açık görünüyor, ancak birden fazla ekip uygulamaları için aynı kümeyi kullanıyorsa (Kubernetes bunun için yaratılmıştır), herkese aynı kümeyi vermemelisiniz. kubectl. Komutları ayırmak, her birine kendi ad alanını atamak ve RBAC ilkelerini kullanarak erişimi sınırlamak daha iyidir.

Her bölmeye erişim, okuma, oluşturma, silme ve diğer işlemlere ilişkin haklar atadığınızda kafanız karışabilir. Ancak asıl önemli olan, sırlara erişimi sınırlamak ve buna yalnızca yöneticilere izin vermektir. Bu şekilde, kümeyi yönetebilenler ile kümeye kolayca dağıtım yapabilenler arasında ayrım yapacağız.

Kapsül Bütçelerini Yönetin

Kubernetes kümesindeki bir uygulamanın kesinti yaşamamasını nasıl sağlayabilirim? PodDisruptionBudget ve tekrar PodDisruptionBudget.

Kümeler periyodik olarak güncellenir ve düğümler boşaltılır. Hiçbir şey yerinde durmuyor, gerçek bu. Birden fazla bulut sunucusuna sahip her dağıtım bir PDB (PodDisruptionBudget) içermelidir. Kümeye uygulanan basit bir yaml dosyasında oluşturulur. Belirli bir PDB'nin kapsama alanı etiket seçiciler tarafından belirlenir.

Not: PDB bütçesi yalnızca bütçe ihlali geri döndürülebilir olduğunda dikkate alınır (gönüllü kesinti). Donanım arızası gibi durumlarda PDB çalışmayacaktır.

Örnek PDB:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: app-a-pdb
spec:
  minAvailable: 2
  selector:
      matchLabels:
        app: app-a

İki ana parametre şunlardır: matchLabels и minAvailable. İlk parametre bütçenin hangi uygulamalara uygulanacağını belirtir. Örneğin, etiketli dağıtımlarım varsa app: app-a и app: app-b, bu durumda bu PDB yalnızca ilki için geçerli olacaktır.

Parametre minAvailable düğümü boşaltırken (temizlerken) dikkate alınır. Örneğin örneğimizde boşaltma sırasında tüm örnekler tahliye edilir app: app-a, ikisi hariç.

Bu, herhangi bir zamanda uygulamanın kaç örneğinin çalışması gerektiğini kontrol etmenize olanak tanır.

Uygulama sağlığı izleme

Bu tür izleme iki şekilde mümkündür: Hazırlık veya Canlılık testlerini kullanarak.

İlk araştırma (hazırlık), konteynerin trafik almaya hazır olup olmadığını belirler.

İkincisi (canlılık), kabın sağlıklı olup olmadığını veya yeniden başlatılması gerekip gerekmediğini gösterir.

İlgili yapılandırmalar dağıtım için yaml'a kolayca eklenir. Burada zaman aşımlarını, gecikme sürelerini ve yeniden deneme sayısını belirleyebilirsiniz. Onlar hakkında daha fazla ayrıntı görün Kubernetes belgeleri.

Etiketler her yerde

Etiketler Kubernetes'teki temel kavramlardan biridir. Nesnelerin birbirleriyle özgürce iletişim kurmasına ve etiketlere dayalı sorgular oluşturmasına olanak tanır. Kubernetes'te istemciye gidip belirli etiketlere ilişkin etkinlikleri bile izleyebilirsiniz.

Etiketlerle hemen hemen her şeyi yapabilirsiniz, ancak buna iyi bir örnek, programları aynı kümede çalıştırmak için birden fazla ortam oluşturmak olabilir.

Aynı kümeyi şunun için kullandığınızı varsayalım: dev и qa. Bu, bir başvuruda bulunabileceğiniz anlamına gelir app-a, aynı anda her iki ortamda da çalışma qa и dev. Bu durumda, uygun parametreyi belirterek belirli bir ortamdaki uygulama örneğine ayrı ayrı erişebiliriz. environment. Örneğin, app: app-a и environment: dev bir ortam için ve app: app-a и environment: qa ikincisi için.

Bu, örneğin aynı anda test yürütmek için uygulamanın her iki örneğine de erişmenize olanak tanır.

İşleri sıraya koy

Kubernetes çok güçlü bir sistemdir ancak her sistem eninde sonunda çok fazla işlem nedeniyle tıkanabilir. Kubelet, kendisinin yanı sıra belirttiğiniz tüm süreçleri ve kontrolleri çalıştırır.

Elbette tek bir yetim hizmet sistemi yavaşlatmaz ve Kubernetes sıfırdan ölçeklenecek şekilde tasarlanmıştır. Ancak bir hizmet yerine bir milyon görünürse kubelet boğulmaya başlar.

Herhangi bir nedenle bir dağıtımı (kapsayıcı, görüntü vb.) silerseniz, tam bir temizlik yaptığınızdan emin olun.

Tanış Git

Ana tavsiyeyi sona sakladık. Go programlama dilini öğrenin.

Kubernetes Go'da geliştirildi, tüm uzantılar Go'da yazıldı ve client-go istemci kitaplığı da resmi olarak destekleniyor.

Farklı ve ilginç şeyler için kullanılabilir. Örneğin Kubernetes sistemini zevkinize göre genişletmek. Böylece veri toplamak, uygulamaları dağıtmak veya yalnızca kapsayıcıları temizlemek için kendi programlarınızı kullanabilirsiniz.

Go programlama dilini öğrenmek ve client-go konusunda uzmanlaşmak belki de yeni Kubernetes kullanıcılarına verebileceğiniz en önemli tavsiyedir.

Mail.ru Cloud Solutions desteğiyle çevrildi

başka ne okuyacak:

  1. Kubernetes'te üç otomatik ölçeklendirme düzeyi ve bunların etkili bir şekilde nasıl kullanılacağı.
  2. Kubernetes çalışan düğümleri: çok sayıda küçük veya birkaç büyük düğüm?
  3. Kubernetes'i Dağıtmak ve Yönetmek için 25 Yararlı Araç.

Kaynak: habr.com

Yorum ekle