1. Başlamadan önce
Sanal Makine (VM) örneklerini, kümeleri, kapsülleri, hizmetleri ve daha fazlasını oluşturup yönetmenin ek yükü nedeniyle web sitelerini çalıştırmak zor olabilir. Büyük ve çok katmanlı uygulamalar için sorun yok ancak yalnızca web sitenizi dağıtıp görünür hale getirmek istiyorsanız bunun oldukça fazla ek yükü var demektir.
Knative'in Google Cloud uygulaması olan Cloud Run sayesinde, sanal makine veya Kubernetes tabanlı dağıtımlarda ihtiyaç duyduğunuz ek yük olmadan web sitenizi yönetebilir ve dağıtabilirsiniz. Yönetim açısından daha basit bir yaklaşım sunmakla kalmaz, aynı zamanda web sitenize hiçbir istek gelmediğinde size sıfıra ölçekleme olanağı da sunar.
Cloud Run, container'lara sunucusuz geliştirme hizmeti sunmakla kalmaz, aynı zamanda kendi Google Kubernetes Engine (GKE) kümelerinizde veya Cloud Run'ın sağladığı tümüyle yönetilen bir hizmet olarak platform (PaaS) çözümünde de çalıştırılabilir. İkinci senaryoyu da bu codelab'de test edeceksiniz.
Aşağıdaki şemada, dağıtım ve Cloud Run barındırma akışı gösterilmektedir. Cloud Build aracılığıyla oluşturulan bir Docker görüntüsüyle başlarsınız. Bu işlemi Cloud Shell'de tetiklersiniz. Ardından bu görüntüyü Cloud Shell'de bir komut kullanarak Cloud Run'a dağıtacaksınız.
Ön koşullar
- Docker hakkında genel bilgi (Docker'ın web sitesindeki Başlarken bölümüne bakın.)
Neler öğreneceksiniz?
- Cloud Build ile Docker görüntüsü derleme ve gcr.io'ya 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
Neler oluşturacaksınız?
- Docker container'ı içinde çalışan statik 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ı
İhtiyacınız olanlar
- Proje oluşturmak için yönetim erişimine sahip bir Google Hesabı veya proje sahibi rolüne sahip 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'yi tıklayın > Proje oluşturun.
Proje adınızın altında otomatik olarak doldurulan proje kimliğini unutmayın. Proje kimliği, tüm Google Cloud projeleri için benzersiz bir addır. Bu nedenle, ekran görüntüsündeki ad önceden alınmış ve sizin için uygun olmayacaktır. 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ü Takipçisi'ni tıklayın > API'ler ve Hizmetler > Kontrol paneli > API'leri ve Hizmetleri Etkinleştirin. .
"Cloud Run API" araması yapın. ardından Cloud Run API'yi tıklayın > Etkinleştir.
Bu codelab'i kullanmanın maliyeti birkaç dolardan fazla olmayacaktır. Ancak daha fazla kaynak kullanmaya karar verirseniz veya kaynakları çalışır durumda bırakırsanız bu tutar daha yüksek olabilir (en sondaki Temizleme bölümüne bakın). Daha fazla bilgi için Fiyatlandırma'ya bakın.
Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz denemeden yararlanabilir.
Cloud Shell
Google Cloud ve Cloud Run dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de 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ıyla yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Yani bu codelab'de ihtiyacınız olan tek şey bir tarayıcıdır (evet, Chromebook'ta çalışır).
- Cloud Shell'i Cloud Console'dan etkinleştirmek için Cloud Shell'i etkinleştir simgesini tıklamanız yeterlidir (sağlanması ve ortama bağlanması yalnızca birkaç dakika sürer).
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin PROJECT_ID
olarak ayarlanmış olduğunu göreceksiniz.
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 şu komutu vermeniz yeterlidir:
gcloud config set project <PROJECT_ID>
PROJECT_ID
cihazınızı mı arıyorsunuz? Kurulum adımlarında kullandığınız kimliği kontrol edin veya Cloud Console kontrol panelinden arayın:
Cloud Shell bazı ortam değişkenlerini de varsayılan olarak ayarlar. Bu değişkenler, gelecekte komut çalıştırdığınızda işinize yarayabilir.
echo $GOOGLE_CLOUD_PROJECT
Komut çıkışı
<PROJECT_ID>
- 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ı alt bölgeler seçebilirsiniz. Daha fazla bilgi için Bölgeler ve Bölgeler.
3. Kaynak depoyu klonlama
Mevcut bir web sitesini dağıttığı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.
Kod 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 uygulamanızı test edebilmeniz için Node.js bağımlılıklarını 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 ö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 Fancy Store'u iş başında görebilirsiniz.
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.
4. Cloud Build ile Docker container'ı oluşturma
Kaynak dosyalarınız artık kullanıma 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'ı Cloud Build yardımıyla oluşturup görüntüyü tek bir komutla Container Registry'ye yerleştirerek hayatınızı kolaylaştırabilirsiniz. Dockerfile oluşturma ve aktarma işlemlerini manuel olarak görüntülemek için Container Registry hızlı başlangıç kılavuzu sayfası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, paketteki tüm dosyaları alır ve Docker derleme işlemini çalıştırmak için aynı dizinde bulunan Dockerfile dosyasını kullanır. Docker görüntüsü için ana makineyi gcr.io olarak ayarladığınız ve --tag
işaretini belirttiğiniz için elde edilen Docker görüntüsü Container Registry'ye aktarılır.
Öncelikle, Cloud Build API'yi etkinleştirdiğinizden 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 Cloud Shell'de aşağıdaki komutu çalıştırarak derleme işlemini başlatı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ü lastik > Cloud Build > Geçmiş. Burada, önceki tüm derlemelerinizin listesini görebilirsiniz ancak yalnızca kendi oluşturduğunuz derlemeler olmalıdır.
Build id (Derleme kimliği) seçeneğini 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.
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'de bu yaklaşımı kullanacaksınız.
- Cloud Run for Anthos, kümelerinizi ve Kapsüllerinizi GKE'den taşımanızı sağlayan ek bir kontrol katmanına sahip Cloud Run'dır. Daha fazla bilgi için Google Cloud'da Cloud Run for Anthos'u ayarlama başlıklı makaleye bakın.
Komut satırı örnekleri, daha önce ayarladığınız ortam değişkenlerini kullanarak Cloud Shell'de yer alır.
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
Kampanyayı yayınlamak istediğiniz bölgeyi belirtmeniz istenir. Size en yakın bölgeyi seçin, ardından önerilen varsayılan hizmet adını (monolit) kabul edin.
Test amacıyla, uygulamaya kimliği doğrulanmamış isteklere izin verin. İstemde y
yazın.
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
Çıkışta birkaç şey gösterilir. Dağıtımınızı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 tüm öğeler 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ı tekrar dağıtın ancak bu kez parametrelerden birini ayarlayın.
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) modelinden büyük bir farktır.
Aynı container görüntüsünü eşzamanlılık değerini 1 yaparak yeniden dağıtın (yalnızca test amaçlıdır) ve neler olacağını görü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ı olduktan sonra sonucu görmek için Cloud Console'u kontrol edin.
Ayrıntıları görmek için Cloud Run kontrol panelinden monolit hizmetini tıklayın.
Revisions (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.
]
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.
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 olarak ayarlayabilirsiniz. Bu durumda, eşzamanlılık kısıtlamaları kaldırılır ve varsayılan maksimum değer (bu yazı yazıldığı sırada 80 olur).
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 ürünleri ve sattığı ürünler konusunda daha bilgilendirici olması gerektiğini düşünüyorlar. Bu bölümde pazarlama ekibini mutlu etmek için ana sayfaya bazı metinler ekleyeceksiniz.
Geliştiricilerinizden biri, istenen değişiklikleri index.js.new
dosya adında zaten oluşturmuş. Bu dosyayı index.js
hedefine 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 dosyanın 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 & 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
Artık kodunuz güncellendiğine göre Docker container'ınızı yeniden oluşturup Container Registry'de yayınlamanız gerekiyor. Aynı komutu öncekiyle aynı şekilde 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 resmi 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 tüm dağıtımları çevrimiçi hale getirilen ve ardından trafik yönlendirilen yeni bir düzeltme olarak değerlendirir.
Web sitenizi güncellemek için sonraki talimat gruplarını uygulayın.
Komut satırı
Görüntüyü yeni sürüme güncellemek için komut satırında aşağıdaki komutu kullanarak hizmeti 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 görüntünüzün en son sürümünü kullandığını görürsünüz.
Değişikliklerinizi doğrulamak için tekrar Cloud Run hizmetinizin harici URL'sine gidin ve uygulama başlığınızın güncellendiğine dikkat edin.
Hizmetleri listelemek ve unutmanız durumunda IP adresini görüntülemek için aşağıdaki komutu çalıştırın:
gcloud run services list
Ana sayfa bileşenine eklediğiniz metin artık web sitenizde gösterilir.
9. Temizleme
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
10. Tebrikler
Cloud Run ile web sitenizi dağıttınız, ölçeklendirdiniz ve güncellediniz.