‫Kubernetes pek çok şeydir.
‫Kubernetes'e bir uygulama yüklemeye başlamadan
‫önce sistemin bazı temel
‫topolojisini ve parçalarını kesinlikle açıklamak
‫istiyorum. İlk olarak Kubernetes'in kendisi.
‫Ben de aslında bundan bahsediyorum.
‫Tüm sistem.
‫Uygulamalarınızı çalıştırmak için gereken tüm parçaların
‫bir arada bulunduğu tek bir sunucu veya çoklu sunucu kurulumu.
‫Bunu bazen K8s olarak kısaltıyoruz.
‫Normalde Kubernetes hakkında konuşurken sadece Kubernetes
‫diyeceğim, ancak genellikle yazılarda ve hatta
‫belgelerde K8s'i göreceksiniz ve bu aslında
‫Kubernetes'in kısa, kısaltılmış bir versiyonudur.
‫Aslında
‫bakarsanız, 8, K ve S arasındaki 8 harf anlamına gelir.
‫Bu yüzden yaptılar. K, sekiz harf ve sonra S.
‫Bu onların kısaltması.
‫Bazen insanlar buna Kube diyebilir.
‫Ancak burada Kubernetes ve K8s dediğimizde esasen
‫aynı şeyden bahsediyor olacağız.
‫Şimdi kubectl, Kubernetes API ile konuşmak için kullanacağınız
‫komut satırı aracıdır.
‫Kubernetes ile konuşmamızın ana yolu onun API'sidir.
‫Bunu yapabilecek birden fazla araç var.
‫Aslında, API ile konuşabilecekleri pek çok araç var.
‫Projeden resmi olarak gelen ve çoğu zaman kullanacağımız
‫program kubectl'dir.
‫Şimdi bunun diğer videolarda veya konuşmalarda cube
‫cuddle veya kube cuddle veya kube
‫control, her türlü diğer tür veya hatta kubectl olarak adlandırıldığını
‫görebilirsiniz, ancak bunların hepsi aynı şeydir.
‫Aslında farklı insanlar farklı bir şekilde
‫söylüyorlar. Aslında, yaklaşık bir yıl kadar
‫önce bu aracı resmi olarak belgelerde kubectl olarak adlandırmaya
‫karar verdiler.
‫Ancak, bunu söylemenin gerçekten yanlış bir yolu yok.
‫Tıpkı Swarm'da olduğu gibi, düğümleri o kümenin içindeki sunucular
‫olarak adlandırdığımız gibi, Kubernetes de nesnelere düğümler
‫olarak atıfta bulunur.
‫Dolayısıyla, bu terminoloji en azından ikisi arasında aynıdır.
‫Kubelet, her düğümde küçük bir ajan çalıştırarak
‫o düğümün Kubernetes master ile konuşmasını
‫sağlayan konteynerdir.
‫Unutmayın, Docker'da Swarm yerleşik olarak bulunduğundan, ayrı bir
‫aracıya gerçekten ihtiyaç duymuyordu.
‫Bunların hepsi Docker Engine'de yerleşik olarak bulunuyordu.
‫Şimdi Kubernetes bunun üzerinde çalışırken,
‫yerel Docker veya yerel çalışma zamanı ile konuşan kendi
‫motor API'sine ihtiyaç duyar.
‫Daha sonra Kubernetes kümesini çalıştırmaktan sorumlu
‫olan kontrol düzlemine veya master'a geri
‫konuşur.
‫Bazen master olarak da adlandırılan kontrol düzlemi,
‫kümeden sorumlu olan şeydir.
‫Eğer Swarm'a aşinaysanız.
‫Swarm'da yöneticimiz vardı.
‫Bir veya daha fazla yönetici olabilir.
‫Tek sayıda yönetici istedik.
‫Sonra bütün işi yapan işçiler vardı.
‫Swarm'dan hatırlarsanız, yöneticiler aynı zamanda işçi de olabiliyordu çünkü
‫konteynerleri kendileri de çalıştırabiliyorlardı.
‫Yani
‫teknik olarak sadece tek bir sunucunuz olabilir. Çok sayıda sunucunuz olabilir ve iki
‫rolü paylaştırabilirsiniz. Bunların çoğu Kubernetes'e çok benziyor.
‫Sadece bunun için biraz farklı isimlerimiz var.
‫Swarm'da da çalıştırdığımız
‫bir şey olan kontrol düzlemi, sunucuların
‫esasen sorumlu olan tüm şeyleri çalıştırdığı
‫kısımdır.
‫Birden fazla konteyner var. Bir grup konteyner.
‫Bireysel işleri yürütüyorlar.
‫Linux'un tek bir şey yap ve onu iyi yap prensibini
‫alıp her şeyi bölüyorlar.
‫Dolayısıyla,
‫esasen bu parçaların her biri tek bir şey yapıyor ve bunu iyi yapıyor ve geliştirme açısından
‫tasarımı basitleştiriyor.
‫Ancak bunu inşa etmek ve çalıştırmak zorunda olduğunuzda,
‫işleri kurmak biraz daha zorlaşıyor çünkü
‫daha fazlası var. Bu kontrol düzlemi, API'yi çalıştıracak
‫konteynerleri, zamanlayıcıyı içerir, aslında etcd adı verilen bir
‫şey olacak bir veritabanı arka ucuna ihtiyacınız vardır.
‫O zaman kontrolör yöneticiniz var.
‫DNS işlemlerinizi halletmek için muhtemelen coreDNS adlı bir şeye
‫ihtiyacınız olacaktır.
‫Burada çok fazla parçamız var, ancak bunu bir şemaya
‫koyalım ve bunun mantıklı olup olmadığına bakalım.
‫Bu kursta zaten öğrendiğiniz için bunu Swarm ile karşılaştıracağım.
‫Eğer sadece bir makineniz olsaydı, birazdan
‫öğrenmeye yönelik olarak yapacağımız gibi, daha önce bahsettiğim
‫şeylerin hepsi aynı sunucuda olurdu.
‫Bir sürü çalışan konteyner olurdu. Tek düğümlü bir Kubernetes
‫çalıştırdığınızda minikube ve Docker Desktop gibi şeylerde
‫göreceğiniz şey budur.
‫Gerçek dünyada sunuculara girdiğinizde, bu şeyleri kırıp
‫dökeceksiniz. Size bunun nasıl görünebileceğini
‫bir ağ şeması üzerinde hızlıca göstermeyi ve farklı parçaları açıklamayı
‫düşündüm.
‫Öncelikle, bir ustanız olduğunu varsayalım.
‫Çoklu ana kurulumda bunlardan üç
‫tane olacaktır. Tıpkı Swarm'da olduğu gibi, tek sayılara
‫ihtiyacınız var çünkü Swarm'da olduğu gibi fikir birliğini sağlamak için aynı RAFT protokolünü
‫kullanıyor.
‫Dokümantasyonda bunların hepsi master olarak bilinir.
‫Ancak, birden fazla master'ınız olduğunda biraz kafa karıştırıcı
‫olur çünkü etcd'yi yazma işini gerçekten yapan yalnızca bir tanesine
‫sahip olabileceğiniz aynı kurulumdur.
‫Bunlar kontrol düzlemi olarak da bilinir.
‫Bu terimi Swarm'dan hatırlayacaksınız; Swarm'da özellikle
‫ağ üzerindeki protokollere atıfta bulunuluyordu
‫ve bu protokoller yöneticilerin ve düğümlerin emir vermek için güvenli
‫bir şekilde konuşmasını sağlıyordu.
‫Ama burada durum biraz farklı.
‫Kontrol düzlemi, tüm kararları veren ana düğümlerden
‫bahsediyor.
‫Tıpkı Swarm'da olduğu gibi, işçi düğümlerimiz var.
‫Belgelerde bunlardan sadece düğümler olarak
‫bahsedilecektir. Bazen işçi kelimesinin geçtiğini görürsünüz.
‫Tutarlı olması için bu düğümleri burada adlandıracağız.
‫Yine, daha önce olduğu gibi, bunların hepsi konteyner çalıştırabilir,
‫ancak genellikle uygulamalarınızı düğümlerde ve
‫Kubernetes yönetim sistemlerini ana bilgisayarlarda tutacaksınız.
‫Bunların hepsi Docker ya da containerd
‫veya crio gibi başka bir konteyner çalışma zamanı üzerinde
‫çalışıyor.
‫Her master'ın içinde, sistemi kontrol altında tutmak
‫için birden fazla konteyner çalıştırmamız
‫gerekecek. Bunlardan ilki etcd'dir.
‫Etcd, anahtar değerler için dağıtılmış bir depolama
‫sistemidir.
‫Swarm'ın RAFT algoritma sistemiyle çalışmasına
‫çok benziyor.
‫etcd'ye benzer, ancak etcd ayrı bir üründür ve Kubernetes olmadan
‫yalnızca yapılandırma verilerini depolamak için yükleyebileceğiniz
‫bir şeydir.
‫Aynı RAFT protokolünü kullanır, bu nedenle aynı kuralların
‫çoğu geçerlidir. Tek sayılara ihtiyacın var.
‫Bir taneyle başlayabilirsiniz, ancak gerçek hata toleransı istiyorsanız
‫üç taneye ihtiyacınız vardır.
‫Ve böyle devam eder. Bunun da ötesinde, verileri
‫etcd içinde depolayacak ve kümeyi yönetecek birden fazla
‫Kubernetes konteyneri çalıştırmanız gerekir.
‫İlk olarak API, bu kümeyle konuşmamızın
‫ve ona emir vermemizin yolu olacak.
‫Sırada, konteynerlerinizin pod adı verilen nesnelerdeki düğümlere
‫nasıl ve nerede yerleştirileceğini kontrol edecek olan scheduler
‫konteyneri var.
‫Sırada, tüm kümenin ve içinde çalışan her şeyin durumuna
‫bakan ve bunu yapmak için API kullanan
‫denetleyici yöneticisi var.
‫Kendisine verilen emirleri veya teknik özellikleri alır ve
‫ondan yapmasını istediğiniz şey ile gerçekte olan şey
‫arasındaki farkı belirler.
‫Temel olarak, tüm sistemi gören
‫ve şu anda gerçekleşen her şeyi yapmasını istediğiniz
‫şeyle aynı hale nasıl getireceğini bulan bir
‫döngüdür. O zaman DNS'i kontrol etmek için bir şeye ihtiyacınız
‫olacak, ki bu yerleşik değildir ve varsayılan olarak bu coreDNS'dir.
‫Daha sonra alacağınız ağ veya depolama, web ve diğer
‫özellikler gibi diğer eklentilere bağlı olarak,
‫burada çalışan daha fazla konteynere de sahip olacaksınız.
‫Tüm düğümlerde, çalışan bir ajana ihtiyaçları olacak.
‫Bu kubelet olarak bilinir.
‫Başlangıç olarak, ağ bağlantısını kontrol etmek için kube-proxy'ye
‫ihtiyacınız olacak.
‫Tıpkı Docker'da olduğu gibi, tüm bunlar rolleri için
‫tekrarlanacaktır. Çoklu master yapacak olsaydınız,
‫master'larda da aynı konteynerler kurulurdu.
‫Çalışan düğümler için ayarladığınız her düğümde
‫yönetim için en az iki konteyner bulunacaktır.
‫Kubernetes
‫pek çok sorunu pek çok şekilde çözmek için tasarlanmıştır.
‫Kendinizi muhtemelen ustalara daha fazla şey, düğümlere
‫ağ oluşturma gibi daha fazla şey eklerken bulacaksınız.
‫Master tarafında, üzerine eklenebilecek çok sayıda başka
‫isteğe bağlı araç da var.
‫Öğrenmek için bunu yerel sisteminize kurmaya başlayalım.