Alıştırma - Kubernetes'e mikro hizmet kapsayıcısı dağıtma

Tamamlandı

Kubernetes kapsayıcıları sizin için çalıştırır. Kubernetes'in bir YAML dosyası aracılığıyla ne gerçekleştirmesini istediğinizi açıklarsınız. Bu alıştırmada, Kubernetes'te arka uç hizmetini dağıtıp çalıştırabilmeniz için dosyayı oluşturma adımları gösterilir.

Önemli

Devam etmeden önce bir Kubernetes uygulamasının yüklü olduğundan emin olmanız gerekir. Kod alanında çalışan k3d uygulamasını kullanacağız. Bu uygulamayı yükleyerek laboratuvarı başlatacağız.

Kubernetes araçlarını ve uygulamasını yükleme

Hem kubectl aracını hem de k3d Kubernetes uygulamasını yüklemeliyiz:

  1. Kod alanında, TERMINAL sekmesine geçin ve önkoşulları yüklemek için şu komutları çalıştırın:

    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl
    
  2. Ardından Kubernetes paket depolarının imzalama anahtarını indirmek için şu komutları çalıştırın:

    sudo mkdir /etc/apt/keyrings
    curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
    

    Dizinin zaten var olduğunu belirten bir hata alırsanız, komutu ayrı olarak çalıştırın curl .

  3. Kubernetes deposunu apt yapılandırmanıza ekleyin:

    echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
    
  4. Şimdi kubectl aracını yükleyebilirsiniz:

    sudo apt-get update
    sudo apt-get install -y kubectl
    
  5. Son olarak Kubernetes'in k3d uygulamasını yükleyin ve bir küme oluşturun:

    curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
    k3d cluster create devcluster --config k3d.yml
    

Arka uç hizmeti için dağıtım dosyası oluşturma

YaML dosyasıyla Kubernetes'e kapsayıcı dağıtımlarını yönetme dosyası oluşturabilirsiniz. Şimdi arka uç hizmetini dağıtmak için bir dosya oluşturalım.

  1. backend-deploy.yml adlı kod alanının donet-kubernetes klasöründe yeni bir dosya oluşturun.

  2. Aşağıdaki metni dosyaya kopyalayın ve kaydedin.

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
        name: productsbackend
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            app: productsbackend
        spec:
          containers:
          - name: productsbackend
            image: [YOUR DOCKER USER NAME]/productservice:latest
            ports:
            - containerPort: 80
            env:
            - name: ASPNETCORE_URLS
              value: http://*:80
      selector:
        matchLabels:
          app: productsbackend
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: productsbackend
    spec:
      type: NodePort
      ports:
      - port: 80
        targetPort: 80
        nodePort: 32001
      selector:
        app: productsbackend
    
  3. Yer tutucuyu [YOUR DOCKER USER NAME] gerçek Docker kullanıcı adınız ile değiştirin.

Bu dosya birkaç şey yapar.

İlk bölüm, Kapsayıcının Kubernetes'e dağıtılması için bir dağıtım belirtimi tanımlar. Kapsayıcı görüntüsünün nerede bulunacağı, kapsayıcıda hangi bağlantı noktalarının açıldığı ve bazı ortam değişkenlerinin ayarlandığı tek bir çoğaltma belirtir. Bu ilk bölüm ayrıca kapsayıcıya ve belirtimlere başvurmak için kullanılabilecek etiketleri ve adları tanımlar.

İkinci bölüm, kapsayıcının Kubernetes NodePort hizmeti olarak çalıştığını tanımlar. Bu modülde NodePorts'un tüm ayrıntılarını anlamanız gerekmez. Ancak, hizmeti kümenin dışından test edebilmeniz için bu hizmet türünün bir dış IP adresi ortaya çıkardığını bilmeniz gerekir.

Arka uç mikro hizmetini dağıtma ve çalıştırma

Şimdi mikro hizmeti dağıtıp çalıştıralım.

  1. TERMINAL sekmesinde aşağıdaki komutu çalıştırın:

    kubectl apply -f backend-deploy.yml
    

    Bu komut Kubernetes'e oluşturduğumuz dosyayı çalıştırmasını söyler. Docker Hub'dan görüntüyü indirir ve kapsayıcıyı oluşturur.

  2. Komut kubectl apply hızlı bir şekilde döndürülüyor. Ancak kapsayıcı oluşturma işlemi biraz zaman alabilir. İlerleme durumunu görüntülemek için aşağıdaki kodu kullanın.

    kubectl get pods
    

    Sonuçta elde edilen çıktıda, productsbackend içeren bir satırınız ve ardından NAME sütununun altında rastgele karakterler içeren bir dizeniz vardır. Her şey hazır olduğunda, READY sütununun altında 1/1 ve STATUS sütununun altında Çalışıyor bulunur.

  3. Hizmeti test etmek için PORTS sekmesine geçin ve Arka Uç bağlantı noktasının yerel adresinin yakınında yer alan dünya simgesini seçin. Tarayıcı bu adreste yeni bir sekme açar.

  4. Bazı ürünleri sorgulamak için adresi /api/product ile ekleyin ve Enter tuşuna basın. Bazı ürün bilgilerinin JSON biçiminde listelendiğini görmeniz gerekir.

    [
        {
            "id": 1,
            "name": "Solar Powered Flashlight",
            "description": "A fantastic product for outdoor enthusiasts",
            "price": 19.99,
            "imageUrl": "product1.png"
        },
        {
            "id": 2,
            "name": "Hiking Poles",
            "description": "Ideal for camping and hiking trips",
            "price": 24.99,
            "imageUrl": "product2.png"
        },
        {
            "id": 3,
            "name": "Outdoor Rain Jacket",
            "description": "This product will keep you warm and dry in all weathers",
            "price": 49.99,
            "imageUrl": "product3.png"
        },
        ...
    

Dağıtım dosyası oluşturma ve ön uç hizmetini çalıştırma

Arka uç hizmeti gibi ön uç için de bir dağıtım dosyası gerekir.

  1. donet-kubernetes klasöründe frontend-deploy.yml adlı yeni bir dosya oluşturun

  2. Aşağıdaki kodu dosyaya yapıştırın:

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: storefrontend
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            app: storefrontend
        spec:
          containers:
          - name: storefrontend
            image: [YOUR DOCKER USER NAME]/storeimage:latest
            ports:
            - containerPort: 80
            env:
            - name: ASPNETCORE_URLS
              value: http://*:80
            - name: ProductEndpoint
              value: http://productsbackend
      selector:
        matchLabels:
          app: storefrontend
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: storefrontend
    spec:
      type: NodePort
      ports:
      - port: 80
        targetPort: 80
        nodePort: 32000
      selector:
        app: storefrontend
    
  3. Yer tutucuyu [YOUR DOCKER USERNAME] gerçek Docker kullanıcı adınız ile değiştirin.

    Bu dosyanın arka uç mikro hizmeti için oluşturduğumuz dosyaya benzer olduğuna dikkat edin. İki fark vardır:

    • Dağıtımın spec.template.spec.containers.image değeri altında çalıştırılacak farklı bir kapsayıcı belirtiyoruz.
    • bölümünün altında spec.template.spec.containers.env yeni bir ortam değişkeni vardır. Storefrontend uygulamasındaki kod arka ucu çağırır, ancak tam etki alanı adı (FQDN) belirtmediğimiz için arka uç mikro hizmetinin IP adresini bilmiyoruz, düğümü Deploymentaltında metadata.name belirttiğimiz adı kullanırız. Kubernetes gerisini halleder.
  4. Aşağıdaki komutla kapsayıcıyı Kubernetes'e dağıtın:

    kubectl apply -f frontend-deploy.yml
    

    Dağıtımın durumunu görmek için tekrar kullanabilirsiniz kubectl get pods . Storefrontend satırı DURUM sütununun altında Çalışıyor olarak görüntülendiğinde, her şey hazır duruma gelir.

  5. Ön uç hizmetini test etmek için PORTS sekmesine geçin, ardından Ön Uç bağlantı noktasının yerel adresinin sağındaki dünya simgesini seçin. Tarayıcı giriş sayfasını görüntüler.

  6. Ürünler'i seçin. Katalogda Contoso'nun ürünleri gösterilir.

    A screenshot of the eSHopLite products page.

Bu alıştırmada kapsayıcıların Kubernetes içinde tam olarak nasıl çalışmasını istediğinizi açıklayan bir dağıtım dosyası oluşturdunuz. Ardından Kubernetes'e görüntüyü Docker Hub'dan indirmesini ve kapsayıcıları başlatmasını ayarladınız.