Azure SQL Veritabanı için Kubernetes uygulaması geliştirme

Şunlar için geçerlidir:Azure SQL Veritabanı

Bu öğreticide Python, Docker Kapsayıcıları, Kubernetes ve Azure SQL Veritabanı kullanarak modern bir uygulama geliştirmeyi öğreneceksiniz.

Modern uygulama geliştirmenin çeşitli zorlukları vardır. Çeşitli rakip standartlardan veri depolama ve işleme aracılığıyla bir ön uç "yığını" seçmekten, en yüksek güvenlik ve performans düzeylerini sağlamaya kadar, geliştiricilerin uygulamanın birden çok platformda ölçeklendirildiğinden ve iyi performans gösterdiğinden ve desteklenebilir olduğundan emin olması gerekir. Bu son gereksinim için, uygulamayı Docker gibi Kapsayıcı teknolojilerine paketlemek ve Kubernetes platformuna birden çok Kapsayıcı dağıtmak artık uygulama geliştirmede de önemli bir rol üstlenir.

Bu örnekte Python, Docker Kapsayıcıları ve Kubernetes'i kullanmayı keşfedeceğiz. Bunların tümü Microsoft Azure platformunda çalışır. Kubernetes'i kullanmak, uygulamanızın sorunsuz ve tutarlı bir şekilde dağıtılmasını sağlamak için yerel ortamları ve hatta diğer bulutları kullanma esnekliğine sahip olduğunuz ve daha da yüksek dayanıklılık için çoklu bulut dağıtımlarına olanak sağladığınız anlamına gelir. Veri depolama ve işleme için hizmet tabanlı, ölçeklenebilir, yüksek oranda dayanıklı ve güvenli bir ortam için de Microsoft Azure SQL Veritabanı kullanacağız. Aslında çoğu durumda, diğer uygulamalar genellikle zaten Microsoft Azure SQL Veritabanı kullanır ve bu örnek uygulama bu verileri daha fazla kullanmak ve zenginleştirmek için kullanılabilir.

Bu örnek kapsamı oldukça kapsamlıdır, ancak süreci göstermek için en basit uygulamayı, veritabanını ve dağıtımı kullanır. Döndürülen veriler için en son teknolojileri kullanmak da dahil olmak üzere bu örneği çok daha sağlam olacak şekilde uyarlayabilirsiniz. Diğer uygulamalar için bir desen oluşturmak için kullanışlı bir öğrenme aracıdır.

Python, Docker Kapsayıcıları, Kubernetes ve AdventureWorksLT örnek veritabanını pratik bir örnekte kullanma

AdventureWorks (kurgusal) şirketi Satış ve Pazarlama, Ürünler, Müşteriler ve Üretim hakkındaki verileri depolayan bir veritabanı kullanır. Ayrıca ürün adı, kategori, fiyat ve kısa bir açıklama gibi ürünlerle ilgili bilgileri birleştiren görünümler ve saklı yordamlar içerir.

AdventureWorks Geliştirme ekibi, veritabanındaki bir görünümden AdventureWorksLT veri döndüren bir kavram kanıtı (PoC) oluşturmak ve bunları REST API olarak kullanılabilir hale getirmek istiyor. Geliştirme ekibi, bu PoC'yi kullanarak Satış ekibi için daha ölçeklenebilir ve çoklu buluta hazır bir uygulama oluşturacaktır. Dağıtımın tüm yönleri için Microsoft Azure platformunu seçtiler. PoC aşağıdaki öğeleri kullanıyor:

  • Başsız web dağıtımı için Flask paketini kullanan bir Python uygulaması.
  • Kod ve ortam yalıtımı için Docker Kapsayıcıları, şirketin tamamının uygulama Kapsayıcılarını gelecekteki projelerde yeniden kullanabilmesi için özel bir kayıt defterinde depolanır ve zaman ve para tasarrufu sağlar.
  • Dağıtım ve ölçeklendirme kolaylığı ve platform kilitlenmesini önlemek için Kubernetes.
  • İlişkisel veri depolama ve işlemeye ek olarak en yüksek güvenlik düzeyinde boyut, performans, ölçek, otomatik yönetim ve yedekleme seçimi için Microsoft Azure SQL Veritabanı.

Bu makalede, kavram kanıtı projesinin tamamını oluşturma sürecini açıklayacağız. Uygulamayı oluşturmaya yönelik genel adımlar şunlardır:

  1. Önkoşulları ayarlama
  2. Uygulamayı oluşturma
  3. Uygulamayı dağıtmak ve test etmek için docker kapsayıcısı oluşturma
  4. Azure Container Service (ACS) Kayıt Defteri oluşturma ve Kapsayıcıyı ACS Kayıt Defteri'ne yükleme
  5. Azure Kubernetes Service (AKS) ortamını oluşturma
  6. UYGULAMA kapsayıcısını ACS Kayıt Defteri'nden AKS'ye dağıtma
  7. Uygulamayı test edin
  8. Temizleme

Önkoşullar

Bu makale boyunca, değiştirmeniz gereken birkaç değer vardır. Her adım için bu değerleri tutarlı bir şekilde değiştirdiğinizden emin olun. Kavram kanıtı projesinde çalışırken doğru değerleri ayarlamak için bir metin düzenleyicisi açıp bu değerleri içinde bırakmak isteyebilirsiniz:

  • ReplaceWith_AzureSubscriptionName: Bu değeri, sahip olduğunuz Azure abonelik adının adıyla değiştirin.
  • ReplaceWith_PoCResourceGroupName: Bu değeri oluşturmak istediğiniz kaynak grubunun adıyla değiştirin.
  • ReplaceWith_AzureSQLDBServerName: Bu değeri Azure portalını kullanarak oluşturduğunuz Azure SQL Veritabanı mantıksal sunucunun adıyla değiştirin.
  • ReplaceWith_AzureSQLDBSQLServerLoginName: Bu değeri Azure portalında oluşturduğunuz SQL Server kullanıcı adı değeriyle değiştirin.
  • ReplaceWith_AzureSQLDBSQLServerLoginPassword: Bu değeri Azure portalında oluşturduğunuz SQL Server kullanıcı parolasının değeriyle değiştirin.
  • ReplaceWith_AzureSQLDBDatabaseName: Bu değeri Azure portalını kullanarak oluşturduğunuz Azure SQL Veritabanı adıyla değiştirin.
  • ReplaceWith_AzureContainerRegistryName: Bu değeri oluşturmak istediğiniz Azure Container Registry adıyla değiştirin.
  • ReplaceWith_AzureKubernetesServiceName: Bu değeri oluşturmak istediğiniz Azure Kubernetes Service adıyla değiştirin.

AdventureWorks'deki geliştiriciler geliştirme için Windows, Linux ve Apple sistemlerinin bir karışımını kullandığından ortam olarak Visual Studio Code'u ve kaynak denetimi için git'i kullanırlar ve her ikisi de platformlar arası çalışır.

PoC için ekip aşağıdaki önkoşulları gerektirir:

  1. Python, pip ve paketler - Geliştirme ekibi bu web tabanlı uygulama için standart olarak Python programlama dilini seçer. Şu anda 3.9 sürümünü kullanıyorlar, ancak PoC gerekli paketlerini destekleyen tüm sürümler kabul edilebilir.

  2. Ekip, veritabanı erişimi için paketini kullanıyor pyodbc .

  3. Ekip, yapılandırma değişkenlerini denetlemek ve ayarlamak için paketini kullanıyor ConfigParser .

  4. Ekip, uygulama için bir web arabirimi için Flask paketini kullanıyor.

  5. Ardından ekip, söz dizimi ile az kolayca tanımlanan Azure CLI aracını yükledi. Bu platformlar arası araç, PoC'ye komut satırı ve betikli bir yaklaşım sağlar, böylece değişiklikler ve geliştirmeler yaparken adımları yineleyebilirler.

  6. Azure CLI ayarlandıktan sonra ekip, Azure aboneliğinde oturum açar ve PoC için kullandıkları abonelik adını ayarlar. Ardından Azure SQL Veritabanı sunucusunun ve veritabanının abonelik tarafından erişilebilir olmasını sağladılar:

    az login
    az account set --name "ReplaceWith_AzureSubscriptionName"
    az sql server list
    az sql db list ReplaceWith_AzureSQLDBDatabaseName 
    
  7. Microsoft Azure Kaynak Grubu, bir Azure çözümü için ilgili kaynakları barındıran mantıksal bir kapsayıcıdır. Genel olarak, aynı yaşam döngüsünü paylaşan kaynaklar aynı kaynak grubuna eklenir; böylece bunları grup olarak kolayca dağıtabilir, güncelleştirebilir ve silebilirsiniz. Kaynak grubu, kaynaklar hakkındaki meta verileri depolar ve kaynak grubu için bir konum belirtebilirsiniz.

    Kaynak grupları Azure portalı veya Azure CLI kullanılarak oluşturulabilir ve yönetilebilir. Ayrıca, bir uygulamanın ilgili kaynaklarını gruplandırmak ve bunları üretim ve üretim dışı gruplara ya da tercih ettiğiniz başka bir kuruluş yapısına bölmek için de kullanılabilir.

    Screenshot from the Azure portal showing how to search for and filter for Azure Resource groups.

    Aşağıdaki kod parçacığında, kaynak grubu oluşturmak için kullanılan komutu görebilirsiniz az . Örneğimizde Azure'ın eastusbölgesini kullanıyoruz.

    az group create --name ReplaceWith_PoCResourceGroupName --location eastus
    
  8. Geliştirme ekibi, SQL kimliği doğrulanmış oturum açma bilgilerini kullanarak örnek veritabanının yüklü olduğu bir Azure SQL Veritabanı AdventureWorksLT oluşturur.

    AdventureWorks, Microsoft SQL Server İlişkisel Veritabanı Yönetim Sistemi platformunda standartlaştırıldı ve Geliştirme ekibi yerel olarak yüklemek yerine veritabanı için yönetilen bir hizmet kullanmak istiyor. Azure SQL Veritabanı kullanmak, bu yönetilen hizmetin SQL Server altyapısını çalıştırdıkları her yerde tamamen kod uyumlu olmasını sağlar: şirket içi, Kapsayıcı, Linux veya Windows, hatta Nesnelerin İnterneti (IoT) ortamında.

    1. Oluşturma sırasında Azure Yönetim Portalı'nı kullanarak uygulamanın Güvenlik Duvarı'nı yerel geliştirme makinesine ayarladılar ve burada gördüğünüz varsayılanı değiştirerek Tüm Azure Hizmetlerine izin ver'i etkinleştirdiler ve bağlantı kimlik bilgilerini de aldılar.

      Screenshot from the Azure portal showing the Create SQL Database page. On the Networking tab, for Connectivity method, the Public endpoint option is selected. The Add current client IP Address option is Yes.

      Bu yaklaşımla veritabanına başka bir bölgeden, hatta farklı bir abonelikte erişilebilir.

    2. Ekip test için bir SQL kimliği doğrulanmış oturum açma bilgisi ayarladı, ancak bu kararı bir güvenlik gözden geçirmesinde yeniden değerlendirecek.

    3. Ekip aynı PoC kaynak grubunu kullanarak PoC için örnek AdventureWorksLT veritabanını kullandı. Endişelenmeyin, bu öğreticinin sonunda bu yeni PoC kaynak grubundaki tüm kaynakları temizleyeceğiz.

    4. Azure SQL Veritabanı dağıtmak için Azure portalını kullanabilirsiniz. Azure SQL Veritabanı oluştururken, Ek ayarlar sekmesindeki Mevcut verileri kullan seçeneği için Örnek'i seçin.

      Screenshot from the Azure portal showing the Create SQL Database page. In the Additional settings tab, for the Use existing data option, select Sample.

    5. Son olarak, yeni Azure SQL Veritabanı Etiketler sekmesinde Geliştirme ekibi bu Azure kaynağı için Sahip, ServiceClass veya WorkloadName gibi etiketler meta verileri sağladı.

Uygulamayı oluşturma

Ardından Geliştirme ekibi, Azure SQL Veritabanı bağlantısını açan ve ürünlerin listesini döndüren basit bir Python uygulaması oluşturdu. Bu kod daha karmaşık işlevlerle değiştirilecek ve uygulama çözümlerine yönelik sağlam, bildirim temelli bir yaklaşım için üretimdeki Kubernetes Podlarına dağıtılan birden fazla uygulama içerebilir.

  1. Ekip, sunucu bağlantıları ve diğer bilgiler için değişkenleri tutmak için adlı .env basit bir metin dosyası oluşturdu. python-dotenv Kitaplığı kullanarak değişkenleri Python Code'dan ayırabilir. Bu, gizli dizileri ve diğer bilgileri kodun dışında tutmak için yaygın bir yaklaşımdır.

    SQL_SERVER_ENDPOINT = ReplaceWith_AzureSQLDBServerName
    SQL_SERVER_USERNAME = ReplaceWith_AzureSQLDBSQLServerLoginName
    SQL_SERVER_PASSWORD = ReplaceWith_AzureSQLDBSQLServerLoginPassword
    SQL_SERVER_DATABASE = ReplaceWith_AzureSQLDBDatabaseName
    

    Dikkat

    Netlik ve kolaylık sağlamak için bu uygulama Python'dan okunan bir yapılandırma dosyası kullanıyor. Kod kapsayıcıyla dağıtılacağından, bağlantı bilgileri içeriklerden türetilebilir. Güvenlik, bağlantılar ve gizli dizilerle çalışmanın çeşitli yöntemlerini dikkatle değerlendirmeli ve uygulamamız için kullanmanız gereken en iyi düzeyi ve mekanizmayı belirlemelisiniz. Uygulamanızın güvenli olduğundan emin olmak için her zaman en yüksek güvenlik düzeyini ve hatta birden çok düzeyi seçin. bağlantı dizesi ve benzeri gizli bilgilerle çalışmak için birden fazla seçeneğiniz vardır ve aşağıdaki listede bu seçeneklerden birkaçı gösterilir.

    Daha fazla bilgi için bkz. Azure SQL Veritabanı güvenlik.

  2. Ekip daha sonra PoC uygulamasını yazıp olarak adlandırmıştı app.py.

    Aşağıdaki betik şu adımları gerçekleştirir:

    1. Yapılandırma ve temel web arabirimleri için kitaplıkları ayarlayın.
    2. Dosyasından değişkenleri .env yükleyin.
    3. Flask-RESTful Uygulamasını oluşturun.
    4. Dosya değerlerini kullanarak Azure SQL Veritabanı bağlantı bilgilerine config.ini ulaşın.
    5. Dosya değerlerini kullanarak config.ini Azure SQL Veritabanı bağlantısı oluşturun.
    6. paketi kullanarak pyodbc Azure SQL Veritabanı Bağlan.
    7. Veritabanında çalıştırılacak SQL sorgusunu oluşturun.
    8. API'den verileri döndürmek için kullanılacak sınıfı oluşturun.
    9. API uç noktasını sınıfına Products ayarlayın.
    10. Son olarak, uygulamayı varsayılan Flask bağlantı noktası 5000'de başlatın.
    # Set up the libraries for the configuration and base web interfaces
    from dotenv import load_dotenv
    from flask import Flask
    from flask_restful import Resource, Api
    import pyodbc
    
    # Load the variables from the .env file
    load_dotenv()
    
    # Create the Flask-RESTful Application
    app = Flask(__name__)
    api = Api(app)
    
    # Get to Azure SQL Database connection information using the config.ini file values
    server_name = os.getenv('SQL_SERVER_ENDPOINT')
    database_name = os.getenv('SQL_SERVER_DATABASE')
    user_name = os.getenv('SQL_SERVER_USERNAME')
    password = os.getenv('SQL_SERVER_PASSWORD')
    
    # Create connection to Azure SQL Database using the config.ini file values
    ServerName = config.get('Connection', 'SQL_SERVER_ENDPOINT')
    DatabaseName = config.get('Connection', 'SQL_SERVER_DATABASE')
    UserName = config.get('Connection', 'SQL_SERVER_USERNAME')
    PasswordValue = config.get('Connection', 'SQL_SERVER_PASSWORD')
    
    # Connect to Azure SQL Database using the pyodbc package
    # Note: You may need to install the ODBC driver if it is not already there. You can find that at:
    # https://learn.microsoft.com/sql/connect/odbc/download-odbc-driver-for-sql-server
    connection = pyodbc.connect(f'Driver=ODBC Driver 17 for SQL Server;Server={ServerName};Database={DatabaseName};uid={UserName};pwd={PasswordValue}')
    
    # Create the SQL query to run against the database
    def query_db():
        cursor = connection.cursor()
        cursor.execute("SELECT TOP (10) [ProductID], [Name], [Description] FROM [SalesLT].[vProductAndDescription] WHERE Culture = 'EN' FOR JSON AUTO;")
        result = cursor.fetchone()
        cursor.close()
        return result
    
    # Create the class that will be used to return the data from the API
    class Products(Resource):
        def get(self):
            result = query_db()
            json_result = {} if (result == None) else json.loads(result[0])     
            return json_result, 200
    
    # Set the API endpoint to the Products class
    api.add_resource(Products, '/products')
    
    # Start App on default Flask port 5000
    if __name__ == "__main__":
        app.run(debug=True)
    
  3. Bu uygulamanın yerel olarak çalıştığını denetlediler ve sayfasına bir sayfa http://localhost:5000/productsdöndürüyorlar.

    Screenshot from a web browser of the Flask return page.

    Önemli

    Üretim uygulamaları oluştururken veritabanına erişmek için yönetici hesabını kullanmayın. Daha fazla bilgi için uygulamanız için hesap ayarlama hakkında daha fazla bilgi edinin. Bu makaledeki kod, Azure'da Python ve Kubernetes kullanarak uygulamaları kullanmaya hızlı bir şekilde başlayabilmeniz için basitleştirilmiştir.

    Daha gerçekçi olmak gerekirse, salt okunur izinlere sahip bir bağımsız veritabanı kullanıcısı veya salt okunur izinlerle kullanıcı tarafından atanan yönetilen kimliğebağlı bir oturum açma veya kapsanan veritabanı kullanıcısı kullanabilirsiniz.

    Daha fazla bilgi için Python ve Azure SQL Veritabanı ile API oluşturmayla ilgili tam bir örneği gözden geçirin.

Uygulamayı Docker kapsayıcısına dağıtma

Kapsayıcı, bir işlem sisteminde yalıtım ve kapsülleme sağlayan ayrılmış, korumalı bir alandır. Kapsayıcı oluşturmak için, yalnızca içermek istediğiniz ikili dosyaları ve kodu açıklayan bir metin dosyası olan Bir Bildirim dosyası kullanın. Kapsayıcı Çalışma Zamanı (Docker gibi) kullanarak, çalıştırmak ve başvurmak istediğiniz tüm dosyaları içeren bir ikili görüntü oluşturabilirsiniz. Buradan, ikili görüntüyü "çalıştırabilirsiniz" ve buna Tam bilgi işlem sistemiymiş gibi başvurabileceğiniz Kapsayıcı adı verilir. Uygulama çalışma zamanlarınızı ve ortamınızı tam bir sanal makine kullanmaktan daha küçük ve basit bir şekilde soyutlamanız gerekir. Daha fazla bilgi için bkz . Kapsayıcılar ve Docker.

Ekip, ekibin kullanmak istediklerine ilişkin öğeleri katmanlayan bir DockerFile (Bildirim) ile başladı. Kitaplıkların zaten pyodbc yüklü olduğu bir temel Python görüntüsüyle başlarlar ve ardından önceki adımda program ve yapılandırma dosyasını içermek için gereken tüm komutları çalıştırırlar.

Aşağıdaki Dockerfile dosyasında aşağıdaki adımlar bulunur:

  1. Python'ın pyodbc zaten yüklü olduğu bir Kapsayıcı ikili dosyasıyla başlayın.
  2. Uygulama için bir Çalışma dizini oluşturun.
  3. Geçerli dizindeki tüm kodu içine WORKDIRkopyalayın.
  4. Gerekli kitaplıkları yükleyin.
  5. Kapsayıcı başlatıldıktan sonra uygulamayı çalıştırın ve tüm TCP/IP bağlantı noktalarını açın.
# syntax=docker/dockerfile:1

# Start with a Container binary that already has Python and pyodbc installed
FROM laudio/pyodbc

# Create a Working directory for the application
WORKDIR /flask2sql

# Copy all of the code from the current directory into the WORKDIR
COPY . .

# Install the libraries that are required
RUN pip install -r ./requirements.txt

# Once the container starts, run the application, and open all TCP/IP ports 
CMD ["python3", "-m" , "flask", "run", "--host=0.0.0.0"]

Bu dosya uygulandığında, ekip kodlama dizininde bir komut istemine bırakıldı ve bildirimden ikili Görüntü oluşturmak için aşağıdaki kodu çalıştırıp Kapsayıcıyı başlatmak için başka bir komut çalıştırmıştır:

docker build -t flask2sql .
docker run -d -p 5000:5000 -t flask2sql

Bir kez daha ekip, kapsayıcının http://localhost:5000/products veritabanına erişebildiğinden emin olmak için bağlantıyı test ediyor ve aşağıdaki geri dönüşü görüyor:

Screenshot from a web browser of the Flask return page from the Container.

Görüntüyü Docker kayıt defterine dağıtma

Kapsayıcı artık çalışıyor ancak yalnızca geliştiricinin makinesinde kullanılabilir. Geliştirme ekibi, bu uygulama Görüntüsünü şirketin geri kalanı için ve ardından üretim dağıtımı için Kubernetes'te kullanılabilir hale getirmek istiyor.

Kapsayıcı Görüntüleri için depolama alanı depo olarak adlandırılır ve Kapsayıcı Görüntüleri için hem genel hem de özel depolar olabilir. Aslında AdvenureWorks, Dockerfile'larında Python ortamı için genel bir Görüntü kullandı.

Ekip, Görüntüye erişimi denetlemek ve web'e yerleştirmek yerine kendi başlarına barındırmak istediklerine karar vermek istiyor, ancak Microsoft Azure'da güvenlik ve erişim üzerinde tam denetime sahipler. Microsoft Azure Container Registry hakkında daha fazla bilgiyi buradan okuyabilirsiniz.

Geliştirme ekibi komut satırına dönerken kapsayıcı kayıt defteri hizmeti eklemek, bir yönetim hesabını etkinleştirmek, test aşamasında anonim "çekmeler" olarak ayarlamak ve kayıt defterine bir oturum açma bağlamı ayarlamak için kullanır az CLI :

az acr create --resource-group ReplaceWith_PoCResourceGroupName --name ReplaceWith_AzureContainerRegistryName --sku Standard
az acr update -n ReplaceWith_AzureContainerRegistryName --admin-enabled true
az acr update --name ReplaceWith_AzureContainerRegistryName --anonymous-pull-enabled
az acr login --name ReplaceWith_AzureContainerRegistryName

Bu bağlam sonraki adımlarda kullanılacaktır.

Yerel Docker görüntüsünü etiketleyerek karşıya yüklemeye hazırlama

Sonraki adım, bulutta kullanılabilir olması için yerel uygulama Container Image'ı Azure Container Registry (ACR) hizmetine göndermektir.

  1. Aşağıdaki örnek betikte ekip Docker komutlarını kullanarak makinedeki Görüntüleri listeler.
  2. ACR hizmetindeki az CLI Görüntüleri listelemek için yardımcı programını kullanırlar.
  3. Önceki adımda oluşturdukları ACR'nin hedef adıyla görüntüyü "etiketlemek" ve uygun DevOps için bir sürüm numarası ayarlamak için Docker komutunu kullanır.
  4. Son olarak, etiketin doğru uygulandığından emin olmak için yerel Görüntü bilgilerini yeniden listeler.
docker images
az acr list --resource-group ReplaceWith_PoCResourceGroupName --query "[].{acrLoginServer:loginServer}" --output table
docker tag flask2sql ReplaceWith_AzureContainerRegistryName.azurecr.io/azure-flask2sql:v1
docker images

Kod yazılıp test edildikten sonra Dockerfile, görüntü ve kapsayıcı çalıştırılıp test edildi, ACR hizmeti ayarlandı ve tüm etiketler uygulandı, ekip görüntüyü ACR hizmetine yükleyebilir.

Dosyayı göndermek için Docker "push" komutunu ve ardından görüntünün yüklendiğinden az CLI emin olmak için yardımcı programını kullanırlar:

docker push ReplaceWith_AzureContainerRegistryName.azurecr.io/azure-flask2sql:v1
az acr repository list --name ReplaceWith_AzureContainerRegistryName --output table

Kubernetes’e dağıtma

Ekip kapsayıcıları çalıştırabilir ve uygulamayı şirket içi ve bulut içi ortamlara dağıtabilir. Ancak, ölçeklendirme ve kullanılabilirlik için uygulamanın birden çok kopyasını eklemek, farklı görevler gerçekleştiren başka kapsayıcılar eklemek ve çözümün tamamına izleme ve izleme eklemek istiyor.

Kapsayıcıları eksiksiz bir çözüm olarak gruplandırmak için ekip Kubernetes kullanmaya karar verdi. Kubernetes, şirket içinde ve tüm büyük bulut platformlarında çalışır. Microsoft Azure, Kubernetes için Azure Kubernetes Service (AKS) adlı eksiksiz bir yönetilen ortama sahiptir. Azure'da Kubernetes'e giriş eğitim yolu ile AKS hakkında daha fazla bilgi edinin.

az CLI Ekip, yardımcı programını kullanarak AKS'yi daha önce oluşturdukları kaynak grubuna ekler. Geliştirme ekibi tek az bir komutla aşağıdaki adımları gerçekleştirir:

  • Test aşamasında dayanıklılık için iki "düğüm" veya bilgi işlem ortamı ekleme
  • Ortama erişim için otomatik olarak SSH Anahtarları oluşturma
  • AKS kümesinin dağıtım için kullanmak istedikleri görüntüleri bulabilmesi için önceki adımlarda oluşturdukları ACR hizmetini ekleyin
az aks create --resource-group ReplaceWith_PoCResourceGroupName --name ReplaceWith_AzureKubernetesServiceName --node-count 2 --generate-ssh-keys --attach-acr ReplaceWith_AzureContainerRegistryName

Kubernetes, adlı kubectlbir kümeye erişmek ve kümeyi denetlemek için bir komut satırı aracı kullanır. Ekip aracı indirmek kubectl ve yüklemek için yardımcı programını kullanıraz CLI:

az aks install-cli

Şu anda AKS ile bir bağlantıları olduğundan, yardımcı programı yürütürken kullanılacak bağlantı için SSH anahtarlarını göndermesini kubectl isteyebilirler:

az aks get-credentials --resource-group ReplaceWith_PoCResourceGroupName --name ReplaceWith_AzureKubernetesServiceName

Bu anahtarlar, kullanıcının dizininde .config adlı bir dosyada depolanır. Ekip, bu güvenlik bağlamı kümesiyle kümedeki düğümleri göstermek için kullanır kubectl get nodes :

kubectl get nodes

Ekip şimdi aracı kullanarak az CLI ACR hizmetindeki Görüntüleri listeler:

az acr list --resource-group ReplaceWith_PoCResourceGroupName --query "[].{acrLoginServer:loginServer}" --output table

Artık Kubernetes'in dağıtımı denetlemek için kullandığı bildirimi oluşturabilirler. Bu, yaml biçiminde depolanan bir metin dosyasıdır. Dosyadaki açıklama metni aşağıda belirtilmiştir flask2sql.yaml :

apiVersion: apps/v1
# The type of commands that will be sent, along with the name of the deployment
kind: Deployment
metadata:
  name: flask2sql
# This section sets the general specifications for the application
spec:
  replicas: 1
  selector:
    matchLabels:
      app: flask2sql
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  minReadySeconds: 5 
  template:
    metadata:
      labels:
        app: flask2sql
    spec:
      nodeSelector:
        "kubernetes.io/os": linux
# This section sets the location of the Image(s) in the deployment, and where to find them 
      containers:
      - name: flask2sql
        image:  bwoodyflask2sqlacr.azurecr.io/azure-flask2sql:v1
# Recall that the Flask application uses (by default) TCIP/IP port 5000 for access. This line tells Kubernetes that this "pod" uses that address.
        ports:
        - containerPort: 5000
---
apiVersion: v1
# This is the front-end of the application access, called a "Load Balancer"
kind: Service
metadata:
  name: flask2sql
spec:
  type: LoadBalancer
# this final step then sets the outside exposed port of the service to TCP/IP port 80, but maps it internally to the app's port of 5000
  ports:
  - protocol: TCP
    port: 80
    targetPort: 5000
  selector:
    app: flask2sql

flask2sql.yaml Dosya tanımlandığında, ekip uygulamayı çalışan AKS kümesine dağıtabilir. Bu, hatırlayacağınız üzere kümede kubectl apply hala bir güvenlik bağlamı olan komutuyla gerçekleştirilir. Ardından, kubectl get service derlenirken kümeyi izlemek için komutu gönderilir.

kubectl apply -f flask2sql.yaml
kubectl get service flask2sql --watch

Birkaç dakika sonra "watch" komutu bir dış IP adresi döndürür. Bu noktada ekip izleme komutunu kesmek için CTRL-C tuşlarına basar ve yük dengeleyicinin dış IP adresini kaydeder.

Uygulamayı test etme

Ekip, son adımda elde ettikleri IP Adresini (Uç Nokta) kullanarak yerel uygulama ve Docker Kapsayıcısı ile aynı çıkışın sağlanıp sağlanmadıklarını denetler:

Screenshot from a web browser of the Flask return page when finally testing the container. The output is the same as before.

Temizleme

Uygulama oluşturulduktan, düzenlendi, belgelendi ve test edildi, ekip artık uygulamayı "yok edebilir". Microsoft Azure'da her şeyi tek bir kaynak grubunda tutarak, yardımcı programını kullanarak az CLI PoC kaynak grubunu silmek basit bir işlemdir:

az group delete -n ReplaceWith_PoCResourceGroupName -y

Dekont

Azure SQL Veritabanı başka bir kaynak grubunda oluşturduysanız ve artık ihtiyacınız yoksa Azure portalını kullanarak silebilirsiniz.

PoC projesinin lideri olan ekip üyesi, iş istasyonu olarak Microsoft Windows'u kullanır ve Kubernetes'ten gizli dizi dosyasını saklamak ancak etkin konum olarak sistemden kaldırmak ister. Dosyayı bir config.old metin dosyasına kopyalayıp silebilirler:

copy c:\users\ReplaceWith_YourUserName\.kube\config c:\users\ReplaceWith_YourUserName\.kube\config.old
del c:\users\ReplaceWith_YourUserName\.kube\config