1. Genel Bakış
Bu laboratuvarda, container mimarisine alınmış bir ortamda Python uygulamaları geliştirmekle görevli yazılım mühendislerinin geliştirme iş akışını kolaylaştırmak için tasarlanmış özellikler ve işlevler gösterilmektedir. Tipik container geliştirme sürecinde kullanıcının container'larla ve container derleme işlemiyle ilgili ayrıntıları anlaması gerekir. Ayrıca geliştiriciler, uygulamalarını uzak ortamlarda test edip hata ayıklama yapmak için genellikle akışlarını kesip IDE'lerinden çıkmak zorunda kalırlar. Bu eğitimde bahsedilen araçlar ve teknolojiler sayesinde geliştiriciler, IDE'lerinden ayrılmadan kapsayıcılı uygulamalarla etkili bir şekilde çalışabilir.

Cloud Workstations nedir?
Cloud Workstations, Google Cloud'da yerleşik güvenlik ve önceden yapılandırılmış ancak özelleştirilebilir geliştirme ortamları sunan yönetilen geliştirme ortamları sağlar. Cloud Workstations'a tarayıcı tabanlı bir IDE, birden fazla yerel kod düzenleyici (ör. VSCode veya IntelliJ IDEA Ultimate ve PyCharm Professional gibi JetBrains IDE'leri) ya da SSH üzerinden erişebilirsiniz.
Cloud Workstations aşağıdaki kaynakları kullanır:
- Yöneticiler iş istasyonu kümeleri oluşturur.
- Her iş istasyonu kümesinde yöneticiler, iş istasyonları için şablon görevi gören bir veya daha fazla iş istasyonu yapılandırması oluşturur.
- Geliştiriciler, Cloud IDE, dil araçları ve kitaplıklar gibi geliştirme ortamlarını tanımlayan iş istasyonları oluşturabilir.
Cloud Workstations, BT ve güvenlik yöneticilerinin geliştirme ortamlarını kolayca sağlamasına, ölçeklendirmesine, yönetmesine ve güvenliğini sağlamasına olanak tanır. Ayrıca geliştiricilerin, geliştirme ortamlarına tutarlı yapılandırmalar ve özelleştirilebilir araçlarla erişmesini sağlar.
Cloud Workstations, uygulama geliştirme ortamlarınızın güvenlik durumunu iyileştirerek güvenliği sola kaydırmaya yardımcı olur. VPC Hizmet Kontrolleri, özel giriş veya çıkış, zorunlu resim güncelleme ve kimlik ve erişim yönetimi erişim politikaları gibi güvenlik özelliklerine sahiptir.
Cloud Code nedir?
Cloud Code, örnek şablonlardan yeni bir uygulama oluşturup özelleştirmekten tamamlanmış uygulamanızı çalıştırmaya kadar Kubernetes ve Cloud Run uygulamalarının tüm geliştirme döngüsü için IDE desteği sağlar. Cloud Code, çalışmaya hazır örnekler, kullanıma hazır yapılandırma snippet'leri ve özel bir hata ayıklama deneyimiyle süreç boyunca size destek olur. Böylece Kubernetes ve Cloud Run ile geliştirme yapmak çok daha kolay hale gelir.
Cloud Code özelliklerinden bazıları şunlardır:
- Sürekli olarak uygulama geliştirme ve çalıştırma
- Geliştirme aşamasındaki Kubernetes uygulamanız için hata ayıklama desteği
- Günlük akışı ve görüntüleme
Diğer Cloud Code özellikleri hakkında daha fazla bilgi edinin.
Öğrenecekleriniz
Bu laboratuvarda, GCP'de kapsayıcılarla geliştirme yöntemlerini öğreneceksiniz. Bu yöntemler arasında şunlar yer alır:
- Cloud Workstations'a genel bakış
- İş istasyonunu başlatma
- Cloud Code'u inceleme
- Kubernetes'te hata ayıklama
2. Kurulum ve Gereksinimler
Yönlendirmesiz ortam kurulumu
- 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.



- 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. Dilediğiniz zaman bunu güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir 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_IDolarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- 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 oluşturduğunuz kaynakları veya projenin tamamını silebilirsiniz. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Ortam Kurulumu
Cloud Shell'de projenizin proje kimliğini ve proje numarasını ayarlayın. Bunları PROJECT_ID ve PROJECT_ID değişkenleri olarak kaydedin.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
Bu laboratuvarda GKE'ye kod dağıtacaksınız. IDE olarak Cloud iş istasyonlarını da kullanacaksınız.
Aşağıdaki kurulum komut dosyası bu altyapıyı sizin için hazırlar.
- Kurulum komut dosyasını indirip yürütülebilir hale getirin.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/setup_with_cw.sh
chmod +x setup_with_cw.sh
setup_with_cw.shdosyasını açın ve şu anda CHANGEME olarak ayarlanmış şifrelerin değerlerini düzenleyin.- Bu laboratuvarda kullanacağınız bir GKE kümesi oluşturmak için kurulum komut dosyasını çalıştırın. Bu kurulum yaklaşık 20 dakika sürer.
./setup_with_cw.sh &
- Cloud Console'da Cloud Workstations'ı açın. Sonraki adımlara geçmeden önce kümenin
READYdurumunda olmasını bekleyin. - Cloud Shell oturumunuzun bağlantısı kesildiyse "Yeniden bağlan"ı tıklayın ve ardından proje kimliğini ayarlamak için gcloud CLI komutunu çalıştırın. Komutu çalıştırmadan önce aşağıdaki örnek proje kimliğini Qwiklabs proje kimliğinizle değiştirin.
gcloud config set project qwiklabs-gcp-project-id
- Cloud Workstations yapılandırması oluşturmak için aşağıdaki komut dosyasını indirip terminalde çalıştırın.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/workstation_config_setup.sh
chmod +x workstation_config_setup.sh
./workstation_config_setup.sh
Cloud Workstations kümesi ve yapılandırması
Cloud Console'da Cloud Workstations'ı açın. Kümenin READY durumunda olduğunu doğrulayın.

Mevcut yapılandırmaların durumunu doğrulayın.

Yeni bir iş istasyonu oluşturun.

Adı my-workstation olarak değiştirin ve mevcut yapılandırmayı seçin: codeoss-python.

İş istasyonunu başlatma
- İş istasyonunu başlatın. İş istasyonunun başlatılması birkaç dakika sürer.

- Adres çubuğundaki simgeyi tıklayarak üçüncü taraf çerezlerine izin verin.


- "Site çalışmıyor mu?" seçeneğini tıklayın.

- "Çerezlere izin ver"i tıklayın.

- İş istasyonu başlatıldıktan sonra Code OSS IDE'nin açıldığını görürsünüz.
İş istasyonu IDE'sindeki Başlarken sayfasında "Bitti olarak işaretle"yi tıklayın.

3. Cloud Code'a Genel Bakış
Cloud Code'da bulunan farklı bölümleri inceleyin.
- Kubernetes geliştirme. IDE'nizde tamamen entegre bir Kubernetes geliştirme ve hata ayıklama ortamı edinin. Kümeleri doğrudan IDE içinden oluşturun ve yönetin.
- Çalışan uygulamalarda hata ayıklama Yerleşik IDE hata ayıklama özelliklerinden yararlanarak Cloud Code for VS Code ve Cloud Code for IntelliJ kullanıp IDE'lerinizdeki kodlarda hata ayıklayın.
- Dağıtımları keşfedin. Kubernetes kümeleriniz ve Cloud Run hizmetleriniz için temel kaynakları ve meta verileri görüntüleyin. Açıklamaları getirebilir, günlükleri görüntüleyebilir, gizli anahtarları yönetebilir veya doğrudan kapsülde terminal elde edebilirsiniz.
- Yerel Kubernetes geliştirme işlemini basitleştirin. IDE'ler için Cloud Code, Skaffold, Jib ve kubectl gibi popüler araçları kullanarak kodunuz hakkında gerçek zamanlı olarak sürekli geri bildirim sağlar.

Google Cloud'da oturum açma
- Cloud Code simgesini tıklayın ve "Google Cloud'da oturum aç"ı seçin:

- "Oturum açmaya devam et"i tıklayın.

- Terminal'deki çıktıyı kontrol edin ve bağlantıyı açın:

- Qwiklabs öğrenci kimlik bilgilerinizle giriş yapın.

- "İzin ver"i seçin:

- Doğrulama kodunu kopyalayın ve iş istasyonu sekmesine dönün.

- Doğrulama kodunu yapıştırıp Enter tuşuna basın.

Bu mesajı görürseniz iş istasyonuna kopyalayıp yapıştırabilmek için "İzin ver" düğmesini tıklayın.

4. Yeni bir Python başlangıç uygulaması oluşturma
Bu bölümde yeni bir Python uygulaması oluşturacaksınız.
- Yeni bir Terminal açın.

- Yeni bir dizin oluşturma ve bunu çalışma alanı olarak açma
mkdir music-service && cd music-service
code-oss-cloud-workstations -r --folder-uri="$PWD"
requirements.txtadlı bir dosya oluşturun ve aşağıdaki içerikleri bu dosyaya kopyalayın.

Flask
gunicorn
ptvsd==4.3.2
app.pyadlı bir dosya oluşturun ve aşağıdaki kodu dosyaya yapıştırın.
import os
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/")
def hello_world():
message="Hello, World!"
return message
if __name__ == '__main__':
server_port = os.environ.get('PORT', '8080')
app.run(debug=False, port=server_port, host='0.0.0.0')
Dockerfileadlı bir dosya oluşturun ve aşağıdakileri bu dosyaya yapıştırın.
FROM python:3.8
ARG FLASK_DEBUG=0
ENV FLASK_DEBUG=$FLASK_DEBUG
ENV FLASK_APP=app.py
WORKDIR /app
COPY requirements.txt .
RUN pip install --trusted-host pypi.python.org -r requirements.txt
COPY . .
ENTRYPOINT ["python3", "-m", "flask", "run", "--port=8080", "--host=0.0.0.0"]
Not: FLASK_DEBUG=1, kod değişikliklerini Python Flask uygulamasına otomatik olarak yeniden yüklemenize olanak tanır. Bu Dockerfile, bu değeri derleme bağımsız değişkeni olarak iletmenize olanak tanır.
Manifest Dosyaları Oluşturma
Terminalinizde, varsayılan skaffold.yaml ve deployment.yaml oluşturmak için aşağıdaki komutu çalıştırın.
- Aşağıdaki komutla Skaffold'u başlatın
skaffold init --generate-manifests
İstendiğinde imlecinizi hareket ettirmek için okları, seçenekleri belirlemek için boşluk çubuğunu kullanın.
Seçin:
- Bağlantı noktası için
8080 - Yapılandırmayı kaydetmek için
y
Skaffold Yapılandırmalarını Güncelleme
- Varsayılan uygulama adını değiştirme
skaffold.yamluygulamasını aç- Şu anda
dockerfile-imageolarak ayarlanmış resim adını seçin. - Sağ tıklayın ve Tüm Oluşumları Değiştir'i seçin.
- Yeni adı
python-appolarak yazın. - Derleme bölümünü aşağıdaki şekilde düzenleyin:
docker.buildArgsöğesiniFLASK_DEBUG=1kartına ekle- IDE'den çalışan kapsayıcıya
*.pydosyalarındaki değişiklikleri yüklemek için ayarları senkronize edin.
Düzenlemelerden sonra skaffold.yaml dosyasındaki derleme bölümü aşağıdaki gibi olur:
build:
artifacts:
- image: python-app
docker:
buildArgs:
FLASK_DEBUG: "1"
dockerfile: Dockerfile
sync:
infer:
- '**/*.py'
Kubernetes yapılandırma dosyasını değiştirme
- Varsayılan adı değiştirme
deployment.yamldosyasını aç- Şu anda
dockerfile-imageolarak ayarlanmış resim adını seçin. - Sağ tıklayın ve Tüm Oluşumları Değiştir'i seçin.
- Yeni adı
python-appolarak yazın.
5. Geliştirme sürecini inceleme
İş mantığı eklendiğinden artık uygulamanızı dağıtabilir ve test edebilirsiniz. Aşağıdaki bölümde Cloud Code eklentisinin kullanımı gösterilecektir. Bu eklenti, diğer özelliklerinin yanı sıra geliştirme sürecinizi kolaylaştırmak için skaffold ile entegre olur. Aşağıdaki adımlarda GKE'ye dağıtım yaptığınızda Cloud Code ve Skaffold, kapsayıcı görüntünüzü otomatik olarak oluşturur, Container Registry'ye gönderir ve ardından your uygulamasını GKE'ye dağıtır. Bu işlem, geliştirici akışından ayrıntıları soyutlayarak arka planda gerçekleşir.
Kubernetes kümesi ekleme
- Küme ekleme

- Google Kubernetes Engine'i seçin:

- Projeyi seçin.

- İlk kurulumda oluşturulan "python-cluster"ı seçin.

- Küme artık Cloud Code'un altındaki Kubernetes kümeleri listesinde gösteriliyor. Buradan kümeye gidip kümeyi keşfedin.

Kubernetes'e dağıtma
- Cloud Shell Düzenleyici'nin alt kısmındaki bölmede Cloud Code'u seçin. 

- En üstte görünen panelde Kubernetes'te çalıştır'ı seçin.
İstenirse mevcut Kubernetes bağlamını kullanmak için Evet'i seçin.

Bu komut, kaynak kodun derlenmesini başlatır ve ardından testleri çalıştırır. Derleme ve testlerin çalıştırılması birkaç dakika sürer. Bu testler, birim testlerini ve dağıtım ortamı için belirlenen kuralları kontrol eden bir doğrulama adımını içerir. Bu doğrulama adımı zaten yapılandırılmıştır ve geliştirme ortamınızda çalışırken bile dağıtım sorunlarıyla ilgili uyarı almanızı sağlar.
- Komutu ilk kez çalıştırdığınızda ekranın üst kısmında, mevcut Kubernetes bağlamını kullanmak isteyip istemediğinizi soran bir istem görünür. Kabul etmek ve mevcut bağlamı kullanmak için "Evet"i seçin.
- Ardından, hangi Container Registry'nin kullanılacağını soran bir istem gösterilir. Sağlanan varsayılan değeri kabul etmek için Enter tuşuna basın.
- İlerleme durumunu ve bildirimleri görüntülemek için alt bölmede "Çıkış" sekmesini seçin. Açılır listeyi kullanarak "Kubernetes: Run/Debug" seçeneğini belirleyin.

- Ek ayrıntıları ve kapsayıcılardan canlı olarak yayınlanan günlükleri görüntülemek için sağdaki kanal açılır listesinde "Kubernetes: Run/Debug - Detailed"ı seçin.

Derleme ve testler tamamlandığında, Çıkış sekmesi günlüklerinde "Kubernetes: Çalıştır/Hata Ayıkla" görünümünde http://localhost: 8080 URL'si listelenir.
- Cloud Code terminalinde, çıkıştaki ilk URL'nin (http://localhost:8080) üzerine gelin ve ardından açılan araç ipucunda Web Önizlemesini Aç'ı seçin.
- Yeni bir tarayıcı sekmesi açılır ve şu mesaj gösterilir:
Hello, World!
Hot Reload
app.pydosyasını açın.- Karşılama mesajını
Hello from Pythonolarak değiştirme
Output penceresinde, Kubernetes: Run/Debug görünümünde, izleyicinin güncellenen dosyaları Kubernetes'teki kapsayıcıyla senkronize ettiğini hemen fark edeceksiniz.
Update initiated Build started for artifact python-app Build completed for artifact python-app Deploy started Deploy completed Status check started Resource pod/python-app-6f646ffcbb-tn7qd status updated to In Progress Resource deployment/python-app status updated to In Progress Resource deployment/python-app status completed successfully Status check succeeded ...
Kubernetes: Run/Debug - Detailedgörünümüne geçerseniz dosya değişikliklerini tanıdığını, ardından uygulamayı oluşturup yeniden dağıttığını fark edersiniz.
files modified: [app.py]
Syncing 1 files for gcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Copying files:map[app.py:[/app/app.py]]togcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Watching for changes...
[python-app] * Detected change in '/app/app.py', reloading
[python-app] * Restarting with stat
[python-app] * Debugger is active!
[python-app] * Debugger PIN: 744-729-662
- Güncellenmiş sonuçları görmek için önceki sonuçları gördüğünüz tarayıcı sekmenizi yenileyin.
Hata ayıklama
- Hata ayıklama görünümüne gidin ve mevcut iş parçacığını durdurun
. İstenirse her çalıştırmadan sonra temizleme yapmayı seçebilirsiniz. 
- Alt menüde
Cloud Codesimgesini tıklayın ve uygulamayıdebugmodunda çalıştırmak içinDebug on Kubernetessimgesini seçin.

OutputpenceresininKubernetes Run/Debug - Detailedgörünümünde, Skaffold'un bu uygulamayı hata ayıklama modunda dağıtacağını unutmayın.
- Bu işlem ilk kez çalıştırıldığında, istemde kaynağın kapsayıcı içindeki konumu sorulur. Bu değer, Dockerfile'daki dizinlerle ilgilidir.
Varsayılanı kabul etmek için Enter tuşuna basın.

Uygulamanın oluşturulup dağıtılması birkaç dakika sürer. Hata ayıklama oturumunun bağlantısı kesilirse "Geliştirme Oturumları" bölümündeki "Kubernetes'te hata ayıklama" adımlarını yeniden çalıştırın.
- İşlem tamamlandığında. Bir hata ayıklayıcının eklendiğini ve Çıkış sekmesinde
Attached debugger to container "python-app-8476f4bbc-h6dsl" successfully.ifadesinin yer aldığını, ayrıca http://localhost:8080 URL'sinin listelendiğini görürsünüz.
Port forwarding pod/python-app-8bd64cf8b-cskfl in namespace default, remote port 5678 -> http://127.0.0.1:5678
- Alt durum çubuğu, hata ayıklama modunda olduğunu belirtmek için rengini maviden turuncuya değiştirir.

Kubernetes Run/Debuggörünümünde, hata ayıklanabilir bir kapsayıcının başlatıldığını fark edin.
**************URLs***************** Forwarded URL from service python-app: http://localhost:8080 Debuggable container started pod/python-app-8bd64cf8b-cskfl:python-app (default) Update succeeded ***********************************
Kesme noktalarından yararlanma
app.pydosyasını açın.return messageifadesini bulun.- Satır numarasının solundaki boş alanı tıklayarak bu satıra kesme noktası ekleyin. Kesme noktasının ayarlandığını belirtmek için kırmızı bir gösterge gösterilir.
- Tarayıcınızı yeniden yükleyin. Hata ayıklayıcının, işlemi kesme noktasında durdurduğunu ve GKE'de uzaktan çalışan uygulamanın değişkenlerini ve durumunu incelemenize olanak tanıdığını unutmayın.
- DEĞİŞKENLER bölümünü tıklayın.
- Yereller'i tıklayın. Burada
"message"değişkenini bulabilirsiniz. - "message" değişken adını çift tıklayın ve pop-up'ta değeri
"Greetings from Python"gibi farklı bir değerle değiştirin. - Hata ayıklama kontrol panelinde Devam düğmesini tıklayın.

- Tarayıcınızda, az önce girdiğiniz güncellenmiş değeri gösteren yanıtı inceleyin.
- Durdur düğmesine
basarak "Hata ayıklama" modunu durdurun ve kesme noktasına tekrar tıklayarak kesme noktasını kaldırın.
6. Temizleme
Tebrikler! Bu laboratuvarda sıfırdan yeni bir Python uygulaması oluşturdunuz ve bu uygulamayı kapsayıcılarla etkili bir şekilde çalışacak şekilde yapılandırdınız. Ardından, geleneksel uygulama yığınlarında bulunan geliştirici akışını izleyerek uygulamanızı uzak bir GKE kümesine dağıtıp hatalarını ayıklarsınız.
Laboratuvarı tamamladıktan sonra temizlik yapmak için:
- Laboratuvarda kullanılan dosyaları silin.
cd ~ && rm -rf ~/music-service
- İlgili tüm altyapıyı ve kaynakları kaldırmak için projeyi silin.
—
Son güncelleme: 22.03.2023