Google Compute Engine

1. Giriş

Herkese merhaba, bugün geldiğiniz için teşekkür ederiz. Google Compute Engine'i öğrenmeye hazır mısınız?

Bu codelab'de, örnek bir konuk defteri uygulaması üzerinden Compute Engine'in nasıl çalıştığını inceleyeceğiz.

Compute Engine örnekleri oluşturacak, nginx'i dağıtacak ve son olarak ön tarafa bir ağ yük dengeleyici yerleştireceksiniz. Compute Engine örneğini grafik konsoldan veya komut satırından oluşturabilirsiniz. Bu laboratuvarda, komut satırını kullanma konusunda adım adım rehberlik sağlanacaktır.

ComputeEngine_128px.png

Google Compute Engine, Google'ın dünya çapındaki fiber ağına bağlı veri merkezlerinde çalışan sanal makineler sunar. Sunulan araç ve iş akışı, tekli örneklerden küresel, yük dengeli bulut bilişimine uzanan şekilde ölçeklendirmeyi destekler.

Bu sanal makineler hızlıca önyüklenir, kalıcı disk depolama seçenekleriyle sunulur ve istikrarlı bir performans sağlar. Makineler, önceden tanımlanmış boyutlar da dahil olmak üzere birçok yapılandırmada kullanılabilir ve belirli ihtiyaçlarınız için optimize edilmiş özel makine türleriyle de oluşturulabilir.

Son olarak, Compute Engine sanal makineleri diğer birçok Google Cloud ürünü (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow vb.) tarafından da kullanılan teknolojidir.

2. Kurulum ve Gereksinimler

Yönlendirmesiz ortam kurulumu

  1. Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizisidir ve istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersiz olmalı ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğine (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Bu nedenle, beğenmezseniz başka bir rastgele kimlik oluşturabilir veya kendi kimliğinizi deneyip kullanılabilir olup olmadığını görebilirsiniz. Proje oluşturulduktan sonra bu değer "dondurulur".
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları kapatmak üzere codelab'in sonunda bulunan "temizleme" talimatlarını uygulayın. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Google Cloud Shell

Google Cloud ve Compute Engine, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacağız.

Bu Debian tabanlı sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu nedenle, bu codelab için ihtiyacınız olan tek şey bir tarayıcıdır (Chromebook'ta da çalışır).

  1. Cloud Shell'i Cloud Console'dan etkinleştirmek için Cloud Shell'i etkinleştir 'i b125d9eb26a46cc5.png tıklamanız yeterlidir (ortamın sağlanması ve bağlantının kurulması yalnızca birkaç saniye sürer).

1067942a9a93f70.png

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'nize 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 şu 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ızı kontrol edin veya Cloud Console kontrol panelinde arayın:

cc3895eeac80db2c.png

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

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 bölgeler arasından seçim yapabilirsiniz. Daha fazla bilgi için Bölgeler ve Alt Bölgeler başlıklı makaleyi inceleyin.

3. Compute Engine örneği oluşturma

Daha önce de bahsettiğimiz gibi bu codelab'de gcloud komut satırını kullanacağız. Burada yapılan her şey konsol (console.cloud.google.com adresinde bulunur) kullanılarak yapılabilir.

Öncelikle varsayılan ayarlara sahip bir örnek oluşturalım :

$ gcloud compute instances create myinstance
Created [...].
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

EXTERNAL_IP simgesini not edin. Bu bilgi daha sonra gerekli olacaktır.

Örnek, bir dizi varsayılan değer kullanılarak oluşturulur :

  • Seçtiğiniz bölge. Tüm örnekler bir alt bölgede bulunur. Örnek oluşturma sırasında --zone işaretini kullanarak bir bölge seçebilir veya varsayılan bir bölge ayarlayabilir (ilk kurulumda yaptığımız gibi) ve --zone işaretini atlayabilirsiniz.
  • En yeni Debian GNU/Linux 9 (stretch) görüntüsü. Kendi özel resminizi kullanıyorsanız bunun yerine resim adını buraya girin. Örneğin, --image my-own-image.
  • n1-standard-1 makine türü. n1-highmem-4 veya n1-highcpu-6 gibi başka bir makine türü seçebilirsiniz. Önceden tanımlanmış makine türlerinden hiçbiri ihtiyaçlarınıza uygun değilse özel makine türü kullanın.
  • Örnekle aynı ada sahip bir kök kalıcı disk. Bu disk otomatik olarak örneğe eklenir.

Kullanılabilir tüm seçenekleri görmek için gcloud compute instances create --help komutunu çalıştırın.

4. 80 numaralı bağlantı noktası için güvenlik duvarını etkinleştirme

Google Cloud Platform, varsayılan olarak yalnızca birkaç bağlantı noktasına erişime izin verir. Yakında Nginx'i yükleyeceğimiz için önce güvenlik duvarı yapılandırmasında 80 numaralı bağlantı noktasını etkinleştirelim.

$ gcloud compute firewall-rules create allow-80 --allow tcp:80
Created [...].
NAME: allow-80
NETWORK: default
DIRECTION: INGRESS
PRIORITY: 1000
ALLOW: tcp:80
DENY:
DISABLED: False

Bu işlem, gelen bağlantı oluşturmasına izin verilen IP adresi bloklarının varsayılan listesine sahip allow-80 adlı bir güvenlik duvarı kuralı oluşturur. --source-ranges (Gelen bağlantılar) 0.0.0.0/0 (Her yer) olarak ayarlanır.

gcloud compute firewall-rules create --help komutunu çalıştırarak varsayılan değerlerin tümünü ve etiketlere dayalı güvenlik duvarı kuralları uygulama özelliği de dahil olmak üzere tüm seçenekleri görebilirsiniz.

5. Örneğe SSH ile Bağlanma

Komut satırından (Cloud Shell'den) örneğe SSH ile bağlanmak için:

$ gcloud compute ssh myinstance
Waiting for SSH key to propagate.
Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts.
...

yourusername@myinstance:~#

İşlem bu kadar kolay. (Üretim aşamasında parola girdiğinizden emin olun.)

Alternatif olarak, Compute Engine > VM Instances'a (Compute Engine > Sanal Makine Örnekleri) gidip SSH'ı tıklayarak doğrudan konsoldan (console.cloud.google.com) da örneğe SSH bağlantısı oluşturabilirsiniz.

bfbc03997a41946e.png

6. Nginx'i yükleme

Yeni oluşturulan örnek olan myinstance'a giriş yapın ve nginx'i yükleyin:

$ sudo su - 
# apt update
# apt install -y nginx
# service nginx start
# exit

myinstance'dan curl kullanarak sunucunun çalışıp çalışmadığını test edin:

$ curl -s localhost | grep nginx
<title>Welcome to nginx!</title>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
<a href="http://nginx.org/">nginx.org</a>.<br/>
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>

Örneklerinizi web kullanıcı arayüzü üzerinden listeleyerek örneğinizin harici IP'sini bulun:

dcc4e56e82ba2603.png

SSH'den çıktığınızdan emin olun ve bu komutu Cloud Shell'den çalıştırın:

$ gcloud compute instances list
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

Ardından http://EXTERNAL_IP/ adresine gidin. Burada EXTERNAL_IP, myinstance'ın genel IP'sidir ve nginx sayfasını görebilirsiniz:

49b52b9354041f3b.png

7. Başlangıç komut dosyası

Örneği her seferinde ayarlamak yerine, başlangıçta başlatmak için bir başlangıç komut dosyası kullanabilirsiniz.

Aşağıdaki içeriğe sahip startup.sh adlı bir dosya oluşturun (En sevdiğiniz metin düzenleyiciyi kullanabilirsiniz: vim, nano veya emacs):

#! /bin/bash
apt-get update
apt-get install -y nginx
service nginx start
sed -i -- 's/nginx/Google Cloud Platform - '"$HOSTNAME"'/' /var/www/html/index.nginx-debian.html

Bu başlangıç komut dosyasıyla yeni bir sanal makine örneği oluşturmak için şunu yazmanız yeterlidir :

$ gcloud compute instances create nginx \
         --metadata-from-file startup-script=startup.sh 
Created [...].
NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

http://EXTERNAL_IP/ adresine gidin. Güncellenen ana sayfayı görürsünüz. Sayfa hemen gösterilmezse birkaç saniye sonra tekrar deneyin. Ana makine, nginx'i başlatıyor olabilir.

8. Sunucu kümesi oluşturma

Sunucu kümesi oluşturmak için önce bir örnek şablonu oluşturmanız gerekir. Örnek şablonu oluşturulduktan sonra, oluşturulacak örnek sayısını yönetmek için bir örnek grubu oluşturabilirsiniz.

İlk olarak, başlangıç komut dosyasını kullanarak bir örnek şablonu oluşturun :

$ gcloud compute instance-templates create nginx-template \
         --metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2022-03-18T15:10:37.621-07:00

İkinci olarak, bir hedef havuz oluşturalım. Hedef havuz, gruptaki tüm örnekler için tek bir erişim noktası sunar ve sonraki adımlarda yük dengeleme için gereklidir.

$ gcloud compute target-pools create nginx-pool
Created [...].
NAME: nginx-pool
REGION: us-central1
SESSION_AFFINITY: NONE
BACKUP:
HEALTH_CHECKS:

Son olarak, şablonu kullanarak bir örnek grubu oluşturun:

$ gcloud compute instance-groups managed create nginx-group \
         --base-instance-name nginx \
         --size 2 \
         --template nginx-template \
         --target-pool nginx-pool
Created [...].
NAME: nginx-group
LOCATION: us-central1-f
SCOPE: zone
BASE_INSTANCE_NAME: nginx
SIZE: 0
TARGET_SIZE: 2
INSTANCE_TEMPLATE: nginx-template
AUTOSCALED: no

Bu işlem, nginx- ön ekiyle başlayan adlara sahip iki ek sanal makine örneği oluşturur.

Artık oluşturulan tüm örnekleri görebilirsiniz.

$ gcloud compute instances list
NAME: myinstance
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx-frpl
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

NAME: nginx-ztg4
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING

9. Ağ Yük Dengeleyici Oluşturma

Google Cloud Platform'da çeşitli yük dengeleyici türleri vardır. Bunlardan bazıları :

Örnek grubumuzu hedefleyen bölgesel bir ağ yük dengeleyici oluşturalım:

$ gcloud compute forwarding-rules create nginx-lb \
         --ports 80 \
         --target-pool nginx-pool
Created [...].

$ gcloud compute forwarding-rules list
NAME: nginx-lb
REGION: us-central1
IP_ADDRESS: X.X.X.X
IP_PROTOCOL: TCP
TARGET: us-central1/targetPools/nginx-pool

Ardından http://IP_ADDRESS/ tarayıcısından yük dengeleyiciyi ziyaret edebilirsiniz. Burada IP_ADDRESS, önceki komutu çalıştırdıktan sonra gösterilen adrestir.

Zaman kısıtlaması nedeniyle bugün HTTP yük dengeleyici oluşturmayacağız.

10. Kümeyi temizleme

Kümenizi kapatmayı unutmayın. Aksi takdirde, kümeler çalışmaya ve maliyet tahakkuk etmeye devam eder. Aşağıdaki komutlar Google Compute Engine örneklerini, örnek grubunu, hedefleme grubunu ve yük dengeleyiciyi siler.

$ gcloud compute forwarding-rules delete nginx-lb

$ gcloud compute instance-groups managed delete nginx-group

$ gcloud compute target-pools delete nginx-pool

$ gcloud compute instance-templates delete nginx-template

$ gcloud compute instances delete nginx

$ gcloud compute instances delete myinstance

$ gcloud compute firewall-rules delete allow-80

Yukarıdaki komutların her biri, kaynağın silinmesini onaylamanızı ister.

11. Sırada ne var?

Tebrikler! Bu Compute Engine codelab'ini tamamladınız.

Diğer Compute Engine özellikleri

Google Compute Engine, zengin bir özellik setine sahiptir. Aşağıdaki konuları inceleyebilirsiniz :

Google Kubernetes Engine

Google Kubernetes Engine (GKE), Google Cloud'un barındırılan ve tümüyle yönetilen Kubernetes teklifidir. GKE'yi kullanmaya başlamanıza yardımcı olacak çeşitli codelab'ler mevcuttur. Başlamak için iyi bir örnek :

Görüşlerinizi bizimle paylaşın

  • Lütfen birkaç dakikanızı ayırarak çok kısa anketimizi doldurun.