Kubernetes, bir fiziksel veya sanal makine kümesinde kapsayıcılı uygulamaları yönetmek için açık kaynaklı bir platformdur. Kubernetes için orijinal ilham, Google Borg sistemiydi. Borg, Google’ın devasa veri merkezlerinde yüz binlerce işlevi ve uygulamayı çalıştıran bir küme yönetim sistemidir. Kubernetes, herkesin kullanabileceği, küme yönetim sisteminin daha dostane bir versiyonu olarak tasarlanmıştır.
Kapsayıcıların yazılım geliştirmedeki popülaritesi Kubernetes’i de popüler hale getiriyor. Eski yazılım geliştirme sürecinde, uygulamalar fiziksel ana bilgisayarlarda devreye alınır. Uygulamanın farklı bileşenleri üzerinde çalışan geliştiricilerin uyumlu bir ortam sağlamaları gerekiyordu. Operasyonlar ve BT personelinin yürütülebilir dosyaları, yapılandırmaları ve kitaplıkları dikkatli bir şekilde yönetmesi gerekiyordu. Uygulamanın farklı bileşenleri, entegrasyon sürecinde çakışabilir. Ayrıca, süreç insan hatalarına ve yanlış iletişimlere eğilimliydi.
Sanal makineler (VM’ler), sürece biraz özgünlük getirmeye yardımcı oldu. Ancak uygulamaları yönetmek hala zordu. Ayrıca, sanal makinelerin bakımı pahalıdır. Konteynerler manzarayı değiştirdi. Kapsayıcılar sayesinde, aynı yazılımın farklı bileşenleri üzerinde çalışan geliştiricilerin ayrı ortamları sürdürmesi mümkün oldu. Konteynerler hafif, ucuz ve hızlıdır. Bu avantajlar, her kapsayıcının belirli bir uygulama görevine hizmet ettiği mikro hizmetleri kullanarak yazılım geliştirme fikrini doğurdu.
Kapsayıcıların artan kullanımıyla Kubernetes, kümeler arasında uygulamaları planlamak ve çalıştırmak için güçlü bir araç haline geldi. Bir platform olarak, geliştiricileri her türlü makineyle uğraşma yükünden kurtarabilir. Geliştiriciler, fiziksel veya sanal makine değerlendirmeleriyle ana bilgisayar merkezli altyapılar için tasarım yapmak yerine, konteyner merkezli altyapılar için tasarım yapmaya başlayabilir. Kubernetes, gerekli soyutlama katmanını sağlar.
Bölüm 1: Kavramlar
Ana bileşenler
Ana bileşenler, küme için denetim hizmetleridir. Bu bileşenler, küresel kararları ve olayları yönetir. Kümedeki herhangi bir düğüm onu çalıştırabilir. Ancak, bu bileşenlere belirli düğümler atamak iyi bir uygulamadır.
uygulama sunucusuna
kube-apserver, Kubernetes API’sine hizmet eder. Kubernetes API, bir RESTful arayüzü uygular. Pod’lar, hizmetler, bulut sunucusu denetleyicileri ve daha fazlası gibi çeşitli Kubernetes bileşenleri arasında köprü görevi görür. Ambar vb. ile dağıtılan konteynerler arasındaki iletişimin tutarlılığından sorumludur.
vb.
etcd, tüm Kubernetes küme verilerini depolamaktan sorumludur. Etcd projesi CoreOS ekibi tarafından geliştirilmiştir. HTTP/JSON API kullanan hafif, dağıtılmış bir anahtar/değer deposudur. Kümedeki düğümler, hizmetleri keşfetmek ve başarısız durumlardan kurtarmak için etcd’den gelen yapılandırma verilerini kullanabilir. Verilerin önemi nedeniyle, uygun yedekleme vb. gereklidir.
kube denetleyici yöneticisi
Kube-denetleyici-yöneticisi, farklı hizmetler sağlamak için farklı denetleyicileri yönetir. Örneğin, düğüm denetleyicileri başarısız düğümleri kurtarır ve çoğaltma denetleyicileri doğru sayıda bölümü korur. Her denetleyici ayrı bir iş parçacığı olarak çalışır ve görevlerini yerine getirmek için bilgilere vb. bağlıdır.
Bulut Kontrol Yöneticisi
Cloud Console Manager, buluta özel konsollar sağlar. Kube-controller-manager’da devre dışı bırakılabilir. Bulut konsolu yöneticisi, Kubernetes çekirdeğinin bulut sağlayıcının kodundan bağımsız olarak gelişmesine izin vermek için çekirdekten ayrılmıştır. Geçmişte, bağımlılıklar sorunlara neden oluyordu.
küp zamanlayıcı
İş yükünün dağıtılmasından Kube-Scheduler sorumludur. Kaynak gereksinimlerini izler ve düğümleri yeni oluşturulan bölmelere atar. Ayrıca QoS gereklilikleriyle de ilgilenir.
eklentiler
Uzantılar, grubun özelliklerini uygulamak için kullanılan bölmeler ve hizmetlerdir. Kullanıcılar, eklentileri oluşturmak ve sürdürmek için eklenti yöneticisini kullanabilir. Bazı önemli ve faydalı eklentiler, DNS, Web Kullanıcı Arayüzü (Gösterge Panosu), kapsayıcı kaynak izleme ve blok düzeyinde günlük kaydıdır.
düğüm bileşenleri
Kubernetes’teki çalışan makineye düğüm denir. Düğüm bileşenleri, her düğümde bulunur ve iş yükünün farklı yönlerini yönetir.
küp
Her düğümdeki kubelet hizmeti birincil hizmettir. Apserver veya yerel yapılandırma dosyası aracılığıyla düğüme atanan bölmelerin kaydını tutar. İş isteklerini bulmak ve düğümünün durumunu raporlamak için ana bileşenlerle iletişim kurar.
ajan ol
Kube-proxy, bireysel ana bilgisayar alt ağlarını işlemek için her düğümde bulunan küçük bir proxy hizmetidir. İlkel TCP ve UDP yük dengelemesi yapabilir.
liman işçisi
Kubernetes, kapsayıcıları çalıştırmak için çoğunlukla liman işçisine güvenir. Docker görüntülerinden uygulamalar oluşturabilir.
rkt
Kubernet’ler ayrıca rkt kapsayıcılarını da destekler. Destek şu anda beta aşamasındadır.
denetleyici
Gözetmen, bölmeleri ve konteynerleri izlemek ve kontrol etmek için kullanılabilir.
Akıcı
Fluentd, müşteri düzeyinde günlük kaydı sağlamak için bir şeytandır.
iş yükleri
Kubernetes iş yükleri şu şekilde tanımlanabilir:
kabinler
Kapsül, Kubernetes iş yükünün temel birimidir. Konteynerler, bireysel ana bilgisayarlara tahsis edilmez. Bir uygulamaya ait kapsayıcı koleksiyonu genellikle bir bölme olarak temsil edilir ve ardından bölme, ana bilgisayarda tek bir birim olarak dağıtılır. Tabii ki, bir bölüm yalnızca bir kapsayıcı içerebilir. Bu genellikle Kubernet’lerde daha yaygındır. Ancak kapsayıcılar, kaynak ve uygulama gereksinimlerine göre birlikte gruplandırılır. Kümelenme, kaynakların paylaşımını geliştirmeyi amaçlar.
kontrolörler
Çoğaltma kümeleri, çoğaltma konsolu, konuşlandırmalar, durum bilgili koleksiyonlar, çöp toplama ve cron işleri gibi kontroller, Kubernetes iş yüklerinin yönetilmesine yardımcı olur. Çoğaltma denetleyicileri, bölüm sayısını yönetir. Doğru sayıda bölmenin çalıştığından emin olmak için bölmeleri başlatır ve sonlandırır. Dağıtım Denetleyicisi, istenen Dağıtım durumunu elde etmek için bölmeleri ve Dağıtım nesnelerini değiştirmeye yardımcı olur.
Diğer önemli fikirler
Hizmetler
Kubernetes bölümleri düzenli olarak oluşturulur ve yok edilir. Bu nedenle onları IP adreslerinden takip etmek çok zordur. Kabinlerin dinamik yapısı, birbirleriyle iletişim kurmalarını zorlaştırmaktadır. Hizmet bir soyutlama olarak çalışır. Mantıksal bir bölüm grubuna erişim ilkesi sağlar. Kubernet’lerde bir hizmet bir REST nesnesidir. Hizmetler, konteyner tasarımını basitleştirir.
ekler
Etiketler, bileşen çalışan gruplarını izlemenin ve yönetmenin etkili bir yoludur. Bayraklar, sistemin çeşitli işlevlerinin daha iyi kontrol edilmesine yardımcı olmak için isteğe bağlı işaretler olarak hareket eden anahtar/değer çiftleridir.
İkinci bölüm: uygulamalı bir proje
Minikube projesini çalıştırın
Minikube, yerel bir makineye tek bir Kubernetes kümesi yükleyen ikili bir programdır. Bu projede Node.js uygulaması launcher container imajına dönüştürülecek ve imaj bir Minikube üzerinde çalışacak.
Minikube, kubectl, hypervisor, NodeJS ve Docker’ı yükleyin
Minikube ve Kubernetes kubectl komut satırı aracını farklı hipervizörler kullanarak Mac OS X, Linux ve Windows’a kurabilirsiniz. Farklı işletim sistemleri için yardım mevcuttur Burada. Ayrıca, ihtiyacınız olacak DüğümJS Örnek, HelloWorld uygulamasını çalıştırmak için cihazınıza yüklenir. liman işçisi kurabilirsiniz Burada.
Küme başlatma
Bir blok başlatmak için aşağıdaki komutu kullanın:
$ minikube start Yerel Kubernetes v1.7.5 kümesi başlatılıyor... VM başlatılıyor... Minikube ISO'yu indiriyorum. 106,36 MB / 106,36 MB [] %100,00 0s. VM IP adresi alınıyor... Dosyaları kümeye taşıma... Sertifikalar ayarlanıyor... Kümeye bağlanılıyor... kubeconfig ayarlanıyor... Küme bileşenleri başlatılıyor... Kubectl artık kümeyi kullanacak şekilde yapılandırılmıştır.
Kümenin düzgün çalışıp çalışmadığını görmek için aşağıdaki komutu kullanın:
$ kubectl küme bilgisi Kubernetes yöneticisi şurada çalışıyor:
Bir uygulama görüntüsü oluşturun
Aşağıdaki içeriğe sahip bir server.js dosyası oluşturalım:
var http = require('http'); var handleRequest = function (istek, yanıt) { console.log('URL için alınan istek: ' + request.url); yanıt.writeHead (200); answer.end('Merhaba Dünya!'); }; var www = http.createServer (handleRequest); www.dinle (8080);
Aşağıdaki komutu çalıştırabilirsiniz:
$ düğüm sunucusu.js
Ve sunucunun 8080 çalıştırıp çalıştırmadığını kontrol edin. “Merhaba Dünya!” Görmelisin. web sayfasındaki metin.
Docker Container’a Geç
server.js ile aynı dizinde, aşağıdaki komut dosyasıyla bir Dockerfile oluşturun:
Düğümden: 6.9.2. 8080'i AÇIN. KOPYALA server.js. CMD düğüm sunucusu.js.
Dockerfile, Docker Hub’da node: 6.9.2 görüntüsünden başlayarak bir görüntü oluşturacaktır.
Docker görüntülerini yerel olarak çalıştırmak istiyoruz. Bu nedenle, aşağıdaki komut docker’a docker görüntüsünü depolamak için Minikube deamon’unu kullanmasını söyleyecektir:
$ eval $(minikube liman işçisi-env)
Varsayılana dönmek için $eval (minikube docker-env -u) kullanabilirsiniz.
Şimdi liman işçisi görüntüsünü oluşturalım:
$ docker build -t düğümüm: v1. Yapı bağlamını Docker arka plan programı 3.072kB'ye gönderme. Adım 1: Düğümden: 6.9.2. 6.9.2: Kitaplıktan/düğümden çekme. 75a822cd7888: Çekme tamamlandı 57de64c72267: Çekme tamamlandı 4306be1e8943: Çekme tamamlandı 871436ab7225: Çekme tamamlandı 0110c26a367a: Çekme komple 1f04fe713f1b: komple çek ac7c0b5fb553: komple çek Özet: sha256:2e95be60faf429d6c97d928c762cb36f1940f4456ce4bd33fbdc34de94a5e043. Durum: Düğüm için daha yeni resim indirildi: 6.9.2 > faaadb4aaf9b. Adım 2: EXPOSE 8080 > da7d251b3fd5 > 881f9fb69b2c'de çalışıyor. Da7d251b3fd5 ara kabının çıkarılması. 3. Adım: server.js'yi KOPYALAYIN. > 0acf61d9e75e. Ara kapsayıcıyı çıkarma 3a4025539cf6. Adım 4: CMD düğümü server.js > 8aa9a4cbd723 > 41445e5c48fe'de çalışıyor. Ara kap 8aa9a4cbd723 kaldırılıyor. 41445e5c48fe başarıyla oluşturuldu.
Grupta yayınla
Düğüm: v1’i dağıtmak için aşağıdaki komutu çalıştırın:
$ kubectl benim düğümümü çalıştır --image=benim düğümüm: v1 --port=8080 "benim düğümüm" dağıtımı oluşturuldu
Kümede bir bölüm oluşturulacak. Pod durumlarını aşağıdaki komutlarla kontrol edebiliriz:
$ kubectl dağıtımları olsun ADI İSTENEN GÜNCEL GÜNCEL UYGULANABİLİR YAŞ. düğümüm 1 1 1 1 34s.
$ kubectl bölmeleri al İSİM HAZIR DURUM YAŞI YENİDEN BAŞLAR. my-node-276881918-qth5s 1/1 Koşu 0 1m.
$ kubectl olayları al LASTSEEN FIRSTSEEN COUNT NAME TÜR KONU TÜRÜ SEBEP KAYNAK MESAJ. 32m 32m 1 minikube Düğüm Normal Başlangıç kube-proxy, minikube Başlangıç kube-proxy. 32m 32m 1 minikube Düğüm Normal Başlangıç kubelet, minikube Başlangıç kubelet. 32m 32m 2 minikube Düğüm Normal DüğümHasSufficientDisk kubelet, minikube Düğüm minikube durumu artık: NodeHasSufficientDisk. 32m 32m 2 minikube Node Normal NodeHasSufficientMemory kubelet, minikube Node minikube durumu artık: NodeHasSufficientMemory. 32m 32m 2 minikube Node Normal NodeHasNoDiskPressure kubelet, minikube Node minikube durumu artık: NodeHasNoDiskPressure. 32m 32m 1 minikube Düğüm Normal DüğümAyrılabilirZorunlu kubelet, minikube Güncellenmiş Düğüm Bölmeler arasında ayrılabilir sınır. 32m 32m 1 minikube Node Normal RegisteredNode controllermanager Node minikube olayı: NodeController'da Kayıtlı Düğüm minikube. 32m 32m 1 minikube Node Normal NodeReady kubelet, minikube Node minikube durumu artık: NodeReady. 6m 6m 1 minikube Node Normal RegisteredNode controllermanager Node minikube olayı: NodeController'da Kayıtlı Düğüm minikube. 5m 5m 1 minikube Düğüm Normal Başlangıç kubelet, minikube Başlangıç kubelet. 5m 5m 1 minikube Düğüm Normal DüğümAyrılabilirZorunlu kubelet, minikube Güncellenmiş Düğüm Bölmeler arasında ayrılabilir sınır. 5m 5m 1 minikube Node Normal NodeHasSufficientDisk kubelet, minikube Node minikube durumu artık: NodeHasSufficientDisk. 5m 5m 1 minikube Node Normal NodeHasSufficientMemory kubelet, minikube Node minikube durumu artık: NodeHasSufficientMemory. 5m 5m 1 minikube Node Normal NodeHasNoDiskPressure kubelet, minikube Node minikube durumu artık: NodeHasNoDiskPressure. 5m 5m 1 minikube Düğüm Normal NodeNotReady kubelet, minikube Düğüm minikube durumu artık: NodeNotReady. 5m 5m 1 minikube Düğüm Normal Başlangıç kube-proxy, minikube Başlangıç kube-proxy. 5m 5m 1 minikube Node Normal NodeReady kubelet, minikube Node minikube durumu artık: NodeReady. 2m 2m 1 my-node-276881918-qth5s Pod Normal Zamanlanmış varsayılan zamanlayıcı my-node-276881918-qth5s, minikube'a başarıyla atandı. 2m 2m 1 my-node-276881918-qth5s Pod Normal BaşarılıMountVolume kubelet, minikube MountVolume. Kurulum, "default-token-r5pl1" birimi için başarılı oldu 2m 2m 1 my-node-276881918-qth5s Pod spec.containers{my-node} Normal Pulled kubelet, minikube Konteyner görüntüsü "my-node: v1" makinede zaten mevcut. 2m 2m 1 my-node-276881918-qth5s Pod spec.containers{my-node} Normal Oluşturulan kubelet, minikube Oluşturulan kapsayıcı. 2m 2m 1 my-node-276881918-qth5s Pod spec.containers{my-node} Normal Başlatılan kubelet, minikube Başlatılan kapsayıcı. 2m 2m 1 my-node-276881918 ReplicaSet Normal SuccessCreate replikaset-denetleyici Oluşturulan bölme: my-node-276881918-qth5s. 2 m 2 m 1 düğümüm Dağıtım Normal ScalingReplicaSet dağıtım denetleyicisi Ölçeklendirilmiş çoğaltma seti my-node-276881918.
Hizmeti oluştur
Erişilemeyen kapsül. Kapsülü dünyaya erişilebilir kılmak için bir hizmet oluşturmalısınız. Aşağıdaki komut gerekli hizmeti oluşturmalıdır:
$ kubectl, my-node dağıtımını ifşa etti --type=LoadBalancer hizmeti "my-node" ifşa oldu
Hizmetin durumunu şu şekilde kontrol edebilirsiniz:
$ kubectl hizmet almak İSİM KÜME-IP HARİCİ-IP PORT(LAR) YAŞ. kubernetes 10.0.0.1 < yok> 443/TCP 34m. düğümüm 10.0.0.2138080:31460/TCP 31s.
Aşağıdaki komutu kullanırsanız, hizmet bir web tarayıcısında açılır:
$ minikube hizmeti benim düğümüm Kubernetes hizmeti varsayılanı/benim düğümüm varsayılan tarayıcıda açılıyor...
Bölümünüzde neler olup bittiğini “logs” komutuyla kontrol edebilirsiniz – kubectl logs [nameOfThePod].
$ kubectl, düğümüm-276881918-qth5s'yi günlüğe kaydeder URL için alınan istek: / URL için alınan istek: /favicon.ico.
Yukarıdaki günlükler, küme üzerinde çalışan server.js uygulamasına yapılan istekleri gösterir.
temizlik
Hizmeti ve bölümü aşağıdaki komutlarla silebilirsiniz:
$ kubectl silme hizmeti düğümüm hizmeti "benim düğümüm" silindi $ kubectl dağıtım düğümümü silme[/kod] dağıtımı "benim düğümüm" silindi
Minikube’u durdurabilirsiniz:
$ minikube durdur Yerel Kubernetes kümesini durdurma... Makine durdu.
çözüm
Kubernetes, kapsamlı yeteneklere sahip büyük bir sistemdir. Kubernetes belgeleri, bu güçlü teknoloji hakkında bilgi edinmek için en iyi yerdir.
Gelecek iş:
Kubernet belgeleri:
Linux Kaynak LLC, [e-posta korumalı]
1210 Kelly Park Çevresi, Morgan Hill, CA 95037
Diğer gönderilerimize göz at
[wpcin-random-posts]
İlk Yorumu Siz Yapın