arrow_back

Kubernetes Engine Kullanarak Dağıtımları Yönetme

Join Sign in
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Kubernetes Engine Kullanarak Dağıtımları Yönetme

Lab 1 hour universal_currency_alt 5 Credits show_chart Intermediate
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP053

Google Cloud Rehbersiz Laboratuvarları

Genel bakış

DevOps yöntemlerinde, uygulama dağıtım senaryolarını (ör. sürekli dağıtım, mavi-yeşil dağıtım, canary dağıtımı) yönetmek için birden fazla dağıtım kullanılır. Bu laboratuvarda, birden fazla heterojen dağıtımın kullanıldığı sık karşılaşılan senaryoları yürütmek için container'ları ölçeklendirmek ve yönetmekle ilgili alıştırmalar yapacaksınız.

Hedefler

Bu laboratuvarda, aşağıdaki görevleri nasıl gerçekleştireceğinizi öğreneceksiniz:

  • kubectl aracıyla uygulamalı alıştırma yapma
  • Dağıtım için yaml dosyaları oluşturma
  • Dağıtımları başlatma, güncelleme ve ölçeklendirme
  • Dağıtımları güncelleme ve dağıtım stilleri hakkında bilgi edinme

Ön koşullar

Bu laboratuvarda öğrendiklerinizden mümkün olan en iyi şekilde yararlanabilmek için aşağıdakileri yapmanız önerilir.

  • Aşağıdaki Google Cloud Öğrenim Merkezi laboratuvarlarını tamamlayın:
  • Linux sistem yönetimi becerilerinizi geliştirin.
  • Sürekli dağıtım kavramlarını içeren DevOps teorisini öğrenin.

Dağıtımlara giriş

Heterojen dağtımlar, belirli bir teknik ya da operasyonel ihtiyacı karşılamak için iki veya daha fazla ayrı altyapı ortamını ya da bölgesini bağlar. Heterojen dağıtımlar, dağıtımın özelliklerine bağlı olarak "karma", "çoklu bulut" veya "herkese açık-gizli" olarak adlandırılır.

Bu laboratuvar kapsamında heterojen dağıtımlar; tek bulut ortamındaki bölgeleri kapsayanlar, birden fazla herkese açık bulut ortamını kapsayanlar (çoklu bulut) veya hem şirket içi hem herkese açık bulut ortamlarını kapsayanlar (karma ya da herkese açık-gizli) olarak ele alınacaktır.

Tek ortamla veya bölgeyle kısıtlanmış olan dağıtımlarda işletmeyle ve teknik durumlarla alakalı çeşitli zorluklar ortaya çıkabilir:

  • Kaynak yetersizliği: Herhangi bir tek ortamda ve özellikle şirket içi ortamlarda, üretimden kaynaklanan ihtiyaçlarınızı karşılayacak bilgi işlem, ağ ve depolama kaynaklarına sahip olmayabilirsiniz.
  • Erişim konumu kısıtlamaları: Tek ortamda yapılan dağıtımlar, birbirinden uzak konumlarda olan kişiler tek bir dağıtıma erişmesini gerektirir. Kullanıcıların trafikleri, dünyanın dört bir yanından merkezi bir konuma gidebilir.
  • Sınırlı uygunluk: Web ölçekli trafik kalıpları, uygulamaları hatadan etkilenmemeye ve dirençli kalmaya zorlar.
  • Tedarikçiye bağımlılık: Tedarikçi düzeyindeki platform ve altyapı soyutlamaları sizi uygulamaları bağlamaktan alıkoyabilir.
  • Kaynakların esnek olmaması: Kaynaklarınız belirli bilgi işlem, depolama veya ağ teklifleriyle sınırlandırılmış olabilir.

Heterojen dağıtımlar sayesinde bu zorlukların üstesinden gelebilirsiniz. Ancak bu dağıtımları, programatik ve deterministik süreçler ve prosedürlerle inşa etmeniz gerekir. Bir defalık veya anlık dağıtım prosedürlerinden yararlanmak dağıtımların ya da süreçlerin hassas ve hataya yatkın olmasına yol açabilir. Anlık süreçlerde veri veya trafik kaybı yaşanabilir. Başarılı dağıtım süreçlerinin, tekrarlanabilir olması ve yönetme, temel hazırlık, yapılandırma ve bakım yapma gibi işlemler için daha önce denenmiş yaklaşımları kullanması gerekir.

Heterojen dağıtımda sık karşılaşılan üç senaryo vardır: çoklu bulut dağıtımları, şirket içi verilerin fronting'i ve sürekli entegrasyon/sürekli teslim (CI/CD) süreçleri.

Aşağıdaki alıştırmalarda heterojen dağıtımlar için bazı sık karşılaşılan kullanım alanlarına yer verilmiştir. Ayrıca, bu dağıtımları yürütmek için Kubernetes'i ve diğer altyapı kaynaklarını kullanan iyi tasarlanmış yaklaşımlar paylaşılmıştır.

Kurulum ve şartlar

Laboratuvarı Başlat düğmesini tıklamadan önce

Buradaki talimatları okuyun. Laboratuvarlar süreli olduğundan duraklatılamaz. Laboratuvarı Başlat'ı tıkladığınızda başlayan zamanlayıcı, Google Cloud kaynaklarının ne süreyle kullanımınıza açık durumda kalacağını gösterir.

Bu uygulamalı laboratuvarı kullanarak, laboratuvar etkinliklerini gerçek bir bulut ortamında (Simülasyon veya demo ortamında değil.) gerçekleştirebilirsiniz. Bu olanağın sunulabilmesi için size yeni, geçici kimlik bilgileri verilir. Bu kimlik bilgilerini laboratuvar süresince Google Cloud'da oturum açmak ve Google Cloud'a erişmek için kullanırsınız.

Bu laboratuvarı tamamlamak için şunlar gerekir:

  • Standart bir internet tarayıcısına erişim (Chrome Tarayıcı önerilir).
Not: Bu laboratuvarı çalıştırmak için tarayıcıyı gizli pencerede açın. Aksi takdirde, kişisel hesabınızla öğrenci hesabınız arasında oluşabilecek çakışmalar nedeniyle kişisel hesabınızdan ek ücret alınabilir.
  • Laboratuvarı tamamlamak için yeterli süre. (Laboratuvarlar, başlatıldıktan sonra duraklatılamaz)
Not: Kişisel bir Google Cloud hesabınız veya projeniz varsa bu laboratuvarda kullanmayın. Aksi takdirde hesabınızdan ek ücret alınabilir.

Laboratuvarınızı başlatma ve Google Cloud Console'da oturum açma

  1. Laboratuvarı Başlat düğmesini tıklayın. Laboratuvar için ödeme yapmanız gerekiyorsa ödeme yöntemini seçebileceğiniz bir pop-up açılır. Soldaki Laboratuvar Ayrıntıları panelinde şunlar yer alır:

    • Google Console'u Aç düğmesi
    • Kalan süre
    • Bu laboratuvarda kullanmanız gereken geçici kimlik bilgileri
    • Bu laboratuvarda ilerlemek için gerekebilecek diğer bilgiler
  2. Google Console'u Aç'ı tıklayın. Laboratuvar, kaynakları çalıştırır ve sonra Oturum aç sayfasını gösteren başka bir sekme açar.

    İpucu: Sekmeleri ayrı pencerelerde, yan yana açın.

    Not: Hesap seçin iletişim kutusunu görürseniz Başka Bir Hesap Kullan'ı tıklayın.
  3. Gerekirse Laboratuvar Ayrıntıları panelinden Kullanıcı adı'nı kopyalayın ve Oturum aç iletişim kutusuna yapıştırın. Sonraki'ni tıklayın.

  4. Laboratuvar Ayrıntıları panelinden Şifre'yi kopyalayın ve Hoş geldiniz iletişim penceresine yapıştırın. Sonraki'ni tıklayın.

    Önemli: Sol paneldeki kimlik bilgilerini kullanmanız gerekir. Google Cloud Öğrenim Merkezi kimlik bilgilerinizi kullanmayın. Not: Bu laboratuvarda kendi Google Cloud hesabınızı kullanabilmek için ek ücret ödemeniz gerekebilir.
  5. Sonraki sayfalarda ilgili düğmeleri tıklayarak ilerleyin:

    • Şartları ve koşulları kabul edin.
    • Geçici bir hesap kullandığınızdan kurtarma seçenekleri veya iki faktörlü kimlik doğrulama eklemeyin.
    • Ücretsiz denemelere kaydolmayın.

Birkaç saniye sonra Cloud Console bu sekmede açılır.

Not: Soldaki Gezinme menüsü'nü tıklayarak Google Cloud ürün ve hizmetlerinin listelendiği menüyü görüntüleyebilirsiniz. Gezinme menüsü simgesi

Cloud Shell'i etkinleştirme

Cloud Shell, çok sayıda geliştirme aracı içeren bir sanal makinedir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Cloud Shell, Google Cloud kaynaklarınıza komut satırı erişimi sağlar.

  1. Google Cloud Console'un üst kısmından Cloud Shell'i etkinleştir Cloud Shell'i etkinleştir simgesi simgesini tıklayın.

Bağlandığınızda, kimliğiniz doğrulanmış olur. Proje ise PROJECT_ID'nize göre ayarlanmıştır. Çıkış, bu oturum için PROJECT_ID'yi tanımlayan bir satır içerir:

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud, Google Cloud'un komut satırı aracıdır. Cloud Shell'e önceden yüklenmiştir ve sekmeyle tamamlamayı destekler.

  1. (İsteğe bağlı) Etkin hesap adını şu komutla listeleyebilirsiniz:
gcloud auth list
  1. Yetkilendir'i tıklayın.

  2. Çıkışınız aşağıdaki gibi görünecektir:

Çıkış:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (İsteğe bağlı) Proje kimliğini şu komutla listeleyebilirsiniz:
gcloud config list project

Çıkış:

[core] project = <project_ID>

Örnek çıkış:

[core] project = qwiklabs-gcp-44776a13dea667a6 Not: gcloud ile ilgili tüm belgeleri, Google Cloud'daki gcloud CLI'ya genel bakış rehberinde bulabilirsiniz.

Alt bölgeyi ayarlama

Aşağıdaki komutu çalıştırarak Google Cloud çalışma alt bölgenizi ayarların ve yerel alt bölgeyi olacak şekilde değiştirin:

gcloud config set compute/zone {{{ project_0.default_zone | ZONE }}}

Bu laboratuvar için örnek kod alma

  1. Container'ları ve dağıtımları oluşturmak veya çalıştırmak için gereken örnek kodu alın:
gsutil -m cp -r gs://spls/gsp053/orchestrate-with-kubernetes . cd orchestrate-with-kubernetes/kubernetes
  1. Üç düğümlü bir küme oluşturun. Bu işlemin tamamlanması birkaç dakika sürebilir:
gcloud container clusters create bootcamp \ --machine-type e2-small \ --num-nodes 3 \ --scopes "https://www.googleapis.com/auth/projecthosting,storage-rw"

1. görev: Dağıtım nesnesi hakkında bilgi edinin

İlk olarak dağıtım nesnesini inceleyelim.

  1. kubectl aracındaki explain komutunu kullanarak dağıtım nesnesi hakkında bilgi edinebilirsiniz:
kubectl explain deployment
  1. --recursive seçeneğini kullanarak tüm alanları görebilirsiniz:
kubectl explain deployment --recursive
  1. Dağıtım nesnelerinin yapısını anlamak ve ayrı alanların işlevini öğrenmek için "explain" komutunu bu laboratuvarda dilediğiniz zaman kullanabilirsiniz:
kubectl explain deployment.metadata.name

2. görev: Dağıtım oluşturun

  1. deployments/auth.yaml yapılandırma dosyasını güncelleyin:
vi deployments/auth.yaml
  1. Düzenleyiciyi başlatın:
i
  1. Dağıtımın container bölümündeki image kodunu aşağıdaki şekilde değiştirin:
... containers: - name: auth image: "kelseyhightower/auth:1.0.0" ...
  1. auth.yaml dosyasını kaydedin. <Esc> tuşuna basıp aşağıdaki kodu yazın:
:wq
  1. <Enter> tuşuna basın. Basit bir dağıtım oluşturun. Dağıtımın yapılandırma dosyasını inceleyin:
cat deployments/auth.yaml

Çıkış:

apiVersion: apps/v1 kind: Deployment metadata: name: auth spec: replicas: 1 selector: matchLabels: app: auth template: metadata: labels: app: auth track: stable spec: containers: - name: auth image: "kelseyhightower/auth:1.0.0" ports: - name: http containerPort: 80 - name: health containerPort: 81 ...

Dağıtımın bir replika oluşturduğunu ve auth container'ın 1.0.0 sürümünü kullandığını fark etmişsinizdir.

auth dağıtımı oluşturmak için kubectl create komutunu çalıştırdığınızda dağıtım manifestindeki verilere uyan bir kapsül oluşturulur. Bu, replicas alanında belirtilen sayıyı değiştirerek kapsül sayısını ölçeklendirebileceğiniz anlamına gelir.

  1. kubectl create komutunu kullanarak dağıtım nesnenizi oluşturun:
kubectl create -f deployments/auth.yaml
  1. Dağıtımı oluşturduktan sonra kontrol etmek için aşağıdaki kodu kullanın:
kubectl get deployments
  1. Dağıtım oluşturulduktan sonra Kubernetes dağıtım için bir ReplicaSet (replika kümesi) oluşturur. Dağıtım için ReplicaSet'in oluşturulup oluşturulmadığını kontrol edin:
kubectl get replicasets

ReplicaSet'in auth-xxxxxxx benzeri bir ismi vardır.

  1. Dağıtımın bir parçası olarak oluşturulan kapsülleri görüntüleyin. Tek kapsül, Kubernetes tarafından ReplicaSet oluşturulduğunda üretilir:
kubectl get pods

auth dağıtımı için hizmet oluşturmaya sıra geldi. Hizmet manifest dosyalarından daha önce bahsedildiği için burada ayrıntılara yer verilmeyecek.

  1. kubectl create komutunu kullanarak auth hizmetini oluşturun:
kubectl create -f services/auth.yaml
  1. Hello dağıtımını oluşturmak ve kullanıma sunmak için aynı işlemi yapın:
kubectl create -f deployments/hello.yaml kubectl create -f services/hello.yaml
  1. Ön uç dağıtımını oluşturmak ve kullanıma sunmak için aynı işlemi tekrarlayın:
kubectl create secret generic tls-certs --from-file tls/ kubectl create configmap nginx-frontend-conf --from-file=nginx/frontend.conf kubectl create -f deployments/frontend.yaml kubectl create -f services/frontend.yaml Not: Ön uç için ConfigMap oluşturdunuz.
  1. Ön ucun harici IP'sini alıp curl işlemini gerçekleştirerek ön uçla etkileşim kurun:
kubectl get services frontend Not: Harici IP'nin doldurulması birkaç dakika sürebilir. Normal bir durumdur. Yukarıdaki kodu, alan doldurulana kadar tekrar çalıştırın. curl -ks https://<EXTERNAL-IP>

Hello'dan yanıt gelmiş olması gerekir.

  1. kubectl aracının çıkış şablonu oluşturma özelliğini kullanarak curl'ü tek satır şeklinde kullanabilirsiniz:
curl -ks https://`kubectl get svc frontend -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"`

Tamamlanan görevi test etme

Laboratuvardaki ilerleme durumunuzu kontrol etmek için İlerleme durumumu kontrol et'i tıklayın. Kubernetes kümelerini, auth, hello ve ön uç dağıtımlarını başarıyla oluşturduğunuzda bir değerlendirme puanı göreceksiniz.

Kubernetes kümesini ve dağıtımları (auth, hello ve frontend) oluşturma

Dağıtımı ölçeklendirme

Dağıtımınızı oluşturduğunuza göre artık ölçeklendirebilirsiniz. Bunun için spec.replicas alanını güncelleyin.

  1. kubectl explain komutunu yeniden kullanarak bu alana dair açıklamayı görebilirsiniz:
kubectl explain deployment.spec.replicas
  1. Replika alanını doldurmanın en kolay yolu, kubectl scale komutunu kullanmaktır:
kubectl scale deployment hello --replicas=5 Not: Tüm yeni kapsüllerin başlatılması birkaç dakika kadar sürebilir.

Dağıtım güncellendikten sonra Kubernetes, ilişkili ReplicaSet'i otomatik olarak günceller ve 5 kapsüle ulaşana kadar yeni kapsül başlatır.

  1. 5 hello kapsülüne ulaşıp ulaşmadığınızı aşağıdaki komutla kontrol edin:
kubectl get pods | grep hello- | wc -l
  1. Şimdi de uygulamayı ölçeklendirin:
kubectl scale deployment hello --replicas=3
  1. Kapsül sayınızın doğruluğunu tekrar kontrol edin:
kubectl get pods | grep hello- | wc -l

Kubernetes dağıtımlarını ve kapsül gruplarını sayıp ölçeklendirmeyi öğrendiniz.

3. görev: Periyodik güncelleme

Dağıtımlar, görüntülerin sürüm güncellemelerini yapmak için periyodik güncelleme mekanizmasından yararlanır. Dağıtım yeni sürüme güncellendiğinde yeni bir ReplicaSet oluşturur ve yeni ReplicaSet'teki replika sayısını yavaşça artırırken eski ReplicaSet'teki replika sayısını da azaltır.

Replika grupları arasında dağıtım diyagramı

Periyodik güncellemeyi tetikleme

  1. Dağıtımınızı güncellemek için aşağıdaki komutu çalıştırın:
kubectl edit deployment hello
  1. Dağıtımın container bölümündeki image kodunu aşağıdaki şekilde değiştirin:
... containers: image: kelseyhightower/hello:2.0.0 ...
  1. Kaydedin ve çıkın.

Güncellenmiş dağıtım, değişiklikleri kaydedip düzenleyiciden çıktığınızda kümenize kaydedilir ve Kubernetes periyodik güncelleme işlemine başlar.

  1. Kubernetes'in oluşturduğu yeni ReplicaSet'i inceleyin:
kubectl get replicaset
  1. Kullanıma sunma geçmişinde yeni bir giriş olduğunu görebilirsiniz:
kubectl rollout history deployment/hello

Periyodik güncellemeyi duraklatma

Kullanıma sunma esnasında herhangi bir sorun fark ederseniz güncellemeyi duraklatabilirsiniz.

  1. Aşağıdaki komutu çalıştırın:
kubectl rollout pause deployment/hello
  1. Mevcut kullanıma sunma durumunu kontrol edin:
kubectl rollout status deployment/hello
  1. Bunu doğrudan kapsüllerde de doğrulayabilirsiniz:
kubectl get pods -o jsonpath --template='{range .items[*]}{.metadata.name}{"\t"}{"\t"}{.spec.containers[0].image}{"\n"}{end}'

Periyodik güncellemeyi devam ettirme

Kullanıma sunmanın duraklatılması bazı kapsüllerin yeni sürümde, bazılarınınsa eski sürümde kaldığı anlamına gelir.

  1. resume komutunu kullanarak kullanıma sunmayı devam ettirin:
kubectl rollout resume deployment/hello
  1. Kullanıma sunma işlemi tamamlandığı zaman status komutunu çalıştırdığınızda şunu görürsünüz:
kubectl rollout status deployment/hello

Çıkış:

deployment "hello" successfully rolled out

Güncellemeyi geri alma

Yeni sürümünüzde bir hata tespit edildiğini varsayalım. Yeni sürümün hatalı olduğunu varsaydığımız için yeni kapsüllere bağlanan tüm kullanıcılar bu hatadan etkilenecek.

Uygulamanızı önceki sürüme geri çekerek sorunu araştırabilir ve düzeltilmiş sürümü yayınlayabilirsiniz.

  1. rollout komutunu kullanarak önceki sürüme dönün:
kubectl rollout undo deployment/hello
  1. Önceki sürüme dönüp dönmediğinizi görmek için geçmişi kontrol edin:
kubectl rollout history deployment/hello
  1. Son olarak, tüm kapsüllerin önceki sürüme döndüğünden emin olun:
kubectl get pods -o jsonpath --template='{range .items[*]}{.metadata.name}{"\t"}{"\t"}{.spec.containers[0].image}{"\n"}{end}'

Bravo. Kubernetes dağıtımlarında periyodik güncelleme yapmayı ve uygulamanızı kullanıma kapatmadan güncellemeyi öğrendiniz.

4. görev: Canary dağıtımları

Yeni bir dağıtımı, kullanıcılarınızın bir alt kümesiyle üretim aşamasında test etmek istiyorsanız canary dağıtımı kullanın. Canary dağıtımı, kullanıma sunacağınız yenilikleri kullanıcılarınızın küçük bir kısmıyla paylaşarak riskleri azaltmanıza yardımcı olur.

Canary dağıtımı oluşturma

Canary dağıtımı, yeni sürümünüzün yer aldığı ayrı bir dağıtımdan ve hem normal/stabil dağıtımınızı hem canary dağıtımınızı hedefleyen bir hizmetten oluşur.

Canary dağıtımı diyagramı

  1. İlk olarak, yeni sürüm için yeni bir canary dağıtımı oluşturun:
cat deployments/hello-canary.yaml

Çıkış:

apiVersion: apps/v1 kind: Deployment metadata: name: hello-canary spec: replicas: 1 selector: matchLabels: app: hello template: metadata: labels: app: hello track: canary # Use ver 2.0.0 so it matches version on service selector version: 2.0.0 spec: containers: - name: hello image: kelseyhightower/hello:2.0.0 ports: - name: http containerPort: 80 - name: health containerPort: 81 ...
  1. Şimdi de canary dağıtımını oluşturun:
kubectl create -f deployments/hello-canary.yaml
  1. Canary dağıtımı oluşturulduktan sonra, hello ve hello-canary adlarında iki dağıtımınızın olması gerekir. Aşağıdaki kubectl komutunu çalıştırarak kontrol edin:
kubectl get deployments

hello hizmetinde app:hello seçicisi kullanılır. Böylece, hem üretim hem canary dağıtımlarındaki kapsül sayısına göre eşitleme yapılır. Ancak canary dağıtımında daha az kapsül olduğu için daha az kullanıcıya gösterilir.

Canary dağıtımını doğrulama

  1. İsteğin sunduğu hello sürümünü doğrulayabilirsiniz:
curl -ks https://`kubectl get svc frontend -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"`/version
  1. Bu komutu birkaç kez çalıştırın. Bazı isteklerin hello 1.0.0 tarafından, isteklerin küçük bir kısmının (1/4 = %25) ise hello 2.0.0 tarafından sunulduğunu göreceksiniz.

Tamamlanan görevi test etme

Laboratuvardaki ilerleme durumunuzu kontrol etmek için İlerleme durumumu kontrol et'i tıklayın. Canary dağıtımını başarıyla oluşturduğunuzda bir değerlendirme puanı göreceksiniz.

Canary Dağıtımı

Üretimde canary dağıtımı: Oturum benzeşimi

Bu laboratuvarda, Nginx hizmetine gönderilen her bir isteğin canary dağıtımı tarafından sunulması mümkündür. Peki, bir kullanıcı için canary dağıtımı kullanılmamasını istiyorsanız ne yapabilirsiniz? Örneğin, uygulamanızın arayüzünü değiştirdiniz ve kullanıcıların aklını karıştırmak istemiyorsunuz. Böyle bir durumda kullanıcının bir dağıtıma veya diğerine "bağlı" kalmasını istersiniz.

Oturum benzeşimli bir hizmet oluşturarak bunu yapabilirsiniz. Bu sayede, bir kullanıcıya her zaman aynı sürüm sunulur. Aşağıdaki örnekte hizmet her zamankiyle aynı olsa da sessionAffinity alanı eklendi ve ClientIP olarak ayarlandı. Aynı IP adresine sahip olan tüm müşterilerin istekleri, hello uygulamasının aynı sürümüne gönderilir.

kind: Service apiVersion: v1 metadata: name: "hello" spec: sessionAffinity: ClientIP selector: app: "hello" ports: - protocol: "TCP" port: 80 targetPort: 80

Bunu test etmek için ortamı ayarlamak zor olduğundan burada test etmeniz gerekmez. Yine de üretimdeki canary dağıtımlarında sessionAffinity komutunu kullanmanız önerilir.

5. görev: Mavi-yeşil dağıtımlar

Periyodik güncellemeler uygulamanızı daha az ek yükle, performs düşüşüyle ve kapalı kalma süresiyle kademeli olarak dağıtmanıza olanak tanır. Yük dengeleyicileri, sadece yeni sürüm tam olarak dağıtıldıktan sonra yeni sürüme işaret edecek şekilde düzenlemenin avantajları vardır. Bu durumda tercihiniz, mavi-yeşil dağıtımdan yana olabilir.

Kubernetes; biri eski "mavi" sürüm, diğeri yeni "yeşil" sürüm için olmak üzere iki ayrı dağıtım oluşturur. "Mavi" sürüm için mevcut hello dağıtımınızı kullanın. Dağıtımlara, yönlendirici olarak çalışan bir hizmet aracılığıyla erişilecektir. Yeni "yeşil" sürüm çalışmaya başladığında hizmeti güncelleyerek söz konusu sürüme geçebilirsiniz.

Mavi-yeşil dağıtım diyagramı

Not: Mavi-yeşil dağıtımların en büyük dezavantajı, uygulamanızı barındırmak için kümenizde olması gereken kaynakların en az iki katına sahip olmanız gerekmesidir. Uygulamanın iki sürümünü birden dağıtmadan önce kümenizde yeterli kaynak olduğundan emin olun.

Hizmet

Mevcut hello hizmetini kullanın ancak seçicisi app:hello, version: 1.0.0 olacak şekilde güncelleyin. Seçici, mevcut "mavi" dağıtımı eşler. Ancak farklı bir sürüm kullanacağı için "yeşil" dağıtımı eşlemez.

  • İlk olarak hizmeti güncelleyin:
kubectl apply -f services/hello-blue.yaml Not: Otomatik yama yapıldığı için resource service/hello is missing uyarısını görmezden gelebilirsiniz.

Mavi-yeşil dağıtımı kullanarak güncelleme yapma

Mavi-yeşil dağıtım stilini desteklemek üzere yeni sürüm için yeni bir "yeşil" dağıtım oluşturmanız gerekir. Yeşil dağıtım sürüm etiketini ve görüntü yolunu günceller.

apiVersion: apps/v1 kind: Deployment metadata: name: hello-green spec: replicas: 3 selector: matchLabels: app: hello template: metadata: labels: app: hello track: stable version: 2.0.0 spec: containers: - name: hello image: kelseyhightower/hello:2.0.0 ports: - name: http containerPort: 80 - name: health containerPort: 81 resources: limits: cpu: 0.2 memory: 10Mi livenessProbe: httpGet: path: /healthz port: 81 scheme: HTTP initialDelaySeconds: 5 periodSeconds: 15 timeoutSeconds: 5 readinessProbe: httpGet: path: /readiness port: 81 scheme: HTTP initialDelaySeconds: 5 timeoutSeconds: 1
  1. Yeşil dağıtımı oluşturun:
kubectl create -f deployments/hello-green.yaml
  1. Yeşil dağıtımı oluşturup çalıştırdıktan sonra, mevcut 1.0.0 sürümünün kullanılıp kullanılmadığını doğrulayın:
curl -ks https://`kubectl get svc frontend -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"`/version
  1. Yeni sürüme işaret etmek için hizmeti güncelleyin:
kubectl apply -f services/hello-green.yaml
  1. Hizmet güncellendiğinde "yeşil" dağıtım hemen kullanıma girer. Yeni sürümün her durumda kullanıldığını doğrulamak için aşağıdaki komutu çalıştırın:
curl -ks https://`kubectl get svc frontend -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"`/version

Mavi-yeşil dağıtımı geri alma

Gerektiğinde eski sürüme aynı şekilde dönebilirsiniz.

  1. "Mavi" dağıtım çalışırken hizmeti eski sürüme güncellemeniz yeterlidir:
kubectl apply -f services/hello-blue.yaml
  1. Geri alma işlemi, hizmet güncellenince başarıyla tamamlanır. Doğru sürümün kullanılıp kullanılmadığını tekrar kontrol edin:
curl -ks https://`kubectl get svc frontend -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"`/version

Başardınız. Mavi-yeşil dağıtım oluşturmayı ve aynı anda sürüm değişikliği yapmanız gereken uygulamalarda güncellemeleri dağıtmayı öğrendiniz.

Tebrikler!

Kubernetes kullanarak dağıtımları yönetme alıştırması yaptığınız bu uygulamalı laboratuvarı tamamladınız. Bu laboratuvarda, kubectl komut satırı aracını ve dağıtımlarınızı başlatma, güncelleme ve ölçeklendirme işlemlerinde kullanılan YAML dosyalarının farklı dağıtım yapılandırma stillerini deneme fırsatınız oldu. Bu temel alıştırmalar sayesinde edindiğiniz becerileri kendi DevOps uygulamalarınızda kullanabilirsiniz.

Sonraki adımlar / Daha fazla bilgi

Google Cloud eğitimi ve sertifikası

...Google Cloud teknolojilerinden en iyi şekilde yararlanmanıza yardımcı olur. Derslerimizde teknik becerilere odaklanırken en iyi uygulamalara da yer veriyoruz. Gerekli yetkinlik seviyesine hızlıca ulaşmanız ve öğrenim maceranızı sürdürebilmeniz için sizlere yardımcı olmayı amaçlıyoruz. Temel kavramlardan ileri seviyeye kadar farklı eğitim programlarımız mevcut. Ayrıca, yoğun gündeminize uyması için talep üzerine sağlanan, canlı ve sanal eğitim alternatiflerimiz de var. Sertifikasyonlar ise Google Cloud teknolojilerindeki becerilerinizi ve uzmanlığınızı doğrulamanıza ve kanıtlamanıza yardımcı oluyor.

Kılavuzun son güncellenme tarihi: 26 Ocak 2024

Laboratuvarın son test edilme tarihi: 14 Ağustos 2023

Telif Hakkı 2024 Google LLC Tüm hakları saklıdır. Google ve Google logosu, Google LLC şirketinin ticari markalarıdır. Diğer tüm şirket ve ürün adları ilişkili oldukları şirketlerin ticari markaları olabilir.