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ıyla Compute Engine'i keşfedeceğiz.

Compute Engine örnekleri oluşturacak, nginx'i dağıtacak ve son olarak da ön tarafa ağ yük dengeleyici koyacaksınız. Grafik konsoldan veya komut satırından Compute Engine örneği oluşturabilirsiniz. Bu laboratuvar, komut satırını kullanma konusunda size yol gösterecektir.

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çlar ve iş akışı, tekli örneklerden küresel, yük dengeli bulut bilişimine kadar ölçeklendirmeye olanak tanır.

Bu sanal makineler hızlı bir şekilde önyüklenir, kalıcı disk depolama seçenekleriyle sunulur ve istikrarlı performans sunar. Makineler, önceden tanımlanmış boyutlar dahil birçok yapılandırmayla sunulur ve belirli ihtiyaçlarınıza göre optimize edilmiş Özel Makine Türleri ile de oluşturulabilir.

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

2. Kurulum ve Gereksinimler

Kendi hızınızda ortam kurulumu

  1. Google Cloud Console'da oturum açıp 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 dizesidir ve bunu istediğiniz zaman güncelleyebilirsiniz.
  • Proje Kimliği, tüm Google Cloud projelerinde benzersiz olmalıdır ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de, Proje Kimliğine referans vermeniz gerekir (ve bu kimlik genellikle PROJECT_ID olarak tanımlanır). Beğenmezseniz başka bir rastgele kod oluşturun ya da kendi proje kimliğinizi deneyip mevcut olup olmadığına bakın. Sıcaklık "soğudu" takip etmeniz gerekir.
  • Bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü 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 çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmayla karşılaşmamak için kaynakları kapatmak istiyorsanız tüm "temizleme" işlemlerini uygulayın buradaki talimatları uygulayın. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

Google Cloud Shell

Google Cloud ve Compute Engine, dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de bu codelab'de Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacağı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 b125d9eb26a46cc5.png simgesini tıklamanız yeterlidir (sağlanması ve ortama bağlanması yalnızca birkaç dakika 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 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:

cc3895eeac80db2c.png

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. Compute Engine örneği oluşturma

Daha önce belirtildiği gibi, bu codelab'de gcloud komut satırını kullanacağız. Buradaki tüm işlemleri konsolu kullanarak gerçekleştirebilirsiniz (console.cloud.google.com adresinden ulaşabilirsiniz).

Önce varsayılan ayarlarla 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 bölümünü not edin. Bu daha sonra önemlidir.

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

  • Seçtiğiniz alt bölge. Tüm örnekler bir alt bölgede bulunur. Örnek oluşturma sırasında --zone işaretini kullanarak bir alt bölge seçebilir veya (ilk kurulumda yaptığımız gibi) varsayılan bir alt bölge belirleyip --zone işaretini atlayabilirsiniz.
  • En yeni Debian GNU/Linux 9 (stretch) görüntüsü. Kendi özel resminizi kullanıyorsanız resmin adını burada belirtin. Ö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 uymuyorsa özel makine türü kullanın.
  • Örnekle aynı ada sahip bir kök kalıcı disk. Bu disk otomatik olarak örneğe eklenir.

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

4. Bağlantı Noktası 80 için Güvenlik Duvarını etkinleştir

Google Cloud Platform, varsayılan olarak yalnızca birkaç bağlantı noktası erişimine izin verir. Nginx'i yakında yükleyeceğimiz için öncelikle 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şlemle allow-80 adında bir güvenlik duvarı kuralı oluşturulur. Bu kural, gelen bağlantı oluşturmasına izin verilen IP adresi bloklarının varsayılan listesini (--source-ranges) 0.0.0.0/0 (Her yer) olarak ayarlar.

Etiketlere göre güvenlik duvarı kuralları uygulama özelliği de dahil olmak üzere tüm varsayılanları ve kullanılabilen tüm seçenekleri görmek için gcloud compute firewall-rules create --help komutunu çalıştırın.

5. Örneğe SSH

Komut satırından (yine de Cloud Shell'den) örneğe SSH uygulamak 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:~#

Hepsi bu kadar! kolaydı. (Üretimde bir parola girdiğinizden emin olun :)

Alternatif olarak, Compute Engine > bölümüne giderek doğrudan konsoldan ( console.cloud.google.com) örneğe SSH uygulayabilirsiniz Sanal Makine Örnekleri'ne gidin ve SSH'yi tıklayın.

bfbc03997a41946e.png

6. Nginx'i yükleme

Yeni oluşturulan örneğe (myinstance) giriş yapın ve nginx'i yükleyin:

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

Sunucunun, myinstance örneğindeki curl kullanarak ç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>

Web kullanıcı arayüzü aracılığıyla örneklerinizi listeleyerek örneğinizin harici IP'sini bulun:

dcc4e56e82ba2603.png

SSH'den çıktığınızdan emin olun ve Cloud Shell'den şu komutu ç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 öğesinin herkese açık IP'sidir. Ardından nginx sayfasını görebilirsiniz:

49b52b9354041f3b.png

7. Başlangıç Komut Dosyası

Örneği her defasında ayarlamak yerine, başlatma sonrasında ilk kullanıma hazırlamak için bir başlangıç komut dosyası kullanabilirsiniz.

Aşağıdaki içeriğe sahip startup.sh adlı bir dosya oluşturun (favori metin düzenleyicinizi 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 göz atın. Güncellenmiş ana sayfayı göreceksiniz. Birkaç saniye sonra sayfa hemen yeniden denemezse ana makine hâlâ nginx'i başlatıyor olabilir.

8. Sunucu Kümesi Oluşturma

Sunucu kümesi oluşturmak için önce Örnek Şablonu oluşturmanız gerekir. Örnek şablonu oluşturulduktan sonra oluşturulacak örnek sayısını yönetmek için ö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ına sahip olmamızı sağlar 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 ekine sahip 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 birkaç tür yük dengeleyici bulunur :

Örnek grubumuzu hedefleyen bir bölgesel 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 komutun çalıştırılması sonucunda gösterilen adrestir.

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

10. Kümeyi temizleyin

Kümenizi kapatmayı unutmayın. Aksi takdirde kümeler çalışmaya ve maliyet oluşturmaya devam eder. Aşağıdaki komutlar Google Compute Engine örneklerini, Örnek Grubunu, Hedefleme Grubunu ve Yük Dengeleyici'yi 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ı istemelidir.

11. Sırada ne var?

Tebrikler, bu Compute Engine codelab'ini tamamladınız.

Diğer Compute Engine özellikleri

Google Compute Engine'in zengin özellikleri vardır. Bunlardan bazılarını öğrenmek isteyebilirsiniz :

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. İşte bu konuda iyi bir başlangıç :

Geri bildiriminizi paylaşın

  • Lütfen çok kısa bir süre ayırarak anketimizi doldurun.