Alıştırma - Azure Kubernetes Service kümenize uygulama dağıtma

Tamamlandı

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.

  1. Azure Cloud Shell'de oturum açın.

  2. 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
    
  3. Cloud Shell’de code . yazarak tümleşik düzenleyiciyi açın

  4. deployment.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 ve kind ö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ın kubectl.

    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.

  5. 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çin labels anahtarını eklersiniz.

  6. 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 bir image, name, resources, portsve 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.

  7. 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.

  8. 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.

  9. 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çin matchLabels 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.

  10. Bildirim dosyasını kaydedin ve düzenleyiciyi kapatın.

Bildirimi uygulama

  1. 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
    
  2. 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
    
  3. 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