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
- Docker hakkında genel bilgi sahibi olmanız gerekir (Docker'ın web sitesinin Başlarken bölümüne göz atın.)
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.
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. .
"Cloud Run API"yi arayın, ardından Cloud Run API > Etkinleştir'i tıklayın.
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).
- Cloud Shell'i Cloud Console'dan etkinleştirmek için Cloud Shell'i etkinleştir 'i
tıklamanız yeterlidir (ortam sağlanıp bağlantı kurulabilmesi için birkaç dakika beklemeniz gerekir).
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:
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>
- 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 tıklayıp 8080 bağlantı noktasında önizle'yi seçerek uygulamanızı önizleyebilirsiniz.
Bu işlem, Fancy Store'u iş başında görebileceğiniz yeni bir pencere açar.
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.
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.
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.
Test amacıyla, kimliği doğrulanmayan isteklerin uygulamaya erişmesine 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
'ü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.
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.
Ş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 & 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.
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.