arrow_back

Google Kubernetes Engine'de Monolitik Web Sitesini Mikro Hizmetlere Taşıma

Join Sign in
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Google Kubernetes Engine'de Monolitik Web Sitesini Mikro Hizmetlere Taşıma

Lab 1 hour 30 minutes universal_currency_alt 5 Credits show_chart Intermediate
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP699

Google Cloud Rehbersiz Laboratuvarları

Genel bakış

Neden monolitik uygulamadan mikro hizmet mimarisine geçiş yapmalısınız? Uygulamaları mikro hizmetlere ayırmanın sunduğu avantajlar aşağıda verilmiştir ve bunların çoğu, mikro hizmetlerin serbest bağlantılı olmasından kaynaklıdır:

  • Mikro hizmetler bağımsız olarak test edilebilir ve dağıtılabilir. Dağıtım birimi ne kadar küçükse dağıtım o kadar kolay olur.
  • Farklı dillerde ve çerçevelerde uygulanabilir. Her bir mikro hizmetin kendine özgü kullanım alanı için en iyi teknolojiyi seçebilirsiniz.
  • Farklı ekipler tarafından yönetilebilir. Mikro hizmetler arasındaki sınır, bir veya birkaç mikro hizmete özel ekip atanmasını kolaylaştırır.
  • Mikro hizmetlere geçiş yaparak ekiplerin birbirine olan bağımlılığını azaltabilirsiniz. Her ekip yalnızca bağımlı olduğu mikro hizmetlerin API'leriyle ilgilenir. Böylece bu mikro hizmetlerin uygulanma şekli, sürüm döngüleri vb. ile uğraşmasına gerek kalmaz.
  • Arıza durumu için daha kolay planlama yapmanıza olanak tanır. Hizmetler arasında net sınırlar çizildiğinde bir hizmetin çökmesi durumunda ne yapacağınızı belirlemek kolaylaşır.

Monolitlere kıyasla bazı dezavantajlar ise şunlardır:

  • Mikro hizmet tabanlı uygulamalar, çoğu zaman kolaylıkla ayırt edilemeyecek şekilde birbiriyle etkileşime geçen farklı hizmetler arasında bir ağ oluşturduğu için sistemin genel karmaşıklığı da artar.
  • Monolitin dahili işleyişinin aksine mikro hizmetler bir ağ üzerinden iletişim kurar. Bazı durumlarda bu bir güvenlik endişesi oluşturabilir. Istio, mikro hizmetler arasındaki trafiği otomatik olarak şifreleyerek bu sorunu çözer.
  • Hizmetler arasındaki gecikmeler nedeniyle monolitik yaklaşımla aynı performans düzeyine ulaşmak zor olabilir.
  • Sisteminizin davranışı tek bir hizmetten değil, pek çok hizmetten ve bunların arasındaki etkileşimlerden kaynaklanır. Bu nedenle sisteminizin üretimde nasıl davrandığını anlamak (yani sisteminizin gözlemlenebilirliği) daha zordur. Istio bu soruna da çözüm getirir.

Bu laboratuvarda, Google Kubernetes Engine kümesine mevcut bir monolitik uygulamayı dağıtacak ve daha sonra mikro hizmetlere ayıracaksınız. Kubernetes, container'ları yönetme, barındırma, ölçeklendirme ve dağıtma amaçlı bir platformdur. Container'lar ise kodu taşınabilir bir şekilde paketleme ve çalıştırma yoludur. Her mikro hizmetin kendi container'ını çalıştırabildiği mikro hizmet kalıbına uygundur.

Mikro hizmetlerin mimari şeması

Monoliti tek seferde bir tane olacak şekilde üç mikro hizmete ayırarak başlayın. Mikro hizmetler şunlardır: Siparişler, Ürünler ve Ön Uç. Cloud Build'i kullanarak her mikro hizmet için bir Docker görüntüsü derleyin ve daha sonra mikro hizmetleri LoadBalancer türü bir Kubernetes hizmetiyle Google Kubernetes Engine'de (GKE) dağıtın ve kullanıma sunun. Hizmetleri yeniden düzenleyerek monolitten çıkarırken bu işlemi her hizmet için tekrarlayacaksınız. İşlem sırasında, monoliti silebileceğiniz en son aşamaya gelene kadar hem monoliti hem de mikro hizmetleri çalıştırmaya devam edeceksiniz.

Neler öğreneceksiniz?

  • Monoliti mikro hizmetlere ayırma
  • Google Kubernetes Engine kümesi oluşturma
  • Docker görüntüsü oluşturma
  • Docker görüntülerini Kubernetes'e dağıtma

Ön koşullar

  • Proje oluşturmak için yönetim erişimine sahip bir Google Cloud hesabı veya Proje Sahibi rolünde olduğunuz bir proje
  • Docker ve Kubernetes'e dair genel bilgi

Kurulum ve şartlar

Laboratuvarı Başlat düğmesini tıklamadan önce

Buradaki talimatları okuyun. Laboratuvarlar süreli olduğundan duraklatılamaz. Laboratuvarı Başlat'ı tıkladığınızda başlayan zamanlayıcı, Google Cloud kaynaklarının ne süreyle kullanımınıza açık durumda kalacağını gösterir.

Bu uygulamalı laboratuvarı kullanarak, laboratuvar etkinliklerini gerçek bir bulut ortamında (Simülasyon veya demo ortamında değil.) gerçekleştirebilirsiniz. Bu olanağın sunulabilmesi için size yeni, geçici kimlik bilgileri verilir. Bu kimlik bilgilerini laboratuvar süresince Google Cloud'da oturum açmak ve Google Cloud'a erişmek için kullanırsınız.

Bu laboratuvarı tamamlamak için şunlar gerekir:

  • Standart bir internet tarayıcısına erişim (Chrome Tarayıcı önerilir).
Not: Bu laboratuvarı çalıştırmak için tarayıcıyı gizli pencerede açın. Aksi takdirde, kişisel hesabınızla öğrenci hesabınız arasında oluşabilecek çakışmalar nedeniyle kişisel hesabınızdan ek ücret alınabilir.
  • Laboratuvarı tamamlamak için yeterli süre. (Laboratuvarlar, başlatıldıktan sonra duraklatılamaz)
Not: Kişisel bir Google Cloud hesabınız veya projeniz varsa bu laboratuvarda kullanmayın. Aksi takdirde hesabınızdan ek ücret alınabilir.

Laboratuvarınızı başlatma ve Google Cloud Console'da oturum açma

  1. Laboratuvarı Başlat düğmesini tıklayın. Laboratuvar için ödeme yapmanız gerekiyorsa ödeme yöntemini seçebileceğiniz bir pop-up açılır. Soldaki Laboratuvar Ayrıntıları panelinde şunlar yer alır:

    • Google Console'u Aç düğmesi
    • Kalan süre
    • Bu laboratuvarda kullanmanız gereken geçici kimlik bilgileri
    • Bu laboratuvarda ilerlemek için gerekebilecek diğer bilgiler
  2. Google Console'u Aç'ı tıklayın. Laboratuvar, kaynakları çalıştırır ve sonra Oturum aç sayfasını gösteren başka bir sekme açar.

    İpucu: Sekmeleri ayrı pencerelerde, yan yana açın.

    Not: Hesap seçin iletişim kutusunu görürseniz Başka Bir Hesap Kullan'ı tıklayın.
  3. Gerekirse Laboratuvar Ayrıntıları panelinden Kullanıcı adı'nı kopyalayın ve Oturum aç iletişim kutusuna yapıştırın. Sonraki'ni tıklayın.

  4. Laboratuvar Ayrıntıları panelinden Şifre'yi kopyalayın ve Hoş geldiniz iletişim penceresine yapıştırın. Sonraki'ni tıklayın.

    Önemli: Sol paneldeki kimlik bilgilerini kullanmanız gerekir. Google Cloud Öğrenim Merkezi kimlik bilgilerinizi kullanmayın. Not: Bu laboratuvarda kendi Google Cloud hesabınızı kullanabilmek için ek ücret ödemeniz gerekebilir.
  5. Sonraki sayfalarda ilgili düğmeleri tıklayarak ilerleyin:

    • Şartları ve koşulları kabul edin.
    • Geçici bir hesap kullandığınızdan kurtarma seçenekleri veya iki faktörlü kimlik doğrulama eklemeyin.
    • Ücretsiz denemelere kaydolmayın.

Birkaç saniye sonra Cloud Console bu sekmede açılır.

Not: Soldaki Gezinme menüsü'nü tıklayarak Google Cloud ürün ve hizmetlerinin listelendiği menüyü görüntüleyebilirsiniz. Gezinme menüsü simgesi

Cloud Shell'i etkinleştirme

Cloud Shell, çok sayıda geliştirme aracı içeren bir sanal makinedir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Cloud Shell, Google Cloud kaynaklarınıza komut satırı erişimi sağlar.

  1. Google Cloud Console'un üst kısmından Cloud Shell'i etkinleştir Cloud Shell'i etkinleştir simgesi simgesini tıklayın.

Bağlandığınızda, kimliğiniz doğrulanmış olur. Proje ise PROJECT_ID'nize göre ayarlanmıştır. Çıkış, bu oturum için PROJECT_ID'yi tanımlayan bir satır içerir:

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud, Google Cloud'un komut satırı aracıdır. Cloud Shell'e önceden yüklenmiştir ve sekmeyle tamamlamayı destekler.

  1. (İsteğe bağlı) Etkin hesap adını şu komutla listeleyebilirsiniz:
gcloud auth list
  1. Yetkilendir'i tıklayın.

  2. Çıkışınız aşağıdaki gibi görünecektir:

Çıkış:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (İsteğe bağlı) Proje kimliğini şu komutla listeleyebilirsiniz:
gcloud config list project

Çıkış:

[core] project = <project_ID>

Örnek çıkış:

[core] project = qwiklabs-gcp-44776a13dea667a6 Not: gcloud ile ilgili tüm belgeleri, Google Cloud'daki gcloud CLI'ya genel bakış rehberinde bulabilirsiniz.

Varsayılan alt bölgeyi ve proje yapılandırmasını ayarlayın:

gcloud config set compute/zone {{{project_0.default_zone | (zone)}}}

1. görev: Kaynak depoyu klonlama

Basit bir karşılama sayfası, ürünler sayfası ve sipariş geçmişi sayfası olan hayali bir e-ticaret web sitesinin mevcut monolitik uygulamasını kullanacaksınız. Kaynağı Git depomuzdan klonladıktan sonra yalnızca mikro hizmetlere ayırmaya ve Google Kubernetes Engine'e (GKE) dağıtmaya odaklanabileceğiz.

  • Git deposunu Cloud Shell örneğinize klonlamak için aşağıdaki komutları çalıştırın ve uygun dizin değişikliğini yapın. Dağıtım öncesinde monolitinizi test edebilmeniz için NodeJS bağımlılarını yüklemeniz gerekir:
cd ~ git clone https://github.com/googlecodelabs/monolith-to-microservices.git cd ~/monolith-to-microservices ./setup.sh

Bu komut dosyasının çalışması birkaç dakika sürebilir.

2. görev: GKE kümesi oluşturma

Geliştirme ortamınız çalışır durumda olduğuna göre şimdi, monolitinizi ve son olarak mikro hizmetlerinizi dağıtacağınız bir Kubernetes kümesine ihtiyacınız var. Küme oluşturabilmeniz için önce gerekli API'lerin etkin olduğundan emin olmalısınız.

  1. Google Kubernetes Engine'i kullanabilmek için Containers API'yi etkinleştirmek üzere aşağıdaki komutu çalıştırın:
gcloud services enable container.googleapis.com
  1. fancy-cluster adlı ve 3 düğüme sahip bir GKE kümesi oluşturmak için aşağıdaki komutu çalıştırın:
gcloud container clusters create fancy-cluster --num-nodes 3 --machine-type=e2-standard-4 Uyarı: Bölgenin veya alt bölgenin belirtilmediğini açıklayan bir hata mesajı alırsanız Ortam Kurulumu bölümüne göz atarak varsayılan işlem alt bölgesini ayarladığınızdan emin olun.

Kümenin oluşturulması birkaç dakika sürebilir.

  1. Bu komut tamamlandıktan sonra, kümenin üç çalışan sanal makine örneğini görmek için aşağıdaki komutu çalıştırın:
gcloud compute instances list

Çıkış:

NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS gke-fancy-cluster-default-pool-ad92506d-1ng3 {{{project_0.default_zone | (zone)}}} e2-standard-4 10.150.0.7 XX.XX.XX.XX RUNNING gke-fancy-cluster-default-pool-ad92506d-4fvq {{{project_0.default_zone | (zone)}}} e2-standard-4 10.150.0.5 XX.XX.XX.XX RUNNING gke-fancy-cluster-default-pool-ad92506d-4zs3 {{{project_0.default_zone | (zone)}}} e2-standard-4 10.150.0.6 XX.XX.XX.XX RUNNING

Kubernetes kümenizi ve ilgili bilgileri Cloud Console'da da görüntüleyebilirsiniz. Gezinme menüsünde aşağı kaydırarak Kubernetes Engine'i bulun ve Clusters'ı (Kümeler) tıklayın.

fancy-cluster adlı kümenizi göreceksiniz.

Tebrikler! İlk Kubernetes kümenizi oluşturdunuz.

Hedefi doğrulamak için İlerleme durumumu kontrol et'i tıklayın. GKE kümesi oluşturma

3. görev: Mevcut monoliti dağıtma

Bu laboratuvarın odak noktası monoliti mikro hizmetlere ayırmak olduğundan öncelikle bir monolitik uygulamayı çalışır duruma getirmeniz gerekir.

  • GKE kümenize bir monolitik uygulama dağıtmak için aşağıdaki komut dosyasını çalıştırın:
cd ~/monolith-to-microservices ./deploy-monolith.sh

Monolite erişme

  1. Monolitik uygulamanın harici IP adresini bulmak için aşağıdaki komutu çalıştırın:
kubectl get service monolith

Şuna benzer bir çıkış alırsınız:

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE monolith 10.3.251.122 203.0.113.0 80:30877/TCP 3d
  1. Çıkışınızda harici IP <pending> (bekleniyor) olarak listeleniyorsa kısa bir süre bekleyin ve komutu yeniden çalıştırın.

  2. Monolitinizin harici IP adresini belirledikten sonra kopyalayın. Monolitinizin erişilebilir durumda olup olmadığını kontrol etmek için tarayıcınızı bu URL'ye (örneğin http://203.0.113.0) yönlendirin.

Not: Daha sonra tekrar kullanacağınız bu IP adresini not almayı unutmayın. Gerekirse aynı komutu kullanarak yeniden bulabilirsiniz.

Monolitik web sitesinin karşılama sayfasını görüyor olmanız gerekir. Karşılama sayfası, daha sonra ön uç mikro hizmeti tarafından sunulacak olan statik bir sayfadır. Artık monolitiniz tümüyle Kubernetes üzerinde çalışıyor.

Hedefi doğrulamak için İlerleme durumumu kontrol et'i tıklayın. Mevcut Monoliti Dağıtma

4. görev: Siparişleri bir mikro hizmete taşıma

Artık GKE'de çalışan bir monolitik web siteniz olduğuna göre hizmetleri mikro hizmetlere ayırmaya başlayabilirsiniz. Genellikle, hangi hizmetlerin daha küçük parçalara ayrılacağını belirlemek için planlama yapılması gerekir. Bu planlama çoğu zaman uygulamanın iş alan adı gibi belirli kısımları etrafında yapılır.

Bu laboratuvar için bir örnek oluşturacak ve iş alan adı etrafındaki tüm hizmetleri ayıracaksınız: Siparişler, Ürünler ve Ön Uç. Hizmetleri Google Kubernetes Engine'de (GKE) derleyip dağıtmaya odaklanabilmeniz için kod sizin adınıza önceden taşındı.

Yeni bir Siparişler mikro hizmeti oluşturma

Ayrılacak ilk hizmet Siparişler hizmetidir. Sağlanan bağımsız kod tabanından faydalanarak bu hizmet için ayrı bir Docker container'ı oluşturun.

Cloud Build ile Docker container oluşturma

Kod tabanı zaten hazır olduğundan, atacağınız ilk adım Cloud Build'i kullanarak Siparişler hizmetinizin Docker container'ını oluşturmak olacak.

Normalde bu süreç iki adımda tamamlanır: Bir Docker container'ı derlenir ve görüntünün GKE'nin çekebileceği şekilde depolanması için bu container bir kayıt defterine aktarılır. Docker container'ı derlemek ve görüntüyü tek bir komutla Container Registry'ye yerleştirmek için Cloud Build kullanılabilir. Böylece tek bir komut vererek görüntünüzü derleyebilir ve Container Registry'ye taşıyabilirsiniz. Docker dosyası oluşturma ve aktarma işlemlerinden oluşan manuel süreç hakkında daha fazla bilgiye Google Cloud Container Registry belgelerinden ve Container Registry Hızlı Başlangıç Kılavuzu'ndan ulaşabilirsiniz.

Google Cloud Build, dizindeki dosyaları sıkıştırır ve bir Cloud Storage paketine taşır. Ardından, derleme işlemi sırasında paketteki tüm dosyalar alınır ve Dockerfile üzerinden Docker derleme işlemi çalıştırılır. Docker görüntüsü için ana makine gcr.io olarak ayarlanır ve --tag işareti belirtilir. Elde edilen Docker görüntüsü Google Cloud Container Registry'ye aktarılır.

  1. Docker container'ınızı derlemek ve Google Container Registry'ye aktarmak için aşağıdaki komutları kullanın:
cd ~/monolith-to-microservices/microservices/src/orders gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/orders:1.0.0 .

Bu işlem bir dakika kadar sürer ve tamamlandıktan sonra terminalde aşağıdakine benzer bir çıkış alınır:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS 1ae295d9-63cb-482c-959b-bc52e9644d53 2019-08-29T01:56:35+00:00 33S gs://_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz gcr.io//orders:1.0.0 SUCCESS
  1. Derleme geçmişinizi görüntülemek veya işlemi gerçek zamanlı olarak izlemek için konsolun sol üst kısmındaki gezinme menüsü düğmesini tıklayın, aşağı kaydırarak CI/CD'ye gidin ve Cloud Build > History'yi (Geçmiş) tıklayın. Burada, önceki tüm derlemelerinizin listesini görebilirsiniz. Şimdilik yalnızca az önce oluşturduğunuz derleme vardır.

Derleme kimliğini tıklarsanız derlemenin günlük çıkışı da dahil olmak üzere tüm ayrıntılarını görebilirsiniz.

Derleme ayrıntıları sayfasında, oluşturulan container görüntüsünü görmek için sağdaki bölümde yer alan Execution Details'ı (Yürütme Ayrıntıları) tıklayın.

Container'ı GKE'ye dağıtma

Web sitesini container mimarisine aldığınıza ve container'ı Google Container Registry'ye aktardığınıza göre sıra Kubernetes'e dağıtım yapmaya geldi.

Kubernetes'te uygulamalar kapsüller olarak temsil edilir. Kapsüller, bir container'ı (veya birbirlerine sıkı sıkıya bağlı bir grup container'ı) temsil eden birimlerdir. Kapsül, Kubernetes'teki en küçük dağıtılabilir birimdir. Bu eğiticideki her kapsülde yalnızca mikro hizmetler container'ınız yer almaktadır.

Uygulamaları bir GKE kümesinde dağıtıp yönetmek için Kubernetes küme yönetimi sistemiyle iletişim kurmanız gerekir. Bunun için genellikle Cloud Shell içinden kubectl komut satırı aracı kullanılır.

İlk olarak bir Dağıtım kaynağı oluşturun. Dağıtım, uygulamanızın replika adı verilen birden fazla kopyasını yönetir ve bu kopyaların her birinin kümenizdeki ayrı birer düğümde çalıştırılmasını planlar. Bu laboratuvarda, Dağıtım tarafından uygulamanızın yalnızca bir kapsülü çalıştırılacaktır. Dağıtımlar bu iş için bir ReplicaSet oluşturur. ReplicaSet, belirtilen sayıda replikanın her zaman çalışmasını sağlamaktan sorumludur.

Aşağıdaki kubectl create deployment komutu, Kubernetes'in kümenizde 1 replikaya sahip Orders (Siparişler) adlı bir Dağıtım oluşturmasını sağlar.

  • Uygulamanızı dağıtmak için şu komutu çalıştırın:
kubectl create deployment orders --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/orders:1.0.0 Not: En iyi uygulama olarak, Kubernetes kümesindeki değişiklikleri (ör. dağıtım veya hizmet oluşturma ya da düzenleme) tanımlamak için YAML dosyası kullanmanızı ve bu değişiklikleri depolamak için GitHub veya Cloud Source Repositories gibi bir kaynak denetim sistemi kullanmanızı öneririz. Bu konuda daha fazla bilgi için Kubernetes Deployments belgelerini inceleyin.

Dağıtımı doğrulama

  • Dağıtımın başarıyla oluşturulduğunu doğrulamak için aşağıdaki komutu çalıştırın:
kubectl get all

Kapsül durumunun Çalışıyor olması birkaç dakika alabilir.

Çıkış:

NAME READY STATUS RESTARTS AGE pod/monolith-779c8d95f5-dxnzl 1/1 Running 0 15h pod/orders-5bc6969d76-kdxkk 1/1 Running 0 21s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.39.240.1 443/TCP 19d service/monolith LoadBalancer 10.39.241.130 34.74.209.57 80:30412/TCP 15h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 1/1 1 1 15h deployment.apps/orders 1/1 1 1 21s NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-779c8d95f5 1 1 1 15h replicaset.apps/orders-5bc6969d76 1 1 1 21s

Geçerli dağıtımınızı, istenen kapsül sayısı 1 olan replicaset'i ve çalışmakta olan kapsülü görebilirsiniz. Bu durumda tüm öğeler başarıyla oluşturulmuş demektir.

Kubernetes dağıtımlarınızı Cloud Console'da gezinme menüsünden Kubernetes Engine > Workloads'a (İş Yükleri) giderek de görüntüleyebilirsiniz.

GKE container'ını kullanıma sunma

Uygulamamızı GKE'de dağıttık ancak buna küme dışından erişmemiz mümkün değil. Varsayılan olarak, GKE'de çalıştırılan container'ların harici bir IP adresi bulunmadığından bu container'lara internet üzerinden erişilemez. İnternet trafiği alabilmesi için uygulamanızı bir Hizmet kaynağı üzerinden açıkça kullanıma sunmanız gerekir. Hizmetler, uygulamanızın kapsüllerine ağ ve IP desteği sağlar. GKE, uygulamanız için faturalandırmaya tabi olan harici bir IP adresi ve bir yük dengeleyici oluşturur. Daha fazla bilgi edinmek için Google Cloud web sitesinde Compute Engine fiyatlandırmasına göz atın.

Bu laboratuvara özel olarak hizmetin kullanıma sunulması basitleştirilmiştir. Normal şartlarda, herkese açık uç noktalarınızın güvenliğini sağlamak için bir API ağ geçidi kullanırsınız. Google Cloud Architecture Center'da mikro hizmet en iyi uygulamalarıyla ilgili daha fazla bilgi bulabilirsiniz.

Siparişler hizmetini dağıttığınızda bir Kubernetes dağıtımı aracılığıyla bağlantı noktası 8081'de dahili olarak kullanıma sundunuz. Bu hizmeti harici olarak kullanıma sunmak için trafiği harici bağlantı noktası 80'den dahili bağlantı noktası 8081'e yönlendirmek üzere LoadBalancer türünde bir Kubernetes hizmeti oluşturmanız gerekir.

  • Web sitenizi internet üzerinden kullanıma sunmak için aşağıdaki komutu çalıştırın:
kubectl expose deployment orders --type=LoadBalancer --port 80 --target-port 8081

Hizmete erişme

GKE, harici IP adresini Dağıtım'a değil Hizmet kaynağına atar.

  • GKE tarafından uygulamanıza sağlanan harici IP adresini öğrenmek istiyorsanız hizmeti incelemek için kubectl get service komutunu kullanabilirsiniz:
kubectl get service orders

Çıkış:

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE orders 10.3.251.122 203.0.113.0 80:30877/TCP 3s

Uygulamanızın harici IP adresini belirledikten sonra kopyalayın. Monolitinizi yeni Siparişler hizmetine işaret edecek şekilde değiştireceğiniz sonraki adım için bu adresi saklayın.

Monoliti yeniden yapılandırma

Siparişler hizmetini monolitten kaldırdığınıza göre artık monoliti yeni harici Siparişler mikro hizmetine işaret edecek şekilde değiştirmeniz gerekir.

Monolitleri ayırırken tek bir kod tabanındaki kod parçalarını birden çok mikro hizmete böler ve ayrı ayrı dağıtırsınız. Mikro hizmetler ayrı bir sunucuda çalıştığından artık hizmet URL'lerinizi mutlak yollar olarak referans veremezsiniz; Siparişler mikro hizmetinin sunucu adresine yönlendirme yapmanız gerekir. Bunun için monolit hizmetin bir süre kapalı kalması ve ayrılan her bir hizmetin URL'sini güncellemesi gerekir. Mikro hizmetleri taşıma sürecinde mikro hizmetlerinizi ve monolitinizi üretime taşımayı planlarken bunu göz önünde bulundurmalısınız.

Monolitteki yapılandırma dosyanızı, yeni Siparişler mikro hizmetinin IP adresine işaret edeceği şekilde güncellemeniz gerekir.

  1. Yerel URL'yi Siparişler mikro hizmetinin IP adresiyle değiştirmek için nano düzenleyiciyi kullanın:
cd ~/monolith-to-microservices/react-app nano .env.monolith

Düzenleyici açıldığında dosyanız şu şekilde görünmelidir:

REACT_APP_ORDERS_URL=/service/orders REACT_APP_PRODUCTS_URL=/service/products
  1. REACT_APP_ORDERS_URL kısmını yeni biçimle değiştirin ve Siparişler mikro hizmetinizin IP adresini aşağıdakiyle eşleşecek şekilde değiştirin:
REACT_APP_ORDERS_URL=http://<ORDERS_IP_ADDRESS>/api/orders REACT_APP_PRODUCTS_URL=/service/products
  1. Dosyayı nano düzenleyicide kaydetmek için CTRL+O, ENTER ve ardından CTRL+X tuşlarına basın.

  2. Dosyada ayarlamış olduğunuz URL'ye giderek yeni mikro hizmeti test edin. Web sayfası, Siparişler mikro hizmetinizden bir JSON yanıtı döndürecektir.

  3. Şimdi monolit ön ucu yeniden derleyin, monolit container'ını derlemek için derleme işlemini tekrarlayın ve GKE kümesine yeniden dağıtım yapın:

  • Monolit yapılandırma dosyalarını yeniden derleyin:
npm run build:monolith
  1. Cloud Build ile Docker container'ı oluşturun:
cd ~/monolith-to-microservices/monolith gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0
  1. Container'ı GKE'ye dağıtın:
kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0
  1. Tarayıcınızda monolitik uygulamaya gidip Siparişler sayfasına bakarak uygulamanın Siparişler mikro hizmetine işaret ettiğini doğrulayın. Tüm sipariş kimlikleri, aşağıda gösterildiği gibi -MICROSERVICE son ekiyle bitmelidir:

Sipariş kimliği, tarih, toplam öğe sayısı ve maliyet sütunlarını içeren sipariş tablosu. Sipariş kimliğinin biçimi şu şekildedir: ORD-000001-MICROSERVICE

  1. Hedefi doğrulamak için İlerleme durumumu kontrol et'i tıklayın. Siparişleri bir mikro hizmete taşıma

5. görev: Ürünleri mikro hizmete taşıma

Yeni bir Ürünler mikro hizmeti oluşturma

Şimdi hizmetleri ayırmaya devam ederek Ürünler hizmetini taşıyın. Önceki süreci aynı şekilde tekrarlayın. Docker container'ı derlemek, container'ınızı dağıtmak ve Kubernetes hizmeti aracılığıyla kullanıma sunmak için aşağıdaki komutları çalıştırın.

  1. Cloud Build ile Docker container'ı oluşturun:
cd ~/monolith-to-microservices/microservices/src/products gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/products:1.0.0
  1. Container'ı GKE'ye dağıtın:
kubectl create deployment products --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/products:1.0.0
  1. GKE container'ını kullanıma sunun:
kubectl expose deployment products --type=LoadBalancer --port 80 --target-port 8082
  1. Siparişler hizmeti için yaptığınız gibi, Ürünler hizmetinin herkese açık IP'sini bulun:
kubectl get service products

Çıkış:

NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE products 10.3.251.122 203.0.113.0 80:30877/TCP 3d

Monoliti yeni Ürünler mikro hizmetinize işaret edecek şekilde yeniden yapılandıracağınız bir sonraki adımda bu IP adresini kullanacaksınız.

Monoliti yeniden yapılandırma

  1. Yerel URL'yi yeni Ürünler mikro hizmetlerinin IP adresiyle değiştirmek için nano düzenleyiciyi kullanın:
cd ~/monolith-to-microservices/react-app nano .env.monolith

Düzenleyici açıldığında dosyanız şu şekilde görünmelidir:

REACT_APP_ORDERS_URL=http://<ORDERS_IP_ADDRESS>/api/orders REACT_APP_PRODUCTS_URL=/service/products
  1. REACT_APP_PRODUCTS_URL kısmını yeni biçimle değiştirin ve Ürünler mikro hizmetinizin IP adresini aşağıdakiyle eşleşecek şekilde değiştirin:
REACT_APP_ORDERS_URL=http://<ORDERS_IP_ADDRESS>/api/orders REACT_APP_PRODUCTS_URL=http://<PRODUCTS_IP_ADDRESS>/api/products
  1. Dosyayı kaydetmek için CTRL+O, ENTER ve ardından CTRL+X tuşlarına basın.

  2. Dosyada ayarlamış olduğunuz URL'ye giderek yeni mikro hizmeti test edin. Web sayfası, Ürünler mikro hizmetinden bir JSON yanıtı döndürecektir.

  3. Şimdi monolit ön ucu yeniden derleyin, monolit container'ını derlemek için derleme işlemini tekrarlayın ve GKE kümesine yeniden dağıtım yapın. Bu adımları tamamlamak için aşağıdaki komutları çalıştırın:

  4. Monolit yapılandırma dosyalarını yeniden derleyin:

npm run build:monolith
  1. Cloud Build ile Docker container'ı oluşturun:
cd ~/monolith-to-microservices/monolith gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:3.0.0 .
  1. Container'ı GKE'ye dağıtın:
kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:3.0.0
  1. Tarayıcınızda monolitik uygulamaya gidip Ürünler sayfasına bakarak uygulamanızın yeni Ürünler mikro hizmetine işaret ettiğini doğrulayın. Tüm ürün adları, aşağıda gösterildiği gibi MS- ön ekiyle başlamalıdır:

Görüntü bloklarındaki her bir görüntünün etiket biçimi şu şekildedir: MS- image name - price. Örnek: MS-Vintage Typewriter-$67.99.

  1. Hedefi doğrulamak için İlerleme durumumu kontrol et'i tıklayın. Ürünleri mikro hizmete taşıma

6. görev: Ön ucu mikro hizmete taşıma

Taşıma sürecinin son adımı, Ön Uç kodunu bir mikro hizmete taşımak ve monoliti kapatmaktır. Bu adım tamamlandıktan sonra monolitimizi mikro hizmet mimarisine başarıyla taşımış olacağız.

Yeni ön uç mikro hizmeti oluşturma

Yeni bir ön uç mikro hizmeti oluşturmak için son iki adımdaki prosedürü uygulayın.

Önceden, monoliti yeniden derlerken yapılandırmayı monolite işaret edecek şekilde güncellemiştiniz. Şimdi ön uç mikro hizmeti için aynı yapılandırmayı kullanmanız gerekir.

  1. Mikro hizmetler URL'sinin yapılandırma dosyalarını ön uç mikro hizmet kod tabanına kopyalamak için aşağıdaki komutları çalıştırın:
cd ~/monolith-to-microservices/react-app cp .env.monolith .env npm run build
  1. Bu işlem tamamlandıktan sonra, önceki adımlarla aynı süreci izleyin. Docker container'ı derlemek, container'ınızı dağıtmak ve Kubernetes hizmeti aracılığıyla kullanıma sunmak için aşağıdaki komutları çalıştırın.

  2. Google Cloud Build ile Docker container'ı oluşturun:

cd ~/monolith-to-microservices/microservices/src/frontend gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/frontend:1.0.0 .
  1. Container'ı GKE'ye dağıtın:
kubectl create deployment frontend --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/frontend:1.0.0
  1. GKE container'ını kullanıma sunun:
kubectl expose deployment frontend --type=LoadBalancer --port 80 --target-port 8080
  1. Hedefi doğrulamak için İlerleme durumumu kontrol et'i tıklayın. Ön ucu mikro hizmete taşıma

Monoliti silme

Tüm hizmetler mikro hizmet olarak çalıştığına göre artık monolitik uygulamayı silebilirsiniz. Gerçek bir taşıma işleminde bu adımı gerçekleştirirken mevcut alan adlarımızın uygulamamızdaki yeni ön uç mikro hizmetlere işaret etmesini sağlamak için DNS değişiklikleri vb. gerekeceğini unutmayın.

  • Monoliti silmek için aşağıdaki komutları çalıştırın:
kubectl delete deployment monolith kubectl delete service monolith

Çalışmanızı test etme

Her şeyin çalıştığını doğrulayın: Monolit hizmetinize ait eski IP adresiniz artık çalışmıyor olmalı ve ön uç hizmetinize ait yeni IP adresiniz yeni uygulamayı barındırıyor olmalıdır.

  • Tüm hizmetlerin ve IP adreslerinin listesini görmek için aşağıdaki komutu çalıştırın:
kubectl get services

Şuna benzer bir çıkış alırsınız:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE frontend LoadBalancer 10.39.246.135 35.227.21.154 80:32663/TCP 12m kubernetes ClusterIP 10.39.240.1 443/TCP 18d orders LoadBalancer 10.39.243.42 35.243.173.255 80:32714/TCP 31m products LoadBalancer 10.39.250.16 35.243.180.23 80:32335/TCP 21m

Ön uç mikro hizmetinizin harici IP adresini belirledikten sonra kopyalayın. Ön ucunuzun erişilebilir durumda olup olmadığını kontrol etmek için tarayıcınızı bu URL'ye (örneğin http://203.0.113.0) yönlendirin. Web siteniz, monoliti mikro hizmetlere ayırmadan önce nasılsa yine o şekilde görünmelidir.

Tebrikler!

Monolitik uygulamanızı Google Kubernetes Engine'de başarıyla mikro hizmetlere ayırdınız ve dağıttınız.

Görevinizi tamamlama

Bu yönlendirmesiz öğrenim laboratuvarı, Google Cloud'da Web Sitesi görevinin bir parçasıdır. Görevler, bir öğrenme rotasını oluşturan birbiriyle bağlantılı laboratuvar dizilerini ifade eder. Bu laboratuvara katıldıysanız bu göreve kaydolun ve hemen bir tamamlama kredisi kazanın. Diğer görevleri görüntülemek için Google Cloud Öğrenim Merkezi kataloğuna bakın.

Becerilerinizi gösterip bilgilerinizi doğrulamak için uygulamalı bir yarışma laboratuvarına katılmak ister misiniz? Görevi bitirdikten sonra bu ek yarışma laboratuvarını tamamlayın.

Sonraki laboratuvarınıza katılın

Öğrenmeye devam etmek için Google Cloud'da Ölçeklenebilir Web Uygulamaları Barındırma konulu bu başarılı örnek videosunu izleyin veya aşağıdaki önerilere göz atın:

Sonraki adımlar/Ek kaynaklar

Google Cloud eğitimi ve sertifikası

...Google Cloud teknolojilerinden en iyi şekilde yararlanmanıza yardımcı olur. Derslerimizde teknik becerilere odaklanırken en iyi uygulamalara da yer veriyoruz. Gerekli yetkinlik seviyesine hızlıca ulaşmanız ve öğrenim maceranızı sürdürebilmeniz için sizlere yardımcı olmayı amaçlıyoruz. Temel kavramlardan ileri seviyeye kadar farklı eğitim programlarımız mevcut. Ayrıca, yoğun gündeminize uyması için talep üzerine sağlanan, canlı ve sanal eğitim alternatiflerimiz de var. Sertifikasyonlar ise Google Cloud teknolojilerindeki becerilerinizi ve uzmanlığınızı doğrulamanıza ve kanıtlamanıza yardımcı oluyor.

Kılavuzun Son Güncellenme Tarihi: 20 Eylül 2023

Laboratuvarın Son Test Edilme Tarihi: 20 Eylül 2023

Telif Hakkı 2024 Google LLC Tüm hakları saklıdır. Google ve Google logosu, Google LLC şirketinin ticari markalarıdır. Diğer tüm şirket ve ürün adları ilişkili oldukları şirketlerin ticari markaları olabilir.