Web sitenizi Google Kubernetes Engine (GKE) ile dağıtma, ölçeklendirme ve güncelleme

1. Giriş

Web sitesi veya uygulama işletmek zor bir iştir.

En olmayacak zamanlarda sorunlar yaşanır, sunucular çöker veya talep artışları daha fazla kaynak kullanılmasına yol açar. Üstelik, sisteme kapalı kalma süresi tanımadan değişiklik yapmak karmaşık ve streslidir.

Tüm bunları yapmanıza ve hatta otomatik hale getirmenize yardımcı olabilecek bir araç düşünün! GKE ile tüm bunları yapmakla kalmayıp bu işlemleri kolaylaştırabilirsiniz. Bu codelab'de, kurgusal bir şirket olan Fancy Store için e-ticaret web sitesi işleten bir geliştiricinin rolünü oynayacaksınız. Ölçeklendirme ve kesintilerle ilgili sorunlar nedeniyle uygulamanızı GKE'ye dağıtmakla görevlendirildiniz.

Alıştırmalar, yaygın bir bulut geliştiricisinin deneyimini yansıtacak şekilde sıralanmıştır:

  1. GKE kümesi oluşturun.
  2. Docker container'ı oluşturun.
  3. Container'ı GKE'ye dağıtın.
  4. Kapsayıcıyı bir hizmet aracılığıyla kullanıma sunun.
  5. Container'ı birden fazla replika içerecek şekilde ölçeklendirin.
  6. Web sitesinde değişiklik yapın.
  7. Kapalı kalma süresi olmadan yeni sürümü kullanıma sunma

Mimari şeması

ddba666bd2b02d0d.png

Neler öğreneceksiniz?

  • GKE kümesi oluşturma
  • Docker görüntüsü oluşturma
  • Docker görüntülerini Kubernetes'e dağıtma
  • Kubernetes'te uygulama ölçeklendirme
  • Kubernetes'te periyodik güncelleme gerçekleştirme

Ön koşullar

  • Proje oluşturmak için yönetim erişimine sahip bir Google Hesabı veya proje sahibi rolünde bir proje
  • Docker ve Kubernetes hakkında temel düzeyde bilgi (Temel bilgi sahibi değilseniz lütfen hemen Docker ve Kubernetes'i inceleyin.)

2. Ortam kurulumu

Kendi hızınızda ortam kurulumu

Google Hesabınız yoksa bir hesap oluşturmanız gerekir. Google Cloud Console'da oturum açın ve yeni bir proje oluşturun.

53dad2cefdae71da.png

Ekran görüntüsü: 2016-02-10 12:45:26.png

Proje kimliğinin tüm Google Cloud projeleri için benzersiz bir ad olduğunu unutmayın (yukarıdaki ad daha önce alınmış ve bu ad sizin için uygun olmayacaktır!). Daha sonra PROJECT_ID olarak adlandırılacaktır.

Sonraki adımda, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz denemeden yararlanabilir. Yeni bir kullanıcı değilseniz endişelenmeyin. codelab'in maliyeti birkaç dolardan fazla olmayacaktır. Ancak daha fazla kaynak kullanırsanız veya bu kaynakları çalışır durumda bırakırsanız codelab'in maliyeti daha yüksek olabilir (Sondaki "temizlik" bölümüne bakın). Daha fazla bilgi için Fiyatlandırma'ya bakın.

Cloud Shell

Google Cloud ve GKE'yi dizüstü bilgisayarınızla uzaktan çalıştırabilirsiniz. Codelab için ise Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız.

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

  1. Cloud Shell'i Cloud Console'dan etkinleştirmek için Cloud Shell'i etkinleştir fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q simgesini tıklamanız yeterlidir (sağlanması ve ortama bağlanması yalnızca birkaç dakika sürer).

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 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:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

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>
  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ı alt bölgeler seçebilirsiniz. Daha fazla bilgi için Bölgeler ve Bölgeler.

3. GKE kümesi oluşturma

Geliştirme ortamınız çalışır durumda olduğuna göre artık web sitenizi dağıtacağınız bir GKE kümesine ihtiyacınız var. Küme oluşturmadan önce uygun API'lerin etkinleştirildiğinden emin olmanız gerekir. Container'lar API'sini etkinleştirmek için aşağıdaki komutu çalıştırın:

gcloud services enable container.googleapis.com

Artık kümenizi oluşturabilirsiniz. fancy-cluster adında ve 3 düğümlü bir küme oluşturmak için aşağıdaki adımları uygulayın:

gcloud container clusters create fancy-cluster --num-nodes 3

Kümenin oluşturulması birkaç dakika sürebilir. Ardından aşağıdaki komutu çalıştırarak kümenin üç çalışan sanal makine örneğini görüntüleyin:

gcloud compute instances list

Çıkış:

NAME                                          ZONE        MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
gke-fancy-cluster-default-pool-ad92506d-1ng3  us-east4-a  n1-standard-1               10.150.0.7   XX.XX.XX.XX    RUNNING
gke-fancy-cluster-default-pool-ad92506d-4fvq  us-east4-a  n1-standard-1               10.150.0.5   XX.XX.XX.XX    RUNNING
gke-fancy-cluster-default-pool-ad92506d-4zs3  us-east4-a  n1-standard-1               10.150.0.6   XX.XX.XX.XX    RUNNING

Kümenizi ve ilgili bilgileri Cloud Console'da da görüntüleyebilirsiniz. Sol üst köşedeki menü düğmesini tıklayın, Kubernetes Engine'e ilerleyin ve Kümeler'i tıklayın. fancy-cluster adlı kümenizi göreceksiniz.

795c794b03c5d2b0.png

6b394dfb8a6031f2.png

Tebrikler! İlk kümenizi oluşturdunuz.

4. Kaynak depoyu klonlama

Bu mevcut bir web sitesi olduğundan, sadece depodan kaynağı klonlamanız yeterlidir. Böylece Docker görüntüleri oluşturup GKE'ye dağıtmaya odaklanabilirsiniz.

Kaynak depoyu Cloud Shell örneğinize klonlamak için aşağıdaki komutları çalıştırın ve uygun dizin değişikliğini yapın. Uygulamanızı dağıtmadan önce 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 kod deposunu klonlar, dizini değiştirir ve uygulamanızı yerel olarak çalıştırmak için gereken bağımlılıkları yükler. Söz konusu komut dosyasının çalışması birkaç dakika sürebilir.

Gerekli özeni gösterin ve başvurunuzu 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!

Uygulamanızı önizlemek için Cloud Shell menüsündeki web önizlemesi simgesini tıklayın ve 8080 bağlantı noktasında Önizleme'yi seçin.

5869738f0e9ec386.png

Bunu yaptığınızda Fancy Store'u iş başında görebilirsiniz.

9ed25c3f0cbe62fa.png

Web sitesini görüntüledikten sonra bu pencereyi kapatabilirsiniz. Web sunucusu işlemini durdurmak için terminal penceresinde Control+C (Windows veya Mac) tuşuna basın.

5. 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 GKE'nin aldığı görüntünün 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ştirebilirsiniz. (Docker dosyası oluşturma ve aktarma işlemlerinden oluşan manuel işlemi 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 sırasında dosyalar paketten alınır ve Dockerfile üzerinden Docker derleme işlemi çalıştırılır. Docker görüntüsü için ana makineyi gcr.io olarak içeren --tag işaretini belirttiğinizden, elde edilen Docker görüntüsü Container Registry'ye aktarılır.

Öncelikle, aşağıdaki komutu çalıştırarak Cloud Build API'yi etkinleştirmeniz gerekir:

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:

cd ~/monolith-to-microservices/monolith
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ğıdaki çıkışı görebilirsiniz:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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 gidebilirsiniz. Sol üst köşedeki menü düğmesini tıklayın, Ci/CD'ye ilerleyin, ardından Cloud Build'i ve son olarak Geçmiş'i tıklayın. Burada, önceki derlemelerinizin listesini görebilirsiniz ancak yalnızca sizin oluşturduğunuz derleme bulunur.

4c753ede203255f6.png

Build ID'yi (Derleme kimliği) tıklarsanız derlemenin günlük çıkışı da dahil olmak üzere tüm ayrıntılarını görebilirsiniz.

Derleme ayrıntıları sayfasında, derleme bilgileri bölümünde Görüntü adını tıklayarak oluşturulan container görüntüsünü görebilirsiniz.

6e88ed1643dfe629.png

6. Container'ı GKE'ye dağıtma

Web sitenizi container mimarisine aldığınıza ve container'ı Container Registry'ye aktardığınıza göre, artık Kubernetes'e dağıtabilirsiniz.

Uygulamaları bir GKE kümesinde dağıtıp yönetmek için Kubernetes küme yönetim sistemiyle iletişim kurmanız gerekir. Bunun için genellikle kubectl komut satırı aracı kullanılır.

Kubernetes'te uygulamalar Kapsüller şeklinde temsil edilir. Kapsüller, bir container'ı (veya birbirlerine sıkı sıkıya bağlı bir grup container'ı) temsil eden birimlerdir. Kapsül, Kubernetes'teki en küçük dağıtılabilir birimdir. Burada her kapsülde yalnızca monolit container'ınız yer alır.

Uygulamanızı dağıtmak için bir Dağıtım oluşturmanız gerekir. Dağıtım, uygulamanızın replika adı verilen birden fazla kopyasını yönetir ve bu kopyaların her birinin kümenizdeki ayrı birer düğümde çalıştırılmasını planlar. Bu durumda, Dağıtım tarafından uygulamanızın yalnızca bir kapsülü çalıştırılacaktır. Dağıtımlar bu iş için bir ReplicaSet oluşturur. ReplicaSet, belirtilen sayıda replikanın her zaman çalışmasını sağlamaktan sorumludur.

kubectl create deployment komutu, Kubernetes'in kümenizde 1 replikaya sahip monolith adlı bir Dağıtım oluşturmasını sağlar.

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

kubectl create deployment monolith --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0

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 (Kapsül durumunun "Çalışıyor" olması birkaç dakika sürebilir):

kubectl get all

Çıkış:

NAME                            READY   STATUS    RESTARTS   AGE
pod/monolith-7d8bc7bf68-htm7z   1/1     Running   0          6m21s

NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.27.240.1   <none>        443/TCP   24h

NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/monolith   1         1         1            1           20m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/monolith-7d8bc7bf68   1         1         1       20m

Bu çıkışta çeşitli bilgiler sunulmaktadır. Dağıtımınızı (güncel) görebilirsiniz. ReplicaSet'iniz, istenilen Kapsül sayısı bir; çalışan Kapsülünüz gösterilir. Tüm öğeleri başarıyla oluşturduğunuz anlaşılıyor.

Kaynaklarınızı tek tek görüntülemek için aşağıdaki komutları çalıştırabilirsiniz:

# Show pods
kubectl get pods

# Show deployments
kubectl get deployments

# Show replica sets
kubectl get rs

#You can also combine them
kubectl get pods,deployments

Kubernetes'in tüm avantajlarını görmek için sunucu kilitlenmesini simüle edebilir, Kapsülü silebilir ve neler olacağını görebilirsiniz.

Önceki komuttan kapsül adınızı kopyalayın ve kapsülü silmek için aşağıdaki komutu çalıştırın:

kubectl delete pod/<POD_NAME>

Yeterince hızlı hareket ederseniz önceki komutu çalıştırarak tümünü tekrar görebilirsiniz. Biri sonlandırılan, diğeri oluşturulan veya çalıştırılan iki Kapsül görürsünüz:

kubectl get all

Çıkış:

NAME                            READY   STATUS        RESTARTS   AGE
pod/monolith-7d8bc7bf68-2bxts   1/1     Running       0          4s
pod/monolith-7d8bc7bf68-htm7z   1/1     Terminating   0          9m35s

NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.27.240.1   <none>        443/TCP   24h

NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/monolith   1         1         1            1           24m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/monolith-7d8bc7bf68   1         1         1       24m

Bu neden oldu? ReplicaSet, kapsülün sonlandırıldığını gördü ve istenen replika sayısını korumak için yeni bir kapsül oluşumunu tetikledi. Sonraki bölümlerde, birden fazla örneğinizin çalışacağından emin olmak için nasıl ölçeklendirme yapacağınızı göreceksiniz. Bu sayede, örneklerden birinin çökmesi durumunda kullanıcılarınız hiç kesinti yaşamaz.

7. GKE dağıtımını kullanıma sunma

Uygulamanızı GKE'ye dağıttınız ancak uygulamaya küme dışından erişemiyorsunuz. Varsayılan olarak, GKE'de çalıştırılan container'ların harici bir IP adresi bulunmadığından bu container'lara internet üzerinden erişilemez. İnternet trafiği alabilmesi için uygulamanızı bir Hizmet kaynağı üzerinden açıkça kullanıma sunmanız gerekir. Hizmetler, uygulamanızın kapsülleri için ağ ve IP desteği sağlar. GKE, uygulamanız için harici bir IP adresi ve bir yük dengeleyici (faturalandırmaya tabidir) oluşturur.

Web sitenizi internet üzerinden kullanıma sunmak için aşağıdaki komutu çalıştırın:

kubectl expose deployment monolith --type=LoadBalancer --port 80 --target-port 8080

Çıkış:

service/monolith exposed

Hizmete erişme

GKE, harici IP adresini Dağıtım'a değil Hizmet kaynağına atar. GKE'nin uygulamanıza sağladığı harici IP adresini bulmak istiyorsanız hizmeti incelemek için kubectl get service komutunu kullanabilirsiniz:

kubectl get service

Çıkış:

NAME         CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
monolith     10.3.251.122    203.0.113.0     80:30877/TCP     3d

Uygulamanızın harici IP adresini belirledikten sonra kopyalayın. Uygulamanızın erişilebilir olup olmadığını kontrol etmek için tarayıcınızı bu URL'ye (örneğin http://203.0.113.0) yönlendirin.

9ed25c3f0cbe62fa.png

Daha önce test ettiğiniz web sitesini göreceksiniz. Tebrikler! Web siteniz Kubernetes'te tamamen çalışıyor.

8. GKE dağıtımını ölçeklendirme

Artık GKE'de uygulamanızın çalışan bir örneğiniz olduğuna ve bunu internete sunduğunuza göre web siteniz son derece popüler hale geldi. Trafiği yönetebilmek için uygulamanızın ölçeğini birden fazla örneğin kullanılacağı şekilde artıracak bir yönteme ihtiyacınız var. Uygulamanızı üç replikaya kadar ölçeklendirmeyi öğrenin.

Dağıtımınızı üç replikaya kadar ölçeklendirmek için aşağıdaki komutu çalıştırın:

kubectl scale deployment monolith --replicas=3

Çıkış:

deployment.apps/monolith scaled

Ölçeklendirilmiş dağıtımı doğrulama

Dağıtımın başarıyla ölçeklendirildiğini doğrulamak için aşağıdaki komutu çalıştırın:

kubectl get all

Çıkış:

NAME                            READY   STATUS    RESTARTS   AGE
pod/monolith-7d8bc7bf68-2bxts   1/1     Running   0          36m
pod/monolith-7d8bc7bf68-7ds7q   1/1     Running   0          45s
pod/monolith-7d8bc7bf68-c5kxk   1/1     Running   0          45s

NAME                 TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
service/kubernetes   ClusterIP      10.27.240.1    <none>         443/TCP        25h
service/monolith     LoadBalancer   10.27.253.64   XX.XX.XX.XX   80:32050/TCP   6m7s

NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/monolith   3         3         3            3           61m

NAME                                  DESIRED   CURRENT   READY   AGE
replicaset.apps/monolith-7d8bc7bf68   3         3         3       61m

Kapsülünüzün çalıştırıldığı üç örnek görmeniz gerekir. Ayrıca Deployment ve ReplicaSet'inizin artık istediğiniz sayıda olduğunu unutmayın.

9. Web sitesinde değişiklik yapma

Pazarlama ekibiniz, web sitenizin ana sayfasını değiştirmenizi istedi. Bu sayfanın şirketinizin ne olduğunu ve aslında ne sattığınızı açıklayarak daha bilgilendirici olması gerektiğini düşünüyorlar. Bu bölümde pazarlama ekibini mutlu etmek için ana sayfaya bazı metinler ekleyeceksiniz. Geliştiricilerimizden biri, istenen değişiklikleri index.js.new adında hazırlamış. Dosyayı index.js hedefine kopyalarsanız değişiklikleriniz sayfaya yansıtılacaktır. Uygun değişiklikleri yapmak için aşağıdaki 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 &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

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üncelleyeceksiniz.

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 .

Web sunucusu işlemini durdurmak için terminal penceresinde Control+C (Windows veya Mac) tuşuna basın.

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

10. 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. Web sitenizi güncellemek için aşağıdaki talimatları izleyin.

GKE'nin periyodik güncellemeleri, eski container görüntünüzün örnekleri çalışan tüm replikalarda sistem tarafından yeni container görüntünüzün örnekleriyle değiştirilse bile uygulamanızın çalışır ve kullanılabilir durumda kalmasını sağlar.

Komut satırından, aşağıdaki komutla Kubernetes'e Dağıtımınıza ait görüntüyü yeni bir sürüme güncellemek istediğinizi belirtebilirsiniz:

kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0

Çıkış:

deployment.apps/monolith image updated

Dağıtımı doğrulama

Dağıtım güncellemenizi doğrulamak için şu komutu çalıştırın:

kubectl get pods

Çıkış:

NAME                        READY   STATUS              RESTARTS   AGE
monolith-584fbc994b-4hj68   1/1     Terminating         0          60m
monolith-584fbc994b-fpwdw   1/1     Running             0          60m
monolith-584fbc994b-xsk8s   1/1     Terminating         0          60m
monolith-75f4cf58d5-24cq8   1/1     Running             0          3s
monolith-75f4cf58d5-rfj8r   1/1     Running             0          5s
monolith-75f4cf58d5-xm44v   0/1     ContainerCreating   0          1s

Üç yeni kapsül oluşturulduğunu ve eski kapsüllerinizin sonlandırıldığını görüyorsunuz. Yaşlara bakarak yeni ve eski kapsülleri ayırt edebilirsiniz. En sonunda yine yalnızca üç kapsül göreceksiniz. Bunlar, güncellenmiş üç kapsülünüz olacak.

Değişikliklerinizi doğrulamak için tekrar yük dengeleyicinin harici IP'sine gidin ve uygulamanızın güncellendiğine dikkat edin.

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

kubectl get svc

Web sitenizde, ana sayfa bileşenine eklediğiniz metin gösterilecektir.

8006c9938dbd5aa5.png

11. Temizleme

Git deposunu sil

cd ~
rm -rf monolith-to-microservices

Container Registry görüntülerini silin

NOT: Başka sürümler oluşturduysanız bu resimleri silmek için de aynı söz dizimini kullanabilirsiniz. Bu codelab'de yalnızca iki etiketinizin olduğu varsayılır.

# 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

NOT: Bu codelab dışındaki yapılar için Cloud Build kullandıysanız kaynağınızı gs://<PROJECT_ID>_cloudbuild/source Cloud Storage paketinden manuel olarak silmeniz gerekir.

# 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

GKE hizmetini sil

kubectl delete service monolith
kubectl delete deployment monolith

GKE kümesini silin

gcloud container clusters delete fancy-cluster

NOT: Bu komutun çalıştırılması biraz zaman alabilir.

12. Tebrikler!

Web sitenizi GKE'de dağıttınız, ölçeklendirdiniz ve güncellediniz. Artık Docker ve Kubernetes konularında deneyimli bir kullanıcısınız!

Ek kaynaklar