Google Cloud'da web sitelerini dağıtmanın birçok yolu vardır. Her çözüm; farklı özellikler, olanaklar ve kontrol düzeyleri sunar. Compute Engine, web sitesini çalıştırırken kullanılan altyapı üzerinde derin bir kontrol seviyesi sunmakla birlikte, Google Kubernetes Engines (GKE), App Engine veya diğer çözümlere göre biraz daha fazla operasyon yönetimi gerektirir. Compute Engine ile altyapının sanal makineler ve yük dengeleyiciler gibi birçok yönü üzerinde ayrıntılı kontrol sahibi olursunuz.
Bu laboratuvarda bir web sitesinin Compute Engine ile nasıl kolayca dağıtılabileceğini ve ölçeklendirilebileceğini göstermek için örnek bir uygulama olan "Fancy Store" e-ticaret web sitesini dağıtacaksınız.
Laboratuvarın sonunda web sitenize otomatik iyileştirme, yük dengeleme, otomatik ölçeklendirme ve periyodik güncellemeler sağlamak üzere yönetilen örnek gruplarının içinde örnekleriniz olacak.
Kurulum ve şartlar
Laboratuvarı Başlat düğmesini tıklamadan önce
Buradaki talimatları okuyun. Laboratuvarlar süreli olduğundan duraklatılamaz. Start Lab'i (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 simülasyon veya demo ortamı yerine gerçek bir bulut ortamında gerçekleştirebilirsiniz. Bunu yapabilmeniz 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 kullanabilirsiniz.
Bu laboratuvarı tamamlamak için gerekenler:
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 modda (önerilen) veya gizli tarama penceresinde 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: Bu laboratuvar için yalnızca öğrenci hesabını kullanın. Farklı bir Google Cloud hesabı kullanırsanız bu hesaptan ödeme alınabilir.
Laboratuvarınızı başlatma ve Google Cloud Console'da oturum açma
Laboratuvarı Başlat düğmesini tıklayın. Laboratuvar için ödeme yapmanız gerekiyorsa ödeme yöntemini seçebileceğiniz bir iletişim kutusu açılır.
Soldaki "Laboratuvar ayrıntıları" panelinde şunlar yer alır:
"Google Cloud konsolunu aç" düğmesi
Kalan süre
Bu laboratuvarda kullanmanız gereken geçici kimlik bilgileri
Bu laboratuvarda ilerlemek için gerekebilecek diğer bilgiler
Google Cloud Console'u aç'ı tıklayın (veya Chrome Tarayıcı'yı kullanıyorsanız sağ tıklayıp Bağlantıyı gizli pencerede aç'ı seçin).
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.
Gerekirse aşağıdaki kullanıcı adını kopyalayıp Oturum açın iletişim kutusuna yapıştırın.
{{{user_0.username | "Username"}}}
Kullanıcı adını "Laboratuvar ayrıntıları" panelinde de bulabilirsiniz.
İleri'yi tıklayın.
Aşağıdaki şifreyi kopyalayıp Hoş geldiniz iletişim kutusuna yapıştırın.
{{{user_0.password | "Password"}}}
Şifreyi "Laboratuvar ayrıntıları" panelinde de bulabilirsiniz.
İleri'yi tıklayın.
Önemli: Laboratuvarın sizinle paylaştığı giriş bilgilerini kullanmanız gerekir. Google Cloud hesabınızın kimlik bilgilerini kullanmayın.
Not: Bu laboratuvarda kendi Google Cloud hesabınızı kullanabilmek için ek ücret ödemeniz gerekebilir.
Sonraki sayfalarda ilgili düğmeleri tıklayarak ilerleyin:
Hükümler 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 Google Cloud konsolu bu sekmede açılır.
Not: Google Cloud ürün ve hizmetlerine erişmek için gezinme menüsünü tıklayın veya Arama alanına hizmetin veya ürünün adını yazın.
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.
Google Cloud konsolunun üst kısmından Activate Cloud Shell (Cloud Shell'i etkinleştir) simgesini tıklayın.
Aşağıdaki pencereleri tıklayın:
Cloud Shell bilgi penceresinde devam edin.
Google Cloud API çağrıları yapmak için Cloud Shell'e kimlik bilgilerinizi kullanma yetkisi verin.
Bağlandığınızda kimliğiniz zaten doğrulanmıştır. 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 {{{project_0.project_id | "PROJECT_ID"}}}
gcloud, Google Cloud'un komut satırı aracıdır. Cloud Shell'e önceden yüklenmiştir ve sekmeyle tamamlamayı destekler.
(İsteğe bağlı) Etkin hesap adını şu komutla listeleyebilirsiniz:
gcloud auth list
Authorize'ı (Yetkilendir) tıklayın.
Çıkış:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
(İsteğe bağlı) Proje kimliğini şu komutla listeleyebilirsiniz:
gcloud config list project
Çıkış:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
Not: gcloud ile ilgili tüm belgeleri, Google Cloud'daki gcloud CLI'a genel bakış rehberinde bulabilirsiniz.
Bölgenizi ve alt bölgenizi ayarlayın
Belirli Compute Engine kaynakları, bölge ve alt bölgelerde bulunur. Bölge, kaynaklarınızı çalıştırabileceğiniz belirli bir coğrafi konumdur. Her bölgede bir veya daha fazla alt bölge vardır.
Laboratuvarınızın varsayılan bölgesini ve alt bölgesini ayarlamak için Cloud Console'da şu gcloud komutlarını çalıştırın:
gcloud config set compute/zone "{{{project_0.default_zone|ZONE}}}"
export ZONE=$(gcloud config get compute/zone)
gcloud config set compute/region "{{{project_0.default_region|REGION}}}"
export REGION=$(gcloud config get compute/region)
Hem derleme kodunuzu hem de başlangıç komut dosyalarınızı barındırmak için bir Cloud Storage paketi kullanacaksınız.
Cloud Shell'den aşağıdaki kodu yürüterek yeni bir Cloud Storage paketi oluşturun:
gsutil mb gs://fancy-store-$DEVSHELL_PROJECT_ID
Not: Cloud Shell'den $DEVSHELL_PROJECT_ID ortam değişkeninin kullanılma amacı, nesne adlarının benzersiz olmasını sağlamaktır. Google Cloud'daki tüm proje kimliklerinin benzersiz olması gerektiğinden, proje kimliğinin eklenmesi diğer adların da benzersiz olmasını sağlar.
Hedefi doğrulamak için İlerleme durumumu kontrol et'i tıklayın.
Cloud Storage paketi oluşturma
3. görev: Kaynak depoyu klonlama
Web sitenizin temeli olarak monolith-to-microservices deposunu temel alan mevcut Fancy Store e-ticaret web sitesini kullanın.
Compute Engine'e dağıtımla ilgili özelliklere odaklanabilmek için kaynak kodunu klonlayın. Bu laboratuvarın devamında, Compute Engine üzerinde güncelleme işleminin ne kadar basit olduğunu görmek için kodda küçük bir güncelleme yapacaksınız.
Kaynak kodu klonlayın, ardından monolith-to-microservices dizinine gidin:
git clone https://github.com/googlecodelabs/monolith-to-microservices.git
cd ~/monolith-to-microservices
Uygulamanın yerel olarak çalıştırılmasını sağlamak için kodun ilk derlemesini çalıştırın:
./setup.sh
Bu komut dosyasının tamamlanması birkaç dakika sürer.
İşlem tamamlandıktan sonra aşağıdaki komutla Cloud Shell'in uyumlu bir nodeJS sürümü çalıştırdığından emin olun:
nvm install --lts
Ardından aşağıdaki komutu çalıştırarak uygulamayı test edin, microservices dizinine geçin ve web sunucusunu başlatın:
cd microservices
npm start
Aşağıdaki çıkışı göreceksiniz:
Products microservice listening on port 8082!
Frontend microservice listening on port 8080!
Orders microservice listening on port 8081!
Web önizleme simgesini tıklayıp ardından Preview on port 8080'yi (Bağlantı noktası 8080'de önizle) seçerek uygulamanızı önizleyin.
Bu işlemi yaptığınızda, Fancy Store'un ön ucunu görebileceğiniz yeni bir pencere açılır.
Not: Önizleme seçeneğinde Frontend'i (Ön uç) görebilirsiniz ancak Products (Ürünler) ve Orders (Siparişler) işlevleri çalışmaz. Bunun nedeni, bu hizmetlerin henüz kullanıma sunulmamış olmasıdır.
Web sitesini görüntüledikten sonra bu pencereyi kapatın ve terminal penceresinde CTRL+C tuşlarına basarak web sunucusu işlemini durdurun.
4. görev: Compute Engine örnekleri oluşturma
Artık bazı Compute Engine örneklerini dağıtmaya başlamanın zamanı geldi.
Aşağıdaki adımlarda şunları yapacaksınız:
Örnekleri yapılandırmak için başlangıç komut dosyası oluşturma
Kaynak kodunu klonlama ve Google Cloud Storage'a yükleme
Arka uç mikro hizmetlerini barındırmak için bir Compute Engine örneği dağıtma
Arka uç mikro hizmetler örneğini kullanmak için ön uç kodunu yeniden yapılandırma
Ön uç mikro hizmetini barındırmak için Compute Engine örneği dağıtma
İletişime olanak tanıyacak şekilde ağı yapılandırma
Başlangıç komut dosyasını oluşturma
Başlangıç komut dosyası, örneğe her başlatıldığında ne yapılacağına ilişkin talimatları vermek için kullanılır. Bu yolla örnekler otomatik olarak yapılandırılır.
Cloud Shell'de aşağıdaki komutu çalıştırarak startup-script.sh adlı bir dosya oluşturun:
Kod düzenleyiciyi açmak için Cloud Shell şeridinde Open Editor'ı (Düzenleyiciyi Aç) tıklayın.
monolith-to-microservices klasörüne gidin.
Aşağıdaki kodu startup-script.sh dosyasına ekleyin. Eklendikten sonra kodun bir bölümünü düzenleyeceksiniz:
#!/bin/bash
# Install logging monitor. The monitor will automatically pick up logs sent to
# syslog.
curl -s "https://storage.googleapis.com/signals-agents/logging/google-fluentd-install.sh" | bash
service google-fluentd restart &
# Install dependencies from apt
apt-get update
apt-get install -yq ca-certificates git build-essential supervisor psmisc
# Install nodejs
mkdir /opt/nodejs
curl https://nodejs.org/dist/v16.14.0/node-v16.14.0-linux-x64.tar.gz | tar xvzf - -C /opt/nodejs --strip-components=1
ln -s /opt/nodejs/bin/node /usr/bin/node
ln -s /opt/nodejs/bin/npm /usr/bin/npm
# Get the application source code from the Google Cloud Storage bucket.
mkdir /fancy-store
gsutil -m cp -r gs://fancy-store-[DEVSHELL_PROJECT_ID]/monolith-to-microservices/microservices/* /fancy-store/
# Install app dependencies.
cd /fancy-store/
npm install
# Create a nodeapp user. The application will run as this user.
useradd -m -d /home/nodeapp nodeapp
chown -R nodeapp:nodeapp /opt/app
# Configure supervisor to run the node app.
cat >/etc/supervisor/conf.d/node-app.conf << EOF
[program:nodeapp]
directory=/fancy-store
command=npm start
autostart=true
autorestart=true
user=nodeapp
environment=HOME="/home/nodeapp",USER="nodeapp",NODE_ENV="production"
stdout_logfile=syslog
stderr_logfile=syslog
EOF
supervisorctl reread
supervisorctl update
Dosyada [DEVSHELL_PROJECT_ID] metnini bulup bu metin yerine proje kimliğinizi girin:
startup-script.sh dosyasındaki kod satırı aşağıdaki gibi görünür:
gs://fancy-store-{{{project_0.project_id | Proje Kimliği}}}/monolith-to-microservices/microservices/* /fancy-store/
startup-script.sh dosyasını kaydedin fakat henüz kapatmayın.
Cloud Shell kod düzenleyicinin sağ alt kısmına bakın ve "End of Line Sequence"ın (Satır Sırasının Sonu) "CRLF" olarak değil, "LF" olarak ayarlandığından emin olun.
CRLF olarak ayarlanmışsa CRLF'yi tıklayın ve açılır menüden LF'yi seçin.
End of Line Sequence (Satır Sırasının Sonu) zaten LF olarak ayarlanmışsa olduğu gibi bırakın.
startup-script.sh dosyasını kapatın.
Cloud Shell terminaline dönün ve aşağıdaki komutu çalıştırarak startup-script.sh dosyasını paketinize kopyalayın:
Artık dosyaya şu adresten erişilebilir: https://storage.googleapis.com/[PAKET_ADI]/startup-script.sh.
[PAKET_ADI], Cloud Storage paketinin adını temsil eder. Bu paket, varsayılan olarak yalnızca yetkili kullanıcılar ve hizmet hesapları tarafından görüntülenebilir. Dolayısıyla web tarayıcısı üzerinden erişilemez. Compute Engine örnekleri kendi hizmet hesapları aracılığıyla bu pakete otomatik olarak erişebilir.
Başlangıç komut dosyası aşağıdaki görevleri yerine getirir:
Günlük kaydı aracısını yükler. Aracı syslog'dan günlükleri otomatik olarak toplar.
Node.js'yi ve Supervisor'ı yükler. Supervisor, uygulamayı bir arka plan programı olarak çalıştırır.
Cloud Storage paketinden uygulamanın kaynak kodunu klonlar ve bağımlıları yükler.
Uygulamayı çalıştırmak için Supervisor'ı yapılandırır. Supervisor, beklenmedik bir şekilde çıkış yapılırsa veya bir yönetici ya da işlem tarafından durdurulursa uygulamanın yeniden başlatılmasını sağlar. Ayrıca uygulamanın stdout ve stderr akışlarını günlük kaydı aracısı tarafından toplanması için syslog'a gönderir.
Kodu Cloud Storage paketine kopyalama
Örnekler başlatıldığında kod Cloud Storage paketinden alınır. Böylece bazı yapılandırma değişkenlerini kodun .env dosyası içinde depolayabilirsiniz.
Not: Ayrıca başka bir yerden ortam değişkenlerini çekmek için kod yazabilirsiniz ama basit bir yapılandırma işleme yöntemi olduğundan örnek olarak vermiyoruz. Üretimde, ortam değişkenleri büyük olasılıkla kodun dışında depolanır.
Klonlanan kodu paketinize kopyalayın:
cd ~
rm -rf monolith-to-microservices/*/node_modules
gsutil -m cp -r monolith-to-microservices gs://fancy-store-$DEVSHELL_PROJECT_ID/
Not: node_modules bağımlı dizinleri, kopyalamanın olabildiğince hızlı ve etkili olmasını sağlamak için silinir. Bunlar, örnekler başlatıldığında yeniden oluşturulur.
Hedefi doğrulamak için İlerleme durumumu kontrol et'i tıklayın.
Başlangıç komut dosyası ve kodunu Cloud Storage paketine kopyalama
Arka uç örneğini dağıtma
Dağıtılacak ilk örnek, Orders (Siparişler) ve Products (Ürünler) mikro hizmetlerini barındıracak olan arka uç örneği olacaktır.
Not: Üretim ortamında, bağımsız olarak ölçeklendirilebilmeleri için her mikro hizmeti kendi örneğine ve örnek grubuna ayırmanız önerilir. Gösterim amacıyla her iki arka uç mikro hizmeti de (Siparişler ve Ürünler) aynı örnekte ve örnek grubunda yer alacaktır.
Başlangıç komut dosyasını kullanacak şekilde yapılandırılan bir e2-standard-2 örneği oluşturmak için aşağıdaki komutu yürütün. backend örneği olarak etiketlendiğinden bu örneğe daha sonra belirli güvenlik duvarı kurallarını uygulayabilirsiniz:
Kod Düzenleyici'de .env dosyasını görüntülemek için View (Görünüm) > Toggle Hidden Files'ı (Gizli Dosyaları Aç/Kapat) seçin.
Sonraki adımda .env dosyasını arka ucun harici IP'sine işaret edecek şekilde düzenleyin. [ARKA_UÇ_ADRESİ], yukarıdaki gcloud komutunda belirlenen arka uç örneğinin harici IP adresini temsil eder.
Artık kod yapılandırıldığına göre, ön uç örneğini dağıtın.
Öncekine benzer bir komutla frontend örneğini dağıtmak için aşağıdaki kodu yürütün. Bu örnek güvenlik duvarıyla ilgili amaçlarla frontend olarak etiketlenmiştir:
gcloud compute instances create frontend \
--zone=$ZONE \
--machine-type=e2-standard-2 \
--tags=frontend \
--metadata=startup-script-url=https://storage.googleapis.com/fancy-store-$DEVSHELL_PROJECT_ID/startup-script.sh
Not: Basitlik sağlamak amacıyla ve kod varsayılan olarak tüm mikro hizmetleri başlatacak şekilde yapılandırıldığından, dağıtım komutu ve başlangıç komut dosyası hem ön uç hem de arka uç örnekleriyle kullanılır. Sonuç olarak bu örnekte tüm mikro hizmetler hem ön uç hem de arka uçta çalışır. Üretim ortamında, her bileşende yalnızca ihtiyacınız olan mikro hizmetleri çalıştırabilirsiniz.
Ağı yapılandırma
Ön uç için bağlantı noktası 8080'e ve arka uç için de bağlantı noktası 8081-8082'ye erişim sağlayacak güvenlik duvarı kuralları oluşturun. Bu güvenlik duvarı komutlarında, uygulama için örnek oluşturulurken atanan etiketler kullanılır:
Örneğin başlatılması ve yapılandırılması birkaç dakika sürebilir.
3 dakika bekleyip yeni bir tarayıcı sekmesi açın ve web sitesine erişmek için http://[ÖN_UÇ_ADRESİ]:8080 adresine gidin. Burada [ÖN_UÇ_ADRESİ], yukarıda belirlenen ön uç EXTERNAL_IP değeridir.
Products (Ürünler) ve Orders (Siparişler) sayfalarına gitmeyi deneyin; artık gidebiliyor olmalısınız.
Hedefi doğrulamak için İlerleme durumumu kontrol et'i tıklayın.
Örnekleri dağıtma ve ağı yapılandırma
5. görev: Yönetilen örnek grupları oluşturma
Uygulamanın ölçeklendirilmesine olanak sağlamak için yönetilen örnek grupları oluşturulur ve bunlar, örnek şablonları olarak frontend ve backend örneklerini kullanır.
Yönetilen örnek grubu (MIG), tek bir alt bölgede tek varlık gibi yönetebileceğiniz birbirinin aynı örnekler içerir. Yönetilen örnek grupları, örneklerinizi proaktif olarak kullanılabilir durumda, diğer bir deyişle RUNNING (ÇALIŞIYOR) durumda tutarak yüksek kullanılabilirlik sağlar. Otomatik iyileştirme, yük dengeleme, otomatik ölçeklendirme ve periyodik güncellemeler sağlamak amacıyla ön uç ve arka uç örneklerinizde yönetilen örnek grupları kullanacaksınız.
Kaynak örnekten örnek şablonu oluşturma
Yönetilen örnek grubu oluşturabilmek için önce grubun temelini sağlayan bir örnek şablonu oluşturmanız gerekir. Örnek şablonları yeni sanal makine örnekleri oluştururken kullanılacak makine türü, önyükleme diski görüntüsü veya kapsayıcı görüntüsü, ağ ve diğer örnek özelliklerini tanımlamanıza olanak sağlar. Örnek şablonlarını kullanarak yönetilen örnek grubunun içinde örnekler oluşturabileceğiniz gibi tek tek örnekler bile oluşturabilirsiniz.
Örnek şablonunu oluşturmak için daha önce hazırladığınız mevcut örnekleri kullanın.
Normalde frontend sanal makinesini silebilirsiniz ancak bu sanal makineyi laboratuvarın sonraki aşamalarında örnek şablonunu güncellemek için kullanacaksınız.
Yönetilen örnek grubu oluşturma
Ardından biri ön uç ve diğeri de arka uç için olmak üzere iki yönetilen örnek grubu oluşturun:
Bu yönetilen örnek grupları örnek şablonlarını kullanır ve her grubun içinde birer örnek olmak üzere iki örneğin başlatılacağı şekilde yapılandırılır. Örnekler base-instance-name temel alınarak otomatik olarak adlandırılır ve sonlarına rastgele karakterler eklenir.
Sizin uygulamanızda frontend mikro hizmeti, bağlantı noktası 8080 üzerinde çalışırken backend mikro hizmeti orders için bağlantı noktası 8081 ve products için bağlantı noktası 8082 üzerinde çalışır:
Bunlar, standart olmayan bağlantı noktaları olduğundan, bunları tanımlamak için adlandırılmış bağlantı noktaları belirtirsiniz. Adlandırılmış bağlantı noktaları, hizmet adını ve bu hizmetin üzerinde çalıştırıldığı bağlantı noktasını temsil eden anahtar:değer çifti meta verileridir. Adlandırılmış bağlantı noktaları bir örnek grubuna atanabilir ve bu da hizmetin gruptaki tüm örneklerde kullanılabilir olduğunu gösterir. Bu bilgiler daha sonra yapılandırılacak olan HTTP Yük Dengeleme hizmeti tarafından kullanılır.
Otomatik iyileştirmeyi yapılandırma
Uygulamanın kendi kullanılabilirliğini geliştirmek ve yanıt verdiğini doğrulamak için yönetilen örnek gruplarına bir otomatik iyileştirme politikası yapılandırın.
Otomatik iyileştirme politikası uygulamanın beklendiği gibi yanıt verdiğini doğrulamak için uygulama tabanlı durum denetimine güvenir. Uygulamanın yanıt verip vermediğini denetlemek, yalnızca örneğin RUNNING (ÇALIŞIYOR) durumda olduğunu doğrulamaktan (varsayılan davranış) daha kesin sonuç verir.
Not: Yük dengeleme ve otomatik iyileştirme için ayrı durum denetimleri kullanılacaktır. Yük dengelemeye yönelik durum denetimleri daha agresif olabilir ve olmalıdır çünkü bu durum denetimleri bir örneğin kullanıcı trafiği alıp almadığını belirler. Gerektiğinde trafiği yeniden yönlendirebilmek için yanıt vermeyen örnekleri yakalamak istersiniz.
Buna karşılık otomatik iyileştirme için durum denetimi Compute Engine'in başarısız örnekleri proaktif olarak değiştirmesine neden olduğundan bu durum denetimi, yük dengeleme durum denetiminden daha koruyucu olmalıdır.
frontend ve backend için arka arkaya 3 kez "unhealthy" (kötü durumda) ayarını döndürürse örneği onaran bir durum denetimi oluşturun:
Otomatik iyileştirmenin gruptaki örnekleri izlemesine biraz zaman tanımak için laboratuvara devam edin. Laboratuvarın sonunda otomatik iyileştirmeyi test etmek için bir hatayı simüle edeceksiniz.
Hedefi doğrulamak için İlerleme durumumu kontrol et'i tıklayın.
Yönetilen örnek grupları oluşturma
6. görev: Yük dengeleyicileri oluşturma
Yönetilen örnek gruplarınızı tamamlamak amacıyla ön uç ve arka uç mikro hizmetlerine trafik sağlamak için HTTP(S) yük dengeleyicileri kullanın. Yol oluşturma kurallarına göre uygun arka uç hizmetlerine trafik göndermek için ise eşlemeleri kullanın. Bu sayede, tüm hizmetler için yük dengeleme uygulanmış tek bir IP elde edilir.
Google Cloud'da yük dengeleme seçenekleri hakkında daha fazla bilgi edinebilirsiniz: Yük Dengelemeye Genel Bakış.
HTTP(S) yük dengeleyicisi oluşturma
Google Cloud, birçok farklı türde yük dengeleyici sunar. Bu laboratuvarda trafiğiniz için HTTP(S) yük dengeleyici kullanın. HTTP yük dengeleyici şöyle yapılandırılmıştır:
Bir iletim kuralı gelen istekleri hedef HTTP proxy'ye yönlendirir.
Hedef HTTP proxy isteğe uygun arka uç hizmetini belirlemek için her isteği bir URL eşlemesine göre denetler.
Arka uç hizmeti; ekli arka uçlarının hizmet kapasitesi, alt bölgesi ve örnek durumuna göre her isteği uygun arka uca yönlendirir. Her arka uç örneğinin durumu HTTP durum denetimi kullanılarak doğrulanır. Arka uç hizmeti HTTPS veya HTTP/2 durum denetimi kullanacak şekilde yapılandırıldıysa istek, arka uç örneğine giderken şifrelenir.
Yük dengeleyici ile örnek arasındaki oturumlar HTTP, HTTPS veya HTTP/2 protokolünü kullanabilir. HTTPS veya HTTP/2 kullanırsanız arka uç hizmetlerindeki her örneğin bir SSL sertifikası olmalıdır.
Not: Buradaki örneklerde SSL sertifikasının karmaşıklığından kaçınmak için HTTPS yerine HTTP kullanın. Üretimde mümkün olduğunca şifreleme için HTTPS kullanılması önerilir.
Her hizmette trafik sunabilecek örnekleri belirlemek için kullanılacak durum denetimlerini oluşturun:
gcloud compute http-health-checks create fancy-fe-frontend-hc \
--request-path / \
--port 8080
gcloud compute http-health-checks create fancy-be-orders-hc \
--request-path /api/orders \
--port 8081
gcloud compute http-health-checks create fancy-be-products-hc \
--request-path /api/products \
--port 8082
Not: Bu durum denetimleri yük dengeleyiciye yöneliktir ve yalnızca yük dengeleyiciden gelen trafik yönlendirmesini işler ancak yönetilen örnek gruplarının örnekleri yeniden oluşturmasına neden olmaz.
Yük dengeli trafiğin hedefi olan arka uç hizmetlerini oluşturun. Arka uç hizmetleri sizin oluşturduğunuz durum denetimlerini ve adlandırılmış bağlantı noktalarını kullanır:
Hedefi doğrulamak için İlerleme durumumu kontrol et'i tıklayın.
HTTP(S) yük dengeleyicileri oluşturma
Yapılandırmayı güncelleme
Artık yeni bir statik IP adresiniz olduğuna göre frontend kodunu daha önce kullanılan ve backend örneğine işaret eden geçici adres yerine bu yeni adrese işaret edecek şekilde güncelleyin.
Cloud Shell'de, içinde yapılandırmanın bulunduğu .env dosyasını barındıran react-app klasörüne geçin:
Cloud Shell düzenleyicisine dönün ve .env dosyasını düzenleyerek yük dengeleyicinin herkese açık IP'sine işaret etmesini sağlayın. [LB_IP] yukarıda belirlenen arka uç örneğinin harici IP adresidir.
REACT_APP_ORDERS_URL=http://[LB_IP]/api/orders
REACT_APP_PRODUCTS_URL=http://[LB_IP]/api/products
Not: Yük dengeleyici bu yönlendirmeyi sizin yerinize işleyecek şekilde yapılandırıldığından yeni adreste bağlantı noktaları kaldırılmıştır.
Dosyayı kaydedin.
Ön uç kodunu güncelleyecek olan react-app'i yeniden derleyin:
cd ~/monolith-to-microservices/react-app
npm install && npm run-script build
Artık yeni bir kod ve yapılandırma olduğuna göre, yönetilen örnek grubunun içindeki ön uç örneklerinin yeni kodu almasını istersiniz.
Örnekleriniz, başlatma sırasında kodu aldığından periyodik bir yeniden başlatma komutu düzenleyebilirsiniz:
gcloud compute instance-groups managed rolling-action replace fancy-fe-mig \
--zone=$ZONE \
--max-unavailable 100%
Not: Bu periyodik değiştirme örneğinde --max-unavailable parametresiyle tüm makinelerin hemen değiştirilebileceğini özellikle belirtmiş olursunuz. Bu parametre kullanılmadığında, komut örnekleri yeniden başlatırken kullanılabilirliği güvence altına almak için bir örneğin aktif kalmasını sağlar. Test amacıyla, hızla tamamlanması için tümünü hemen değiştirmeyi belirtiyorsunuz.
Hedefi doğrulamak için İlerleme durumumu kontrol et'i tıklayın.
Ön uç örneklerini güncelleme
Web sitesini test etme
Örneklerin işlenmesine zaman tanımak için rolling-action replace komutu gönderildikten sonra 3 dakika bekleyin, ardından yönetilen örnek grubunun durumunu kontrol edin. Aşağıdaki komutu çalıştırarak hizmetin HEALTHY (İyi Durumda) olarak listelendiğini onaylayın:
İki hizmet de HEALTHY (İyi Durumda) olarak listelenene kadar bekleyin.
Örnek çıkış:
backend: https://www.googleapis.com/compute/v1/projects/my-gce-codelab/zones/us-central1-a/instanceGroups/fancy-fe-mig
status:
healthStatus:
- healthState: HEALTHY
instance: https://www.googleapis.com/compute/v1/projects/my-gce-codelab/zones/us-central1-a/instances/fancy-fe-x151
ipAddress: 10.128.0.7
port: 8080
- healthState: HEALTHY
instance: https://www.googleapis.com/compute/v1/projects/my-gce-codelab/zones/us-central1-a/instances/fancy-fe-cgrt
ipAddress: 10.128.0.11
port: 8080
kind: compute#backendServiceGroupHealth
Not: Sorunla karşılaşan ve UNHEALTHY (İyi Durumda Değil) durumunda olan örneklerin otomatik olarak onarılması gerekir. Bunun gerçekleşmesini bekleyin.
Biraz bekledikten sonra iki örnek de HEALTHY (İyi Durumda) duruma geçmezse, ön uç örneklerinin kurulumunda bir sorun vardır ve bağlantı noktası 8080 üzerinden bu örneklere erişim sağlanamıyordur. Doğrudan bağlantı noktası 8080 üzerinden örneklere göz atarak bunu test edin.
Her iki öğe de listede HEALTHY (İyi Durumda) olarak görüntülendiğinde CTRL+C tuşlarına basarak watch komutundan çıkın.
Not: Uygulamaya http://[LB_IP] üzerinden erişilebilir. Burada [LB_IP], yük dengeleyici için belirlenen IP_ADDRESS değeridir ve aşağıdaki komutla bulunabilir:
gcloud compute forwarding-rules list --global
Uygulamayı laboratuvarın ilerleyen bölümlerinde kontrol edeceksiniz.
7. görev: Compute Engine'i ölçeklendirme
Şimdiye kadar her birinde iki örnek bulunan iki yönetilen örnek grubu oluşturdunuz. Bu tam olarak işlevsel ama yükten bağımsız olarak statik bir yapılandırmadır. Şimdi, her yönetilen örnek grubunu otomatik olarak ölçeklendirmek üzere kullanımı temel alan bir otomatik ölçeklendirme politikası oluşturacaksınız.
Kullanıma göre otomatik olarak yeniden boyutlandırma
Otomatik ölçeklendirme politikası oluşturmak için aşağıdaki kodu yürütün:
Bu komutlar, yönetilen örnek gruplarında kullanım %60'ın üzerine çıktığında otomatik olarak örnek ekleyen ve yük dengeleyici %60 kullanım oranının altına düştüğünde örnek kaldıran bir otomatik ölçekleyici oluşturur.
İçerik yayınlama ağını etkinleştirme
Ölçeklendirmeye yardımcı olabilecek bir diğer özellik, ön uç için önbelleğe alma sağlamak üzere içerik yayınlama ağı hizmetini etkinleştirmektir.
Kullanıcı HTTP(S) yük dengeleyiciden içerik istediğinde istek, Google Front End (GFE) hizmetine gelir ve bu hizmet de kullanıcı isteğinin yanıtı için ilk olarak Cloud CDN önbelleğine bakar. GFE önbelleğe alınmış bir yanıt bulursa önbellekteki yanıtı kullanıcıya gönderir. Bu önbellek isabeti olarak adlandırılır.
GFE istek için önbelleğe alınmış bir yanıt bulamazsa doğrudan arka uca istekte bulunur. Bu isteğin yanıtı önbelleğe alınabiliyorsa GFE yanıtı Cloud CDN önbelleğinde depolar ve bu şekilde sonraki isteklerde önbellek kullanılabilir.
Hedefi doğrulamak için İlerleme durumumu kontrol et'i tıklayın.
Compute Engine'i ölçeklendirme
8. görev: Web sitesini güncelleme
Örnek şablonunu güncelleme
Mevcut örnek şablonları üzerinde düzenleme yapılamaz. Bununla birlikte, örnekleriniz durum bilgisiz olduğundan ve tüm yapılandırma başlangıç komut dosyası yoluyla gerçekleştirildiğinden, şablon ayarlarını değiştirmek istediğinizde örnek şablonunu değiştirmeniz yeterlidir. Şimdi daha büyük bir makine türü kullanmak ve bunu dışarı çıkarmak için basit bir değişiklik yapacaksınız.
Aşağıdaki adımları uygulayarak:
Örnek şablonuna temel oluşturan frontend örneğini güncelleyin. Güncelleme sırasında örnek şablonu görüntüsünün güncellenmiş sürümüne bir dosya yerleştirin, ardından örnek şablonunu güncelleyin, yeni şablonu kullanıma sunun ve dosyanın yönetilen örnek grubu örneklerinde mevcut olduğunu onaylayın.
e2-standard-2 makine türünden e2-small makine türüne geçerek örnek şablonunuzun makine türünü değiştirin.
Aşağıdaki komutu çalıştırarak ön uç örneğinin makine türünü değiştirin:
Sonraki komutta kullanmak üzere listelenen makinelerden birinin adını kopyalayın.
watch işleminden çıkmak için CTRL+C tuşlarına basın.
Sanal makinenin yeni makine türünü (e2-small) kullanıp kullanmadığını öğrenmek için aşağıdaki komutu çalıştırın. Burada [SANAL_MAKİNE_ADI], yeni oluşturulan örneği temsil eder:
Senaryo: Pazarlama ekibiniz sizden sitenizin ana sayfasını değiştirmenizi istedi. Bu sayfanın şirketinizin kimliği ve aslında nelerin satışını yaptığı konusunda daha bilgilendirici olması gerektiğini düşünüyorlar.
Görev: Pazarlama ekibini mutlu etmek için ana sayfaya biraz metin ekleyin. Geliştiricilerden biri istenen değişiklikleri index.js.new adlı bir dosyada zaten hazırlamış. Bu dosyayı index.js dosyasına kopyalarsanız değişiklikler sayfaya yansıtılacaktır. Uygun değişiklikleri yapmak için aşağıdaki talimatları uygulayın.
Aşağıdaki komutları çalıştırarak güncellenmiş dosyayı kopyalayın ve dosya adının doğru olmasını sağlayın:
cd ~/monolith-to-microservices/react-app/src/pages/Home
mv index.js.new index.js
Değişiklikleri doğrulamak için dosyanın içeriğini yazdırın:
Bu işlem sonucunda elde edilen kod aşağıdaki gibi görünmelidir:
/*
Copyright 2019 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from "react";
import { Box, Paper, Typography } from "@mui/material";
export default function Home() {
return (
<Box sx={{ flexGrow: 1 }}>
<Paper
elevation={3}
sx={{
width: "800px",
margin: "0 auto",
padding: (theme) => theme.spacing(3, 2),
}}
>
<Typography variant="h5">Welcome to the Fancy Store!</Typography>
<br />
<Typography variant="body1">
Take a look at our wide variety of products.
</Typography>
</Paper>
</Box>
);
}
React bileşenlerini güncellediniz ancak statik dosyaları oluşturmak için React uygulamasını derlemeniz gerekiyor.
React uygulamasını derlemek için aşağıdaki komutu çalıştırın ve monolitin herkese açık dizinine kopyalayın:
cd ~/monolith-to-microservices/react-app
npm install && npm run-script build
Not: Bu periyodik değiştirme örneğinde, --max-unavailable parametresiyle tüm makinelerin hemen değiştirilebileceğini özellikle belirtmiş olursunuz. Bu parametre kullanılmadığında, komut örnekleri değiştirirken kullanılabilirliği güvence altına almak için bir örneğin aktif kalmasını sağlar. Test amacıyla, hızla tamamlanması için tümünü hemen değiştirmeyi belirtiyorsunuz. Üretimde bir arabellek boşluğu bırakmak, web sitesinin güncelleme sırasında hizmet vermeye devam etmesini sağlayabilir.
Hedefi doğrulamak için İlerleme durumumu kontrol et'i tıklayın.
Web sitesini güncelleme
Örneklerin işlenmesine zaman tanımak için rolling-action replace komutu gönderildikten sonra 3 dakika bekleyin, ardından yönetilen örnek grubunun durumunu kontrol edin. Aşağıdaki komutu çalıştırarak hizmetin HEALTHY (İyi Durumda) olarak listelendiğini onaylayın:
Web sitesine http://[LB_IP] üzerinden göz atabilirsiniz. Burada [LB_IP], yük dengeleyici için belirlenen IP_ADDRESS değeridir ve aşağıdaki komutla bulunabilir:
gcloud compute forwarding-rules list --global
Yeni web sitesi değişiklikleri artık görülebiliyor olmalıdır.
Hata simülasyonu
Durum denetiminin çalıştığını onaylamak için bir örneğe giriş yapın ve hizmetleri durdurun.
watch -n 2 gcloud compute operations list \
--filter='operationType~compute.instances.repair.*'
Bu işlemin tamamlanması birkaç dakika sürer.
Aşağıdaki örnek çıkışı bulun:
NAME TYPE TARGET HTTP_STATUS STATUS TIMESTAMP
repair-1568314034627-5925f90ee238d-fe645bf0-7becce15 compute.instances.repair.recreateInstance us-central1-a/instances/fancy-fe-1vqq 200 DONE 2019-09-12T11:47:14.627-07:00
Yönetilen örnek grubu örneği onarmak için yeniden oluşturdu.
Ayrıca, konsol aracılığıyla izlemek için gezinme menüsü > Compute Engine > VM instances'a (Sanal makine örnekleri) gidebilirsiniz.
Tebrikler!
Web sitenizi Compute Engine üzerinde başarıyla dağıttınız, ölçeklendirdiniz ve güncellediniz. Artık Compute Engine, yönetilen örnek grupları, yük dengeleyiciler ve durum denetimleri konularında deneyimli bir kullanıcısınız.
...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: 26 Nisan 2024
Laboratuvarın Son Test Edilme Tarihi: 15 Aralık 2023
Telif Hakkı 2025 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.
Labs create a Google Cloud project and resources for a fixed time
Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
On the top left of your screen, click Start lab to begin
Use private browsing
Copy the provided Username and Password for the lab
Click Open console in private mode
Sign in to the Console
Sign in using your lab credentials. Using other credentials might cause errors or incur charges.
Accept the terms, and skip the recovery resource page
Don't click End lab unless you've finished the lab or want to restart it, as it will clear your work and remove the project
This content is not currently available
We will notify you via email when it becomes available
Great!
We will contact you via email if it becomes available
One lab at a time
Confirm to end all existing labs and start this one
Use private browsing to run the lab
Use an Incognito or private browser window to run this lab. This
prevents any conflicts between your personal account and the Student
account, which may cause extra charges incurred to your personal account.
Google Compute Engine'de web uygulaması dağıtın ve ölçeklendirin.