Alıştırma - Azure Kubernetes Service kümenize uygulama dağıtma
Bu alıştırmada, şirketinizin web sitesini Azure Kubernetes Service'e (AKS) test uygulaması olarak dağıtın. Web sitesi HTML, CSS ve JavaScript temel teknoloji yığınına sahip statik bir web sitesidir. Diğer hizmetler kadar çok istek almaz ve bize dağıtım seçeneklerini test etmek için güvenli bir yol sağlar.
Dekont
Kaynak kodunu daha fazla kullanıma sunmak istiyorsanız, web uygulamasının kodu bu GitHub deposunda sağlanır. Ayrıca bu örnek uygulama yalnızca Linux düğüm havuzuna dağıtılacaktır.
Önemli
Bu alıştırmayı çalıştırmak için kendi Azure aboneliğinizin olması gerekir ve ücret ödeyebilirsiniz. Mevcut bir Azure aboneliğiniz yoksa başlamadan önce ücretsiz hesap oluşturun.
Dağıtım bildirimi oluşturma
Uygulamanızı dağıtmak için bir dağıtım bildirimi dosyası oluşturursunuz. Bildirim dosyası dağıtmak istediğiniz kaynağın türünü ve iş yüküyle ilişkili tüm ayrıntıları tanımlamanıza olanak sağlar.
Kubernetes kapsayıcıları podlar olarak adlandırılan ve zeka içermeyen mantıksal yapılarda gruplandırır. Dağıtımlar, uygulamanızı oluşturmak için eksik olan zekayı ekler. Şimdi bir dağıtım dosyası oluşturalım.
Azure Cloud Shell'de oturum açın.
Cloud Shell'de tümleşik düzenleyiciyi kullanarak Kubernetes dağıtımı için
deployment.yaml
adlı bir bildirim dosyası oluşturun.touch deployment.yaml
Cloud Shell’de
code .
yazarak tümleşik düzenleyiciyi açındeployment.yaml
dosyasını açın ve YAML’nin aşağıdaki kod bölümünü ekleyin.# deployment.yaml apiVersion: apps/v1 # The API resource where this workload resides kind: Deployment # The kind of workload we're creating metadata: name: contoso-website # This will be the name of the deployment
Bu kodda Kubernetes’e oluşturmakta olduğunuz bildirimin
apiVersion
vekind
özelliklerini belirten ilk iki anahtarı eklediniz.name
dağıtımın adıdır. kullanırken dağıtım bilgilerini tanımlamak ve sorgulamak için bunu kullanınkubectl
.Bahşiş
Resmi Kubernetes bilgilerini ziyaret ederek
apiVersion
hakkında daha fazla bilgi bulabilir ve bu anahtara hangi değerlerin ekleneceğini öğrenebilirsiniz. Bağlantıyı bu modülün sonunda bulabilirsiniz.Dağıtım, bir podu sarmalar. Bildirim dosyasının içinde pob bilgilerini tanımlamak için bir şablon tanımı kullanın. Şablon bildirim dosyasında, dağıtım belirtimi bölümünün altına yerleştirilir.
deployment.yaml
dosyasını aşağıdaki YAML ile eşleşecek şekilde güncelleştirin.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website spec: template: # This is the template of the pod inside the deployment metadata: # Metadata for the pod labels: app: contoso-website
Podlar dağıtımlarla aynı adları kullanmaz. Podun adı, dağıtımın adının sonuna eklenen rastgele bir kimlikle bir karışımıdır.
labels
anahtarının kullanımına dikkat edin. Dağıtımların podları bulup gruplandırabilmesi içinlabels
anahtarını eklersiniz.Pod, bir veya birden fazla kapsayıcıyı sarmalar. Tüm podların, söz konusu podun içinde kapsayıcıları tanımlamanıza olanak tanıyan bir belirtim bölümü vardır.
deployment.yaml
dosyasını aşağıdaki YAML ile eşleşecek şekilde güncelleştirin.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website spec: template: # This is the template of the pod inside the deployment metadata: labels: app: contoso-website spec: containers: # Here we define all containers - name: contoso-website
Bir podun bir veya birden fazla kapsayıcısı olabileceği için
containers
anahtarı bir kapsayıcı belirtimleri dizisidir. Belirtim, kapsayıcı hakkında birimage
,name
,resources
,ports
ve diğer önemli bilgileri tanımlar.Çalışan tüm podlar adını
contoso-website-<UUID>
izler; burada UUID, tüm kaynakları benzersiz olarak tanımlamak için oluşturulan bir kimliktir.Uygulamanın kümeden kullanmasına izin verilen en düşük ve en fazla kaynak miktarını tanımlamak iyi bir uygulamadır. Bu bilgileri belirtmek için
resources
anahtarını kullanırsınız.deployment.yaml
dosyasını aşağıdaki YAML ile eşleşecek şekilde güncelleştirin.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website spec: template: # This is the template of the pod inside the deployment metadata: labels: app: contoso-website spec: containers: - image: mcr.microsoft.com/mslearn/samples/contoso-website name: contoso-website resources: requests: # Minimum amount of resources requested cpu: 100m memory: 128Mi limits: # Maximum amount of resources requested cpu: 250m memory: 256Mi
Kaynak bölümünün bir istek olarak en düşük kaynak miktarını ve bir sınır olarak en yüksek kaynak miktarını belirtmenize nasıl olanak tanıdığına dikkat edin.
Son adım, bu kapsayıcının anahtar aracılığıyla harici olarak kullanıma açık olduğu bağlantı noktalarını tanımlamaktır
ports
.ports
anahtarı bir nesne dizisidir; diğer bir deyişle poddaki kapsayıcı birden çok adla birden çok bağlantı noktasını kullanıma sunabilir.deployment.yaml
dosyasını aşağıdaki YAML ile eşleşecek şekilde güncelleştirin.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website spec: template: # This is the template of the pod inside the deployment metadata: labels: app: contoso-website spec: nodeSelector: kubernetes.io/os: linux containers: - image: mcr.microsoft.com/mslearn/samples/contoso-website name: contoso-website resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 80 # This container exposes port 80 name: http # We named that port "http" so we can refer to it later
name
anahtarını kullanarak bağlantı noktasını nasıl adlandırdığınıza dikkat edin. Bağlantı noktalarının adlandırılması sayesinde, kullanıma sunulan bağlantı noktasını değiştirirken söz konusu bağlantı noktasına başvuran dosyaları değiştirmeniz gerekmez.Son olarak, dağıtımın yönettiği iş yüklerini tanımlamak için bir seçici bölümü ekleyin.
selector
anahtarı bildirim dosyasının dağıtım belirtimi bölümüne yerleştirilir. Dağıtım tarafından yönetilen tüm podların etiketlerini listelemek içinmatchLabels
anahtarını kullanın.deployment.yaml
dosyasını aşağıdaki YAML ile eşleşecek şekilde güncelleştirin.# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website spec: selector: # Define the wrapping strategy matchLabels: # Match all pods with the defined labels app: contoso-website # Labels follow the `name: value` template template: # This is the template of the pod inside the deployment metadata: labels: app: contoso-website spec: nodeSelector: kubernetes.io/os: linux containers: - image: mcr.microsoft.com/mslearn/samples/contoso-website name: contoso-website resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 80 name: http
Dekont
Birden çok düğüm havuzu (Linux ve Windows) içeren bir AKS kümesinde, daha önce listelenen dağıtım bildirim dosyası, AKS kümenize örnek uygulamanın podunu Linux kapsayıcılarını çalıştırabilen bir düğümde çalıştırmasını bildirmek için de öğesini tanımlar
nodeSelector
.Linux düğümleri Windows kapsayıcılarını çalıştıramaz ve tam tersi de geçerlidir.
Bildirim dosyasını kaydedin ve düzenleyiciyi kapatın.
Bildirimi uygulama
Dağıtım bildirimini kümenize göndermek için Cloud Shell’de
kubectl apply
komutunu çalıştırın.kubectl apply -f ./deployment.yaml
Komutun sonucunda aşağıdaki örneğe benzer bir çıkış elde edilmelidir.
deployment.apps/contoso-website created
Dağıtımın başarılı olup olmadığını denetlemek için
kubectl get deploy
komutunu çalıştırın.kubectl get deploy contoso-website
Komutun sonucunda aşağıdaki örneğe benzer bir tablo çıkışı elde edilmelidir.
NAME READY UP-TO-DATE AVAILABLE AGE contoso-website 0/1 1 0 16s
Podun çalışıp çalışmadığını denetlemek için
kubectl get pods
komutunu çalıştırın.kubectl get pods
Komutun sonucunda aşağıdaki örneğe benzer bir tablo çıkışı elde edilmelidir.
NAME READY STATUS RESTARTS AGE contoso-website-7c58c5f699-r79mv 1/1 Running 0 63s