Cloud Run ile web sitesi dağıtma

Sanal makine örnekleri, kümeleri, Kapsülleri, hizmetleri ve daha fazlasını oluşturup yönetmenin ek yükü nedeniyle web sitelerini yönetmek zor olabilir. Bu, daha büyük, çok katmanlı uygulamalar için sorun yaratmaz. Ancak yalnızca web sitenizi dağıtmaya ve görünür hale getirmeye çalışıyorsanız bu, çok fazla yüke neden olur.

KNative'in Google Cloud uygulaması olan Cloud Run ile web sitenizi, sanal makine veya Kubernetes tabanlı dağıtımlar için gereken herhangi bir ek yük olmadan yönetebilir ve dağıtabilirsiniz. Bu, yönetim açısından daha basit bir yaklaşım olmakla kalmaz, aynı zamanda web sitenize gelen herhangi bir istek olmadığında sıfıra ölçeklendirme olanağı da sağlar.

Cloud Run, container'lara sunucusuz geliştirme sağlamakla kalmaz, aynı zamanda kendi Google Kubernetes Engine (GKE) kümelerinizde veya Cloud Run tarafından sağlanan, hizmet olarak tümüyle yönetilen bir platformda (PaaS) çözümle de çalıştırılabilir. Bu codelab'de daha sonraki senaryoyu test edeceksiniz.

Aşağıdaki şemada, dağıtım ve Cloud Run barındırma akışının akışı gösterilmektedir. Cloud Shell'de tetiklenen Cloud Build üzerinden oluşturulan bir Docker görüntüsüyle başlarsınız. Ardından, bu resmi Cloud Shell'de bir komutla Cloud Run'a dağıtın.

Ön koşullar

Neler öğreneceksiniz?

  • Cloud Build ile Docker görüntüsü oluşturma ve gcr.io'ya yükleme
  • Cloud Run'a Docker görüntüleri dağıtma
  • Cloud Run dağıtımlarını yönetme
  • Cloud Run'da uygulamalar için uç nokta ayarlama

Derlemeniz istenen nedir?

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

Gerekenler

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

Rehbersiz 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.

Proje adının altında otomatik olarak doldurulan proje kimliğini unutmayın. Proje kimliği tüm Google Cloud projeleri genelinde benzersiz bir addır. Bu nedenle, ekran görüntüsündeki ad zaten alınmıştır ve sizin için çalışmayacaktır. Bu sayfa, daha sonra PROJECT_ID olarak adlandırılacaktır.

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 & gt; Kontrol Paneli & gt; API'leri ve Hizmetleri Etkinleştir'i tıklayın. .

"Cloud Run API" araması yapın ve ardından Cloud Run API > Etkinleştir'i tıklayın.

Bu codelab'i gözden geçirmek için ödeme yapmanız birkaç saati aşmaz. Ancak, daha fazla kaynak kullanmaya karar verirseniz veya bunları çalışır durumda bırakırsanız daha fazla sonuç elde edebilirsiniz (sondaki Temizleme bölümüne bakın). Daha fazla bilgi için Fiyatlandırma bölümüne bakın.

Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

Cloud Shell

Google Cloud ve Cloud Run, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak, 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çevelerle önceden yapılandırılmıştır.

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

Google Cloud Shell'i etkinleştirmek için geliştirici konsolunun sağ üst tarafındaki düğmeyi tıklayın (temel hazırlığın yapılması ve ortama bağlanmanız yalnızca birkaç dakika sürer):

cloudShell.png'yi etkinleştir

"Cloud Shell'i Başlat" düğmesini tıklayın:

Ekran Görüntüsü, 14.06.2017 10.13.43.png

Cloud shell'e bağlandıktan sonra kimliğinizin zaten doğrulanmış olduğunu ve projenin PROJECT_ID olarak ayarlandığını görmeniz gerekir :

gcloud auth list

Komut çıkışı

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

Komut çıkışı

[core]
project = <PROJECT_ID>

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

echo $GOOGLE_CLOUD_PROJECT

Komut çıkışı

<PROJECT_ID>

Herhangi bir nedenle proje ayarlanmadıysa aşağıdaki komutu verin :

gcloud config set project <PROJECT_ID>

PROJECT_ID cihazınızı mı arıyorsunuz? Kurulum adımlarında hangi kimliği kullandığınıza göz atın veya konsolu kontrol panelinde arayın:

Proje_kimliği.png

ÖNEMLİ: Son olarak varsayılan alt bölgeyi ve proje yapılandırmasını ayarlayın:

gcloud config set compute/zone us-central1-f

Farklı bölgeler seçebilirsiniz. Bölgeler ve Alt Bölgeler dokümanlarında daha fazla bilgi edinin.

Mevcut bir web sitesini dağıttığınızı göz önünde bulundurarak kaynağı deponuzdan klonlamanız yeterlidir. Böylece Docker görüntüleri oluşturmaya ve Cloud Run'a dağıtmaya odaklanabilirsiniz.

Depoyu Cloud Shell örneğinize klonlamak için aşağıdaki komutları çalıştırın ve uygun dizine geçin. Uygulamanızı dağıtımdan önce test edebilmeniz için Node.js bağımlılıklarını da yüklersiniz.

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

Böylece 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 özeni gösterin 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 tıklayıp 8080 bağlantı noktasında önizle'yi seçerek uygulamanızı önizleyebilirsiniz.

Bunu yaptığınızda Lüks Mağazanızı çalışır durumda görebileceğiniz yeni bir pencere açılır.

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

Kaynak dosyalarınız kullanıma hazır olduğuna göre artık uygulamanızı Docker'a uygun hale getirebilirsiniz.

Normalde iki adımlı bir yaklaşım uygulayarak Docker container'ı derleyip GKE'nin çekeceği resmi depolamak için kayıt defterine aktarmanız gerekir. Ancak Docker container'ı oluşturmak için Cloud Build'i kullanarak görüntüyü tek bir komutla Container Registry'ye yerleştirebilirsiniz. Bir Dockerfile oluşturma ve aktarmaya yönelik manuel süreci görüntülemek için Container Registry için Quickstart konusuna bakın.

Cloud Build, dizindeki dosyaları sıkıştırır ve bir Cloud Storage paketine taşır. Ardından derleme işlemi, paketteki tüm dosyaları alır ve Docker derleme işlemini çalıştırmak için aynı dizinde bulunan Dockerfile dosyasını kullanır. Ana makineyle birlikte --tag görüntüsünü Docker görüntüsü için gcr.io olarak belirttiğinize göre, elde edilen Docker görüntüsü Container Registry'ye aktarılır.

Öncelikle, Cloud Build API'nin etkin olduğundan emin olun. 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, ancak 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 bir listesini görebilirsiniz, ancak yalnızca oluşturduğunuz derlemelerin bir listesi olmalıdır.

Derleme kimliği'ni tıklarsanız günlük çıkışı dahil olmak üzere söz konusu derlemenin 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örüntüleyebilirsiniz.

Web sitenizi container mimarisine alıp container'a aktardığınıza göre şimdi Cloud Run'a dağıtım zamanı geldi!

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

  • Cloud Run (tümüyle yönetilen), kapsayıcı 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 getirebilmenizi sağlayan ek bir kontrol katmanına sahip Cloud Run'dır. Daha fazla bilgi için Google Cloud'da Anthos için Cloud Run'ı kurma bölümüne bakın.

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

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 

Hangi bölgede yayın yapmak istediğinizi belirtmeniz istenir. Size en yakın bölgeyi seçin, ardından varsayılan önerilen hizmet adını (monolit) kabul edin.

Test amacıyla, uygulama için kimliği doğrulanmamış isteklere izin verin. İstemde y girin.

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 öğesinin Running olması birkaç dakika sürebilir:

gcloud run services list

[1] Cloud Run (tümüyle yönetilen) seçeneğini belirleyin.

Çıkış:

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

Sonuç, birkaç şey gösterir. Dağıtımınızın yanı sıra dağıtan kullanıcıyı (e-posta adresiniz) ve uygulamaya erişmek için kullanabileceğiniz URL'yi görebilirsiniz. Her şey başarıyla oluşturuldu!

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

Şimdi, uygulamanızı tekrar dağıtın, ancak bu kez parametrelerden birini düzenleyin.

Cloud Run uygulaması varsayılan olarak 80 eş zamanlılık değerine sahip olur. Bu, her bir kapsayıcı örneğinin aynı anda en fazla 80 istek sunacağı anlamına gelir. Bu, Hizmet Olarak İşlevler (FaaS) modelinden büyük bir ayrılmadır. Bu örnekte, tek seferde bir istek ele alınmaktadır.

Aynı kapsayıcı görüntüsünü, 1 eş zamanlı değerle (yalnızca test amaçlı) yeniden dağıtın ve ne olduğunu görün.

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

Sonraki soruları ilk kez yaptığınız gibi yanıtlayın. Komut başarılı olduktan sonra sonucu görmek için Cloud Console'a bakın.

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

Düzeltmeler sekmesini tıklayın. İki düzeltme oluşturulduğunu görürsünüz. monolith-00002 bağlantısını tıklayın ve ayrıntıları inceleyin. Eşzamanlı değerin 1'e düştüğünü görürsünüz.

]

Bu yapılandırma test için yeterli olsa da, çoğu üretim senaryosunda birden fazla eşzamanlı isteği destekleyen kapsayıcılarınız olur.

Şimdi yeniden dağıtmadan orijinal eşzamanlılığı geri yükleyin. Eş zamanlılık değerini varsayılan olarak 80 veya 0 olarak ayarlayabilirsiniz. Böylece, eşzamanlılık kısıtlamaları kaldırılır ve varsayılan maksimum değere (bu yazı yazılırken 80 olur) ayarlanır.

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

Başka bir düzeltme oluşturulmuş, trafiğin yönlendirildiğine ve eşzamanlılığın tekrar 80'e çıktığına dikkat edin.

Pazarlama ekibiniz, şirketinizin web sitesinin ana sayfasını değiştirmenizi istedi. Şirketin ne olduğunu ve ne sattığını daha bilgilendirici hale getirmesi gerektiğini düşünüyor. Bu bölümde, pazarlama ekibini memnun etmek için ana sayfaya bir metin ekleyeceksiniz.

Geliştiricilerinizden birinin index.js.new dosya adıyla değişiklikleri zaten oluşturduğu anlaşılıyor. Bu dosyayı index.js'a kopyalamanız yeterli. Yaptığınız değişiklikler yansıtılmalıdır. Talimatları uygulayarak gerekli değişiklikleri yapı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 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 kapsayıcınızı yeniden oluşturup Container Registry'de yayınlamanız gerekir. Öncekiyle aynı komutu kullanabilirsiniz ancak bu sefer sürüm etiketini güncellemiş olursunuz.

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 .

Bir sonraki bölümde, uygulamanızı hiç kesinti süresi olmadan güncellemek için bu resmi kullanacaksınız.

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

Cloud Run, her dağıtımı yeni bir düzeltme olarak işler. Bu düzeltme, internete bağlanacak ve daha sonra trafik yönlendirilecektir.

Web sitenizi güncellemek için sonraki talimatları uygulayın.

Komut satırı

Komut satırından, resmi aşağıdaki komutla yeni bir sürüme güncellemek için yeniden dağıtabilirsiniz:

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ılan resminizin en son sürümünü kullandığını göreceksiniz.

Değişikliklerinizi doğrulamak için tekrar Cloud Run hizmetinizin harici URL'sine gidip uygulama başlığınızın güncellendiğini fark edin.

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

gcloud run services list

Artık web sitenizde ana sayfa bileşenine eklediğiniz metin gösterilmelidir.

Container Registry görüntülerini silin

# 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'daki 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

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

Daha fazla bilgi