1. Genel Bakış
Mevcut uygulamaları Kubernetes'te çalışacak şekilde yeniden yazmak veya yeniden tasarlamak her zaman mümkün ya da manuel olarak yapılabilir olmayabilir. Migrate for Anthos, mevcut uygulamalarınızı modernleştirmenize ve Kubernetes'te çalıştırmanıza yardımcı olabilir. Bu codelab'de, Anthos Migrate'ı kullanarak Compute Engine'de barındırılan mevcut bir web uygulamasını Kubernetes Engine'e taşıyacaksınız.
Neler öğreneceksiniz?
- Kubernetes kümesine Migrate for Anthos'u dağıtma
- Mevcut bir Compute Engine örneğinden durum bilgisi olan bir kümede nasıl kapsayıcı oluşturulur?
- Kapsayıcınızı Kubernetes'e dağıtma ve yük dengeleyiciyle yapılandırma
Gerekenler
- Faturalandırmanın ayarlandığı bir Google Cloud projesi. Hesabınız yoksa hesap oluşturmanız gerekir.
2. Hazırlanma
Bu codelab, yerel kurulum veya yapılandırma olmadan tamamen Google Cloud Platform'da çalıştırılabilir.
API'leri etkinleştirme
Başlamadan önce Google Cloud projenizde gerekli API'leri etkinleştirdiğinizden emin olun:
Compute örneği web sunucusu oluşturma
İlk nginx web sunucumuzu barındırmak için kullanacağımız bir işlem örneği ve web sunucusunun varsayılan açılış sayfasını görüntülememize olanak tanıyan güvenlik duvarı kuralları oluşturalım. Bunu yapmanın birkaç yolu vardır ancak kullanım kolaylığı açısından 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ı us-central1-a bölgesinde bir Google Cloud örneği oluştururken ikinci yarısı, ağımıza HTTP trafiğine izin verecek "default-allow-http" adlı bir güvenlik duvarı kuralı oluşturur.
Örnek başarıyla oluşturulduğunda, örneğin ayrıntılarını içeren bir tablo gösterilir. Harici IP'yi not edin. Web sunucumuzun çalıştığını doğrulamak için bu IP'ye daha sonra ihtiyacımız olacak.

Örnek çalışır duruma geldikten sonra, nginx'i yüklemek ve web sunucusunu başlatmak için Cloud Shell'den örneğimize SSH ile bağlanabiliriz:
gcloud compute ssh --zone us-central1-a webserver
Bilgi işlem örneğimize giriş yaptıktan sonra nginx'i yükleyin:
sudo apt install nginx
logout komutuyla SSH oturumundan çıkın.
Önceki adımda aldığımız örneğin harici IP'sini tarayıcımıza girerek web sunucumuzun çalıştığını doğrulayalım. Varsayılan nginx karşılama ekranını görmeniz gerekir:

Bu web sunucusu, Migrate for Anthos'u kullanarak Kubernetes'e taşıyacağımız eski web uygulaması olarak hizmet verecek.
3. Migrate for Anthos'un yüklü olduğu Kubernetes kümesi
Ardından, Compute Engine web sunucusunu nihayetinde taşıyacağımız bir GKE kümesi oluşturacağız. Cloud Console'da aşağıdakileri ç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 komutun tamamlanması birkaç dakika sürer. Küme oluşturulduktan sonra, ayrıntılarını içeren bir çıktı alırsınız:

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

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 yeni oluşturduğumuz küme olduğundan emin olun ve Dağıt'ı tıklayın:

Migrate for Anthos artık Kubernetes kümemize dağıtılmış olmalıdır. Dağıtım tamamlandığında Kubernetes Engine Uygulamaları sayfasında "Tamam" durumu gösterilir:

4. Compute örneğinden durum bilgili kümeye
Migrate for Anthos'un çalıştığı bir Kubernetes kümemiz var. Artık taşıma işlemine başlayabiliriz. İşlem örneğimizi bir Kubernetes kümesine dağıtmak için disklerin anlık görüntülerini alabilmek amacıyla Compute Engine örneğimizi kapatacağız. Devam etmeden önce, daha sonra ihtiyacımız olacak örnek kimliğini not edin:
gcloud compute instances describe webserver --zone us-central1-a | grep ^id
İşlem örneğimizi kapatalım:
gcloud compute instances stop webserver --zone us-central1-a
Örnek durdurulduğundan, aşağıdaki komut dosyasını çalıştırarak disklerin anlık görüntüsünü güvenli bir şekilde oluşturabiliriz. Proje kimliğinizi ve örnek kimliğinizi eklediğ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 sayesinde clone_vm_disks.py:
- GCE örneğinizin kapalı olduğunu doğrulayın
- Örneğinizin her bir diskinden anlık görüntü oluşturun
- Her anlık görüntüden yeni bir disk oluşturma
- Oluşturduğu anlık görüntüleri silme
- Web sunucunuzu barındıracak durum bilgisi olan 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 gereken kalıcı birim talepleriyle birlikte Kubernetes kümemizde bir durum bilgili küme sağlar. Bu değişiklikleri kubectl ile uygulayabiliriz:
kubectl apply -f containerized-webserver.yaml
İş yükleri sayfasında webserver-statefulset'in durumunu kontrol edin:
kubectl apply komutu çalıştırıldıktan sonra durumun birkaç dakika boyunca "Kapsüller beklemede" olarak görünmesi normaldir. Durum "Tamam" olarak göründüğünde devam edin.
5. Kümeyi yük dengeleyiciye sunma
Bu noktada, Kubernetes kümemizin web sunucumuzu durum bilgisi olan bir küme olarak çalıştırması gerekir. Ancak web sunucumuza harici bir IP adresi üzerinden erişmek için kapsayıcısını bir yük dengeleyiciye de sunmamız gerekir. Cloud Shell'de 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 kubectl ile uygulayın:
kubectl apply -f loadbalancer.yaml
webserver-container hizmetinin harici IP adresini almak için kubectl'yi kullanabiliriz:
kubectl get services
Tarayıcımıza harici IP adresini girersek daha önce gördüğümüz varsayılan nginx karşılama ekranını görmemiz gerekir:

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, Stackdriver ile hem günlük kaydı hem de izleme için otomatik olarak donatılır. Stackdriver'ın bizim için otomatik olarak yakaladığı metriklerden bazılarına göz atalım.
Ürünler menüsünde İzleme bağlantısını tıklayın. Projenizden ilk kez eriştiğinizde, çalışma alanınızın ayarlanması birkaç dakika sürebilir.
Yüklendikten sonra sol bölmede Kaynaklar'ın üzerine gelin ve menüden "Kubernetes Engine NEW" seçeneğini belirleyin.

Burada gösterilen kontrol panelindeki her satır bir Kubernetes kaynağını temsil eder. Panonun üstündeki bağlantıları kullanarak altyapı, iş yükleri veya hizmetler görünümü arasında geçiş yapabilirsiniz.

İş yükleri görünümünde "my-gke-cluster"ı genişletin ve varsayılan > webserver-statefulset > webserver-statefulset-0 > webserver-statefulset'e gidin. Web sunucusu durum bilgisi olan küme kapsayıcısını tıklayın. Burada, bellek kullanımı ve CPU kullanımı da dahil olmak üzere Stackdriver tarafından yakalanan bazı hazır metrikleri bulabilirsiniz.

Bu kontrol panelinde gösterilen grafikler, özel bir kontrol paneli oluşturmak için kullanabileceğimiz grafiklerdir.
Özel Kontrol Panelleri
Stackdriver, bize sunulan tüm metrik verileri için grafikleri ve çizelgeleri düzenlemek üzere kullanabileceğimiz özel kontrol panelleri oluşturmamıza olanak tanır. Web sunucumuzun bazı metriklerine bir bakışta ulaşabileceğimiz özel bir kontrol paneli oluşturalım.
Sol taraftaki bölmede, fareyle Gösterge Tabloları'nın üzerine gelin ve Kontrol Paneli Oluştur'u tıklayın.

Boş kontrol panelimiz hazır olduğuna göre, takip etmek istediğimiz metrikleri ekleyebiliriz. Adsız kontrol panelimize "Web Sunucusu Kapsayıcılarım" gibi faydalı bir ad verip sağ üstteki "Grafik Ekle"yi tıklayalım:

Hazır metrikleri hatırlıyor musunuz? Container CPU kullanımı için bir grafik ekleyelim. Grafik başlığı alanına "CPU Kullanımı" girin. "Kaynak türünü ve metriği bul" kutusuna request_utilization yazın ve filtrelenmiş listeden CPU isteği kullanımı'nı seçin. Bu seçim, hem Kaynak türü hem de Metrik alanlarını bizim için doldurur.
Ardından, birden fazla projemiz varsa project_id ve container_name'ye göre filtreleme yapmak isteyeceğiz. Filtre kutusuna project_id yazın, filtrelenmiş listeden bu değeri seçin ve Değer alanında projenizi seçin. Ayrıca container_name'e göre de filtreleme yapmamız gerekiyor. Filtre kutusuna container_name yazın, filtrelenmiş listeden bu adı ve Değer alanında webserver-statefulset'i seçin. Kaydet'i tıklayın.
Artık ilk grafiğimizin yer aldığı bir kontrol panelimiz var.

7. Çalışma denetimi ve uyarı politikası
Stackdriver ile, herhangi bir metriğin belirttiğimiz eşik değerlerine ulaştığında bizi bilgilendirecek uyarılar ayarlayabiliriz. Örneğin, son adımdaki CPU kullanımı belirli 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 bir çalışma süresi kontrolü ayarlayıp ardından bir kesintiyi simüle edelim.
Sol bölmeden Çalışma Denetimleri'ni, ardından Çalışma Denetimlerine Genel Bakış'ı seçin:

Çalışma denetimleri sayfasında belirtildiği gibi, ilk çalışma denetimimizi ayarlayalım. Sayfanın sağ üst kısmındaki Çalışma Süresi Kontrolü Ekle düğmesini tıklayın.
Devam eden formda başlık olarak "Endpoint Uptime" (Uç Nokta Çalışma Süresi), ana makine adı olarak ise yük dengeleyicinizin harici IP adresini girin.

Kaydet'i tıkladığınızda, beraberinde bir uyarı politikası oluşturmanız istenir:

Uyarı Politikası Oluştur'u tıklayın.
Bu politikaya "Endpoint Uptime Policy" (Uç Nokta Çalışma Süresi Politikası) adını verelim. Yapılandırma bölümünde "Koşulun tetikleneceği durumlar"ı "Tüm zaman serisi ihlallerinde" olarak ayarlayın ve Kaydet'i tıklayın.

Henüz işimiz bitmedi. Ardından, uyarı politikamız ihlal edildiğinde bildirim alabilmek için bir bildirim kanalı belirleyeceğiz. Bildirim Kanalı Türü açılır listesinde E-posta'yı ve ardından geçerli bir e-posta adresini seçin.

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.
Bir uyarının nasıl görüneceğini görmek için Cloud Console'da Cloud Shell'inizi tekrar açın. Aşağıdaki komut, web sunucusu pod'umuzda ç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:

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 daha iyi haberler içeren başka bir Stackdriver e-postası alırsınız:

8. Temizleme
Anthos için Migrate ile GCE'den GKE'ye geçiş yaptığımıza göre, projemizi oluşturduğumuz tüm kaynaklardan 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çip Sil'i tıklayın. Proje kimliğini girmeniz istenir. Girip Kapat'ı tıklayın.
Farklı bileşenleri tek tek silmeyi tercih ediyorsanız bir sonraki bölüme geçin.
Stackdriver
Kontrol paneli
Gösterge tablonuz sayfasında, sayfanın üst kısmındaki ayarlar simgesini
tıklayın ve Gösterge Tablosunu Sil'i seçin.
Uyarı Politikası
Politikalar sayfasında, oluşturduğunuz her politika için sağdaki İşlemler menüsünden
Sil'i seçin.
Çalışma denetimi
Çalışma süresi kontrolleri sayfasında, oluşturduğunuz her kontrolün 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 bilgisi olan küme ve yük dengeleyici hizmeti içerir)
gcloud container clusters delete my-gke-cluster --zone=us-central1-a
Diskler
Durumlu kümemiz, oluşturduğumuz bir diski kullanıyordu. Adı almak için aşağıdakileri kullanın:
gcloud compute disks list --filter=webserver
Kendi disk adınızı kullanarak aşağıdaki komutla silin:
gcloud compute disks delete vls-690d-webserver --zone=us-central1-a
Tümü temizlendi.
9. Tebrikler!
Tebrikler! Web sunucunuzu bir GCE örneğinden Kubernetes kümesine Migrate for Anthos kullanarak taşıdınız.
İşlediğimiz konular
- Migrate for Anthos'u kullanarak bir web sunucusunu GCE'den Kubernetes kümesine taşıdık
- Durumlu küme web sunucumuzu bir Kubernetes yük dengeleyici hizmeti aracılığıyla kullanıma sunarak tüm dünyada erişilebilir hale getirdik.
- Stackdriver'ı etkinleştirdik ve özel bir kontrol paneli oluşturduk
- Web sunucumuz çöktüğünde bizi bilgilendirmesi için bir uyarı politikasıyla birlikte çalışma süresi denetimi yapılandırdık.
