Migrate for Anthos ile Compute Engine'den Kubernetes Engine'e taşıma

1. Genel Bakış

Mevcut uygulamaları Kubernetes'te çalışacak şekilde yeniden yazmak veya geliştirmek, her zaman manuel olarak mümkün ya da mümkün değildir. Migrate for Anthos, mevcut uygulamalarınızı modernleştirip Kubernetes'te çalıştırmalarını sağlamanıza yardımcı olabilir. Bu codelab'de, Compute Engine'de barındırılan mevcut bir web uygulamasını Migrate for Anthos'u kullanarak Kubernetes Engine'e taşıyacaksınız.

Neler öğreneceksiniz?

  • Kubernetes kümesinde Migrate for Anthos'u dağıtma
  • Mevcut bir Compute Engine örneğinden durum bilgili kümede container oluşturma
  • Container'ınızı Kubernetes'e dağıtma ve yük dengeleyici ile yapılandırma

Gerekenler

2. Kurulum

Bu codelab, herhangi bir yerel yükleme veya yapılandırma gerekmeden tamamen Google Cloud Platform'da çalışabilir.

API'leri etkinleştirin

Başlamadan önce Google Cloud projenizde gerekli API'leri etkinleştirdiğinizden emin olun:

Compute Örnek Web Sunucusu oluşturma

İlk nginx web sunucumuzu barındırmak için kullanacağımız işlem örneğini, web sunucusunun varsayılan açılış sayfasını görüntülememize izin verecek güvenlik duvarı kurallarıyla birlikte oluşturalım. Bunu yapabileceğimiz birkaç yöntem var ancak kullanım kolaylığı için Cloud Shell'i kullanacağız.

Cloud Shell'de aşağıdaki komutu çalıştırın:

gcloud compute instances create webserver --zone=us-central1-a && \
gcloud compute firewall-rules create default-allow-http --allow=tcp:80 

Bu komutun ilk yarısında us-central1-a alt bölgesinde bir Google Cloud örneği, ikinci yarısında ise "default-allow-http" adlı bir güvenlik duvarı kuralı oluşturulur kullanıma sunduk.

Örnek başarıyla oluşturulduğunda, örneğin ayrıntılarını içeren bir tablo görüntülenir. Harici IP'yi not edin. Web sunucumuzun daha sonra çalıştığını doğrulamak için bu bilgiye ihtiyacımız olacaktır.

a08aa5bf924b107d.png

Örnek çalışmaya başladığında nginx'i yüklemek ve web sunucusunu başlatmak için örneğimize Cloud Shell'den SSH uygulayabiliriz:

gcloud compute ssh --zone us-central1-a webserver

Compute örneğimize giriş yaptıktan sonra nginx'i yükleyin:

sudo apt install nginx

logout komutuyla ssh oturumundan çıkış yapın

Önceden tarayıcımıza örneğin harici IP'sini girerek web sunucumuzun çalıştığını doğrulayalım. Varsayılan nginx karşılama ekranını göreceksiniz:

5c08e3b2bd17e03.png

Bu web sunucusu, Migrate for Anthos'u kullanarak Kubernetes'e taşıyacağımız eski web uygulaması olarak kullanılacak.

3. Migrate for Anthos ile Kubernetes kümesi

Ardından Compute Engine web sunucusunu taşıyacağımız GKE kümesi oluşturacağız. Cloud Console'da aşağıdaki komutu çalıştırın:

gcloud container clusters create my-gke-cluster \
  --zone us-central1-a \
  --cluster-version 1.13 \
  --machine-type n1-standard-4 \
  --image-type "UBUNTU" \
  --num-nodes 1 \
  --enable-stackdriver-kubernetes

Bu komutu tamamlamak için birkaç dakika bekleyin. Küme oluşturulduktan sonra ayrıntılarını içeren bir çıkış alırsınız:

c69778b8fb8ac72b.png

Ardından Migrate for Anthos'u dağıtmak için GCP Marketplace'e gidin:

45f5753cae53ccb5.png

Migrate for Anthos'un pazar yeri sayfasında Yapılandır'ı tıklayın ve istenirse listeden projenizi seçin. Sonraki sayfada, bazı varsayılan değerlerin girildiği bir form gösterilir. Seçilen kümenin az önce oluşturduğumuz küme olduğundan emin olun ve Dağıt'ı tıklayın:

94dc6238b2affd16.png

Migrate for Anthos artık Kubernetes kümemize dağıtılmalıdır. Dağıtım tamamlandığında "Tamam" durumunu görürsünüz sayfasına giderek Kubernetes Engine Uygulamaları sayfasında bulabilirsiniz:

5bf601103a5335cf.png

4. İşlem örneğinden durum bilgili kümeye

Migrate for Anthos'u çalıştıran bir Kubernetes kümemiz var. Şimdi taşıma işlemine başlayabiliriz. Compute örneğimizi bir Kubenetes kümesine dağıtmak için Compute Engine örneğimizi kapatarak disklerin anlık görüntülerini alabileceğiz. Devam etmeden önce, daha sonra ihtiyaç duyacağımız örnek kimliğini not edin:

gcloud compute instances describe webserver --zone us-central1-a | grep ^id

Compute örneğimizi kapatalım:

gcloud compute instances stop webserver --zone us-central1-a

Örnek durdurulduğuna göre artık aşağıdaki komut dosyasını çalıştırarak disklerin anlık görüntüsünü güvenli bir şekilde alabiliriz. Proje kimliğinizi ve örnek kimliğinizi girdiğinizden emin olun:

python3 /google/migrate/anthos/gce-to-gke/clone_vm_disks.py \
  -p <project-id>   -i <instance-id> \
  -z us-central1-a \
  -T us-central1-a \
  -A webserver-statefulset \
  -o containerized-webserver.yaml

Bu işaretler olduğunda clone_vm_disks.py:

  • GCE örneğinizin kapalı olduğunu doğrulama
  • Örneğinizin disklerinin her birinden anlık görüntü oluşturma
  • Her anlık görüntüden yeni bir disk oluşturun
  • Oluşturduğu anlık görüntüleri silme
  • Web sunucunuzu barındıracak durum bilgili bir küme dağıtmak için mevcut çalışma dizininizde bir YAML dosyası oluşturun

Oluşturulan yaml dosyası, kopyalanan diskleri web sunucusu kapsayıcımıza eklemek için gerekli olan kalıcı birim talepleriyle birlikte Kubernetes kümemizde bir durum bilgili küme sağlar. Şu değişiklikleri kubectl ile uygulayabiliriz:

kubectl apply -f containerized-webserver.yaml

İş Yükleri sayfasında web sunucusu durum bilgisinin durumunu kontrol edin:

Durumun "Kapsüller beklemede" şeklinde görünmesi normaldir. kubectl apply çalıştırdıktan sonra birkaç dakikalığına. Durum "Tamam" olarak görününce devam edin.

5. Kümeyi yük dengeleyiciye kullanıma sunun

Bu noktada, Kubenetes kümemizin web sunucumuzu durum bilgili bir küme olarak çalıştırması gerekir. Ancak, web sunucumuza harici bir IP adresi aracılığıyla erişmek için container'ını bir yük dengeleyiciye kullanıma sunmamız da gerekir. Cloud kabuğunda, aşağıdaki içeriğe sahip loadbalancer.yaml adlı yeni bir dosya oluşturun:

loadbalancer.yaml

apiVersion: v1
kind: Service
metadata:
  name: webserver-loadbalancer
spec:
  type: LoadBalancer
  selector:
    app: webserver-statefulset
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

Şimdi de bunu kubectl ile uygulayın:

kubectl apply -f loadbalancer.yaml

kubectl komutunu web sunucusu-container hizmetinin harici IP adresini almak için kullanabiliriz:

kubectl get services

Harici IP adresini tarayıcımıza girersek öncekinin aynı varsayılan nginx karşılama ekranını görürüz:

5c08e3b2bd17e03.png

Başardık. GCE web sunucumuz artık Kubernetes'te barındırılıyor. Güzel!

6. Stackdriver izleme

Metrikler

Yönetilen bir Kubernetes hizmeti olan Kubernetes Engine'de, Stackdriver ile hem günlük kaydı hem de izleme için otomatik enstrümantasyon yapılır. Şimdi, Stackdriver'ın otomatik olarak yakaladığı bazı metriklere göz atalım.

Ürünler menüsündeki Monitoring bağlantısını tıklayın. Çalışma alanınızı kurarken bu ayara projenizden ilk kez erişmek birkaç dakika sürebilir.

Yükleme tamamlandıktan sonra fareyle sol bölmedeki Kaynaklar'ın üzerine gelin ve "Kubernetes Engine YENİ"yi seçin. seçeneğini belirleyin.

4e62c8ad3f2b3fe9.png

Burada sunulan kontrol panelinde yer alan her satır, bir Kubernetes kaynağını temsil eder. Kontrol panelinin üzerindeki bağlantıları kullanarak altyapı, iş yükü veya hizmetler görünümü arasında geçiş yapabilirsiniz.

62066a9251d19843.png

İş Yükleri görünümünde "my-gke-cluster" öğesini genişletin ve varsayılana gidin > webserver-statefulset > webserver-statefulset-0 > webserver-statefulset parametresidir. Web sunucusu durum bilgili küme kapsayıcısını tıklayın. Burada, bellek kullanımı ve CPU kullanımı dahil olmak üzere Stackdriver tarafından yakalanan bazı kullanıma hazır metrikleri bulabilirsiniz.

d054778de301429e.png

Bu kontrol panelinde görüntülenen grafikler, özel bir kontrol paneli oluşturmak için kullanabileceğimiz grafiklerdir.

Özel Kontrol Panelleri

Stackdriver, bize sunulan tüm metrik verilerine ilişkin tablo ve grafikleri düzenlemek için kullanabileceğimiz özel kontrol panelleri oluşturmamıza olanak tanıyor. Web sunucumuzun bazı metriklerinin özet görünümünü sunmak için özel bir kontrol paneli oluşturalım.

Sol bölmede fareyle Gösterge Tabloları'nın üzerine gelin, ardından Gösterge Tablosu Oluştur'u tıklayın.

56a0513efe60de3e.png

Artık boş kontrol panelimiz olduğuna göre, takip etmek istediğimiz metrikleri ekleyebiliriz. Adsız Kontrol Panelimize "Web Sunucu Kapsayıcılarım" gibi faydalı bir ad verelim. ve "Grafik Ekle"yi tıklayın. dokunun:

bd66ba91f3125028.png

Kullanıma hazır metrikleri hatırlıyor musunuz? Şimdi container CPU kullanımı için bir grafik ekleyelim. Grafik Başlığı alanına "CPU Kullanımı" yazın. "Kaynak türünü ve metriği bul" kutusuna request_utilization yazın ve filtrelenmiş listeden CPU istek kullanımı'nı seçin. Bu seçim bizim için hem Kaynak türü hem de Metrik alanlarını doldurur.

Şimdi project_id (birden çok projemiz varsa) ve container_name ölçütlerimize göre filtreleme yapacağız. Filtre kutusuna project_id yazın, filtrelenmiş listeden projeyi seçin ve Value (Değer) alanına projenizi seçin. container_name ölçütüne göre de filtrelememiz gerekir. Filtre kutusuna container_name yazın, filtrelenmiş listeden bunu seçin ve Değer alanında webserver-statefulset öğesini seçin. Kaydet'i tıklayın.

Artık ilk grafiğimizi içeren bir kontrol panelimiz var.

3d3d45e4357454e0.png

7. Çalışma denetimi ve uyarı politikası

Stackdriver sayesinde, herhangi bir metrik belirttiğimiz herhangi bir eşik değerine ulaştığında bizi bilgilendirecek uyarılar ayarlayabiliriz. Örneğin, son adımdaki CPU kullanımı sürekli bir süre boyunca belirli bir eşiğin üzerinde olduğunda Stackdriver'ın bize e-posta göndermesini sağlayabiliriz. Bu durum, uygulamamızda bir sorun olduğunu gösterebilir. Bu uyarıların nasıl göründüğünü göstermek için çalışma denetimi ayarlayıp kesinti simülasyonu yapalım.

Sol bölmeden Çalışma Denetimleri'ni, ardından Çalışma Denetimlerine Genel Bakış'ı seçin:

49368e5700274cf2.png

Çalışma Denetimleri sayfasının önerdiği gibi ilk çalışma denetimimizi ayarlayalım. Sayfanın sağ üst tarafındaki Çalışma Denetimi Ekle düğmesini tıklayın.

d884560f91011009.png

Devam formuna "Uç Nokta Çalışma Süresi" yazın başlık olarak, ana makine adı olarak da yük dengeleyicinizin harici IP adresini girmeniz gerekir.

568a8f1e27ae8417.png

Kaydet'i tıkladığınızda Uyarı Politikası'na eşlik eden bir politika oluşturmanız istenir:

f89d53a106a709f4.png

Uyarı Politikası Oluştur'u tıklayın.

Buna "Uç Nokta Çalışma Politikası" adını verin. Yapılandırma bölümünde "Koşulun tetikleneceği durumlar:" seçeneğini ayarlayın. "Herhangi bir zaman serisi ihlali" olarak ve kaydet'i tıklayın.

74609849348bd03e.png

Henüz işi bitirmedik. Ardından, uyarı politikamız ihlal edildiğinde bildirim alabilmek için bir Bildirim Kanalı belirtiriz. Bildirim Kanalı Türü açılır menüsünde, E-posta'yı ve ardından geçerli bir e-posta adresini seçin.

44c474e28a497659.png

Bildirim Kanalı Ekle'yi tıklayın. Son olarak, formun alt kısmında politikayı "Web Uygulaması Çalışma Süresi" olarak adlandırın. ve Kaydet'i tıklayın.

Uyarının nasıl görüneceğini anlamak için Cloud Console'da Cloud Shell'inizi tekrar açın. Aşağıdaki komut, web sunucusu kapsülümüzde çalışan nginx hizmetini durdurur:

kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx -s stop"

Birkaç dakika sonra, kesintiyle ilgili bir e-posta alırsınız:

808ac1d75ce3681f.png

Bu işlemi geri alalım. Cloud Shell'e dönüp nginx'i yeniden başlatalım:

kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx"

Birkaç dakika sonra, bu kez öncekinden daha iyi haberler içeren başka bir Stackdriver e-postası alacaksınız:

5b8262fbbc4877c.png

8. Temizleme

Migrate for Anthos ile GCE'den GKE'ye geçiş yaptık. Şimdi projemizde oluşturduğumuz tüm kaynakları temizleyelim.

Projeyi silme

İsterseniz projenin tamamını silebilirsiniz. GCP Console'da Cloud Resource Manager sayfasına gidin:

Proje listesinde, üzerinde çalıştığımız projeyi seçin ve Sil'i tıklayın. Proje kimliğini yazmanız istenir. Kodu girip Kapat'ı tıklayın.

Farklı bileşenleri tek tek silmeyi tercih ederseniz sonraki bölüme geçin.

Stackdriver

Kontrol paneli

Kontrol paneli sayfanızdan sayfanın üst kısmındaki ayarlar simgesini dc259295eb33cb42.png tıklayın ve Kontrol Panelini Sil'i seçin.

Uyarı Politikası

Politikalar sayfasında, oluşturduğunuz her politikanın sağ tarafındaki İşlemler menüsünden 2ef75d82e76accaa.png Sil'i seçin.

Çalışma Denetimi

Çalışma Denetimleri sayfasında, oluşturduğunuz her denetimin sağındaki İşlemler menüsünden Sil'i seçin.

GCE ve Kubernetes

Google Compute Engine örneği

gcloud compute instances delete webserver --zone=us-central1-a

Kubernetes Kümesi (Migrate for Anthos, durum bilgili küme ve yük dengeleyici hizmetini içerir)

gcloud container clusters delete my-gke-cluster --zone=us-central1-a

Diskler

Durum bilgili kümemizde, oluşturduğumuz bir disk kullanıldı. Adı almak için aşağıdaki komutu kullanın:

gcloud compute disks list --filter=webserver

Benimki yerine kendi disk adınızı kullanarak disk adını şununla silin:

gcloud compute disks delete vls-690d-webserver --zone=us-central1-a

Tümü temizlendi.

9. Tebrikler!

Tebrikler! Migrate for Anthos'u kullanarak web sunucunuzu bir GCE örneğinden Kubernetes kümesine taşıdınız.

İşlediklerimiz

  • Migrate for Anthos'u kullanarak bir web sunucusunu GCE'den Kubernetes kümesine taşıdık
  • Durum bilgili küme web sunucumuzu, Kubernetes yük dengeleyici hizmeti aracılığıyla kullanıma sunarak dünyaya açtık.
  • Stackdriver'ı etkinleştirdik ve özel bir kontrol paneli oluşturduk.
  • Web sunucumuz çöktüğünde bunu bize bildirmek için bir uyarı politikasıyla birlikte çalışma denetimi yapılandırdık