Cloud Run ile web sitesi dağıtma

1. Başlamadan önce

Sanal makine (VM) örnekleri, kümeler, kapsüller, hizmetler vb. bileşenleri oluşturma ve yönetme görevlerinin getirdiği ek yükle web sitelerini çalıştırmak zorlu olabilir. Büyük ve çok katmanlı uygulamalarda bu durum normal karşılanmakla birlikte yalnızca web sitenizi dağıtıp görünür hale getirmek istiyorsanız tüm bu işlerin oldukça külfetli olduğu söylenebilir.

Knative'in Google Cloud uygulaması olan Cloud Run ile, sanal makine veya Kubernetes tabanlı dağıtımlar için ihtiyaç duyduğunuz hiçbir yükü yüklemeden web sitenizi yönetip dağıtabilirsiniz. Yönetim açısından daha basit bir yaklaşım olmakla kalmayıp aynı zamanda web sitenize hiçbir istek gelmediğinde size sıfıra ölçeklendirme olanağı da sunar.

Bu kod laboratuvarında, Cloud Build aracılığıyla oluşturulan ve Cloud Shell'de tetiklediğiniz bir Docker görüntüsüyle başlarsınız. Ardından, Cloud Shell'deki bir komutla bu görüntüyü Cloud Run'a dağıtırsınız.

Ön koşullar

Neler öğreneceksiniz?

  • Cloud Build ile Docker görüntüsü derleme ve bunu gcr.io sitesine yükleme
  • Docker görüntülerini Cloud Run'a dağıtma
  • Cloud Run dağıtımlarını yönetme
  • Cloud Run'da bir uygulama için uç nokta kurulumu yapma

Ne oluşturacaksınız?

  • Docker kapsayıcısında çalışan statik bir web sitesi
  • Bu kapsayıcının Container Registry'de bulunan sürümü
  • Statik web siteniz için Cloud Run dağıtımı

İhtiyacınız olanlar

  • Proje oluşturmak için yönetim erişimine sahip bir Google Hesabı veya proje sahibi rolüne sahip olduğunuz bir proje

2. Ortam kurulumu

Kendi hızınızda ortam kurulumu

Google Hesabınız yoksa bir hesap oluşturmanız gerekir. Ardından Google Cloud Console'da oturum açın ve Proje > Proje oluştur'u tıklayın.

53dad2cefdae71da.png

faab21976aabeb4c.png

Proje adınızın altında otomatik olarak doldurulan proje kimliğini not edin. Proje kimliği, tüm Google Cloud projelerinde benzersiz bir addır. Bu nedenle, ekran görüntüsünde gösterilen ad zaten alınmış olduğundan kullanılamaz. Bu değere daha sonra PROJECT_ID olarak atıfta bulunulur.

Ardından, Google Cloud kaynaklarını kullanmak ve Cloud Run API'yi etkinleştirmek için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.

Cloud Run API'yi etkinleştirme

Gezinme menüsü ☰ > API'ler ve Hizmetler > Kontrol paneli > API'leri ve Hizmetleri Etkinleştir'i tıklayın. .

5dbb2e6e27a55fcf.png

"Cloud Run API"yi arayın, ardından Cloud Run API > Etkinleştir'i tıklayın.

f1fd486174a744cf.png

Bu kod laboratuvarını çalıştırmak birkaç dolardan fazlaya mal olmaz ancak daha fazla kaynak kullanmaya karar verirseniz veya kaynakları çalışır durumda bırakırsanız maliyet daha yüksek olabilir (sonraki Temizleme bölümüne bakın). Daha fazla bilgi için Fiyatlandırma bölümüne bakın.

Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme için uygundur.

Cloud Shell

Google Cloud ve Cloud Run, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Bunun için Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız. Ortam, ihtiyacınız olan tüm istemci kitaplıkları ve çerçeveleriyle önceden yapılandırılmıştır.

Debian tabanlı bu sanal makinede ihtiyaç duyacağınız tüm geliştirme araçları yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışır. Bu sayede ağ performansını ve kimlik doğrulamayı büyük ölçüde iyileştirir. Yani bu codelab için tek ihtiyacınız bir tarayıcıdır (evet, Chromebook'ta çalışır).

  1. Cloud Shell'i Cloud Console'dan etkinleştirmek için Cloud Shell'i etkinleştir 'i fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q tıklamanız yeterlidir (ortam sağlanıp bağlantı kurulabilmesi için birkaç dakika beklemeniz gerekir).

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 2017-06-14 at 10.13.43 PM.png

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin PROJECT_ID olarak ayarlandığını görürsünüz.

gcloud auth list

Komut çıkışı

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Herhangi bir nedenle proje ayarlanmamışsa aşağıdaki komutu vermeniz yeterlidir:

gcloud config set project <PROJECT_ID>

PROJECT_ID cihazınızı mı arıyorsunuz? Kurulum adımlarında hangi kimliği kullandığınızı kontrol edin veya Cloud Console kontrol panelinde arayın:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

Cloud Shell, bazı ortam değişkenlerini varsayılan olarak da ayarlar. Bu değişkenler, gelecekte komut çalıştırırken faydalı olabilir.

echo $GOOGLE_CLOUD_PROJECT

Komut çıkışı

<PROJECT_ID>
  1. Son olarak, varsayılan alt bölgeyi ve proje yapılandırmasını ayarlayın.
gcloud config set compute/zone us-central1-f

Çeşitli farklı bölgeler seçebilirsiniz. Daha fazla bilgi için Bölgeler ve Alt Bölgeler başlıklı makaleyi inceleyin.

3. Kaynak depoyu klonlama

Mevcut bir web sitesini dağıtacağınız için yalnızca kaynağı deponuzdan klonlamanız yeterlidir. Böylece Docker görüntüleri oluşturup Cloud Run'a dağıtmaya odaklanabilirsiniz.

Depoyu Cloud Shell örneğinize klonlamak ve uygun dizin değişikliğini yapmak için aşağıdaki komutları çalıştırın. Ayrıca, uygulamanızı dağıtmadan önce test edebilmek için Node.js bağımlılarını da yüklemeniz gerekir.

cd ~
git clone https://github.com/googlecodelabs/monolith-to-microservices.git
cd ~/monolith-to-microservices
./setup.sh

Bu işlem, deponuzu klonlar, dizinde değişiklik yapar ve uygulamanızı yerel olarak çalıştırmak için gereken bağımlılıkları yükler. Komut dosyasının çalışması birkaç dakika sürebilir.

Gerekli incelemeleri yapın ve uygulamanızı test edin. Web sunucunuzu başlatmak için aşağıdaki komutu çalıştırın:

cd ~/monolith-to-microservices/monolith
npm start

Çıkış:

Monolith listening on port 8080!

Web Önizlemesi'ni acc630712255c604.png tıklayıp 8080 bağlantı noktasında önizle'yi seçerek uygulamanızı önizleyebilirsiniz.

5869738f0e9ec386.png

Bu işlem, Fancy Store'u iş başında görebileceğiniz yeni bir pencere açar.

9ed25c3f0cbe62fa.png

Web sitesini görüntüledikten sonra bu pencereyi kapatabilirsiniz. Web sunucusu işlemini durdurmak için terminal penceresinde CONTROL+C (Macintosh'te Command+C) tuşuna basın.

4. Cloud Build ile Docker container'ı oluşturma

Kaynak dosyalarınız artık hazır olduğuna göre sıra, uygulamanızı Docker'a uygun hale getirmeye geldi.

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. Ancak Docker container'ı derlemek ve görüntüyü tek bir komutla Container Registry'ye yerleştirmek için Cloud Build'i kullanarak işinizi kolaylaştırabilirsiniz. Dockerfile oluşturma ve aktarma işlemlerinden oluşan manuel süreci görüntülemek için Container Registry Hızlı Başlangıç Kılavuzu'na göz atın.

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 aynı dizinde bulunan Dockerfile üzerinden Docker derleme işlemi çalıştırılır. Docker görüntüsü için ana makineyi gcr.io olarak ayarladığınız ve --tag işaretini belirttiğinizden, elde edilen Docker görüntüsü Container Registry'ye aktarılır.

Öncelikle, Cloud Build API'nin etkinleştirildiğinden emin olmanız gerekir. API'yi etkinleştirmek için aşağıdaki komutu çalıştırın:

gcloud services enable cloudbuild.googleapis.com

API etkinleştirildikten sonra derleme işlemini başlatmak için Cloud Shell'de aşağıdaki komutu çalıştırın:

gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .

Bu işlem birkaç dakika 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://<PROJECT_ID>_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz  gcr.io/<PROJECT_ID>/monolith:1.0.0  SUCCESS

Derleme geçmişinizi görüntülemek veya işlemi gerçek zamanlı olarak izlemek için Cloud Console'a gidip Gezinme menüsü ☰ > Cloud Build > Geçmiş'i tıklayabilirsiniz. Burada, önceki tüm derlemelerinizin listesini görebilirsiniz. Ancak yalnızca oluşturduğunuz derleme gösterilir.

4c753ede203255f6.png

Derleme kimliği'ni tıklarsanız derlemenin günlük çıkışı da dahil olmak üzere tüm ayrıntılarını görebilirsiniz. Resim'in yanındaki bağlantıyı tıklayarak oluşturulan kapsayıcı görüntüsünü görebilirsiniz.

6e88ed1643dfe629.png

5. Container'ı Cloud Run'a dağıtma

Web sitenizi container mimarisine aldığınıza ve Container Registry'ye aktardığınıza göre sıra Cloud Run'a dağıtım yapmaya geldi.

Cloud Run'a dağıtım yapmak için iki yaklaşım mevcuttur:

  • Cloud Run (tümüyle yönetilen), container yaşam döngüsünün tamamının yönetildiği PaaS modelidir. Bu codelab için bu yaklaşımı kullanacaksınız.
  • Cloud Run for Anthos, GKE'den kümelerinizi ve kapsüllerinizi getirmenizi sağlayan ek bir kontrol katmanına sahip Cloud Run'dur. Daha fazla bilgi için Google Cloud'da Cloud Run for Anthos'u ayarlama başlıklı makaleyi inceleyin.

Komut satırı örnekleri, daha önce ayarladığınız ortam değişkenlerini kullanarak Cloud Shell'de gösterilir.

Komut satırı

Uygulamanızı dağıtmak için aşağıdaki komutu çalıştırın:

gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed 

Uygulamayı çalıştırmak istediğiniz bölgeyi belirtmeniz istenir. Size en yakın bölgeyi seçin ve ardından önerilen varsayılan hizmet adını (monolit) kabul edin.

d52d9419c5166674.png

Test amacıyla, kimliği doğrulanmayan isteklerin uygulamaya erişmesine izin verin. İstemde y yazın.

3a57b32f133dad61.png

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. Pod status'ün Running olması birkaç dakika sürebilir:

gcloud run services list

[1] Cloud Run (tümüyle yönetilen)'i seçin.

Çıkış:

SERVICE   REGION    URL  LAST DEPLOYED BY          LAST DEPLOYED AT
✔  monolith  us-east1 <your url>  <your email>  2019-09-16T21:07:38.267Z

Çıkışta çeşitli bilgiler sunulmaktadır. Dağıtımın yanı sıra dağıtım yapan kullanıcıyı (e-posta adresiniz) ve uygulamaya erişmek için kullanabileceğiniz URL'yi görebilirsiniz. Bu durumda her şey başarıyla oluşturulmuş demektir.

Web tarayıcınızda hizmetler listesinde sağlanan URL'yi açın. Yerel olarak önizlediğiniz web sitesini görürsünüz.

6. Daha düşük eşzamanlılığa sahip yeni bir düzeltme oluşturma

Şimdi uygulamanızı yeniden dağıtın ancak bu defa parametrelerden birini düzenleyin.

Varsayılan olarak bir Cloud Run uygulamasının eşzamanlılık değeri 80'dir, yani her container örneği tek seferde en fazla 80 isteğe hizmet verir. Bu, bir örneğin tek seferde bir isteği işlediği hizmet olarak işlevler (FaaS) modeline kıyasla büyük bir farktır.

Test amacıyla, eşzamanlılık değerini 1 yaparak aynı container görüntüsünü yeniden dağıtın ve neler olacağına bakın.

gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 1

Ardından gelen soruları ilk seferde yaptığınız gibi yanıtlayın. Komut başarılı olduğunda sonucu görmek için Cloud Console'a bakın.

Ayrıntıları görmek için Cloud Run kontrol panelinden monolit hizmetini tıklayın.

7d1eed2e4728a4f2.png

Düzeltmeler sekmesini tıklayın. İki düzeltmenin oluşturulduğunu göreceksiniz. monolith-00002'yi tıklayın ve ayrıntıları inceleyin. Eşzamanlılık değerinin 1'e düştüğünü görürsünüz.

217185c0eccc87dd.png]

4ad481b8bcd0343d.png

Test için bu yapılandırma yeterli olsa da çoğu üretim senaryosunda birden çok eşzamanlı isteği destekleyen container'larınız olur.

Şimdi yeniden dağıtım yapmadan ilk eşzamanlılık değerini geri yükleyin. Eşzamanlılık değerini varsayılan 80 veya 0 değerine ayarlayabilirsiniz. Bu durumda eşzamanlılık kısıtlamaları kaldırılır ve varsayılan maksimum değer (bu makalenin yazıldığı sırada 80) belirlenir.

Mevcut düzeltmeyi güncellemek için Cloud Shell'de aşağıdaki komutu çalıştırın:

gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 80

Yeni bir düzeltmenin oluşturulduğunu, trafiğin yönlendirildiğini ve eşzamanlılığın tekrar 80 olduğunu fark edeceksiniz.

7. Web sitesinde değişiklik yapma

Pazarlama ekibiniz sizden şirketinizin web sitesinin ana sayfasını değiştirmenizi istedi. Bu sayfanın şirketin kimliği ve satışı yapılan ürünler hakkında daha bilgilendirici olması gerektiğini düşünüyorlar. Bu bölümde, pazarlama ekibini memnun etmek için ana sayfaya bazı metinler ekleyeceksiniz.

Geliştiricilerinizden biri, istenen değişiklikleri index.js.new adlı bir dosyada hazırlamış. Bu dosyayı index.js dosyasına kopyalarsanız değişiklikleriniz sayfaya yansıtılacaktır. Uygun değişiklikleri yapmak için talimatları uygulayın.

Aşağıdaki komutları çalıştırın, güncellenen dosyayı doğru dosya adına kopyalayın ve değişiklikleri doğrulamak için dosya içeriğini yazdırın:

cd ~/monolith-to-microservices/react-app/src/pages/Home
mv index.js.new index.js
cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js

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 { makeStyles } from "@material-ui/core/styles";
import Paper from "@material-ui/core/Paper";
import Typography from "@material-ui/core/Typography";
const useStyles = makeStyles(theme => ({
  root: {
    flexGrow: 1
  },
  paper: {
    width: "800px",
    margin: "0 auto",
    padding: theme.spacing(3, 2)
  }
}));
export default function Home() {
  const classes = useStyles();
  return (
    <div className={classes.root}>
      <Paper className={classes.paper}>
        <Typography variant="h5">
          Fancy Fashion &amp; Style Online
        </Typography>
        <br />
        <Typography variant="body1">
          Tired of mainstream fashion ideas, popular trends and societal norms?
          This line of lifestyle products will help you catch up with the Fancy trend and express your personal style.
          Start shopping Fancy items now!
        </Typography>
      </Paper>
    </div>
  );
}

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 run build:monolith

Kodunuz güncellendiğine göre Docker container'ınızı yeniden derleyip Container Registry'de yayınlamanız gerekiyor. Önceki komutu tekrar kullanabilirsiniz ancak bu kez sürüm etiketini güncelleyin.

Güncellenmiş 2.0.0 görüntü sürümüyle yeni bir Cloud Build tetiklemek için aşağıdaki komutu çalıştırın:

cd ~/monolith-to-microservices/monolith

#Feel free to test your application
npm start

gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .

Sonraki bölümde, kapalı kalma süresi olmadan uygulamanızı güncellemek için bu görüntüyü kullanacaksınız.

8. Kapalı kalma süresi olmadan web sitesini güncelleme

Değişiklikler tamamlandı ve pazarlama ekibi yaptığınız güncellemelerden memnun kaldı. Sırada, kullanıcıların işlerini kesintiye uğratmadan web sitesini güncellemek var.

Cloud Run, her dağıtımı önce online hale getirilen, daha sonra kendisine trafik yönlendirilen yeni bir düzeltme olarak değerlendirir.

Web sitenizi güncellemek için aşağıdaki talimatları uygulayın.

Komut satırı

Aşağıdaki komutu kullanarak komut satırından hizmeti yeniden dağıtıp görüntüyü yeni sürüme güncelleyebilirsiniz:

gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --platform managed

Dağıtımı doğrulama

Aşağıdaki komutu çalıştırarak dağıtım güncellemenizi doğrulayın:

gcloud run services describe monolith --platform managed 

Çıkış şu şekilde görünür:

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  annotations:
    client.knative.dev/user-image: gcr.io/my-cloudrun-codelab/monolith:2.0.0
...

Hizmetinizin artık yeni bir düzeltmede dağıtılmış olan görüntünüzün son sürümünü kullandığını görürsünüz.

Değişikliklerinizi doğrulamak için Cloud Run hizmetinizin harici URL'sine tekrar gidin ve uygulama başlığınızın güncellenmiş olup olmadığına bakın.

Hizmetleri listelemek ve unuttuğunuz IP adresini görüntülemek için aşağıdaki komutu çalıştırın:

gcloud run services list

Web sitenizde artık ana sayfa bileşenine eklediğiniz metin gösterilir.

451ca252acae6928.png

9. Temizleme

Container Registry görüntülerini silme

# Delete the container image for version 1.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet

# Delete the container image for version 2.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quiet

Cloud Storage'dan Cloud Build yapılarını silme

# The following command will take all source archives from all builds and delete them from cloud storage

# Run this command to print all sources:
# gcloud builds list | awk 'NR > 1 {print $4}' 

gcloud builds list | awk 'NR > 1 {print $4}' | while read line; do gsutil rm $line; done

Cloud Run hizmeti silme

gcloud run services delete monolith --platform managed

10. Tebrikler

Web sitenizi Cloud Run ile dağıttınız, ölçeklendirdiniz ve güncellediniz.

Daha fazla bilgi